Mercurial > hg
changeset 18755:72412afe4c28 stable
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 should handle old formats correctly.
Since the file is transient, this is even less of a problem.
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.
author | Durham Goode <durham@fb.com> |
---|---|
date | Mon, 11 Mar 2013 15:37:28 -0700 |
parents | d420ac09f866 |
children | 76d49dab6a00 249b6b455e9b |
files | hgext/rebase.py tests/test-rebase-conflicts.t |
diffstat | 2 files changed, 20 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- a/hgext/rebase.py Mon Mar 04 10:05:52 2013 +0100 +++ b/hgext/rebase.py Mon Mar 11 15:37:28 2013 -0700 @@ -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,10 @@ keep = bool(int(l)) elif i == 5: keepbranches = bool(int(l)) + elif i == 6 and not (len(l) == 81 and ':' in l): + # line 6 is a recent addition, so for backwards compatibility + # check that the line doesn't look like the oldrev:newrev lines + activebookmark = l else: oldrev, newrev = l.split(':') if newrev in (str(nullmerge), str(revignored)): @@ -577,7 +584,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
--- a/tests/test-rebase-conflicts.t Mon Mar 04 10:05:52 2013 +0100 +++ b/tests/test-rebase-conflicts.t Mon Mar 11 15:37:28 2013 -0700 @@ -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,8 @@ $ hg cat -r 5 common resolved merge +Bookmark stays active after --continue + $ hg bookmarks + * mybook 5:d67b21408fc0 + $ cd ..