mirror of
https://github.com/facebook/sapling.git
synced 2024-10-08 15:57:43 +03:00
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.
This commit is contained in:
parent
e0ae9be376
commit
794ac05dda
@ -1216,6 +1216,7 @@ class localrepository(object):
|
||||
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
|
||||
|
@ -154,6 +154,18 @@ def _readroots(repo, phasedefaults=None):
|
||||
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 @@ class phasecache(object):
|
||||
"""
|
||||
# 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 @@ class phasecache(object):
|
||||
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))
|
||||
|
Loading…
Reference in New Issue
Block a user