# HG changeset patch # User Boris Feld <boris.f...@octobus.net> # Date 1499733592 -7200 # Tue Jul 11 02:39:52 2017 +0200 # Node ID d578e17d880990375cf64d4c026e927987211fe7 # Parent 936da074fe26e45133672419d670febbfdb447a8 # EXP-Topic tr.changes.phases phases: track phase movements in 'advanceboundary'
Makes advanceboundary record the phase movement of affected revisions in tr.changes['phases']. The tracking is not usable yet because the 'retractboundary' function can also affect phases. We'll improve that in the coming changesets. diff -r 936da074fe26 -r d578e17d8809 mercurial/localrepo.py --- a/mercurial/localrepo.py Mon Jul 10 22:18:41 2017 +0200 +++ b/mercurial/localrepo.py Tue Jul 11 02:39:52 2017 +0200 @@ -1136,6 +1136,7 @@ checkambigfiles=_cachedfiles) tr.changes['revs'] = set() tr.changes['obsmarkers'] = set() + tr.changes['phases'] = {} tr.hookargs['txnid'] = txnid # note: writing the fncache only during finalize mean that the file is diff -r 936da074fe26 -r d578e17d8809 mercurial/phases.py --- a/mercurial/phases.py Mon Jul 10 22:18:41 2017 +0200 +++ b/mercurial/phases.py Tue Jul 11 02:39:52 2017 +0200 @@ -154,6 +154,18 @@ dirty = True return roots, dirty +def _trackphasechange(data, rev, old, new): + """add a phase move the <data> dictionnary + + If data is None, nothing happens. + """ + if data is None: + return + existing = data.get(rev) + if existing is not None: + old = existing[0] + data[rev] = (old, new) + class phasecache(object): def __init__(self, repo, phasedefaults, _load=True): if _load: @@ -289,8 +301,13 @@ """ # Be careful to preserve shallow-copied values: do not update # phaseroots values, replace them. + if tr is None: + phasetracking = None + else: + phasetracking = tr.changes.get('phases') repo = repo.unfiltered() + delroots = [] # set of root deleted by this path for phase in xrange(targetphase + 1, len(allphases)): # filter nodes that are not in a compatible phase already @@ -300,7 +317,11 @@ break # no roots to move anymore olds = self.phaseroots[phase] + affected = repo.revs('%ln::%ln', olds, nodes) + for r in affected: + _trackphasechange(phasetracking, r, self.phase(repo, r), + targetphase) roots = set(ctx.node() for ctx in repo.set( 'roots((%ln::) - %ld)', olds, affected)) _______________________________________________ Mercurial-devel mailing list Mercurial-devel@mercurial-scm.org https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel