D6173: shelve: stop passing list of files to revert
martinvonz (Martin von Zweigbergk)
phabricator at mercurial-scm.org
Fri Mar 29 14:39:19 EDT 2019
martinvonz created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.
It seems to work just fine to not specify any files here. I suspect it
looked the way it did for historical reasons. It apparently used to
use merge instead of rebase until https://phab.mercurial-scm.org/rHG1d7a36ff2615e6e12ce65681db4e07622e7b60d1 (shelve: use rebase
instead of merge (issue4068), 2013-10-23) and it makes sense to want
to restrict the set of files then.
I noticed this because of the files.extend(shelvectx.p1().files()). If
the working copy was clean before, then shelvectx.p1() will be the
working copy parent and that ended up adding all the files in that
set. In our Google-internal Mercurial setup (including a FUSE) that
was very noticeably slow when the working copy parent happened to have
many files in large directories.
This patch doesn't yet remove the call to shelvectx.p1().files(). We
also use that set for deciding what to back up. I'm pretty sure it's
safe to back up only the set of files we already back even if we no
longer restrict the set of files to revert, so this patch should be
safe on its own. Regardless, the next patch will delegate the
backing-up to cmdutil.revert().
Incidentally, this also gets rid of a repo.pathto() that I had earlier
wanted to get rid of.
diff --git a/hgext/shelve.py b/hgext/shelve.py
@@ -646,10 +646,6 @@
raise error.Abort(_('working directory parents do not match unshelve '
-def pathtofiles(repo, files):
- cwd = repo.getcwd()
- return [repo.pathto(f, cwd) for f in files]
def unshelveabort(ui, repo, state, opts):
"""subcommand that abort an in-progress unshelve"""
@@ -689,7 +685,6 @@
scmutil.backuppath(ui, repo, file))
cmdutil.revert(ui, repo, shelvectx, repo.dirstate.parents(),
- *pathtofiles(repo, files),
To: martinvonz, #hg-reviewers
More information about the Mercurial-devel