Skip to content
Snippets Groups Projects
Commit 4116504d1ec4 authored by David Schleimer's avatar David Schleimer
Browse files

bookmarks: correctly update current bookmarks on rebase (issue2277)

When you rebased with a currently active bookmark, that bookmark would
always point at the new tip, regardless of what revision it pointed at
before the rebase.

All bookmarks will now point at the equivalent post-rebase commit.
However, the currently active bookmark will cease to be active unless
it points at the new tip post-rebase.  Rebase will always leave the
new tip as the working copy parent, which is incompatible with having
an active bookmark that points at some other revision.  The common
case should be that the active bookmark will point at the new tip
post-rebase.
parent 52ea9ce5b641
No related branches found
No related tags found
No related merge requests found
......@@ -247,6 +247,9 @@
# 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 @@
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,7 +491,6 @@
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:
......@@ -487,9 +494,8 @@
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)
......
......@@ -36,4 +36,6 @@
adding d
created new head
$ hg book W
$ hg tglog
......@@ -39,5 +41,5 @@
$ hg tglog
@ 3: 'D' bookmarks:
@ 3: 'D' bookmarks: W
|
| o 2: 'C' bookmarks: Y Z
| |
......@@ -60,7 +62,7 @@
$ hg tglog
@ 3: 'C' bookmarks: Y Z
|
o 2: 'D' bookmarks:
o 2: 'D' bookmarks: W
|
| o 1: 'B' bookmarks: X
|/
......@@ -82,7 +84,7 @@
|
o 2: 'B' bookmarks: X
|
o 1: 'D' bookmarks:
o 1: 'D' bookmarks: W
|
o 0: 'A' bookmarks:
......@@ -86,3 +88,26 @@
|
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 ..
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment