Mercurial > public > mercurial-scm > hg-stable
comparison mercurial/fileset.py @ 31202:951d95b13487
fileset: add function to switch revision where fileset will be evaluated
If the subset isn't filtered yet, i.e. if fullmatchctx, the new subset is
recalculated from scratch. Otherwise, it is narrowed by the existing subset.
author | Yuya Nishihara <yuya@tcha.org> |
---|---|
date | Sat, 24 Jan 2015 19:41:56 +0900 |
parents | 3c3ab84e6e78 |
children | 4140d49d2efb |
comparison
equal
deleted
inserted
replaced
31201:3c3ab84e6e78 | 31202:951d95b13487 |
---|---|
495 unknown = set() | 495 unknown = set() |
496 return (f for f in self.subset | 496 return (f for f in self.subset |
497 if (f in self.ctx and f not in removed) or f in unknown) | 497 if (f in self.ctx and f not in removed) or f in unknown) |
498 def narrow(self, files): | 498 def narrow(self, files): |
499 return matchctx(self.ctx, self.filter(files), self._status) | 499 return matchctx(self.ctx, self.filter(files), self._status) |
500 def switch(self, ctx, status=None): | |
501 subset = self.filter(_buildsubset(ctx, status)) | |
502 return matchctx(ctx, subset, status) | |
500 | 503 |
501 class fullmatchctx(matchctx): | 504 class fullmatchctx(matchctx): |
502 """A match context where any files in any revisions should be valid""" | 505 """A match context where any files in any revisions should be valid""" |
503 | 506 |
504 def __init__(self, ctx, status=None): | 507 def __init__(self, ctx, status=None): |
505 subset = _buildsubset(ctx, status) | 508 subset = _buildsubset(ctx, status) |
506 super(fullmatchctx, self).__init__(ctx, subset, status) | 509 super(fullmatchctx, self).__init__(ctx, subset, status) |
510 def switch(self, ctx, status=None): | |
511 return fullmatchctx(ctx, status) | |
512 | |
513 # filesets using matchctx.switch() | |
514 _switchcallers = [ | |
515 ] | |
507 | 516 |
508 def _intree(funcs, tree): | 517 def _intree(funcs, tree): |
509 if isinstance(tree, tuple): | 518 if isinstance(tree, tuple): |
510 if tree[0] == 'func' and tree[1][0] == 'symbol': | 519 if tree[0] == 'func' and tree[1][0] == 'symbol': |
511 if tree[1][1] in funcs: | 520 if tree[1][1] in funcs: |
512 return True | 521 return True |
522 if tree[1][1] in _switchcallers: | |
523 # arguments won't be evaluated in the current context | |
524 return False | |
513 for s in tree[1:]: | 525 for s in tree[1:]: |
514 if _intree(funcs, s): | 526 if _intree(funcs, s): |
515 return True | 527 return True |
516 return False | 528 return False |
517 | 529 |