@@ -726,5 +726,37 @@ def rename(repo, tr, old, new, force=Fal
marks[mark] = marks[old]
if repo._activebookmark == old and not inactive:
activate(repo, mark)
del marks[old]
marks.recordchange(tr)
+
+def addbookmarks(repo, tr, names, rev=None, force=False, inactive=False):
+ """add a list of bookmarks
+
+ If force is specified, then the new name can overwrite an existing
+ bookmark.
+
+ If inactive is specified, then do not activate any bookmark. Otherwise, the
+ first bookmark is activated.
+
+ Raises an abort error if old is not in the bookmark store.
+ """
+ marks = repo._bookmarks
+ cur = repo.changectx('.').node()
+ newact = None
+ for mark in names:
+ mark = checkformat(repo, mark)
+ if newact is None:
+ newact = mark
+ if inactive and mark == repo._activebookmark:
+ deactivate(repo)
+ return
+ tgt = cur
+ if rev:
+ tgt = scmutil.revsingle(repo, rev).node()
+ marks.checkconflict(mark, force, tgt)
+ marks[mark] = tgt
+ if not inactive and cur == marks[newact] and not rev:
+ activate(repo, newact)
+ elif cur != tgt and newact == repo._activebookmark:
+ deactivate(repo)
+ marks.recordchange(tr)
@@ -969,11 +969,10 @@ def bookmark(ui, repo, *names, **opts):
if delete or rename or names or inactive:
wlock = lock = tr = None
try:
wlock = repo.wlock()
lock = repo.lock()
- cur = repo.changectx('.').node()
marks = repo._bookmarks
if delete:
tr = repo.transaction('bookmark')
bookmarks.delete(repo, tr, names)
elif rename:
@@ -983,27 +982,11 @@ def bookmark(ui, repo, *names, **opts):
elif len(names) > 1:
raise error.Abort(_("only one new bookmark name allowed"))
bookmarks.rename(repo, tr, rename, names[0], force, inactive)
elif names:
tr = repo.transaction('bookmark')
- newact = None
- for mark in names:
- mark = bookmarks.checkformat(repo, mark)
- if newact is None:
- newact = mark
- if inactive and mark == repo._activebookmark:
- bookmarks.deactivate(repo)
- return
- tgt = cur
- if rev:
- tgt = scmutil.revsingle(repo, rev).node()
- marks.checkconflict(mark, force, tgt)
- marks[mark] = tgt
- if not inactive and cur == marks[newact] and not rev:
- bookmarks.activate(repo, newact)
- elif cur != tgt and newact == repo._activebookmark:
- bookmarks.deactivate(repo)
+ bookmarks.addbookmarks(repo, tr, names, rev, force, inactive)
elif inactive:
if len(marks) == 0:
ui.status(_("no bookmarks set\n"))
elif not repo._activebookmark:
ui.status(_("no active bookmark\n"))