diff options
Diffstat (limited to 't/t4048-diff-combined-binary.sh')
-rwxr-xr-x | t/t4048-diff-combined-binary.sh | 221 |
1 files changed, 221 insertions, 0 deletions
diff --git a/t/t4048-diff-combined-binary.sh b/t/t4048-diff-combined-binary.sh new file mode 100755 index 0000000..0260cf6 --- /dev/null +++ b/t/t4048-diff-combined-binary.sh @@ -0,0 +1,221 @@ +#!/bin/sh + +test_description='combined and merge diff handle binary files and textconv' +GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main +export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME + +. ./test-lib.sh + +test_expect_success 'setup binary merge conflict' ' + echo oneQ1 | q_to_nul >binary && + git add binary && + git commit -m one && + echo twoQ2 | q_to_nul >binary && + git commit -a -m two && + two=$(git rev-parse --short HEAD:binary) && + git checkout -b branch-binary HEAD^ && + echo threeQ3 | q_to_nul >binary && + git commit -a -m three && + three=$(git rev-parse --short HEAD:binary) && + test_must_fail git merge main && + echo resolvedQhooray | q_to_nul >binary && + git commit -a -m resolved && + res=$(git rev-parse --short HEAD:binary) +' + +cat >expect <<EOF +resolved + +diff --git a/binary b/binary +index $three..$res 100644 +Binary files a/binary and b/binary differ +resolved + +diff --git a/binary b/binary +index $two..$res 100644 +Binary files a/binary and b/binary differ +EOF +test_expect_success 'diff -m indicates binary-ness' ' + git show --format=%s -m >actual && + test_cmp expect actual +' + +cat >expect <<EOF +resolved + +diff --combined binary +index $three,$two..$res +Binary files differ +EOF +test_expect_success 'diff -c indicates binary-ness' ' + git show --format=%s -c >actual && + test_cmp expect actual +' + +cat >expect <<EOF +resolved + +diff --cc binary +index $three,$two..$res +Binary files differ +EOF +test_expect_success 'diff --cc indicates binary-ness' ' + git show --format=%s --cc >actual && + test_cmp expect actual +' + +test_expect_success 'setup non-binary with binary attribute' ' + git checkout main && + test_commit one text && + test_commit two text && + two=$(git rev-parse --short HEAD:text) && + git checkout -b branch-text HEAD^ && + test_commit three text && + three=$(git rev-parse --short HEAD:text) && + test_must_fail git merge main && + test_commit resolved text && + res=$(git rev-parse --short HEAD:text) && + echo text -diff >.gitattributes +' + +cat >expect <<EOF +resolved + +diff --git a/text b/text +index $three..$res 100644 +Binary files a/text and b/text differ +resolved + +diff --git a/text b/text +index $two..$res 100644 +Binary files a/text and b/text differ +EOF +test_expect_success 'diff -m respects binary attribute' ' + git show --format=%s -m >actual && + test_cmp expect actual +' + +cat >expect <<EOF +resolved + +diff --combined text +index $three,$two..$res +Binary files differ +EOF +test_expect_success 'diff -c respects binary attribute' ' + git show --format=%s -c >actual && + test_cmp expect actual +' + +cat >expect <<EOF +resolved + +diff --cc text +index $three,$two..$res +Binary files differ +EOF +test_expect_success 'diff --cc respects binary attribute' ' + git show --format=%s --cc >actual && + test_cmp expect actual +' + +test_expect_success 'setup textconv attribute' ' + echo "text diff=upcase" >.gitattributes && + git config diff.upcase.textconv "tr a-z A-Z <" +' + +cat >expect <<EOF +resolved + +diff --git a/text b/text +index $three..$res 100644 +--- a/text ++++ b/text +@@ -1 +1 @@ +-THREE ++RESOLVED +resolved + +diff --git a/text b/text +index $two..$res 100644 +--- a/text ++++ b/text +@@ -1 +1 @@ +-TWO ++RESOLVED +EOF +test_expect_success 'diff -m respects textconv attribute' ' + git show --format=%s -m >actual && + test_cmp expect actual +' + +cat >expect <<EOF +resolved + +diff --combined text +index $three,$two..$res +--- a/text ++++ b/text +@@@ -1,1 -1,1 +1,1 @@@ +- THREE + -TWO +++RESOLVED +EOF +test_expect_success 'diff -c respects textconv attribute' ' + git show --format=%s -c >actual && + test_cmp expect actual +' + +cat >expect <<EOF +resolved + +diff --cc text +index $three,$two..$res +--- a/text ++++ b/text +@@@ -1,1 -1,1 +1,1 @@@ +- THREE + -TWO +++RESOLVED +EOF +test_expect_success 'diff --cc respects textconv attribute' ' + git show --format=%s --cc >actual && + test_cmp expect actual +' + +cat >expect <<EOF +diff --combined text +index $three,$two..$res +--- a/text ++++ b/text +@@@ -1,1 -1,1 +1,1 @@@ +- three + -two +++resolved +EOF +test_expect_success 'diff-tree plumbing does not respect textconv' ' + git diff-tree HEAD -c -p >full && + tail -n +2 full >actual && + test_cmp expect actual +' + +cat >expect <<EOF +diff --cc text +index $three,$two..0000000 +--- a/text ++++ b/text +@@@ -1,1 -1,1 +1,5 @@@ +++<<<<<<< HEAD + +THREE +++======= ++ TWO +++>>>>>>> MAIN +EOF +test_expect_success 'diff --cc respects textconv on worktree file' ' + git reset --hard HEAD^ && + test_must_fail git merge main && + git diff >actual && + test_cmp expect actual +' + +test_done |