# HG changeset patch # User Laurent Charignon # Date 1442447406 25200 # Node ID a55c691f4cc0b960a02bc94b3296403524c8db84 # Parent 53a6dbc33e369c6347ba242b6ffd136639ff8165 evolve: use repo._bookmarks.recordchange instead of repo._bookmarks.write We want to get rid of the api repo._bookmarks.write and this patch removes its use in evolve.py. Before this patch, we were using repo._bookmarks.write to save bookmarks change immediately instead of repo._bookmarks.recordchange that write change when transaction ends. diff -r 53a6dbc33e36 -r a55c691f4cc0 hgext/evolve.py --- a/hgext/evolve.py Wed Sep 16 17:12:38 2015 -0700 +++ b/hgext/evolve.py Wed Sep 16 16:50:06 2015 -0700 @@ -805,11 +805,15 @@ nodeid was actually created. If created is False, nodeid references a changeset existing before the rewrite call. """ - if True: + wlock = lock = tr = None + try: + wlock = repo.wlock() + lock = repo.lock() + tr = repo.transaction('rewrite') if len(old.parents()) > 1: #XXX remove this unecessary limitation. raise error.Abort(_('cannot amend merge changesets')) base = old.p1() - updatebookmarks = _bookmarksupdater(repo, old.node()) + updatebookmarks = _bookmarksupdater(repo, old.node(), tr) # commit a new version of the old changeset, including the update # collect all files which might be affected @@ -873,7 +877,10 @@ created = len(repo) != revcount updatebookmarks(newid) + tr.close() return newid, created + finally: + lockmod.release(lock, wlock, tr) class MergeFailure(util.Abort): pass @@ -972,13 +979,13 @@ for book in destbookmarks: # restore bookmark that rebase move repo._bookmarks[book] = dest.node() if oldbookmarks or destbookmarks: - repo._bookmarks.write() + repo._bookmarks.recordchange(tr) tr.close() finally: tr.release() return nodenew -def _bookmarksupdater(repo, oldid): +def _bookmarksupdater(repo, oldid, tr): """Return a callable update(newid) updating the current bookmark and bookmarks bound to oldid to newid. """ @@ -990,7 +997,7 @@ repo._bookmarks[b] = newid dirty = True if dirty: - repo._bookmarks.write() + repo._bookmarks.recordchange(tr) return updatebookmarks ### bookmarks api compatibility layer ### @@ -1782,9 +1789,9 @@ if progresscb: progresscb() newid = tmpctx = None tmpctx = bumped - bmupdate = _bookmarksupdater(repo, bumped.node()) # Basic check for common parent. Far too complicated and fragile tr = repo.transaction('bumped-stabilize') + bmupdate = _bookmarksupdater(repo, bumped.node(), tr) try: if not list(repo.set('parents(%d) and parents(%d)', bumped, prec)): # Need to rebase the changeset at the right place @@ -2338,7 +2345,7 @@ # slower. The new forms makes as much sense and a much faster. for dest in ctx.ancestors(): if not dest.obsolete(): - updatebookmarks = _bookmarksupdater(repo, ctx.node()) + updatebookmarks = _bookmarksupdater(repo, ctx.node(), tr) updatebookmarks(dest.node()) break @@ -2523,7 +2530,6 @@ if len(old.parents()) > 1: raise util.Abort(_("cannot uncommit merge changeset")) oldphase = old.phase() - updatebookmarks = _bookmarksupdater(repo, old.node()) rev = None @@ -2540,6 +2546,7 @@ # Recommit the filtered changeset tr = repo.transaction('uncommit') + updatebookmarks = _bookmarksupdater(repo, old.node(), tr) newid = None includeorexclude = opts.get('include') or opts.get('exclude') if (pats or includeorexclude or opts.get('all')): @@ -2634,7 +2641,7 @@ if len(ctx.parents()) > 1: raise util.Abort(_("cannot split merge commits")) prev = ctx.p1() - bmupdate = _bookmarksupdater(repo, ctx.node()) + bmupdate = _bookmarksupdater(repo, ctx.node(), tr) bookactive = bmactive(repo) if bookactive is not None: repo.ui.status(_("(leaving bookmark %s)\n") % bmactive(repo))