diff --git a/hgext/rebase.py b/hgext/rebase.py --- a/hgext/rebase.py +++ b/hgext/rebase.py @@ -247,6 +247,9 @@ def rebase(ui, repo, **opts): # Keep track of the current bookmarks in order to reset them later currentbookmarks = repo._bookmarks.copy() + activebookmark = repo._bookmarkcurrent + if activebookmark: + bookmarks.unsetcurrent(repo) sortedstate = sorted(state) total = len(sortedstate) @@ -336,6 +339,11 @@ def rebase(ui, repo, **opts): util.unlinkpath(repo.sjoin('undo')) if skipped: ui.note(_("%d revisions have been skipped\n") % len(skipped)) + + if (activebookmark and + repo['tip'].node() == repo._bookmarks[activebookmark]): + bookmarks.setcurrent(repo, activebookmark) + finally: release(lock, wlock) @@ -483,13 +491,11 @@ def updatemq(repo, state, skipped, **opt def updatebookmarks(repo, nstate, originalbookmarks, **opts): 'Move bookmarks to their correct changesets' - current = repo._bookmarkcurrent for k, v in originalbookmarks.iteritems(): if v in nstate: if nstate[v] != nullmerge: - # reset the pointer if the bookmark was moved incorrectly - if k != current: - repo._bookmarks[k] = nstate[v] + # update the bookmarks for revs that have moved + repo._bookmarks[k] = nstate[v] bookmarks.write(repo) diff --git a/tests/test-rebase-bookmarks.t b/tests/test-rebase-bookmarks.t --- a/tests/test-rebase-bookmarks.t +++ b/tests/test-rebase-bookmarks.t @@ -36,8 +36,10 @@ Create a repo with several bookmarks adding d created new head + $ hg book W + $ hg tglog - @ 3: 'D' bookmarks: + @ 3: 'D' bookmarks: W | | o 2: 'C' bookmarks: Y Z | | @@ -60,7 +62,7 @@ Move only rebased bookmarks $ hg tglog @ 3: 'C' bookmarks: Y Z | - o 2: 'D' bookmarks: + o 2: 'D' bookmarks: W | | o 1: 'B' bookmarks: X |/ @@ -82,7 +84,30 @@ Keep bookmarks to the correct rebased ch | o 2: 'B' bookmarks: X | - o 1: 'D' bookmarks: + o 1: 'D' bookmarks: W | o 0: 'A' bookmarks: + +Keep active bookmark on the correct changeset + + $ cd .. + $ hg clone -q a a3 + + $ cd a3 + $ hg up -q X + + $ hg rebase -d W + saved backup bundle to $TESTTMP/a3/.hg/strip-backup/*-backup.hg (glob) + + $ hg tglog + @ 3: 'C' bookmarks: Y Z + | + o 2: 'B' bookmarks: X + | + o 1: 'D' bookmarks: W + | + o 0: 'A' bookmarks: + + + $ cd ..