Mercurial > hg
changeset 33450:d017f1d37378
phases: extract the intermediate set of affected revs
When advancing phases, we compute the new roots for the phases above. During
this process, we need to compute all the revisions that change phases (to the
new target phases). Extract these revisions into a separate variable. This
will be useful to record the phase changes in the transaction.
author | Boris Feld <boris.feld@octobus.net> |
---|---|
date | Mon, 10 Jul 2017 22:18:41 +0200 |
parents | 5747967e257c |
children | e44d54260c32 |
files | mercurial/phases.py |
diffstat | 1 files changed, 8 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- 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