diff --git a/hgext/rebase.py b/hgext/rebase.py --- a/hgext/rebase.py +++ b/hgext/rebase.py @@ -112,6 +112,7 @@ def rebase(ui, repo, **opts): Returns 0 on success, 1 if nothing to rebase. """ originalwd = target = None + activebookmark = None external = nullrev state = {} skipped = set() @@ -159,7 +160,7 @@ def rebase(ui, repo, **opts): 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 @@ def rebase(ui, repo, **opts): # 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 @@ def rebase(ui, repo, **opts): 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 @@ def updatebookmarks(repo, targetnode, ns 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 @@ def storestatus(repo, originalwd, target 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 @@ def restorestatus(repo): 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 @@ def restorestatus(repo): 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 @@ def restorestatus(repo): 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 @@ Conclude rebase: 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 @@ Check correctness: $ hg cat -r 5 common resolved merge +Bookmark stays active after --continue + $ hg bookmarks + * mybook 5:d67b21408fc0 + $ cd ..