# HG changeset patch # User FUJIWARA Katsunori <foozy@lares.dti.ne.jp> # Date 2014-08-24 14:47:25 # Node ID cb556ea76dcdf2234fb17cbc16bf93cf6baa186f # Parent 4092d12ba18a10e71a55759d48b2ce097a0ad196 largefiles: omit restoring standins if working parent is not rollbacked For efficiency, this patch omits restoring standins and updating lfdirstate, if the parent of the working directory is not rollbacked. This patch adds the test not to confirm whether restoring is skipped or not, but to detect unexpected regression in the future: it is difficult to distinguish between skipping and perfectly restoring. diff --git a/hgext/largefiles/overrides.py b/hgext/largefiles/overrides.py --- a/hgext/largefiles/overrides.py +++ b/hgext/largefiles/overrides.py @@ -1196,7 +1196,12 @@ def overridepurge(orig, ui, repo, *dirs, def overriderollback(orig, ui, repo, **opts): wlock = repo.wlock() try: + before = repo.dirstate.parents() result = orig(ui, repo, **opts) + after = repo.dirstate.parents() + if before == after: + return result # no need to restore standins + merge.update(repo, node=None, branchmerge=False, force=True, partial=lfutil.isstandin) diff --git a/tests/test-largefiles-update.t b/tests/test-largefiles-update.t --- a/tests/test-largefiles-update.t +++ b/tests/test-largefiles-update.t @@ -129,6 +129,29 @@ Test that "hg rollback" restores status $ hg status -A largeY ? largeY +Test that "hg rollback" restores standins correctly + + $ hg commit -m 'will be rollback-ed soon' + $ hg update -q -C 2 + $ cat large1 + large1 + $ cat .hglf/large1 + 4669e532d5b2c093a78eca010077e708a071bb64 + $ cat large2 + large2 in #2 + $ cat .hglf/large2 + 3cfce6277e7668985707b6887ce56f9f62f6ccd9 + + $ hg rollback -q -f + $ cat large1 + large1 + $ cat .hglf/large1 + 4669e532d5b2c093a78eca010077e708a071bb64 + $ cat large2 + large2 in #2 + $ cat .hglf/large2 + 3cfce6277e7668985707b6887ce56f9f62f6ccd9 + Test that "hg status" shows status of largefiles correctly just after automated commit like rebase/transplant