[PATCH 1 of 5 V2] revert: add a way for external extensions to prefetch file data

Pierre-Yves David pierre-yves.david at ens-lyon.org
Mon Sep 8 09:58:18 CDT 2014


# HG changeset patch
# User Pierre-Yves David <pierre-yves.david at fb.com>
# Date 1409359679 -7200
#      Sat Aug 30 02:47:59 2014 +0200
# Node ID cd3e613dc2e306ab5ac2486d67ca5bfb87225147
# Parent  5c153c69fdb28ff5b1bf6578e5f07c50bf25833c
revert: add a way for external extensions to prefetch file data

This will let extensions that mess with the storage layer (remotefilelog,
largefile) to prefetch any data that will be accessed during the revert
operation.

We are currently fetching more data that theoretically required because the
backup code is a bit stupid. Future patches will improve that.

diff --git a/mercurial/cmdutil.py b/mercurial/cmdutil.py
--- a/mercurial/cmdutil.py
+++ b/mercurial/cmdutil.py
@@ -2525,10 +2525,13 @@ def revert(ui, repo, ctx, parents, *pats
             (dsremoved,  actions['undelete'], backup),
             (clean,      actions['noop'],     discard),
             (unknown,    actions['unknown'],  discard),
             )
 
+        needdata = ('revert', 'add', 'remove', 'undelete')
+        _revertprefetch(repo, ctx, *[actions[name][0] for name in needdata])
+
         for abs, (rel, exact) in sorted(names.items()):
             # target file to be touch on disk (relative to cwd)
             target = repo.wjoin(abs)
             # search the entry in the dispatch table.
             # if the file is in any of these sets, it was touched in the working
@@ -2562,10 +2565,14 @@ def revert(ui, repo, ctx, parents, *pats
                 for sub in targetsubs:
                     ctx.sub(sub).revert(ui, ctx.substate[sub], *pats, **opts)
     finally:
         wlock.release()
 
+def _revertprefetch(repo, ctx, *files):
+    """Let extension changing the storage layer prefetch content"""
+    pass
+
 def _performrevert(repo, parents, ctx, actions):
     """function that actually perform all the actions computed for revert
 
     This is an independent function to let extension to plug in and react to
     the imminent revert.


More information about the Mercurial-devel mailing list