| #!/bin/sh |
| |
| test_description='diff hunk fusing' |
| |
| TEST_PASSES_SANITIZE_LEAK=true |
| . ./test-lib.sh |
| |
| f() { |
| echo $1 |
| i=1 |
| while test $i -le $2 |
| do |
| echo $i |
| i=$(expr $i + 1) |
| done |
| echo $3 |
| } |
| |
| t() { |
| use_config= |
| git config --unset diff.interHunkContext |
| |
| case $# in |
| 4) hunks=$4; cmd="diff -U$3";; |
| 5) hunks=$5; cmd="diff -U$3 --inter-hunk-context=$4";; |
| 6) hunks=$5; cmd="diff -U$3"; git config diff.interHunkContext $4; use_config="(diff.interHunkContext=$4) ";; |
| esac |
| label="$use_config$cmd, $1 common $2" |
| file=f$1 |
| expected=expected.$file.$3.$hunks |
| |
| if ! test -f $file |
| then |
| f A $1 B >$file |
| git add $file |
| git commit -q -m. $file |
| f X $1 Y >$file |
| fi |
| |
| test_expect_success "$label: count hunks ($hunks)" " |
| test $(git $cmd $file | grep '^@@ ' | wc -l) = $hunks |
| " |
| |
| test -f $expected && |
| test_expect_success "$label: check output" " |
| git $cmd $file | grep -v '^index ' >actual && |
| test_cmp $expected actual |
| " |
| } |
| |
| cat <<EOF >expected.f1.0.1 || exit 1 |
| diff --git a/f1 b/f1 |
| --- a/f1 |
| +++ b/f1 |
| @@ -1,3 +1,3 @@ |
| -A |
| +X |
| 1 |
| -B |
| +Y |
| EOF |
| |
| cat <<EOF >expected.f1.0.2 || exit 1 |
| diff --git a/f1 b/f1 |
| --- a/f1 |
| +++ b/f1 |
| @@ -1 +1 @@ |
| -A |
| +X |
| @@ -3 +3 @@ A |
| -B |
| +Y |
| EOF |
| |
| # common lines ctx intrctx hunks |
| t 1 line 0 2 |
| t 1 line 0 0 2 |
| t 1 line 0 1 1 |
| t 1 line 0 2 1 |
| t 1 line 1 1 |
| |
| t 2 lines 0 2 |
| t 2 lines 0 0 2 |
| t 2 lines 0 1 2 |
| t 2 lines 0 2 1 |
| t 2 lines 1 1 |
| |
| t 3 lines 1 2 |
| t 3 lines 1 0 2 |
| t 3 lines 1 1 1 |
| t 3 lines 1 2 1 |
| |
| t 9 lines 3 2 |
| t 9 lines 3 2 2 |
| t 9 lines 3 3 1 |
| |
| # use diff.interHunkContext? |
| t 1 line 0 0 2 config |
| t 1 line 0 1 1 config |
| t 1 line 0 2 1 config |
| t 9 lines 3 3 1 config |
| t 2 lines 0 0 2 config |
| t 2 lines 0 1 2 config |
| t 2 lines 0 2 1 config |
| t 3 lines 1 0 2 config |
| t 3 lines 1 1 1 config |
| t 3 lines 1 2 1 config |
| t 9 lines 3 2 2 config |
| t 9 lines 3 3 1 config |
| |
| test_expect_success 'diff.interHunkContext invalid' ' |
| git config diff.interHunkContext asdf && |
| test_must_fail git diff && |
| git config diff.interHunkContext -1 && |
| test_must_fail git diff |
| ' |
| |
| test_done |