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: