# HG changeset patch # User Yuya Nishihara # Date 2015-01-24 10:55:14 # Node ID ec5b56b50e1946245728f4e27fec5523a9a26913 # Parent 6b8e1a08ef1dd637b1eb48035c18f54b98cf74d5 fileset: add class to host special handling of initial subset Future patches will add a function to switch mctx.ctx object so that we can forcibly evaluate a fileset expression in a specified revision. For example, new "revs()" function will be used to match predicate agains another revision $ hg revert 'set:revs(42, added())' fullmatchctx class is similar to revset.fullreposet. It will allow us to recalculate the subset only if it is not filtered yet. diff --git a/mercurial/fileset.py b/mercurial/fileset.py --- a/mercurial/fileset.py +++ b/mercurial/fileset.py @@ -498,6 +498,12 @@ class matchctx(object): def narrow(self, files): return matchctx(self.ctx, self.filter(files), self._status) +class fullmatchctx(matchctx): + """A match context where any files in any revisions should be valid""" + + def __init__(self, ctx, subset=None, status=None): + super(fullmatchctx, self).__init__(ctx, subset, status) + def _intree(funcs, tree): if isinstance(tree, tuple): if tree[0] == 'func' and tree[1][0] == 'symbol': @@ -529,7 +535,7 @@ def getfileset(ctx, expr): status = None subset = list(ctx.walk(ctx.match([]))) - return getset(matchctx(ctx, subset, status), tree) + return getset(fullmatchctx(ctx, subset, status), tree) def prettyformat(tree): return parser.prettyformat(tree, ('string', 'symbol'))