Re: [PATCH] xdiff: improve trimming preprocessing
On Tue, Mar 6, 2018 at 6:53 AM, Jun Wu <quark@fb.com> wrote:
> xdiff-interface trims common suffix if ctxlen is 0. Teach it to also
> trim common prefix, and trim less lines if ctxlen > 0. So it can benefit
> the default diff command, as seen by profiling: [...]
A few comments (below) based upon a quick scan of the patch...
Show 10 quoted lines
> Signed-off-by: Jun Wu <quark@fb.com>
> ---
> diff --git a/t/t4066-diff-trimming.sh b/t/t4066-diff-trimming.sh
> @@ -0,0 +1,49 @@
> +test_expect_success 'setup' '
> + printf "x\n%.0s" {1..1000} >a &&
> + printf "x\n%.0s" {1..1001} >b &&
> + cat >c <<EOF1 && cat >d <<EOF2 &&\
> + printf "x%.0s" {1..934} >>c &&\
> + printf "x%.0s" {1..934} >>d # pad common suffix to 1024 bytesThe expression {x..y} is not portable to non-POSIX shells.Show 6 quoted lines
> +test_expect_success 'git diff -U0 shifts hunk towards the end' '
> + test_expect_code 1 git diff -U0 --no-index a b |\
> + fgrep "@@ -1000,0 +1001 @@" &&
> + test_expect_code 1 git diff -U0 --no-index b a |\
> + fgrep "@@ -1001 +1000,0 @@"
> +'
Style: Mix of tabs and spaces for indentation. Please indent only with
tabs throughout the patch.
Show 9 quoted lines
> diff --git a/xdiff-interface.c b/xdiff-interface.c
> @@ -101,42 +101,64 @@ static int xdiff_outf(void *priv_, mmbuffer_t *mb, int nbuf)
> +static void trim_common(mmfile_t *a, mmfile_t *b, long reserved,
> + xdemitconf_t *xecfg)
> {
> + /* prefix - need line count for xecfg->ptrimmed */
> + for (i = 0; ++i < smaller && *ap == *bp;) {
> + lines += (*ap == '\n');
> + ap++, bp++;Is there a good reason for not placing 'ap++, bp++' directly in the 'for'?
for (i = 0; ++i < smaller && *ap == *bp; ap++, bp++)