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)