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.

[...]

> > --- 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.
_______________________________________________
Mercurial-devel mailing list
Mercurial-devel@mercurial-scm.org
https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel

Reply via email to