bookmarks: restrict moving a bookmark to its descendants (issue1502)

A bookmark can only move to a descendant on commit, pull or
unbundle. Bookmarks cannot jump between heads anymore. This fixese
issue 1502.

We explicitly use new.node(), to emphasise that we are updating the
current bookmark to the new node.
This commit is contained in:
David Soria Parra 2011-02-24 14:38:50 +01:00
parent 111736008c
commit 36125c089f
2 changed files with 47 additions and 2 deletions

View File

@ -127,8 +127,11 @@ def update(repo, parents, node):
update = False
mark = repo._bookmarkcurrent
if mark and marks[mark] in parents:
marks[mark] = node
update = True
old = repo[marks[mark]]
new = repo[node]
if new in old.descendants():
marks[mark] = new.node()
update = True
if update:
write(repo)

42
tests/test-issue1502.t Executable file
View File

@ -0,0 +1,42 @@
http://mercurial.selenic.com/bts/issue1502
Initialize repository
$ hg init foo
$ touch foo/a && hg -R foo commit -A -m "added a"
adding a
$ hg clone foo foo1
updating to branch default
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ echo "bar" > foo1/a && hg -R foo1 commit -m "edit a in foo1"
$ echo "hi" > foo/a && hg -R foo commit -m "edited a foo"
$ hg -R foo1 pull -u
pulling from $TESTTMP/foo
searching for changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files (+1 heads)
not updating, since new heads added
(run 'hg heads' to see heads, 'hg merge' to merge)
$ hg -R foo1 book branchy
$ hg -R foo1 book
* branchy 1:e3e522925eff
Pull. Bookmark should not jump to new head.
$ echo "there" >> foo/a && hg -R foo commit -m "edited a again"
$ hg -R foo1 pull
pulling from $TESTTMP/foo
searching for changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files
(run 'hg update' to get a working copy)
$ hg -R foo1 book
* branchy 1:e3e522925eff