mercurial/revlogutils/nodemap.py
changeset 44445 336ec75ed1ac
parent 44363 f7459da77f23
child 44462 6aee0647e026
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: