diff --git a/mercurial/bookmarks.py b/mercurial/bookmarks.py --- a/mercurial/bookmarks.py +++ b/mercurial/bookmarks.py @@ -192,13 +192,12 @@ def update(repo, parents, node): return False if marks[cur] in parents: - old = repo[marks[cur]] new = repo[node] divs = [repo[b] for b in marks if b.split('@', 1)[0] == cur.split('@', 1)[0]] anc = repo.changelog.ancestors([new.rev()]) deletefrom = [b.node() for b in divs if b.rev() in anc or b == new] - if old.descendant(new): + if validdest(repo, repo[marks[cur]], new): marks[cur] = new.node() update = True diff --git a/tests/test-update-branches.t b/tests/test-update-branches.t --- a/tests/test-update-branches.t +++ b/tests/test-update-branches.t @@ -229,13 +229,16 @@ the bookmark (issue4015) $ hg bookmarks * bm 5:ff252e8273df -Test that 4 is detected as the no-argument destination from 3 +Test that 4 is detected as the no-argument destination from 3 and also moves +the bookmark with it $ hg up --quiet 0 # we should be able to update to 3 directly $ hg up --quiet --hidden 3 # but not implemented yet. + $ hg book -f bm $ hg up 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - $ hg id - d047485b3896+ (b1) + updating bookmark bm + $ hg book + * bm 4:d047485b3896 Test that 5 is detected as a valid destination from 1 $ hg up --quiet 0 # we should be able to update to 3 directly