[PATCH 10 of 10] revlog: raise error.WdirUnsupported from revlog.revs() if wdirrev is passed

Yuya Nishihara yuya at tcha.org
Tue May 23 10:58:22 EDT 2017


On Tue, 23 May 2017 02:22:20 +0530, Pulkit Goyal wrote:
> # HG changeset patch
> # User Pulkit Goyal <7895pulkit at gmail.com>
> # Date 1495483959 -19800
> #      Tue May 23 01:42:39 2017 +0530
> # Node ID 9e27cccadbf4b13a7f7a4e83a19f854b1e4350e2
> # Parent  db4b48c60495338c7c2ce659c73b0ecb9ae84c7b
> revlog: raise error.WdirUnsupported from revlog.revs() if wdirrev is passed
> 
> revlog.revs() is called while evaluating predicates such as descendants() and
> only(). So if wdir() is passed in those predicates, it blows up with
> OverflowError. Lets raise WdirUnsupported instead so that the exception can be
> helpful and catched and fix from the functions calling it.
> 
> I am not sure if anyone will ever pass wdir() to descendants() but it can be
> passed to only().
> 
> diff --git a/mercurial/revlog.py b/mercurial/revlog.py
> --- a/mercurial/revlog.py
> +++ b/mercurial/revlog.py
> @@ -383,7 +383,12 @@
>              stop += step
>          else:
>              stop = len(self)
> -        return xrange(start, stop, step)
> +        try:
> +            return xrange(start, stop, step)
> +        except OverflowError:
> +            if start == wdirrev:
> +                raise error.WdirUnsupported
> +            raise

This doesn't look correct and would be platform dependent. Maybe we'll need
a workaround to yield wdirrev if start=wdirrev and stop=wdirrev?


More information about the Mercurial-devel mailing list