From patchwork Fri Jun 23 18:33:18 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [2, of, 7, bm-refactor, V3] bookmarks: factor out rename logic from commands From: Sean Farley X-Patchwork-Id: 21640 Message-Id: <49e4d804d8520243b36c.1498242798@1.0.0.127.in-addr.arpa> To: mercurial-devel@mercurial-scm.org Cc: sean@farley.io Date: Fri, 23 Jun 2017 11:33:18 -0700 # HG changeset patch # User Sean Farley # Date 1497377422 25200 # Tue Jun 13 11:10:22 2017 -0700 # Branch bm-refactor # Node ID 49e4d804d8520243b36c90237d0547ccb55cfb32 # Parent d8b560800ad7ae1c0cbb83a2e810af891d26c0d5 bookmarks: factor out rename logic from commands We keep the lock in the caller so that future devs are aware of the locking implications. diff --git a/mercurial/bookmarks.py b/mercurial/bookmarks.py index 0371a52..f0b9f5f 100644 --- a/mercurial/bookmarks.py +++ b/mercurial/bookmarks.py @@ -704,5 +704,27 @@ def delete(repo, tr, names): mark) if mark == repo._activebookmark: 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) diff --git a/mercurial/commands.py b/mercurial/commands.py index 876fb3e..e882567 100644 --- a/mercurial/commands.py +++ b/mercurial/commands.py @@ -980,19 +980,11 @@ def bookmark(ui, repo, *names, **opts): tr = repo.transaction('bookmark') if not names: 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 for mark in names: mark = bookmarks.checkformat(repo, mark)