[PATCH V3] revrange: don't parse revset aliases as hash prefixes (issue4553)

Yuya Nishihara yuya at tcha.org
Sat Feb 28 03:04:48 CST 2015


On Sat, 28 Feb 2015 12:37:19 +0900, Yuya Nishihara wrote:
> On Thu, 26 Feb 2015 13:58:14 -0500, Jordi GutiƩrrez Hermoso wrote:
> >      for spec in revs:
> >          if l and not seen:
> >              seen = set(l)
> >          # attempt to parse old-style ranges first to deal with
> >          # things like old-tag which contain query metacharacters
> >          try:
> > +            # ... except for revset aliases without arguments. These
> > +            # should be parsed as soon as possible, because they might
> > +            # clash with a hash prefix.
> > +            if spec in revsetaliases:
> > +                raise error.RepoLookupError
> > +
> >              if isinstance(spec, int):
> >                  seen.add(spec)
> >                  l = l + revset.baseset([spec])
> > @@ -641,6 +651,9 @@ def revrange(repo, revs):
> >  
> >              if _revrangesep in spec:
> >                  start, end = spec.split(_revrangesep, 1)
> > +                if start in revsetaliases or end in revsetaliases:
> > +                    raise error.RepoLookupError
> > +
> >                  start = revfix(repo, start, 0)
> >                  end = revfix(repo, end, len(repo) - 1)
> >                  if end == nullrev and start < 0:
> 
> I don't know which is better, but both "x in revsetliases" checks can be done
> by revfix().

Oops, my suggestion didn't work because "spec in repo" may raise LookupError.
It seems "spec in repo" is unnecessary, though.


More information about the Mercurial-devel mailing list