71 if revlog.nodemap_file is None: |
71 if revlog.nodemap_file is None: |
72 return # we do not use persistent_nodemap on this revlog |
72 return # we do not use persistent_nodemap on this revlog |
73 callback_id = b"revlog-persistent-nodemap-%s" % revlog.nodemap_file |
73 callback_id = b"revlog-persistent-nodemap-%s" % revlog.nodemap_file |
74 if tr.hasfinalize(callback_id): |
74 if tr.hasfinalize(callback_id): |
75 return # no need to register again |
75 return # no need to register again |
76 tr.addfinalize(callback_id, lambda tr: _persist_nodemap(tr, revlog)) |
76 tr.addfinalize( |
77 |
77 callback_id, lambda tr: _persist_nodemap(tr.addpostclose, revlog) |
78 |
78 ) |
79 def _persist_nodemap(tr, revlog): |
79 |
|
80 |
|
81 def update_persistent_nodemap(revlog): |
|
82 """update the persistent nodemap right now |
|
83 |
|
84 To be used for updating the nodemap on disk outside of a normal transaction |
|
85 setup (eg, `debugupdatecache`). |
|
86 """ |
|
87 cleanups = [] |
|
88 _persist_nodemap((lambda x, y: cleanups.append(y)), revlog) |
|
89 for c in cleanups: |
|
90 c(None) |
|
91 |
|
92 |
|
93 def _persist_nodemap(cleaner, revlog): |
80 """Write nodemap data on disk for a given revlog |
94 """Write nodemap data on disk for a given revlog |
81 """ |
95 """ |
82 if getattr(revlog, 'filteredrevs', ()): |
96 if getattr(revlog, 'filteredrevs', ()): |
83 raise error.ProgrammingError( |
97 raise error.ProgrammingError( |
84 "cannot persist nodemap of a filtered changelog" |
98 "cannot persist nodemap of a filtered changelog" |
161 def cleanup(tr): |
175 def cleanup(tr): |
162 for oldfile in olds: |
176 for oldfile in olds: |
163 realvfs.tryunlink(oldfile) |
177 realvfs.tryunlink(oldfile) |
164 |
178 |
165 callback_id = b"revlog-cleanup-nodemap-%s" % revlog.nodemap_file |
179 callback_id = b"revlog-cleanup-nodemap-%s" % revlog.nodemap_file |
166 tr.addpostclose(callback_id, cleanup) |
180 cleaner(callback_id, cleanup) |
167 |
181 |
168 |
182 |
169 ### Nodemap docket file |
183 ### Nodemap docket file |
170 # |
184 # |
171 # The nodemap data are stored on disk using 2 files: |
185 # The nodemap data are stored on disk using 2 files: |