Git fork

Merge branch 'ng/xdiff-truly-minimal'

"git diff --minimal" used to give non-minimal output when its
optimization kicked in, which has been disabled.

* ng/xdiff-truly-minimal:
xdiff: disable cleanup_records heuristic with --minimal

+18 -2
+1
t/meson.build
··· 501 501 't4068-diff-symmetric-merge-base.sh', 502 502 't4069-remerge-diff.sh', 503 503 't4070-diff-pairs.sh', 504 + 't4071-diff-minimal.sh', 504 505 't4100-apply-stat.sh', 505 506 't4101-apply-nonl.sh', 506 507 't4102-apply-rename.sh',
+14
t/t4071-diff-minimal.sh
··· 1 + #!/bin/sh 2 + 3 + test_description='minimal diff algorithm' 4 + 5 + . ./test-lib.sh 6 + 7 + test_expect_success 'minimal diff should not mark changes between changed lines' ' 8 + test_write_lines x x x x >pre && 9 + test_write_lines x x x A B C D x E F G >post && 10 + test_expect_code 1 git diff --no-index --minimal pre post >diff && 11 + test_grep ! ^[+-]x diff 12 + ' 13 + 14 + test_done
+3 -2
xdiff/xprepare.c
··· 368 368 xrecord_t **recs; 369 369 xdlclass_t *rcrec; 370 370 char *dis, *dis1, *dis2; 371 + int need_min = !!(cf->flags & XDF_NEED_MINIMAL); 371 372 372 373 if (!XDL_CALLOC_ARRAY(dis, xdf1->nrec + xdf2->nrec + 2)) 373 374 return -1; ··· 379 380 for (i = xdf1->dstart, recs = &xdf1->recs[xdf1->dstart]; i <= xdf1->dend; i++, recs++) { 380 381 rcrec = cf->rcrecs[(*recs)->ha]; 381 382 nm = rcrec ? rcrec->len2 : 0; 382 - dis1[i] = (nm == 0) ? 0: (nm >= mlim) ? 2: 1; 383 + dis1[i] = (nm == 0) ? 0: (nm >= mlim && !need_min) ? 2: 1; 383 384 } 384 385 385 386 if ((mlim = xdl_bogosqrt(xdf2->nrec)) > XDL_MAX_EQLIMIT) ··· 387 388 for (i = xdf2->dstart, recs = &xdf2->recs[xdf2->dstart]; i <= xdf2->dend; i++, recs++) { 388 389 rcrec = cf->rcrecs[(*recs)->ha]; 389 390 nm = rcrec ? rcrec->len1 : 0; 390 - dis2[i] = (nm == 0) ? 0: (nm >= mlim) ? 2: 1; 391 + dis2[i] = (nm == 0) ? 0: (nm >= mlim && !need_min) ? 2: 1; 391 392 } 392 393 393 394 for (nreff = 0, i = xdf1->dstart, recs = &xdf1->recs[xdf1->dstart];