D1666: rebase: replace --inmemory flag with rebase.experimental.inmemory config
phillco (Phil Cohen)
phabricator at mercurial-scm.org
Tue Dec 12 06:01:53 UTC 2017
phillco updated this revision to Diff 4376.
REPOSITORY
rHG Mercurial
CHANGES SINCE LAST UPDATE
https://phab.mercurial-scm.org/D1666?vs=4375&id=4376
REVISION DETAIL
https://phab.mercurial-scm.org/D1666
AFFECTED FILES
hgext/rebase.py
mercurial/configitems.py
tests/test-rebase-inmemory.t
CHANGE DETAILS
diff --git a/tests/test-rebase-inmemory.t b/tests/test-rebase-inmemory.t
--- a/tests/test-rebase-inmemory.t
+++ b/tests/test-rebase-inmemory.t
@@ -4,6 +4,8 @@
> amend=
> rebase=
> debugdrawdag=$TESTDIR/drawdag.py
+ > [rebase]
+ > experimental.inmemory=1
> [diff]
> git=1
> [alias]
@@ -35,7 +37,7 @@
c (no-eol)
$ hg cat -r 2 b
b (no-eol)
- $ hg rebase --inmemory --debug -r b -d c | grep rebasing
+ $ hg rebase --debug -r b -d c | grep rebasing
rebasing in-memory
rebasing 2:db0e82a16a62 "b" (b)
$ hg tglog
@@ -94,7 +96,7 @@
b (no-eol)
$ hg cat -r 3 e
somefile (no-eol)
- $ hg rebase --inmemory --debug -s b -d a | grep rebasing
+ $ hg rebase --debug -s b -d a | grep rebasing
rebasing in-memory
rebasing 2:db0e82a16a62 "b" (b)
$ hg tglog
@@ -110,7 +112,7 @@
c (no-eol)
$ hg cat -r 3 b
b (no-eol)
- $ hg rebase --inmemory --debug -s 1 -d 3 | grep rebasing
+ $ hg rebase --debug -s 1 -d 3 | grep rebasing
rebasing in-memory
rebasing 1:02952614a83d "d" (d)
rebasing 2:f56b71190a8f "c"
@@ -142,7 +144,7 @@
we requested in-memory.
$ hg up -C 3
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
- $ hg rebase -r 3 -d 0 --inmemory --debug | grep rebasing
+ $ hg rebase -r 3 -d 0 --debug | grep rebasing
rebasing on disk
rebasing 3:753feb6fd12a "c" (tip)
$ hg tglog
diff --git a/mercurial/configitems.py b/mercurial/configitems.py
--- a/mercurial/configitems.py
+++ b/mercurial/configitems.py
@@ -1269,3 +1269,6 @@
coreconfigitem('rebase', 'singletransaction',
default=False,
)
+coreconfigitem('rebase', 'experimental.inmemory',
+ default=False,
+)
diff --git a/hgext/rebase.py b/hgext/rebase.py
--- a/hgext/rebase.py
+++ b/hgext/rebase.py
@@ -136,7 +136,7 @@
class rebaseruntime(object):
"""This class is a container for rebase runtime state"""
- def __init__(self, repo, ui, opts=None):
+ def __init__(self, repo, ui, inmemory=False, opts=None):
if opts is None:
opts = {}
@@ -179,7 +179,7 @@
self.keepopen = opts.get('keepopen', False)
self.obsoletenotrebased = {}
self.obsoletewithoutsuccessorindestination = set()
- self.inmemory = opts.get('inmemory', False)
+ self.inmemory = inmemory
@property
def repo(self):
@@ -645,7 +645,6 @@
('i', 'interactive', False, _('(DEPRECATED)')),
('t', 'tool', '', _('specify merge tool')),
('c', 'continue', False, _('continue an interrupted rebase')),
- ('', 'inmemory', False, _('run rebase in-memory (EXPERIMENTAL)')),
('a', 'abort', False, _('abort an interrupted rebase'))] +
cmdutil.formatteropts,
_('[-s REV | -b REV] [-d REV] [OPTION]'))
@@ -763,29 +762,27 @@
unresolved conflicts.
"""
+ inmemory = ui.configbool('rebase', 'experimental.inmemory')
if opts.get('continue') or opts.get('abort'):
# in-memory rebase is not compatible with resuming rebases.
- opts['inmemory'] = False
+ inmemory = False
- if opts.get('inmemory', False):
+ if inmemory:
try:
# in-memory merge doesn't support conflicts, so if we hit any, abort
# and re-run as an on-disk merge.
- return _origrebase(ui, repo, **opts)
+ return _origrebase(ui, repo, inmemory=inmemory, **opts)
except error.InMemoryMergeConflictsError:
ui.warn(_('hit merge conflicts; re-running rebase without in-memory'
' merge\n'))
_origrebase(ui, repo, **{'abort': True})
- opts['inmemory'] = False
- return _origrebase(ui, repo, **opts)
+ return _origrebase(ui, repo, inmemory=False, **opts)
else:
return _origrebase(ui, repo, **opts)
-def _origrebase(ui, repo, **opts):
+def _origrebase(ui, repo, inmemory=False, **opts):
opts = pycompat.byteskwargs(opts)
- if 'inmemory' not in opts:
- opts['inmemory'] = False
- rbsrt = rebaseruntime(repo, ui, opts)
+ rbsrt = rebaseruntime(repo, ui, inmemory, opts)
with repo.wlock(), repo.lock():
# Validate input and define rebasing points
@@ -832,10 +829,8 @@
if retcode is not None:
return retcode
else:
- destmap = _definedestmap(ui, repo, destf, srcf, basef, revf,
- destspace=destspace,
- opts=opts)
- rbsrt.inmemory = opts['inmemory']
+ destmap = _definedestmap(ui, repo, rbsrt, destf, srcf, basef, revf,
+ destspace=destspace)
retcode = rbsrt._preparenewrebase(destmap)
if retcode is not None:
return retcode
@@ -854,8 +849,8 @@
rbsrt._finishrebase()
-def _definedestmap(ui, repo, destf=None, srcf=None, basef=None, revf=None,
- destspace=None, opts=None):
+def _definedestmap(ui, repo, rbsrt, destf=None, srcf=None, basef=None,
+ revf=None, destspace=None):
"""use revisions argument to define destmap {srcrev: destrev}"""
if revf is None:
revf = []
@@ -869,7 +864,7 @@
if revf and srcf:
raise error.Abort(_('cannot specify both a revision and a source'))
- if not opts['inmemory']:
+ if not rbsrt.inmemory:
cmdutil.checkunfinished(repo)
cmdutil.bailifchanged(repo)
@@ -955,8 +950,8 @@
# 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
+ if rbsrt.inmemory and rebasingwcp:
+ rbsrt.inmemory = False
# Check these since we did not before.
cmdutil.checkunfinished(repo)
cmdutil.bailifchanged(repo)
To: phillco, #hg-reviewers
Cc: mercurial-devel
More information about the Mercurial-devel
mailing list