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