bookmarks: factor out rename logic from commands

We keep the lock in the caller so that future devs are aware of the
locking implications.
This commit is contained in:
Sean Farley 2017-06-13 11:10:22 -07:00
parent da73ed7374
commit 55d19ae197
2 changed files with 22 additions and 9 deletions

View File

@ -705,3 +705,24 @@ def delete(repo, tr, names):
deactivate(repo)
del marks[mark]
marks.recordchange(tr)
def rename(repo, tr, old, new, force=False, inactive=False):
"""rename a bookmark from old to new
If force is specified, then the new name can overwrite an existing
bookmark.
If inactive is specified, then do not activate the new bookmark.
Raises an abort error if old is not in the bookmark store.
"""
marks = repo._bookmarks
mark = checkformat(repo, new)
if old not in marks:
raise error.Abort(_("bookmark '%s' does not exist") % old)
marks.checkconflict(mark, force)
marks[mark] = marks[old]
if repo._activebookmark == old and not inactive:
activate(repo, mark)
del marks[old]
marks.recordchange(tr)

View File

@ -982,15 +982,7 @@ def bookmark(ui, repo, *names, **opts):
raise error.Abort(_("new bookmark name required"))
elif len(names) > 1:
raise error.Abort(_("only one new bookmark name allowed"))
mark = bookmarks.checkformat(repo, names[0])
if rename not in marks:
raise error.Abort(_("bookmark '%s' does not exist")
% rename)
marks.checkconflict(mark, force)
marks[mark] = marks[rename]
if repo._activebookmark == rename and not inactive:
bookmarks.activate(repo, mark)
del marks[rename]
bookmarks.rename(repo, tr, rename, names[0], force, inactive)
elif names:
tr = repo.transaction('bookmark')
newact = None