Show More
@@ -1960,9 +1960,11 b' def debugrevspec(ui, repo, expr, **opts)' | |||
|
1960 | 1960 | one. Returns 1 if the optimized result differs. |
|
1961 | 1961 | """ |
|
1962 | 1962 | opts = pycompat.byteskwargs(opts) |
|
1963 | aliases = ui.configitems('revsetalias') | |
|
1963 | 1964 | stages = [ |
|
1964 | 1965 | ('parsed', lambda tree: tree), |
|
1965 |
('expanded', lambda tree: revsetlang.expandaliases( |
|
|
1966 | ('expanded', lambda tree: revsetlang.expandaliases(tree, aliases, | |
|
1967 | ui.warn)), | |
|
1966 | 1968 | ('concatenated', revsetlang.foldconcat), |
|
1967 | 1969 | ('analyzed', revsetlang.analyze), |
|
1968 | 1970 | ('optimized', revsetlang.optimize), |
@@ -648,16 +648,19 b' class localrepository(object):' | |||
|
648 | 648 | for r in self.revs(expr, *args): |
|
649 | 649 | yield self[r] |
|
650 | 650 | |
|
651 | def anyrevs(self, specs, user=False): | |
|
651 | def anyrevs(self, specs, user=False, localalias=None): | |
|
652 | 652 | '''Find revisions matching one of the given revsets. |
|
653 | 653 | |
|
654 | 654 | Revset aliases from the configuration are not expanded by default. To |
|
655 | expand user aliases, specify ``user=True``. | |
|
655 | expand user aliases, specify ``user=True``. To provide some local | |
|
656 | definitions overriding user aliases, set ``localalias`` to | |
|
657 | ``{name: definitionstring}``. | |
|
656 | 658 | ''' |
|
657 | 659 | if user: |
|
658 |
m = revset.matchany(self.ui, specs, repo=self |
|
|
660 | m = revset.matchany(self.ui, specs, repo=self, | |
|
661 | localalias=localalias) | |
|
659 | 662 | else: |
|
660 | m = revset.matchany(None, specs) | |
|
663 | m = revset.matchany(None, specs, localalias=localalias) | |
|
661 | 664 | return m(self) |
|
662 | 665 | |
|
663 | 666 | def url(self): |
@@ -2001,12 +2001,15 b' def match(ui, spec, repo=None, order=def' | |||
|
2001 | 2001 | """ |
|
2002 | 2002 | return matchany(ui, [spec], repo=repo, order=order) |
|
2003 | 2003 | |
|
2004 | def matchany(ui, specs, repo=None, order=defineorder): | |
|
2004 | def matchany(ui, specs, repo=None, order=defineorder, localalias=None): | |
|
2005 | 2005 | """Create a matcher that will include any revisions matching one of the |
|
2006 | 2006 | given specs |
|
2007 | 2007 | |
|
2008 | 2008 | If order=followorder, a matcher takes the ordering specified by the input |
|
2009 | 2009 | set. |
|
2010 | ||
|
2011 | If localalias is not None, it is a dict {name: definitionstring}. It takes | |
|
2012 | precedence over [revsetalias] config section. | |
|
2010 | 2013 | """ |
|
2011 | 2014 | if not specs: |
|
2012 | 2015 | def mfunc(repo, subset=None): |
@@ -2023,8 +2026,15 b' def matchany(ui, specs, repo=None, order' | |||
|
2023 | 2026 | tree = ('or', |
|
2024 | 2027 | ('list',) + tuple(revsetlang.parse(s, lookup) for s in specs)) |
|
2025 | 2028 | |
|
2029 | aliases = [] | |
|
2030 | warn = None | |
|
2026 | 2031 | if ui: |
|
2027 | tree = revsetlang.expandaliases(ui, tree) | |
|
2032 | aliases.extend(ui.configitems('revsetalias')) | |
|
2033 | warn = ui.warn | |
|
2034 | if localalias: | |
|
2035 | aliases.extend(localalias.items()) | |
|
2036 | if aliases: | |
|
2037 | tree = revsetlang.expandaliases(tree, aliases, warn=warn) | |
|
2028 | 2038 | tree = revsetlang.foldconcat(tree) |
|
2029 | 2039 | tree = revsetlang.analyze(tree, order) |
|
2030 | 2040 | tree = revsetlang.optimize(tree) |
@@ -561,14 +561,16 b' class _aliasrules(parser.basealiasrules)' | |||
|
561 | 561 | if tree[0] == 'func' and tree[1][0] == 'symbol': |
|
562 | 562 | return tree[1][1], getlist(tree[2]) |
|
563 | 563 | |
|
564 |
def expandaliases( |
|
|
565 | aliases = _aliasrules.buildmap(ui.configitems('revsetalias')) | |
|
564 | def expandaliases(tree, aliases, warn=None): | |
|
565 | """Expand aliases in a tree, aliases is a list of (name, value) tuples""" | |
|
566 | aliases = _aliasrules.buildmap(aliases) | |
|
566 | 567 | tree = _aliasrules.expand(aliases, tree) |
|
567 | 568 | # warn about problematic (but not referred) aliases |
|
568 | for name, alias in sorted(aliases.iteritems()): | |
|
569 | if alias.error and not alias.warned: | |
|
570 | ui.warn(_('warning: %s\n') % (alias.error)) | |
|
571 | alias.warned = True | |
|
569 | if warn is not None: | |
|
570 | for name, alias in sorted(aliases.iteritems()): | |
|
571 | if alias.error and not alias.warned: | |
|
572 | warn(_('warning: %s\n') % (alias.error)) | |
|
573 | alias.warned = True | |
|
572 | 574 | return tree |
|
573 | 575 | |
|
574 | 576 | def foldconcat(tree): |
@@ -4259,4 +4259,27 b' loading it' | |||
|
4259 | 4259 | hg: parse error: unknown identifier: custom1 |
|
4260 | 4260 | [255] |
|
4261 | 4261 | |
|
4262 | Test repo.anyrevs with customized revset overrides | |
|
4263 | ||
|
4264 | $ cat > $TESTTMP/printprevset.py <<EOF | |
|
4265 | > from mercurial import encoding | |
|
4266 | > def reposetup(ui, repo): | |
|
4267 | > alias = {} | |
|
4268 | > p = encoding.environ.get('P') | |
|
4269 | > if p: | |
|
4270 | > alias['P'] = p | |
|
4271 | > revs = repo.anyrevs(['P'], user=True, localalias=alias) | |
|
4272 | > ui.write('P=%r' % list(revs)) | |
|
4273 | > EOF | |
|
4274 | ||
|
4275 | $ cat >> .hg/hgrc <<EOF | |
|
4276 | > custompredicate = ! | |
|
4277 | > printprevset = $TESTTMP/printprevset.py | |
|
4278 | > EOF | |
|
4279 | ||
|
4280 | $ hg --config revsetalias.P=1 log -r . -T '\n' | |
|
4281 | P=[1] | |
|
4282 | $ P=3 hg --config revsetalias.P=2 log -r . -T '\n' | |
|
4283 | P=[3] | |
|
4284 | ||
|
4262 | 4285 | $ cd .. |
General Comments 0
You need to be logged in to leave comments.
Login now