> On Dec 15, 2016, at 8:02 AM, Yuya Nishihara <y...@tcha.org> wrote:
> 
> On Thu, 15 Dec 2016 09:01:11 +0100, Pierre-Yves David wrote:
>> On 11/17/2016 06:16 PM, Mads Kiilerich wrote:
>>> # HG changeset patch
>>> # User Mads Kiilerich <mad...@unity3d.com>
>>> # Date 1479322051 -3600
>>> #      Wed Nov 16 19:47:31 2016 +0100
>>> # Node ID 851a14d5b80639efe61bd01ad215479c99106b40
>>> # Parent  7f39bccc1c96bffc83f3c6e774da57ecd38982a7
>>> bdiff: early pruning of common suffix before doing expensive computations
>>> 
>>> Similar to the previous change, but trimming trailing lines.
>> 
>> The change itself seems fine and the perf win is very tasty. However, 
>> this changesets breaks tests with --pure.
>> 
>> I'm tempted to drop it unless we can provide a test update to fold into 
>> this.
> 
> […]

I’d be fine to just #if pure the variations between pure and C, given the 
immense win this provides.

> 
>>> --- a/mercurial/bdiff_module.c
>>> +++ b/mercurial/bdiff_module.c
>>> @@ -66,7 +66,7 @@ static PyObject *bdiff(PyObject *self, P
>>>     struct bdiff_line *al, *bl;
>>>     struct bdiff_hunk l, *h;
>>>     int an, bn, count;
>>> -   Py_ssize_t len = 0, la, lb, li = 0, lcommon = 0, lmax;
>>> +   Py_ssize_t len = 0, la, lb, li = 0, lcommon = 0, lcommonend = 0, lmax;
>>>     PyThreadState *_save;
>>> 
>>>     l.next = NULL;
>>> @@ -88,9 +88,16 @@ static PyObject *bdiff(PyObject *self, P
>>>             if (*ia == '\n')
>>>                     lcommon = li + 1;
>>>     /* we can almost add: if (li == lmax) lcommon = li; */
>>> +   lmax -= lcommon;
>>> +   for (li = 0, ia = sa + la - 1, ib = sb + lb - 1;
>>> +        li <= lmax && *ia == *ib;
>>> +        ++li, --ia, --ib)
>>> +           if (*ia == '\n')
>>> +                   lcommonend = li;
> 
> And there appears to be an off-by-one error. 'li' is a zero-based index and
> 'lmax' is a length.
> 
> +1 for dropping this for now.

Given the off-by-one, yeah, drop it. I’m a little surprised the bdiff automated 
stress tester didn’t trip over that.

Sigh.
_______________________________________________
Mercurial-devel mailing list
Mercurial-devel@mercurial-scm.org
https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel

Reply via email to