Mercurial > hg
changeset 22667:3acc3f95548c
push: update bookmarks (on server) within a transaction
A nice side effect is that bookmarks sent through bundle2 are updated within the
same transaction as all other changes.
author | Pierre-Yves David <pierre-yves.david@fb.com> |
---|---|
date | Sun, 28 Sep 2014 17:35:33 -0700 |
parents | 0f8120c1ecf5 |
children | 13e3f07d74a3 |
files | mercurial/bookmarks.py |
diffstat | 1 files changed, 8 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/bookmarks.py Sun Sep 28 15:21:38 2014 -0700 +++ b/mercurial/bookmarks.py Sun Sep 28 17:35:33 2014 -0700 @@ -7,7 +7,7 @@ from mercurial.i18n import _ from mercurial.node import hex, bin -from mercurial import encoding, error, util, obsolete +from mercurial import encoding, error, util, obsolete, lock as lockmod import errno class bmstore(dict): @@ -235,8 +235,11 @@ return d def pushbookmark(repo, key, old, new): - w = repo.wlock() + w = l = tr = None try: + w = repo.wlock() + l = repo.lock() + tr = repo.transaction('bookmarks') marks = repo._bookmarks existing = hex(marks.get(key, '')) if existing != old and existing != new: @@ -247,10 +250,11 @@ if new not in repo: return False marks[key] = repo[new].node() - marks.write() + marks.recordchange(tr) + tr.close() return True finally: - w.release() + lockmod.release(tr, l, w) def compare(repo, srcmarks, dstmarks, srchex=None, dsthex=None, targets=None):