diff --git a/mercurial/commands.py b/mercurial/commands.py
index 8fcef96141505d5939a9c7ed59d9b1f6707b917a_bWVyY3VyaWFsL2NvbW1hbmRzLnB5..6e4b962600a3119c178ed2519ab60f7bde9e7e14_bWVyY3VyaWFsL2NvbW1hbmRzLnB5 100644
--- a/mercurial/commands.py
+++ b/mercurial/commands.py
@@ -833,7 +833,7 @@
             raise util.Abort(
                 _("a bookmark cannot have the name of an existing branch"))
         if rev:
-            marks[mark] = repo.lookup(rev)
+            marks[mark] = scmutil.revsingle(repo, rev).node()
         else:
             marks[mark] = cur
         if not inactive and cur == marks[mark]:
diff --git a/tests/test-bookmarks.t b/tests/test-bookmarks.t
index 8fcef96141505d5939a9c7ed59d9b1f6707b917a_dGVzdHMvdGVzdC1ib29rbWFya3MudA==..6e4b962600a3119c178ed2519ab60f7bde9e7e14_dGVzdHMvdGVzdC1ib29rbWFya3MudA== 100644
--- a/tests/test-bookmarks.t
+++ b/tests/test-bookmarks.t
@@ -154,6 +154,19 @@
    * Y                         2:db815d6d32e6
      Z                         0:f7b1eb17ad24
 
+bookmarks from a revset
+  $ hg bookmark -r '.^1' REVSET
+  $ hg bookmark -r ':tip' TIP
+  $ hg bookmarks
+     REVSET                    0:f7b1eb17ad24
+   * TIP                       2:db815d6d32e6
+     X2                        1:925d80f479bb
+     Y                         2:db815d6d32e6
+     Z                         0:f7b1eb17ad24
+
+  $ hg bookmark -d REVSET
+  $ hg bookmark -d TIP
+
 rename without new name
 
   $ hg bookmark -m Y