# HG changeset patch # User Pierre-Yves David # Date 2013-04-30 08:51:25 # Node ID 0e4af72cbd7f3e4bfd2d010458467b784dae6ffe # Parent 5cc71484ee9c9d370cc2a4cce205a8a59867096e 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 @@ -1762,6 +1762,9 @@ class localrepository(object): 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: @@ -1883,17 +1886,17 @@ class localrepository(object): # 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.