summaryrefslogtreecommitdiffstats
path: root/t/t4048-diff-combined-binary.sh
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 14:47:53 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 14:47:53 +0000
commitc8bae7493d2f2910b57f13ded012e86bdcfb0532 (patch)
tree24e09d9f84dec336720cf393e156089ca2835791 /t/t4048-diff-combined-binary.sh
parentInitial commit. (diff)
downloadgit-upstream/1%2.39.2.tar.xz
git-upstream/1%2.39.2.zip
Adding upstream version 1:2.39.2.upstream/1%2.39.2upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 't/t4048-diff-combined-binary.sh')
-rwxr-xr-xt/t4048-diff-combined-binary.sh221
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