mirror of
https://github.com/facebook/sapling.git
synced 2024-10-06 23:07:18 +03:00
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.
This commit is contained in:
parent
37ccfcc8ea
commit
5bac329dd1
@ -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 <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 @@ 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.
|
||||
|
Loading…
Reference in New Issue
Block a user