From: Phillip Wood Date: Tue, 20 Jan 2026 15:02:28 GMT Subject: Re: [PATCH 03/10] xdiff: don't waste time guessing the number of lines Message-ID: <208da094-8a5d-4f16-b42b-5d5204576b5f@gmail.com> In-Reply-To: <53e4840c1653772379dc8d5c883b34717b81ac43.1767379944.git.gitgitgadget@gmail.com> On 02/01/2026 18:52, Ezekiel Newren via GitGitGadget wrote: > From: Ezekiel Newren > > All lines must be read anyway, so classify them after they're read in. > Also move the memset() into xdl_init_classifier(). So instead of looping over the input lines one and a bit times (the bit being from xdl_guess_lines) we now loop over them twice as we split them first and then classify them in a separate loop. It does save some work not to call xdl_guess_lines but it is unclear if that offsets classifying them in a separate loop. > + for (size_t i = 0; i < xe->xdf1.nrec; i++) { > + xrecord_t *rec = &xe->xdf1.recs[i]; > + xdl_classify_record(1, &cf, rec); We seem to have lost the error handling if xdl_classify_record() fails. Thanks Phillip > + } > + > + for (size_t i = 0; i < xe->xdf2.nrec; i++) { > + xrecord_t *rec = &xe->xdf2.recs[i]; > + xdl_classify_record(2, &cf, rec); > } > > if ((XDF_DIFF_ALG(xpp->flags) != XDF_PATIENCE_DIFF) && > diff --git a/xdiff/xutils.c b/xdiff/xutils.c > index 77ee1ad9c8..b3d51197c1 100644 > --- a/xdiff/xutils.c > +++ b/xdiff/xutils.c > @@ -118,26 +118,6 @@ void *xdl_cha_alloc(chastore_t *cha) { > return data; > } > > -long xdl_guess_lines(mmfile_t *mf, long sample) { > - long nl = 0, size, tsize = 0; > - char const *data, *cur, *top; > - > - if ((cur = data = xdl_mmfile_first(mf, &size))) { > - for (top = data + size; nl < sample && cur < top; ) { > - nl++; > - if (!(cur = memchr(cur, '\n', top - cur))) > - cur = top; > - else > - cur++; > - } > - tsize += (long) (cur - data); > - } > - > - if (nl && tsize) > - nl = xdl_mmfile_size(mf) / (tsize / nl); > - > - return nl + 1; > -} > > int xdl_blankline(const char *line, long size, long flags) > { > diff --git a/xdiff/xutils.h b/xdiff/xutils.h > index 615b4a9d35..d800840dd0 100644 > --- a/xdiff/xutils.h > +++ b/xdiff/xutils.h > @@ -31,7 +31,6 @@ int xdl_emit_diffrec(char const *rec, long size, char const *pre, long psize, > int xdl_cha_init(chastore_t *cha, long isize, long icount); > void xdl_cha_free(chastore_t *cha); > void *xdl_cha_alloc(chastore_t *cha); > -long xdl_guess_lines(mmfile_t *mf, long sample); > int xdl_blankline(const char *line, long size, long flags); > int xdl_recmatch(const char *l1, long s1, const char *l2, long s2, long flags); > uint64_t xdl_hash_record_verbatim(uint8_t const **data, uint8_t const *top);