diff -r 5747967e257c -r d017f1d37378 mercurial/phases.py --- a/mercurial/phases.py Mon Jul 10 22:22:42 2017 +0200 +++ b/mercurial/phases.py Mon Jul 10 22:18:41 2017 +0200 @@ -283,6 +283,10 @@ tr.hookargs['phases_moved'] = '1' def advanceboundary(self, repo, tr, targetphase, nodes): + """Set all 'nodes' to phase 'targetphase' + + Nodes with a phase lower than 'targetphase' are not affected. + """ # Be careful to preserve shallow-copied values: do not update # phaseroots values, replace them. @@ -294,9 +298,12 @@ if self.phase(repo, repo[n].rev()) >= phase] if not nodes: break # no roots to move anymore + olds = self.phaseroots[phase] + affected = repo.revs('%ln::%ln', olds, nodes) + roots = set(ctx.node() for ctx in repo.set( - 'roots((%ln::) - (%ln::%ln))', olds, olds, nodes)) + 'roots((%ln::) - %ld)', olds, affected)) if olds != roots: self._updateroots(phase, roots, tr) # some roots may need to be declared for lower phases