[PATCH] rebase: restore active bookmark after rebase --continue
Durham Goode
durham at fb.com
Mon Mar 11 18:21:00 CDT 2013
# HG changeset patch
# User Durham Goode <durham at fb.com>
# Date 1363041448 25200
# Mon Mar 11 15:37:28 2013 -0700
# Node ID 344cc2d5e092186bc6d593b53f4c1a338abc0af7
# Parent 2b1729b20820c0eeb0857bb224d009db698faeef
rebase: restore active bookmark after rebase --continue
When a rebase has conflicts and the user uses rebase --continue, the previously
active bookmark was not being made active once again. With this change that
bookmark is made active again, just as if the rebase had never been interrupted.
This changes the rebasestate file format, but since that file is transient, it
should be extremely rare for it to cause a problem (the user would have to
upgrade mercurial in the middle of an interrupted rebase).
Adds a test to verify the new behavior. I manually tested continuing rebases
with and without an active bookmark, and with and without being on the bookmark
being rebased.
diff --git a/hgext/rebase.py b/hgext/rebase.py
--- a/hgext/rebase.py
+++ b/hgext/rebase.py
@@ -112,6 +112,7 @@
Returns 0 on success, 1 if nothing to rebase.
"""
originalwd = target = None
+ activebookmark = None
external = nullrev
state = {}
skipped = set()
@@ -159,7 +160,7 @@
ui.warn(_('tool option will be ignored\n'))
(originalwd, target, state, skipped, collapsef, keepf,
- keepbranchesf, external) = restorestatus(repo)
+ keepbranchesf, external, activebookmark) = restorestatus(repo)
if abortf:
return abort(repo, originalwd, target, state)
else:
@@ -245,7 +246,7 @@
# Keep track of the current bookmarks in order to reset them later
currentbookmarks = repo._bookmarks.copy()
- activebookmark = repo._bookmarkcurrent
+ activebookmark = activebookmark or repo._bookmarkcurrent
if activebookmark:
bookmarks.unsetcurrent(repo)
@@ -258,7 +259,7 @@
ui.progress(_("rebasing"), pos, ("%d:%s" % (rev, repo[rev])),
_('changesets'), total)
storestatus(repo, originalwd, target, state, collapsef, keepf,
- keepbranchesf, external)
+ keepbranchesf, external, activebookmark)
p1, p2 = defineparents(repo, rev, target, state,
targetancestors)
if len(repo.parents()) == 2:
@@ -516,7 +517,7 @@
marks.write()
def storestatus(repo, originalwd, target, state, collapse, keep, keepbranches,
- external):
+ external, activebookmark):
'Store the current status to allow recovery'
f = repo.opener("rebasestate", "w")
f.write(repo[originalwd].hex() + '\n')
@@ -525,6 +526,7 @@
f.write('%d\n' % int(collapse))
f.write('%d\n' % int(keep))
f.write('%d\n' % int(keepbranches))
+ f.write('%s\n' % (activebookmark or ''))
for d, v in state.iteritems():
oldrev = repo[d].hex()
if v > nullmerge:
@@ -545,6 +547,7 @@
target = None
collapse = False
external = nullrev
+ activebookmark = None
state = {}
f = repo.opener("rebasestate")
for i, l in enumerate(f.read().splitlines()):
@@ -560,6 +563,8 @@
keep = bool(int(l))
elif i == 5:
keepbranches = bool(int(l))
+ elif i == 6:
+ activebookmark = l
else:
oldrev, newrev = l.split(':')
if newrev in (str(nullmerge), str(revignored)):
@@ -577,7 +582,7 @@
repo.ui.debug('computed skipped revs: %s\n' % skipped)
repo.ui.debug('rebase status resumed\n')
return (originalwd, target, state, skipped,
- collapse, keep, keepbranches, external)
+ collapse, keep, keepbranches, external, activebookmark)
except IOError, err:
if err.errno != errno.ENOENT:
raise
diff --git a/tests/test-rebase-conflicts.t b/tests/test-rebase-conflicts.t
--- a/tests/test-rebase-conflicts.t
+++ b/tests/test-rebase-conflicts.t
@@ -7,7 +7,7 @@
> publish=False
>
> [alias]
- > tglog = log -G --template "{rev}:{phase} '{desc}' {branches}\n"
+ > tglog = log -G --template "{rev}:{phase} '{desc}' {branches} {bookmarks}\n"
> EOF
$ hg init a
@@ -36,11 +36,12 @@
$ echo l3 >> extra2
$ hg add extra2
$ hg ci -m L3
+ $ hg bookmark mybook
$ hg phase --force --secret 4
$ hg tglog
- @ 5:secret 'L3'
+ @ 5:secret 'L3' mybook
|
o 4:secret 'L2'
|
@@ -81,7 +82,7 @@
saved backup bundle to $TESTTMP/a/.hg/strip-backup/*-backup.hg (glob)
$ hg tglog
- @ 5:secret 'L3'
+ @ 5:secret 'L3' mybook
|
o 4:secret 'L2'
|
@@ -118,4 +119,7 @@
$ hg cat -r 5 common
resolved merge
+ $ hg bookmarks
+ * mybook 5:d67b21408fc0
+
$ cd ..
More information about the Mercurial-devel
mailing list