[PATCH 1 of 2 stable] WHAT: PyExc_TypeError in parsers.c is lost - use PyExc_ValueError instead
Mads Kiilerich
mads at kiilerich.com
Fri Oct 24 00:37:11 UTC 2014
On 10/23/2014 03:30 AM, Pierre-Yves David wrote:
> I believe that the changelog is catxching the TypeError:
>
> http://selenic.com/hg/file/d583f1cfca96/mercurial/changelog.py#l172
Right, thanks.
I was sure changelog was calling the C extension directly. I assumed I
was right. Wrong assumptions can invalidate even the best reasoning. :-(
> We should fix that code to explicitly check for the C version
> attribute and stick on type error.
Which C version attribute? AFAIK the C extension (and Mercurial in
general) don't have version numbers, only features.
Unfortunately, in this case the C extension got a new feature, and the
absence of that feature can only be detected as TypeError when calling
with a parameter ... which unfortunately is indistinguishable from other
runtime type errors. inspect only works on Python code.
(Ok, not completely indistinguishable. We could check if TypeError .args
== ('headrevs() takes no arguments (1 given)',) ... but that is too ugly.)
AFAICS, the only options are to check on something existing, or to add
something we easily can check.
AFAICS, the only existing thing we can check is asciilower which was
introduced after the filtering headrevs.
Alternatively, we could introduce a version number or rename headrevs or
add a filteringheadrevs method or do something else we can detect.
3.2 is a new major version and there has been significant improvements
to the C extension. It could perhaps make sense to require new
extensions for this version.
/Mads
More information about the Mercurial-devel
mailing list