[PATCH 1 of 3 V2] error: add a new exception named WdirUnsupported

Yuya Nishihara yuya at tcha.org
Mon May 22 11:32:25 EDT 2017


On Mon, 22 May 2017 20:41:48 +0530, Pulkit Goyal wrote:
> On Mon, May 22, 2017 at 8:25 PM, Yuya Nishihara <yuya at tcha.org> wrote:
> 
> > On Sun, 21 May 2017 21:48:43 +0530, Pulkit Goyal wrote:
> > > # HG changeset patch
> > > # User Pulkit Goyal <7895pulkit at gmail.com>
> > > # Date 1495201237 -19800
> > > #      Fri May 19 19:10:37 2017 +0530
> > > # Node ID 2adbd2d46cd7588d75201108f6e02b92d1480022
> > > # Parent  4a23cdb32968ab4739cad0c32811b24829c38efa
> > > error: add a new exception named WdirUnsupported
> > >
> > > This series intents to support wdir() predicate with different operators
> > > like ~, ^.
> > >
> > > Currently the storage class don't support wdir(). This exception is
> > introduced
> > > so that it can be raised from places where wdir() is passed and is not
> > > supported and we can catch this where we want to support the predicate.
> > > Also throwing an error at low level and catching at some higher level is
> > better
> > > than using if-else especially for perf.
> > >
> > > diff --git a/mercurial/error.py b/mercurial/error.py
> > > --- a/mercurial/error.py
> > > +++ b/mercurial/error.py
> > > @@ -177,6 +177,9 @@
> > >  class ProgrammingError(Hint, RuntimeError):
> > >      """Raised if a mercurial (core or extension) developer made a
> > mistake"""
> > >
> > > +class WdirUnsupported(Exception):
> > > +    """An exception which is raised when 'wdir()' is not supported"""
> >
> > Although this was suggested by me, I'm not pretty sure if this will work
> > well
> > in most cases. However, the change is pretty small, so seems good in order
> > to
> > move things forward.
> >
>> I have around 8-10 patches after this, where we need to catch this
> exception where ever we want to add support. This is getting a bit ugly due
> to adding try and except everywhere. I wish I can either instead of raising
> this exception return the wdir() parents or add another function which will
> handle this thing to make code cleaner but that will defeat the purpose of
> using the try-except.
> 
> If you like, we can switch to following in revlog.py:
> 
> try:
>    ......
> catch IndexError:
>     if rev == wdirrev:
>         #return wdir parents here

Simply you can't because revlog doesn't know dirstate and teaching revlog
about it is layering violation. You could add a utility function to select
repo or changelog paths, but I doubt if it would go well.


More information about the Mercurial-devel mailing list