Mercurial > hg
changeset 33007:ee081f91b179
bookmarks: factor out adding a list of bookmarks logic from commands
We keep the lock in the caller so that future devs are aware of the
locking implications.
author | Sean Farley <sean@farley.io> |
---|---|
date | Tue, 20 Jun 2017 15:18:40 -0700 |
parents | e0a8dd6c87c7 |
children | ac57603a44fe |
files | mercurial/bookmarks.py mercurial/commands.py |
diffstat | 2 files changed, 33 insertions(+), 18 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/bookmarks.py Tue Jun 13 11:10:22 2017 -0700 +++ b/mercurial/bookmarks.py Tue Jun 20 15:18:40 2017 -0700 @@ -726,3 +726,35 @@ 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)
--- a/mercurial/commands.py Tue Jun 13 11:10:22 2017 -0700 +++ b/mercurial/commands.py Tue Jun 20 15:18:40 2017 -0700 @@ -971,7 +971,6 @@ try: wlock = repo.wlock() lock = repo.lock() - cur = repo.changectx('.').node() marks = repo._bookmarks if delete: tr = repo.transaction('bookmark') @@ -985,23 +984,7 @@ 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"))