#!/bin/sh test_description='combined and merge diff handle binary files and textconv' . ./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 && git checkout -b branch-binary HEAD^ && echo threeQ3 | q_to_nul >binary && git commit -a -m three && test_must_fail git merge master && echo resolvedQhooray | q_to_nul >binary && git commit -a -m resolved ' cat >expect <<'EOF' resolved diff --git a/binary b/binary index 7ea6ded..9563691 100644 Binary files a/binary and b/binary differ resolved diff --git a/binary b/binary index 6197570..9563691 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 7ea6ded,6197570..9563691 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 7ea6ded,6197570..9563691 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 master && test_commit one text && test_commit two text && git checkout -b branch-text HEAD^ && test_commit three text && test_must_fail git merge master && test_commit resolved text && echo text -diff >.gitattributes ' cat >expect <<'EOF' resolved diff --git a/text b/text index 2bdf67a..2ab19ae 100644 Binary files a/text and b/text differ resolved diff --git a/text b/text index f719efd..2ab19ae 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 2bdf67a,f719efd..2ab19ae 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 2bdf67a,f719efd..2ab19ae 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 2bdf67a..2ab19ae 100644 --- a/text +++ b/text @@ -1 +1 @@ -THREE +RESOLVED resolved diff --git a/text b/text index f719efd..2ab19ae 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 2bdf67a,f719efd..2ab19ae --- 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 2bdf67a,f719efd..2ab19ae --- 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 2bdf67a,f719efd..2ab19ae --- 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 2bdf67a,f719efd..0000000 --- a/text +++ b/text @@@ -1,1 -1,1 +1,5 @@@ ++<<<<<<< HEAD +THREE ++======= + TWO ++>>>>>>> MASTER EOF test_expect_success 'diff --cc respects textconv on worktree file' ' git reset --hard HEAD^ && test_must_fail git merge master && git diff >actual && test_cmp expect actual ' test_done