From patchwork Tue Apr 30 10:04:49 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [1, of, 2, STABLE, MOST-WANTED] push: factorise phase movement in a simple closure From: Pierre-Yves David X-Patchwork-Id: 1510 Message-Id: To: mercurial-devel@selenic.com Cc: pierre-yves.david@logilab.fr Date: Tue, 30 Apr 2013 12:04:49 +0200 # HG changeset patch # User Pierre-Yves David # Date 1367311885 -7200 # Tue Apr 30 10:51:25 2013 +0200 # Branch stable # Node ID b5c9626ec444375a6368d40ba5218ede6401c68d # Parent f01a351db79106ba96ac6d527cf69944fd98e665 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. diff --git a/mercurial/localrepo.py b/mercurial/localrepo.py --- a/mercurial/localrepo.py +++ b/mercurial/localrepo.py @@ -1760,10 +1760,13 @@ class localrepository(object): # servers, http servers). if not remote.canpush(): raise util.Abort(_("destination does not support push")) unfi = self.unfiltered() + def localphasemove(nodes, phase=phases.public): + """move to in the local source repo""" + phases.advanceboundary(self, phase, nodes) # get local lock as we might write phase data locallock = self.lock() try: self.checkpush(force, revs) lock = None @@ -1881,21 +1884,21 @@ class localrepository(object): # We drop the possible phase synchronisation done by # courtesy to publish changesets possibly locally draft # 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. # XXX Beware that revset break if droots is not strictly # XXX root we may want to ensure it is but it is costly