1
0
Fork 0
mirror of https://github.com/git/git.git synced 2024-06-19 08:59:09 +02:00

Merge branch 'rs/xdiff-merge-overlapping-hunks-for-W-context'

"git diff -W" output needs to extend the context backward to
include the header line of the current function and also forward to
include the body of the entire current function up to the header
line of the next one.  This process may have to merge to adjacent
hunks, but the code forgot to do so in some cases.

* rs/xdiff-merge-overlapping-hunks-for-W-context:
  xdiff: fix merging of hunks with -W context and -u context
This commit is contained in:
Junio C Hamano 2016-09-21 15:15:26 -07:00
commit 4ed38637ec
2 changed files with 26 additions and 1 deletions

View File

@ -66,6 +66,15 @@ test_expect_success 'setup' '
mv file.c.new file.c &&
commit_and_tag long_common_tail file.c &&
git checkout initial &&
cat "$dir/hello.c" "$dir/dummy.c" >file.c &&
commit_and_tag hello_dummy file.c &&
# overlap function context of 1st change and -u context of 2nd change
grep -v "delete me from hello" <"$dir/hello.c" >file.c &&
sed 2p <"$dir/dummy.c" >>file.c &&
commit_and_tag changed_hello_dummy file.c &&
git checkout initial &&
grep -v "delete me from hello" <file.c >file.c.new &&
mv file.c.new file.c &&
@ -179,4 +188,20 @@ test_expect_success ' context does not include other functions' '
test $(grep -c "^[ +-].*Begin" changed_hello_appended.diff) -le 2
'
check_diff changed_hello_dummy 'changed two consecutive functions'
test_expect_success ' context includes begin' '
grep "^ .*Begin of hello" changed_hello_dummy.diff &&
grep "^ .*Begin of dummy" changed_hello_dummy.diff
'
test_expect_success ' context includes end' '
grep "^ .*End of hello" changed_hello_dummy.diff &&
grep "^ .*End of dummy" changed_hello_dummy.diff
'
test_expect_success ' overlapping hunks are merged' '
test $(grep -c "^@@" changed_hello_dummy.diff) -eq 1
'
test_done

View File

@ -239,7 +239,7 @@ int xdl_emit_diff(xdfenv_t *xe, xdchange_t *xscr, xdemitcb_t *ecb,
if (xche->next) {
long l = XDL_MIN(xche->next->i1,
xe->xdf1.nrec - 1);
if (l <= e1 ||
if (l - xecfg->ctxlen <= e1 ||
get_func_line(xe, xecfg, NULL, l, e1) < 0) {
xche = xche->next;
goto post_context_calculation;