diff --git a/mercurial/commands.py b/mercurial/commands.py --- a/mercurial/commands.py +++ b/mercurial/commands.py @@ -521,7 +521,8 @@ def bookmark(ui, repo, mark=None, rev=No marks[mark] = repo.lookup(rev) else: marks[mark] = repo.changectx('.').node() - bookmarks.setcurrent(repo, mark) + if repo.changectx('.').node() == marks[mark]: + bookmarks.setcurrent(repo, mark) bookmarks.write(repo) return diff --git a/tests/test-bookmarks.t b/tests/test-bookmarks.t --- a/tests/test-bookmarks.t +++ b/tests/test-bookmarks.t @@ -55,7 +55,7 @@ list bookmarks $ hg bookmarks X 0:f7b1eb17ad24 - X2 0:f7b1eb17ad24 + * X2 0:f7b1eb17ad24 Y -1:000000000000 $ echo b > b @@ -67,19 +67,25 @@ bookmarks revset $ hg log -r 'bookmark()' changeset: 0:f7b1eb17ad24 bookmark: X - bookmark: X2 user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: 0 + changeset: 1:925d80f479bb + bookmark: X2 + tag: tip + user: test + date: Thu Jan 01 00:00:00 1970 +0000 + summary: 1 + $ hg log -r 'bookmark(Y)' $ hg log -r 'bookmark(X2)' - changeset: 0:f7b1eb17ad24 - bookmark: X + changeset: 1:925d80f479bb bookmark: X2 + tag: tip user: test date: Thu Jan 01 00:00:00 1970 +0000 - summary: 0 + summary: 1 $ hg help revsets | grep 'bookmark(' "bookmark([name])" @@ -88,7 +94,7 @@ bookmarks X and X2 moved to rev 1, Y at $ hg bookmarks X 0:f7b1eb17ad24 - X2 0:f7b1eb17ad24 + * X2 1:925d80f479bb Y -1:000000000000 bookmark rev 0 again @@ -106,7 +112,7 @@ bookmarks X moved to rev 2, Y at rev -1, $ hg bookmarks * X 2:db815d6d32e6 - X2 0:f7b1eb17ad24 + X2 1:925d80f479bb Y -1:000000000000 Z 0:f7b1eb17ad24 @@ -129,7 +135,7 @@ force rename to existent bookmark list bookmarks $ hg bookmark - X2 0:f7b1eb17ad24 + X2 1:925d80f479bb * Y 2:db815d6d32e6 Z 0:f7b1eb17ad24 @@ -158,7 +164,7 @@ bookmark name with spaces should be stri list bookmarks $ hg bookmarks - X2 0:f7b1eb17ad24 + X2 1:925d80f479bb Y 2:db815d6d32e6 Z 0:f7b1eb17ad24 * x y 2:db815d6d32e6 @@ -196,7 +202,7 @@ force bookmark with existing name list bookmarks $ hg bookmark - X2 0:f7b1eb17ad24 + X2 1:925d80f479bb Y 2:db815d6d32e6 * Z 2:db815d6d32e6 x y 2:db815d6d32e6