Mercurial > public > mercurial-scm > hg
comparison mercurial/scmutil.py @ 24175:c4e3e7b031b7
revrange: don't parse revset aliases as hash prefixes (issue4553)
If a user has a revsetalias defined, it is their explicit wish for
this alias to be parsed as a revset and nothing else. Although the
case of the alias being short enough and only contain the letters a-f
is probably kind of rare, it may still happen.
author | Jordi Guti?rrez Hermoso <jordigh@octave.org> |
---|---|
date | Wed, 25 Feb 2015 18:12:01 -0500 |
parents | fafd9a1284cf |
children | ca1365078c86 |
comparison
equal
deleted
inserted
replaced
24174:bd9f64ec891d | 24175:c4e3e7b031b7 |
---|---|
626 if not val and val != 0 and defval is not None: | 626 if not val and val != 0 and defval is not None: |
627 return defval | 627 return defval |
628 return repo[val].rev() | 628 return repo[val].rev() |
629 | 629 |
630 seen, l = set(), revset.baseset([]) | 630 seen, l = set(), revset.baseset([]) |
631 | |
632 revsetaliases = [alias for (alias, _) in | |
633 repo.ui.configitems("revsetalias")] | |
634 | |
631 for spec in revs: | 635 for spec in revs: |
632 if l and not seen: | 636 if l and not seen: |
633 seen = set(l) | 637 seen = set(l) |
634 # attempt to parse old-style ranges first to deal with | 638 # attempt to parse old-style ranges first to deal with |
635 # things like old-tag which contain query metacharacters | 639 # things like old-tag which contain query metacharacters |
636 try: | 640 try: |
641 # ... except for revset aliases without arguments. These | |
642 # should be parsed as soon as possible, because they might | |
643 # clash with a hash prefix. | |
644 if spec in revsetaliases: | |
645 raise error.RepoLookupError | |
646 | |
637 if isinstance(spec, int): | 647 if isinstance(spec, int): |
638 seen.add(spec) | 648 seen.add(spec) |
639 l = l + revset.baseset([spec]) | 649 l = l + revset.baseset([spec]) |
640 continue | 650 continue |
641 | 651 |
642 if _revrangesep in spec: | 652 if _revrangesep in spec: |
643 start, end = spec.split(_revrangesep, 1) | 653 start, end = spec.split(_revrangesep, 1) |
654 if start in revsetaliases or end in revsetaliases: | |
655 raise error.RepoLookupError | |
656 | |
644 start = revfix(repo, start, 0) | 657 start = revfix(repo, start, 0) |
645 end = revfix(repo, end, len(repo) - 1) | 658 end = revfix(repo, end, len(repo) - 1) |
646 if end == nullrev and start < 0: | 659 if end == nullrev and start < 0: |
647 start = nullrev | 660 start = nullrev |
648 rangeiter = repo.changelog.revs(start, end) | 661 rangeiter = repo.changelog.revs(start, end) |