xdiff: don't trim common tail with -W
The function trim_common_tail() exits early if context lines are requested. If -U0 and -W are specified together then it can still trim context lines that might belong to a changed function. As a result that function is shown incompletely. Fix that by calling trim_common_tail() only if no function context or fixed context is requested. The parameter ctx is no longer needed now; remove it. While at it fix an outdated comment as well. Signed-off-by: Rene Scharfe <l.s.r@web.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
9e6a4cfc38
commit
e0876bca4d
@ -145,7 +145,7 @@ test_expect_success ' context includes begin' '
|
|||||||
grep "^ .*Begin of first part" long_common_tail.diff
|
grep "^ .*Begin of first part" long_common_tail.diff
|
||||||
'
|
'
|
||||||
|
|
||||||
test_expect_failure ' context includes end' '
|
test_expect_success ' context includes end' '
|
||||||
grep "^ .*End of second part" long_common_tail.diff
|
grep "^ .*End of second part" long_common_tail.diff
|
||||||
'
|
'
|
||||||
|
|
||||||
|
@ -100,9 +100,9 @@ static int xdiff_outf(void *priv_, mmbuffer_t *mb, int nbuf)
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* Trim down common substring at the end of the buffers,
|
* Trim down common substring at the end of the buffers,
|
||||||
* but leave at least ctx lines at the end.
|
* but end on a complete line.
|
||||||
*/
|
*/
|
||||||
static void trim_common_tail(mmfile_t *a, mmfile_t *b, long ctx)
|
static void trim_common_tail(mmfile_t *a, mmfile_t *b)
|
||||||
{
|
{
|
||||||
const int blk = 1024;
|
const int blk = 1024;
|
||||||
long trimmed = 0, recovered = 0;
|
long trimmed = 0, recovered = 0;
|
||||||
@ -110,9 +110,6 @@ static void trim_common_tail(mmfile_t *a, mmfile_t *b, long ctx)
|
|||||||
char *bp = b->ptr + b->size;
|
char *bp = b->ptr + b->size;
|
||||||
long smaller = (a->size < b->size) ? a->size : b->size;
|
long smaller = (a->size < b->size) ? a->size : b->size;
|
||||||
|
|
||||||
if (ctx)
|
|
||||||
return;
|
|
||||||
|
|
||||||
while (blk + trimmed <= smaller && !memcmp(ap - blk, bp - blk, blk)) {
|
while (blk + trimmed <= smaller && !memcmp(ap - blk, bp - blk, blk)) {
|
||||||
trimmed += blk;
|
trimmed += blk;
|
||||||
ap -= blk;
|
ap -= blk;
|
||||||
@ -134,7 +131,8 @@ int xdi_diff(mmfile_t *mf1, mmfile_t *mf2, xpparam_t const *xpp, xdemitconf_t co
|
|||||||
if (mf1->size > MAX_XDIFF_SIZE || mf2->size > MAX_XDIFF_SIZE)
|
if (mf1->size > MAX_XDIFF_SIZE || mf2->size > MAX_XDIFF_SIZE)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
trim_common_tail(&a, &b, xecfg->ctxlen);
|
if (!xecfg->ctxlen && !(xecfg->flags & XDL_EMIT_FUNCCONTEXT))
|
||||||
|
trim_common_tail(&a, &b);
|
||||||
|
|
||||||
return xdl_diff(&a, &b, xpp, xecfg, xecb);
|
return xdl_diff(&a, &b, xpp, xecfg, xecb);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user