Commit ab41dad7345 by Rodrigo Damazio Bovendorp

phases: make phasecache._phasesets immutable

Previously, some code paths would mutate the cache itself, which
could give weird results if multiple revsets got evaluated through
that path.

Differential Revision: https://phab.mercurial-scm.org/D7854
parent 8eb3c52337a
......@@ -253,15 +253,19 @@ class phasecache(object):
# fast path: _phasesets contains the interesting sets,
# might only need a union and post-filtering.
revsneedscopy = False
if len(phases) == 1:
[p] = phases
revs = self._phasesets[p]
revsneedscopy = True # Don't modify _phasesets
else:
# revs has the revisions in all *other* phases.
revs = set.union(*[self._phasesets[p] for p in phases])
def _addwdir(wdirsubset, wdirrevs):
if wdirrev in wdirsubset and repo[None].phase() in phases:
if revsneedscopy:
wdirrevs = wdirrevs.copy()
# The working dir would never be in the # cache, but it was in
# the subset being filtered for its phase (or filtered out,
# depending on publicphase), so add it to the output to be
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment