D1616: rebase: disable `inmemory` if the rebaseset contains the working copy
phillco (Phil Cohen)
phabricator at mercurial-scm.org
Fri Dec 8 23:32:41 UTC 2017
phillco updated this revision to Diff 4276.
REPOSITORY
rHG Mercurial
CHANGES SINCE LAST UPDATE
https://phab.mercurial-scm.org/D1616?vs=4247&id=4276
REVISION DETAIL
https://phab.mercurial-scm.org/D1616
AFFECTED FILES
hgext/rebase.py
CHANGE DETAILS
diff --git a/hgext/rebase.py b/hgext/rebase.py
--- a/hgext/rebase.py
+++ b/hgext/rebase.py
@@ -830,7 +830,8 @@
else:
destmap = _definedestmap(ui, repo, destf, srcf, basef, revf,
destspace=destspace,
- inmemory=opts['inmemory'])
+ opts=opts)
+ rbsrt.inmemory = opts['inmemory']
retcode = rbsrt._preparenewrebase(destmap)
if retcode is not None:
return retcode
@@ -850,7 +851,7 @@
rbsrt._finishrebase()
def _definedestmap(ui, repo, destf=None, srcf=None, basef=None, revf=None,
- destspace=None, inmemory=False):
+ destspace=None, opts=None):
"""use revisions argument to define destmap {srcrev: destrev}"""
if revf is None:
revf = []
@@ -864,7 +865,7 @@
if revf and srcf:
raise error.Abort(_('cannot specify both a revision and a source'))
- if not inmemory:
+ if not opts['inmemory']:
cmdutil.checkunfinished(repo)
cmdutil.bailifchanged(repo)
@@ -939,6 +940,22 @@
ui.status(_('nothing to rebase from %s to %s\n') %
('+'.join(str(repo[r]) for r in base), dest))
return None
+ # If rebasing the working copy parent, force in-memory merge to be off.
+ #
+ # This is because the extra work of checking out the newly rebased commit
+ # outweights the benefits of rebasing in-memory, and executing an extra
+ # update command adds a bit of overhead, so better to just do it on disk. In
+ # all other cases leave it on.
+ #
+ # Note that there are cases where this isn't true -- e.g., rebasing large
+ # stacks that include the WCP. However, I'm not yet sure where the cutoff
+ # is.
+ rebasingwcp = repo['.'].rev() in rebaseset
+ if opts['inmemory'] and rebasingwcp:
+ opts['inmemory'] = False
+ # Check these since we did not before.
+ cmdutil.checkunfinished(repo)
+ cmdutil.bailifchanged(repo)
if not destf:
dest = repo[_destrebase(repo, rebaseset, destspace=destspace)]
To: phillco, #hg-reviewers, dlax
Cc: durin42, mercurial-devel
More information about the Mercurial-devel
mailing list