push: factorise phase movement in a simple closure stable
authorPierre-Yves David <pierre-yves.david@logilab.fr>
Tue, 30 Apr 2013 10:51:25 +0200
branchstable
changeset 19096 0e4af72cbd7f
parent 19095 5cc71484ee9c
child 19097 3f5e75c22585
push: factorise phase movement in a simple closure Having all phases movement centralised will help to handle special case when the local repo can not be locked as describe in issue 3684.
mercurial/localrepo.py
--- a/mercurial/localrepo.py	Mon Apr 29 15:58:15 2013 +0900
+++ b/mercurial/localrepo.py	Tue Apr 30 10:51:25 2013 +0200
@@ -1762,6 +1762,9 @@
         if not remote.canpush():
             raise util.Abort(_("destination does not support push"))
         unfi = self.unfiltered()
+        def localphasemove(nodes, phase=phases.public):
+            """move <nodes> to <phase> in the local source repo"""
+            phases.advanceboundary(self, phase, nodes)
         # get local lock as we might write phase data
         locallock = self.lock()
         try:
@@ -1883,17 +1886,17 @@
                     # on the remote.
                     remotephases = {'publishing': 'True'}
                 if not remotephases: # old server or public only repo
-                    phases.advanceboundary(self, phases.public, cheads)
+                    localphasemove(cheads)
                     # don't push any phase data as there is nothing to push
                 else:
                     ana = phases.analyzeremotephases(self, cheads, remotephases)
                     pheads, droots = ana
                     ### Apply remote phase on local
                     if remotephases.get('publishing', False):
-                        phases.advanceboundary(self, phases.public, cheads)
+                        localphasemove(cheads)
                     else: # publish = False
-                        phases.advanceboundary(self, phases.public, pheads)
-                        phases.advanceboundary(self, phases.draft, cheads)
+                        localphasemove(pheads)
+                        localphasemove(cheads, phases.draft)
                     ### Apply local phase on remote
 
                     # Get the list of all revs draft on remote by public here.