> On 10 Nov 2016, at 13:09, Yuya Nishihara <y...@tcha.org> wrote: > > On Wed, 09 Nov 2016 11:23:38 -0500, Augie Fackler wrote: >> # HG changeset patch >> # User Augie Fackler <au...@google.com> >> # Date 1476019730 14400 >> # Sun Oct 09 09:28:50 2016 -0400 >> # Node ID 6f2a1367baa59f33fcbc328aea1a637658ce345e >> # Parent c9313a5b8e602b6b3b9a4427e5c2f452a711dd73 >> error: wrap super() init call in try/except >> >> This is how we have to handle object's pickiness while still correctly >> handling multiple inheritance MRO nonsense. >> >> diff --git a/mercurial/error.py b/mercurial/error.py >> --- a/mercurial/error.py >> +++ b/mercurial/error.py >> @@ -23,7 +23,10 @@ class Hint(object): >> """ >> def __init__(self, *args, **kw): >> self.hint = kw.pop('hint', None) >> - super(Hint, self).__init__(*args, **kw) >> + try: >> + super(Hint, self).__init__(*args, **kw) >> + except TypeError: >> + pass > > I don't fully understand the MRO, but I believe what we need is u'hint'.
No, Hint is not a string. It is a direct reference to the class object in which this method is defined (it is looked up as a global each time __init__ is run). super(Hint, self).__init__ will find the *next class* after Hint in the MRO for type(self). Depending on how Hint was used as a base class in *another class*, the next class in the MRO for self may or may not be object. Since object.__init__() doesn't take any arguments (not even *args or **kwargs), if either args or kw is non-empty you'd get a TypeError here. Because you can't know for certain that the next class in the MRO is *not* object, it is prudent to use a try...except TypeError: pass here. > --- a/mercurial/error.py > +++ b/mercurial/error.py > @@ -22,7 +22,7 @@ class Hint(object): > pass remaining arguments to the exception class. > """ > def __init__(self, *args, **kw): > - self.hint = kw.pop('hint', None) > + self.hint = kw.pop(u'hint', None) > super(Hint, self).__init__(*args, **kw) > > class RevlogError(Hint, Exception):
signature.asc
Description: Message signed with OpenPGP using GPGMail
_______________________________________________ Mercurial-devel mailing list Mercurial-devel@mercurial-scm.org https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel