Mercurial > public > mercurial-scm > hg
comparison mercurial/revlogutils/nodemap.py @ 44445:336ec75ed1ac
nodemap: warm the persistent nodemap on disk with debugupdatecache
When appropriate, the nodemap cache file will be created.
Differential Revision: https://phab.mercurial-scm.org/D8173
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Tue, 18 Feb 2020 19:11:13 +0100 |
parents | f7459da77f23 |
children | 6aee0647e026 |
comparison
equal
deleted
inserted
replaced
44444:7b1f516e7606 | 44445:336ec75ed1ac |
---|---|
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: |