pushkey: wrap pushkey phase movement in a transaction
authorPierre-Yves David <pierre-yves.david@fb.com>
Wed, 06 Aug 2014 00:54:58 -0700
changeset 22052 793f9276aeb9
parent 22051 e894de232f35
child 22053 4354b1e35f53
pushkey: wrap pushkey phase movement in a transaction Phases are not yet inside the transaction, but we need to prepare for it. So we wrap the phase movement inside a transaction.
mercurial/phases.py
--- a/mercurial/phases.py	Wed Aug 06 00:54:15 2014 -0700
+++ b/mercurial/phases.py	Wed Aug 06 00:54:58 2014 -0700
@@ -331,13 +331,16 @@
 def pushphase(repo, nhex, oldphasestr, newphasestr):
     """List phases root for serialization over pushkey"""
     repo = repo.unfiltered()
+    tr = None
     lock = repo.lock()
     try:
         currentphase = repo[nhex].phase()
         newphase = abs(int(newphasestr)) # let's avoid negative index surprise
         oldphase = abs(int(oldphasestr)) # let's avoid negative index surprise
         if currentphase == oldphase and newphase < oldphase:
+            tr = repo.transaction('pushkey-phase')
             advanceboundary(repo, newphase, [bin(nhex)])
+            tr.close()
             return 1
         elif currentphase == newphase:
             # raced, but got correct result
@@ -345,6 +348,8 @@
         else:
             return 0
     finally:
+        if tr:
+            tr.release()
         lock.release()
 
 def analyzeremotephases(repo, subset, roots):