Merge branch 'bc/hash-independent-tests-part-6'
Test updates to prepare for SHA-2 transition continues. * bc/hash-independent-tests-part-6: t4048: abstract away SHA-1-specific constants t4045: make hash-size independent t4044: update test to work with SHA-256 t4039: abstract away SHA-1-specific constants t4038: abstract away SHA-1 specific constants t4034: abstract away SHA-1-specific constants t4027: make hash-size independent t4015: abstract away SHA-1-specific constants t4011: abstract away SHA-1-specific constants t4010: abstract away SHA-1-specific constants t3429: remove SHA1 annotation t1305: avoid comparing extensions rev-parse: add a --show-object-format option t/oid-info: add empty tree and empty blob values t/oid-info: allow looking up hash algorithm namemaint
						commit
						28014c1084
					
				|  | @ -274,6 +274,13 @@ print a message to stderr and exit with nonzero status. | ||||||
| 	Show the path to the shared index file in split index mode, or | 	Show the path to the shared index file in split index mode, or | ||||||
| 	empty if not in split-index mode. | 	empty if not in split-index mode. | ||||||
|  |  | ||||||
|  | --show-object-format[=(storage|input|output)]:: | ||||||
|  | 	Show the object format (hash algorithm) used for the repository | ||||||
|  | 	for storage inside the `.git` directory, input, or output. For | ||||||
|  | 	input, multiple algorithms may be printed, space-separated. | ||||||
|  | 	If not specified, the default is "storage". | ||||||
|  |  | ||||||
|  |  | ||||||
| Other Options | Other Options | ||||||
| ~~~~~~~~~~~~~ | ~~~~~~~~~~~~~ | ||||||
|  |  | ||||||
|  |  | ||||||
|  | @ -919,6 +919,17 @@ int cmd_rev_parse(int argc, const char **argv, const char *prefix) | ||||||
| 				show_datestring("--min-age=", arg); | 				show_datestring("--min-age=", arg); | ||||||
| 				continue; | 				continue; | ||||||
| 			} | 			} | ||||||
|  | 			if (opt_with_value(arg, "--show-object-format", &arg)) { | ||||||
|  | 				const char *val = arg ? arg : "storage"; | ||||||
|  |  | ||||||
|  | 				if (strcmp(val, "storage") && | ||||||
|  | 				    strcmp(val, "input") && | ||||||
|  | 				    strcmp(val, "output")) | ||||||
|  | 					die("unknown mode for --show-object-format: %s", | ||||||
|  | 					    arg); | ||||||
|  | 				puts(the_hash_algo->name); | ||||||
|  | 				continue; | ||||||
|  | 			} | ||||||
| 			if (show_flag(arg) && verify) | 			if (show_flag(arg) && verify) | ||||||
| 				die_no_single_rev(quiet); | 				die_no_single_rev(quiet); | ||||||
| 			continue; | 			continue; | ||||||
|  |  | ||||||
|  | @ -6,3 +6,12 @@ hexsz sha256:64 | ||||||
|  |  | ||||||
| zero sha1:0000000000000000000000000000000000000000 | zero sha1:0000000000000000000000000000000000000000 | ||||||
| zero sha256:0000000000000000000000000000000000000000000000000000000000000000 | zero sha256:0000000000000000000000000000000000000000000000000000000000000000 | ||||||
|  |  | ||||||
|  | algo sha1:sha1 | ||||||
|  | algo sha256:sha256 | ||||||
|  |  | ||||||
|  | empty_blob sha1:e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 | ||||||
|  | empty_blob sha256:473a0f4c3be8a93681a267e3b1e9a7dcda1185436fe141f7749120a303721813 | ||||||
|  |  | ||||||
|  | empty_tree sha1:4b825dc642cb6eb9a060e54bf8d69288fbee4904 | ||||||
|  | empty_tree sha256:6ef19b41225c5369f1c104d45d8d85efa9b057b53b14b4b9b939dd74decc5321 | ||||||
|  |  | ||||||
|  | @ -63,7 +63,7 @@ test_expect_success 'listing includes option and expansion' ' | ||||||
| 	test.one=1 | 	test.one=1 | ||||||
| 	EOF | 	EOF | ||||||
| 	git config --list >actual.full && | 	git config --list >actual.full && | ||||||
| 	grep -v ^core actual.full >actual && | 	grep -v -e ^core -e ^extensions actual.full >actual && | ||||||
| 	test_cmp expect actual | 	test_cmp expect actual | ||||||
| ' | ' | ||||||
|  |  | ||||||
|  |  | ||||||
|  | @ -59,6 +59,7 @@ test_rev_parse () { | ||||||
| ROOT=$(pwd) | ROOT=$(pwd) | ||||||
|  |  | ||||||
| test_expect_success 'setup' ' | test_expect_success 'setup' ' | ||||||
|  | 	test_oid_init && | ||||||
| 	mkdir -p sub/dir work && | 	mkdir -p sub/dir work && | ||||||
| 	cp -R .git repo.git | 	cp -R .git repo.git | ||||||
| ' | ' | ||||||
|  | @ -131,6 +132,20 @@ test_expect_success 'rev-parse --is-shallow-repository in non-shallow repo' ' | ||||||
| 	test_cmp expect actual | 	test_cmp expect actual | ||||||
| ' | ' | ||||||
|  |  | ||||||
|  | test_expect_success 'rev-parse --show-object-format in repo' ' | ||||||
|  | 	echo "$(test_oid algo)" >expect && | ||||||
|  | 	git rev-parse --show-object-format >actual && | ||||||
|  | 	test_cmp expect actual && | ||||||
|  | 	git rev-parse --show-object-format=storage >actual && | ||||||
|  | 	test_cmp expect actual && | ||||||
|  | 	git rev-parse --show-object-format=input >actual && | ||||||
|  | 	test_cmp expect actual && | ||||||
|  | 	git rev-parse --show-object-format=output >actual && | ||||||
|  | 	test_cmp expect actual && | ||||||
|  | 	test_must_fail git rev-parse --show-object-format=squeamish-ossifrage 2>err && | ||||||
|  | 	grep "unknown mode for --show-object-format: squeamish-ossifrage" err | ||||||
|  | ' | ||||||
|  |  | ||||||
| test_expect_success 'showing the superproject correctly' ' | test_expect_success 'showing the superproject correctly' ' | ||||||
| 	git rev-parse --show-superproject-working-tree >out && | 	git rev-parse --show-superproject-working-tree >out && | ||||||
| 	test_must_be_empty out && | 	test_must_be_empty out && | ||||||
|  |  | ||||||
|  | @ -17,7 +17,7 @@ test_expect_success 'rebase exec modifies rebase-todo' ' | ||||||
| 	test -e F | 	test -e F | ||||||
| ' | ' | ||||||
|  |  | ||||||
| test_expect_success SHA1 'loose object cache vs re-reading todo list' ' | test_expect_success 'loose object cache vs re-reading todo list' ' | ||||||
| 	GIT_REBASE_TODO=.git/rebase-merge/git-rebase-todo && | 	GIT_REBASE_TODO=.git/rebase-merge/git-rebase-todo && | ||||||
| 	export GIT_REBASE_TODO && | 	export GIT_REBASE_TODO && | ||||||
| 	write_script append-todo.sh <<-\EOS && | 	write_script append-todo.sh <<-\EOS && | ||||||
|  |  | ||||||
|  | @ -17,11 +17,15 @@ test_expect_success \ | ||||||
|     'echo frotz >file0 && |     'echo frotz >file0 && | ||||||
|      mkdir path1 && |      mkdir path1 && | ||||||
|      echo rezrov >path1/file1 && |      echo rezrov >path1/file1 && | ||||||
|  |      before0=$(git hash-object file0) && | ||||||
|  |      before1=$(git hash-object path1/file1) && | ||||||
|      git update-index --add file0 path1/file1 && |      git update-index --add file0 path1/file1 && | ||||||
|      tree=$(git write-tree) && |      tree=$(git write-tree) && | ||||||
|      echo "$tree" && |      echo "$tree" && | ||||||
|      echo nitfol >file0 && |      echo nitfol >file0 && | ||||||
|      echo yomin >path1/file1 && |      echo yomin >path1/file1 && | ||||||
|  |      after0=$(git hash-object file0) && | ||||||
|  |      after1=$(git hash-object path1/file1) && | ||||||
|      git update-index file0 path1/file1' |      git update-index file0 path1/file1' | ||||||
|  |  | ||||||
| cat >expected <<\EOF | cat >expected <<\EOF | ||||||
|  | @ -31,32 +35,32 @@ test_expect_success \ | ||||||
|     'git diff-index --cached $tree -- path >current && |     'git diff-index --cached $tree -- path >current && | ||||||
|      compare_diff_raw current expected' |      compare_diff_raw current expected' | ||||||
|  |  | ||||||
| cat >expected <<\EOF | cat >expected <<EOF | ||||||
| :100644 100644 766498d93a4b06057a8e49d23f4068f1170ff38f 0a41e115ab61be0328a19b29f18cdcb49338d516 M	path1/file1 | :100644 100644 $before1 $after1 M	path1/file1 | ||||||
| EOF | EOF | ||||||
| test_expect_success \ | test_expect_success \ | ||||||
|     'limit to path1 should show path1/file1' \ |     'limit to path1 should show path1/file1' \ | ||||||
|     'git diff-index --cached $tree -- path1 >current && |     'git diff-index --cached $tree -- path1 >current && | ||||||
|      compare_diff_raw current expected' |      compare_diff_raw current expected' | ||||||
|  |  | ||||||
| cat >expected <<\EOF | cat >expected <<EOF | ||||||
| :100644 100644 766498d93a4b06057a8e49d23f4068f1170ff38f 0a41e115ab61be0328a19b29f18cdcb49338d516 M	path1/file1 | :100644 100644 $before1 $after1 M	path1/file1 | ||||||
| EOF | EOF | ||||||
| test_expect_success \ | test_expect_success \ | ||||||
|     'limit to path1/ should show path1/file1' \ |     'limit to path1/ should show path1/file1' \ | ||||||
|     'git diff-index --cached $tree -- path1/ >current && |     'git diff-index --cached $tree -- path1/ >current && | ||||||
|      compare_diff_raw current expected' |      compare_diff_raw current expected' | ||||||
|  |  | ||||||
| cat >expected <<\EOF | cat >expected <<EOF | ||||||
| :100644 100644 766498d93a4b06057a8e49d23f4068f1170ff38f 0a41e115ab61be0328a19b29f18cdcb49338d516 M	path1/file1 | :100644 100644 $before1 $after1 M	path1/file1 | ||||||
| EOF | EOF | ||||||
| test_expect_success \ | test_expect_success \ | ||||||
|     '"*file1" should show path1/file1' \ |     '"*file1" should show path1/file1' \ | ||||||
|     'git diff-index --cached $tree -- "*file1" >current && |     'git diff-index --cached $tree -- "*file1" >current && | ||||||
|      compare_diff_raw current expected' |      compare_diff_raw current expected' | ||||||
|  |  | ||||||
| cat >expected <<\EOF | cat >expected <<EOF | ||||||
| :100644 100644 8e4020bb5a8d8c873b25de15933e75cc0fc275df dca6b92303befc93086aa025d90a5facd7eb2812 M	file0 | :100644 100644 $before0 $after0 M	file0 | ||||||
| EOF | EOF | ||||||
| test_expect_success \ | test_expect_success \ | ||||||
|     'limit to file0 should show file0' \ |     'limit to file0 should show file0' \ | ||||||
|  |  | ||||||
|  | @ -9,11 +9,24 @@ test_description='Test diff of symlinks. | ||||||
| . ./test-lib.sh | . ./test-lib.sh | ||||||
| . "$TEST_DIRECTORY"/diff-lib.sh | . "$TEST_DIRECTORY"/diff-lib.sh | ||||||
|  |  | ||||||
|  | # Print the short OID of a symlink with the given name. | ||||||
|  | symlink_oid () { | ||||||
|  | 	local oid=$(printf "%s" "$1" | git hash-object --stdin) && | ||||||
|  | 	git rev-parse --short "$oid" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | # Print the short OID of the given file. | ||||||
|  | short_oid () { | ||||||
|  | 	local oid=$(git hash-object "$1") && | ||||||
|  | 	git rev-parse --short "$oid" | ||||||
|  | } | ||||||
|  |  | ||||||
| test_expect_success 'diff new symlink and file' ' | test_expect_success 'diff new symlink and file' ' | ||||||
| 	cat >expected <<-\EOF && | 	symlink=$(symlink_oid xyzzy) && | ||||||
|  | 	cat >expected <<-EOF && | ||||||
| 	diff --git a/frotz b/frotz | 	diff --git a/frotz b/frotz | ||||||
| 	new file mode 120000 | 	new file mode 120000 | ||||||
| 	index 0000000..7c465af | 	index 0000000..$symlink | ||||||
| 	--- /dev/null | 	--- /dev/null | ||||||
| 	+++ b/frotz | 	+++ b/frotz | ||||||
| 	@@ -0,0 +1 @@ | 	@@ -0,0 +1 @@ | ||||||
|  | @ -21,7 +34,7 @@ test_expect_success 'diff new symlink and file' ' | ||||||
| 	\ No newline at end of file | 	\ No newline at end of file | ||||||
| 	diff --git a/nitfol b/nitfol | 	diff --git a/nitfol b/nitfol | ||||||
| 	new file mode 100644 | 	new file mode 100644 | ||||||
| 	index 0000000..7c465af | 	index 0000000..$symlink | ||||||
| 	--- /dev/null | 	--- /dev/null | ||||||
| 	+++ b/nitfol | 	+++ b/nitfol | ||||||
| 	@@ -0,0 +1 @@ | 	@@ -0,0 +1 @@ | ||||||
|  | @ -46,10 +59,10 @@ test_expect_success 'diff unchanged symlink and file'  ' | ||||||
| ' | ' | ||||||
|  |  | ||||||
| test_expect_success 'diff removed symlink and file' ' | test_expect_success 'diff removed symlink and file' ' | ||||||
| 	cat >expected <<-\EOF && | 	cat >expected <<-EOF && | ||||||
| 	diff --git a/frotz b/frotz | 	diff --git a/frotz b/frotz | ||||||
| 	deleted file mode 120000 | 	deleted file mode 120000 | ||||||
| 	index 7c465af..0000000 | 	index $symlink..0000000 | ||||||
| 	--- a/frotz | 	--- a/frotz | ||||||
| 	+++ /dev/null | 	+++ /dev/null | ||||||
| 	@@ -1 +0,0 @@ | 	@@ -1 +0,0 @@ | ||||||
|  | @ -57,7 +70,7 @@ test_expect_success 'diff removed symlink and file' ' | ||||||
| 	\ No newline at end of file | 	\ No newline at end of file | ||||||
| 	diff --git a/nitfol b/nitfol | 	diff --git a/nitfol b/nitfol | ||||||
| 	deleted file mode 100644 | 	deleted file mode 100644 | ||||||
| 	index 7c465af..0000000 | 	index $symlink..0000000 | ||||||
| 	--- a/nitfol | 	--- a/nitfol | ||||||
| 	+++ /dev/null | 	+++ /dev/null | ||||||
| 	@@ -1 +0,0 @@ | 	@@ -1 +0,0 @@ | ||||||
|  | @ -90,9 +103,10 @@ test_expect_success 'diff identical, but newly created symlink and file' ' | ||||||
| ' | ' | ||||||
|  |  | ||||||
| test_expect_success 'diff different symlink and file' ' | test_expect_success 'diff different symlink and file' ' | ||||||
| 	cat >expected <<-\EOF && | 	new=$(symlink_oid yxyyz) && | ||||||
|  | 	cat >expected <<-EOF && | ||||||
| 	diff --git a/frotz b/frotz | 	diff --git a/frotz b/frotz | ||||||
| 	index 7c465af..df1db54 120000 | 	index $symlink..$new 120000 | ||||||
| 	--- a/frotz | 	--- a/frotz | ||||||
| 	+++ b/frotz | 	+++ b/frotz | ||||||
| 	@@ -1 +1 @@ | 	@@ -1 +1 @@ | ||||||
|  | @ -101,7 +115,7 @@ test_expect_success 'diff different symlink and file' ' | ||||||
| 	+yxyyz | 	+yxyyz | ||||||
| 	\ No newline at end of file | 	\ No newline at end of file | ||||||
| 	diff --git a/nitfol b/nitfol | 	diff --git a/nitfol b/nitfol | ||||||
| 	index 7c465af..df1db54 100644 | 	index $symlink..$new 100644 | ||||||
| 	--- a/nitfol | 	--- a/nitfol | ||||||
| 	+++ b/nitfol | 	+++ b/nitfol | ||||||
| 	@@ -1 +1 @@ | 	@@ -1 +1 @@ | ||||||
|  | @ -137,14 +151,16 @@ test_expect_success SYMLINKS 'setup symlinks with attributes' ' | ||||||
| ' | ' | ||||||
|  |  | ||||||
| test_expect_success SYMLINKS 'symlinks do not respect userdiff config by path' ' | test_expect_success SYMLINKS 'symlinks do not respect userdiff config by path' ' | ||||||
| 	cat >expect <<-\EOF && | 	file=$(short_oid file.bin) && | ||||||
|  | 	link=$(symlink_oid file.bin) && | ||||||
|  | 	cat >expect <<-EOF && | ||||||
| 	diff --git a/file.bin b/file.bin | 	diff --git a/file.bin b/file.bin | ||||||
| 	new file mode 100644 | 	new file mode 100644 | ||||||
| 	index 0000000..d95f3ad | 	index 0000000..$file | ||||||
| 	Binary files /dev/null and b/file.bin differ | 	Binary files /dev/null and b/file.bin differ | ||||||
| 	diff --git a/link.bin b/link.bin | 	diff --git a/link.bin b/link.bin | ||||||
| 	new file mode 120000 | 	new file mode 120000 | ||||||
| 	index 0000000..dce41ec | 	index 0000000..$link | ||||||
| 	--- /dev/null | 	--- /dev/null | ||||||
| 	+++ b/link.bin | 	+++ b/link.bin | ||||||
| 	@@ -0,0 +1 @@ | 	@@ -0,0 +1 @@ | ||||||
|  |  | ||||||
|  | @ -16,6 +16,7 @@ test_expect_success "Ray Lehtiniemi's example" ' | ||||||
| 	} while (0); | 	} while (0); | ||||||
| 	EOF | 	EOF | ||||||
| 	git update-index --add x && | 	git update-index --add x && | ||||||
|  | 	before=$(git rev-parse --short $(git hash-object x)) && | ||||||
|  |  | ||||||
| 	cat <<-\EOF >x && | 	cat <<-\EOF >x && | ||||||
| 	do | 	do | ||||||
|  | @ -24,10 +25,11 @@ test_expect_success "Ray Lehtiniemi's example" ' | ||||||
| 	} | 	} | ||||||
| 	while (0); | 	while (0); | ||||||
| 	EOF | 	EOF | ||||||
|  | 	after=$(git rev-parse --short $(git hash-object x)) && | ||||||
|  |  | ||||||
| 	cat <<-\EOF >expect && | 	cat <<-EOF >expect && | ||||||
| 	diff --git a/x b/x | 	diff --git a/x b/x | ||||||
| 	index adf3937..6edc172 100644 | 	index $before..$after 100644 | ||||||
| 	--- a/x | 	--- a/x | ||||||
| 	+++ b/x | 	+++ b/x | ||||||
| 	@@ -1,3 +1,5 @@ | 	@@ -1,3 +1,5 @@ | ||||||
|  | @ -61,6 +63,7 @@ test_expect_success 'another test, without options' ' | ||||||
| 	EOF | 	EOF | ||||||
|  |  | ||||||
| 	git update-index x && | 	git update-index x && | ||||||
|  | 	before=$(git rev-parse --short $(git hash-object x)) && | ||||||
|  |  | ||||||
| 	tr "_" " " <<-\EOF >x && | 	tr "_" " " <<-\EOF >x && | ||||||
| 	_	whitespace at beginning | 	_	whitespace at beginning | ||||||
|  | @ -70,10 +73,11 @@ test_expect_success 'another test, without options' ' | ||||||
| 	unchanged line | 	unchanged line | ||||||
| 	CR at end | 	CR at end | ||||||
| 	EOF | 	EOF | ||||||
|  | 	after=$(git rev-parse --short $(git hash-object x)) && | ||||||
|  |  | ||||||
| 	tr "Q_" "\015 " <<-\EOF >expect && | 	tr "Q_" "\015 " <<-EOF >expect && | ||||||
| 	diff --git a/x b/x | 	diff --git a/x b/x | ||||||
| 	index d99af23..22d9f73 100644 | 	index $before..$after 100644 | ||||||
| 	--- a/x | 	--- a/x | ||||||
| 	+++ b/x | 	+++ b/x | ||||||
| 	@@ -1,6 +1,6 @@ | 	@@ -1,6 +1,6 @@ | ||||||
|  | @ -108,9 +112,9 @@ test_expect_success 'another test, without options' ' | ||||||
| 	git diff -w --ignore-cr-at-eol >out && | 	git diff -w --ignore-cr-at-eol >out && | ||||||
| 	test_must_be_empty out && | 	test_must_be_empty out && | ||||||
|  |  | ||||||
| 	tr "Q_" "\015 " <<-\EOF >expect && | 	tr "Q_" "\015 " <<-EOF >expect && | ||||||
| 	diff --git a/x b/x | 	diff --git a/x b/x | ||||||
| 	index d99af23..22d9f73 100644 | 	index $before..$after 100644 | ||||||
| 	--- a/x | 	--- a/x | ||||||
| 	+++ b/x | 	+++ b/x | ||||||
| 	@@ -1,6 +1,6 @@ | 	@@ -1,6 +1,6 @@ | ||||||
|  | @ -132,9 +136,9 @@ test_expect_success 'another test, without options' ' | ||||||
| 	git diff -b --ignore-cr-at-eol >out && | 	git diff -b --ignore-cr-at-eol >out && | ||||||
| 	test_cmp expect out && | 	test_cmp expect out && | ||||||
|  |  | ||||||
| 	tr "Q_" "\015 " <<-\EOF >expect && | 	tr "Q_" "\015 " <<-EOF >expect && | ||||||
| 	diff --git a/x b/x | 	diff --git a/x b/x | ||||||
| 	index d99af23..22d9f73 100644 | 	index $before..$after 100644 | ||||||
| 	--- a/x | 	--- a/x | ||||||
| 	+++ b/x | 	+++ b/x | ||||||
| 	@@ -1,6 +1,6 @@ | 	@@ -1,6 +1,6 @@ | ||||||
|  | @ -154,9 +158,9 @@ test_expect_success 'another test, without options' ' | ||||||
| 	git diff --ignore-space-at-eol --ignore-cr-at-eol >out && | 	git diff --ignore-space-at-eol --ignore-cr-at-eol >out && | ||||||
| 	test_cmp expect out && | 	test_cmp expect out && | ||||||
|  |  | ||||||
| 	tr "Q_" "\015 " <<-\EOF >expect && | 	tr "Q_" "\015 " <<-EOF >expect && | ||||||
| 	diff --git a/x b/x | 	diff --git a/x b/x | ||||||
| 	index_d99af23..22d9f73 100644 | 	index_$before..$after 100644 | ||||||
| 	--- a/x | 	--- a/x | ||||||
| 	+++ b/x | 	+++ b/x | ||||||
| 	@@ -1,6 +1,6 @@ | 	@@ -1,6 +1,6 @@ | ||||||
|  | @ -786,23 +790,25 @@ test_expect_success 'whitespace-only changes not reported' ' | ||||||
| 	test_must_be_empty actual | 	test_must_be_empty actual | ||||||
| ' | ' | ||||||
|  |  | ||||||
| cat <<EOF >expect |  | ||||||
| diff --git a/x b/z |  | ||||||
| similarity index NUM% |  | ||||||
| rename from x |  | ||||||
| rename to z |  | ||||||
| index 380c32a..a97b785 100644 |  | ||||||
| EOF |  | ||||||
| test_expect_success 'whitespace-only changes reported across renames' ' | test_expect_success 'whitespace-only changes reported across renames' ' | ||||||
| 	git reset --hard && | 	git reset --hard && | ||||||
| 	for i in 1 2 3 4 5 6 7 8 9; do echo "$i$i$i$i$i$i"; done >x && | 	for i in 1 2 3 4 5 6 7 8 9; do echo "$i$i$i$i$i$i"; done >x && | ||||||
| 	git add x && | 	git add x && | ||||||
|  | 	before=$(git rev-parse --short $(git hash-object x)) && | ||||||
| 	git commit -m "base" && | 	git commit -m "base" && | ||||||
| 	sed -e "5s/^/ /" x >z && | 	sed -e "5s/^/ /" x >z && | ||||||
| 	git rm x && | 	git rm x && | ||||||
| 	git add z && | 	git add z && | ||||||
|  | 	after=$(git rev-parse --short $(git hash-object z)) && | ||||||
| 	git diff -w -M --cached | | 	git diff -w -M --cached | | ||||||
| 	sed -e "/^similarity index /s/[0-9][0-9]*/NUM/" >actual && | 	sed -e "/^similarity index /s/[0-9][0-9]*/NUM/" >actual && | ||||||
|  | 	cat <<-EOF >expect && | ||||||
|  | 	diff --git a/x b/z | ||||||
|  | 	similarity index NUM% | ||||||
|  | 	rename from x | ||||||
|  | 	rename to z | ||||||
|  | 	index $before..$after 100644 | ||||||
|  | 	EOF | ||||||
| 	test_cmp expect actual | 	test_cmp expect actual | ||||||
| ' | ' | ||||||
|  |  | ||||||
|  | @ -858,13 +864,15 @@ test_expect_success 'diff that introduces a line with only tabs' ' | ||||||
| 	git config core.whitespace blank-at-eol && | 	git config core.whitespace blank-at-eol && | ||||||
| 	git reset --hard && | 	git reset --hard && | ||||||
| 	echo "test" >x && | 	echo "test" >x && | ||||||
|  | 	before=$(git rev-parse --short $(git hash-object x)) && | ||||||
| 	git commit -m "initial" x && | 	git commit -m "initial" x && | ||||||
| 	echo "{NTN}" | tr "NT" "\n\t" >>x && | 	echo "{NTN}" | tr "NT" "\n\t" >>x && | ||||||
|  | 	after=$(git rev-parse --short $(git hash-object x)) && | ||||||
| 	git diff --color | test_decode_color >current && | 	git diff --color | test_decode_color >current && | ||||||
|  |  | ||||||
| 	cat >expected <<-\EOF && | 	cat >expected <<-EOF && | ||||||
| 	<BOLD>diff --git a/x b/x<RESET> | 	<BOLD>diff --git a/x b/x<RESET> | ||||||
| 	<BOLD>index 9daeafb..2874b91 100644<RESET> | 	<BOLD>index $before..$after 100644<RESET> | ||||||
| 	<BOLD>--- a/x<RESET> | 	<BOLD>--- a/x<RESET> | ||||||
| 	<BOLD>+++ b/x<RESET> | 	<BOLD>+++ b/x<RESET> | ||||||
| 	<CYAN>@@ -1 +1,4 @@<RESET> | 	<CYAN>@@ -1 +1,4 @@<RESET> | ||||||
|  | @ -883,19 +891,21 @@ test_expect_success 'diff that introduces and removes ws breakages' ' | ||||||
| 		echo "0. blank-at-eol " && | 		echo "0. blank-at-eol " && | ||||||
| 		echo "1. blank-at-eol " | 		echo "1. blank-at-eol " | ||||||
| 	} >x && | 	} >x && | ||||||
|  | 	before=$(git rev-parse --short $(git hash-object x)) && | ||||||
| 	git commit -a --allow-empty -m preimage && | 	git commit -a --allow-empty -m preimage && | ||||||
| 	{ | 	{ | ||||||
| 		echo "0. blank-at-eol " && | 		echo "0. blank-at-eol " && | ||||||
| 		echo "1. still-blank-at-eol " && | 		echo "1. still-blank-at-eol " && | ||||||
| 		echo "2. and a new line " | 		echo "2. and a new line " | ||||||
| 	} >x && | 	} >x && | ||||||
|  | 	after=$(git rev-parse --short $(git hash-object x)) && | ||||||
|  |  | ||||||
| 	git diff --color | | 	git diff --color | | ||||||
| 	test_decode_color >current && | 	test_decode_color >current && | ||||||
|  |  | ||||||
| 	cat >expected <<-\EOF && | 	cat >expected <<-EOF && | ||||||
| 	<BOLD>diff --git a/x b/x<RESET> | 	<BOLD>diff --git a/x b/x<RESET> | ||||||
| 	<BOLD>index d0233a2..700886e 100644<RESET> | 	<BOLD>index $before..$after 100644<RESET> | ||||||
| 	<BOLD>--- a/x<RESET> | 	<BOLD>--- a/x<RESET> | ||||||
| 	<BOLD>+++ b/x<RESET> | 	<BOLD>+++ b/x<RESET> | ||||||
| 	<CYAN>@@ -1,2 +1,3 @@<RESET> | 	<CYAN>@@ -1,2 +1,3 @@<RESET> | ||||||
|  | @ -915,16 +925,18 @@ test_expect_success 'ws-error-highlight test setup' ' | ||||||
| 		echo "0. blank-at-eol " && | 		echo "0. blank-at-eol " && | ||||||
| 		echo "1. blank-at-eol " | 		echo "1. blank-at-eol " | ||||||
| 	} >x && | 	} >x && | ||||||
|  | 	before=$(git rev-parse --short $(git hash-object x)) && | ||||||
| 	git commit -a --allow-empty -m preimage && | 	git commit -a --allow-empty -m preimage && | ||||||
| 	{ | 	{ | ||||||
| 		echo "0. blank-at-eol " && | 		echo "0. blank-at-eol " && | ||||||
| 		echo "1. still-blank-at-eol " && | 		echo "1. still-blank-at-eol " && | ||||||
| 		echo "2. and a new line " | 		echo "2. and a new line " | ||||||
| 	} >x && | 	} >x && | ||||||
|  | 	after=$(git rev-parse --short $(git hash-object x)) && | ||||||
|  |  | ||||||
| 	cat >expect.default-old <<-\EOF && | 	cat >expect.default-old <<-EOF && | ||||||
| 	<BOLD>diff --git a/x b/x<RESET> | 	<BOLD>diff --git a/x b/x<RESET> | ||||||
| 	<BOLD>index d0233a2..700886e 100644<RESET> | 	<BOLD>index $before..$after 100644<RESET> | ||||||
| 	<BOLD>--- a/x<RESET> | 	<BOLD>--- a/x<RESET> | ||||||
| 	<BOLD>+++ b/x<RESET> | 	<BOLD>+++ b/x<RESET> | ||||||
| 	<CYAN>@@ -1,2 +1,3 @@<RESET> | 	<CYAN>@@ -1,2 +1,3 @@<RESET> | ||||||
|  | @ -934,9 +946,9 @@ test_expect_success 'ws-error-highlight test setup' ' | ||||||
| 	<GREEN>+<RESET><GREEN>2. and a new line<RESET><BLUE> <RESET> | 	<GREEN>+<RESET><GREEN>2. and a new line<RESET><BLUE> <RESET> | ||||||
| 	EOF | 	EOF | ||||||
|  |  | ||||||
| 	cat >expect.all <<-\EOF && | 	cat >expect.all <<-EOF && | ||||||
| 	<BOLD>diff --git a/x b/x<RESET> | 	<BOLD>diff --git a/x b/x<RESET> | ||||||
| 	<BOLD>index d0233a2..700886e 100644<RESET> | 	<BOLD>index $before..$after 100644<RESET> | ||||||
| 	<BOLD>--- a/x<RESET> | 	<BOLD>--- a/x<RESET> | ||||||
| 	<BOLD>+++ b/x<RESET> | 	<BOLD>+++ b/x<RESET> | ||||||
| 	<CYAN>@@ -1,2 +1,3 @@<RESET> | 	<CYAN>@@ -1,2 +1,3 @@<RESET> | ||||||
|  | @ -946,9 +958,9 @@ test_expect_success 'ws-error-highlight test setup' ' | ||||||
| 	<GREEN>+<RESET><GREEN>2. and a new line<RESET><BLUE> <RESET> | 	<GREEN>+<RESET><GREEN>2. and a new line<RESET><BLUE> <RESET> | ||||||
| 	EOF | 	EOF | ||||||
|  |  | ||||||
| 	cat >expect.none <<-\EOF | 	cat >expect.none <<-EOF | ||||||
| 	<BOLD>diff --git a/x b/x<RESET> | 	<BOLD>diff --git a/x b/x<RESET> | ||||||
| 	<BOLD>index d0233a2..700886e 100644<RESET> | 	<BOLD>index $before..$after 100644<RESET> | ||||||
| 	<BOLD>--- a/x<RESET> | 	<BOLD>--- a/x<RESET> | ||||||
| 	<BOLD>+++ b/x<RESET> | 	<BOLD>+++ b/x<RESET> | ||||||
| 	<CYAN>@@ -1,2 +1,3 @@<RESET> | 	<CYAN>@@ -1,2 +1,3 @@<RESET> | ||||||
|  | @ -1022,14 +1034,15 @@ test_expect_success 'detect moved code, complete file' ' | ||||||
| 	EOF | 	EOF | ||||||
| 	git add test.c && | 	git add test.c && | ||||||
| 	git commit -m "add main function" && | 	git commit -m "add main function" && | ||||||
|  | 	file=$(git rev-parse --short HEAD:test.c) && | ||||||
| 	git mv test.c main.c && | 	git mv test.c main.c && | ||||||
| 	test_config color.diff.oldMoved "normal red" && | 	test_config color.diff.oldMoved "normal red" && | ||||||
| 	test_config color.diff.newMoved "normal green" && | 	test_config color.diff.newMoved "normal green" && | ||||||
| 	git diff HEAD --color-moved=zebra --color --no-renames | test_decode_color >actual && | 	git diff HEAD --color-moved=zebra --color --no-renames | test_decode_color >actual && | ||||||
| 	cat >expected <<-\EOF && | 	cat >expected <<-EOF && | ||||||
| 	<BOLD>diff --git a/main.c b/main.c<RESET> | 	<BOLD>diff --git a/main.c b/main.c<RESET> | ||||||
| 	<BOLD>new file mode 100644<RESET> | 	<BOLD>new file mode 100644<RESET> | ||||||
| 	<BOLD>index 0000000..a986c57<RESET> | 	<BOLD>index 0000000..$file<RESET> | ||||||
| 	<BOLD>--- /dev/null<RESET> | 	<BOLD>--- /dev/null<RESET> | ||||||
| 	<BOLD>+++ b/main.c<RESET> | 	<BOLD>+++ b/main.c<RESET> | ||||||
| 	<CYAN>@@ -0,0 +1,5 @@<RESET> | 	<CYAN>@@ -0,0 +1,5 @@<RESET> | ||||||
|  | @ -1040,7 +1053,7 @@ test_expect_success 'detect moved code, complete file' ' | ||||||
| 	<BGREEN>+<RESET><BGREEN>}<RESET> | 	<BGREEN>+<RESET><BGREEN>}<RESET> | ||||||
| 	<BOLD>diff --git a/test.c b/test.c<RESET> | 	<BOLD>diff --git a/test.c b/test.c<RESET> | ||||||
| 	<BOLD>deleted file mode 100644<RESET> | 	<BOLD>deleted file mode 100644<RESET> | ||||||
| 	<BOLD>index a986c57..0000000<RESET> | 	<BOLD>index $file..0000000<RESET> | ||||||
| 	<BOLD>--- a/test.c<RESET> | 	<BOLD>--- a/test.c<RESET> | ||||||
| 	<BOLD>+++ /dev/null<RESET> | 	<BOLD>+++ /dev/null<RESET> | ||||||
| 	<CYAN>@@ -1,5 +0,0 @@<RESET> | 	<CYAN>@@ -1,5 +0,0 @@<RESET> | ||||||
|  | @ -1094,6 +1107,8 @@ test_expect_success 'detect malicious moved code, inside file' ' | ||||||
| 	EOF | 	EOF | ||||||
| 	git add main.c test.c && | 	git add main.c test.c && | ||||||
| 	git commit -m "add main and test file" && | 	git commit -m "add main and test file" && | ||||||
|  | 	before_main=$(git rev-parse --short HEAD:main.c) && | ||||||
|  | 	before_test=$(git rev-parse --short HEAD:test.c) && | ||||||
| 	cat <<-\EOF >main.c && | 	cat <<-\EOF >main.c && | ||||||
| 		#include<stdio.h> | 		#include<stdio.h> | ||||||
| 		int stuff() | 		int stuff() | ||||||
|  | @ -1126,10 +1141,12 @@ test_expect_success 'detect malicious moved code, inside file' ' | ||||||
| 			bar(); | 			bar(); | ||||||
| 		} | 		} | ||||||
| 	EOF | 	EOF | ||||||
|  | 	after_main=$(git rev-parse --short $(git hash-object main.c)) && | ||||||
|  | 	after_test=$(git rev-parse --short $(git hash-object test.c)) && | ||||||
| 	git diff HEAD --no-renames --color-moved=zebra --color | test_decode_color >actual && | 	git diff HEAD --no-renames --color-moved=zebra --color | test_decode_color >actual && | ||||||
| 	cat <<-\EOF >expected && | 	cat <<-EOF >expected && | ||||||
| 	<BOLD>diff --git a/main.c b/main.c<RESET> | 	<BOLD>diff --git a/main.c b/main.c<RESET> | ||||||
| 	<BOLD>index 27a619c..7cf9336 100644<RESET> | 	<BOLD>index $before_main..$after_main 100644<RESET> | ||||||
| 	<BOLD>--- a/main.c<RESET> | 	<BOLD>--- a/main.c<RESET> | ||||||
| 	<BOLD>+++ b/main.c<RESET> | 	<BOLD>+++ b/main.c<RESET> | ||||||
| 	<CYAN>@@ -5,13 +5,6 @@<RESET> <RESET>printf("Hello ");<RESET> | 	<CYAN>@@ -5,13 +5,6 @@<RESET> <RESET>printf("Hello ");<RESET> | ||||||
|  | @ -1147,7 +1164,7 @@ test_expect_success 'detect malicious moved code, inside file' ' | ||||||
| 	 {<RESET> | 	 {<RESET> | ||||||
| 	 foo();<RESET> | 	 foo();<RESET> | ||||||
| 	<BOLD>diff --git a/test.c b/test.c<RESET> | 	<BOLD>diff --git a/test.c b/test.c<RESET> | ||||||
| 	<BOLD>index 1dc1d85..2bedec9 100644<RESET> | 	<BOLD>index $before_test..$after_test 100644<RESET> | ||||||
| 	<BOLD>--- a/test.c<RESET> | 	<BOLD>--- a/test.c<RESET> | ||||||
| 	<BOLD>+++ b/test.c<RESET> | 	<BOLD>+++ b/test.c<RESET> | ||||||
| 	<CYAN>@@ -4,6 +4,13 @@<RESET> <RESET>int bar()<RESET> | 	<CYAN>@@ -4,6 +4,13 @@<RESET> <RESET>int bar()<RESET> | ||||||
|  | @ -1176,9 +1193,9 @@ test_expect_success 'plain moved code, inside file' ' | ||||||
| 	test_config color.diff.newMovedAlternative "yellow" && | 	test_config color.diff.newMovedAlternative "yellow" && | ||||||
| 	# needs previous test as setup | 	# needs previous test as setup | ||||||
| 	git diff HEAD --no-renames --color-moved=plain --color | test_decode_color >actual && | 	git diff HEAD --no-renames --color-moved=plain --color | test_decode_color >actual && | ||||||
| 	cat <<-\EOF >expected && | 	cat <<-EOF >expected && | ||||||
| 	<BOLD>diff --git a/main.c b/main.c<RESET> | 	<BOLD>diff --git a/main.c b/main.c<RESET> | ||||||
| 	<BOLD>index 27a619c..7cf9336 100644<RESET> | 	<BOLD>index $before_main..$after_main 100644<RESET> | ||||||
| 	<BOLD>--- a/main.c<RESET> | 	<BOLD>--- a/main.c<RESET> | ||||||
| 	<BOLD>+++ b/main.c<RESET> | 	<BOLD>+++ b/main.c<RESET> | ||||||
| 	<CYAN>@@ -5,13 +5,6 @@<RESET> <RESET>printf("Hello ");<RESET> | 	<CYAN>@@ -5,13 +5,6 @@<RESET> <RESET>printf("Hello ");<RESET> | ||||||
|  | @ -1196,7 +1213,7 @@ test_expect_success 'plain moved code, inside file' ' | ||||||
| 	 {<RESET> | 	 {<RESET> | ||||||
| 	 foo();<RESET> | 	 foo();<RESET> | ||||||
| 	<BOLD>diff --git a/test.c b/test.c<RESET> | 	<BOLD>diff --git a/test.c b/test.c<RESET> | ||||||
| 	<BOLD>index 1dc1d85..2bedec9 100644<RESET> | 	<BOLD>index $before_test..$after_test 100644<RESET> | ||||||
| 	<BOLD>--- a/test.c<RESET> | 	<BOLD>--- a/test.c<RESET> | ||||||
| 	<BOLD>+++ b/test.c<RESET> | 	<BOLD>+++ b/test.c<RESET> | ||||||
| 	<CYAN>@@ -4,6 +4,13 @@<RESET> <RESET>int bar()<RESET> | 	<CYAN>@@ -4,6 +4,13 @@<RESET> <RESET>int bar()<RESET> | ||||||
|  |  | ||||||
|  | @ -6,6 +6,7 @@ test_description='difference in submodules' | ||||||
| . "$TEST_DIRECTORY"/diff-lib.sh | . "$TEST_DIRECTORY"/diff-lib.sh | ||||||
|  |  | ||||||
| test_expect_success setup ' | test_expect_success setup ' | ||||||
|  | 	test_oid_init && | ||||||
| 	test_tick && | 	test_tick && | ||||||
| 	test_create_repo sub && | 	test_create_repo sub && | ||||||
| 	( | 	( | ||||||
|  | @ -36,7 +37,8 @@ test_expect_success setup ' | ||||||
| ' | ' | ||||||
|  |  | ||||||
| test_expect_success 'git diff --raw HEAD' ' | test_expect_success 'git diff --raw HEAD' ' | ||||||
| 	git diff --raw --abbrev=40 HEAD >actual && | 	hexsz=$(test_oid hexsz) && | ||||||
|  | 	git diff --raw --abbrev=$hexsz HEAD >actual && | ||||||
| 	test_cmp expect actual | 	test_cmp expect actual | ||||||
| ' | ' | ||||||
|  |  | ||||||
|  | @ -245,23 +247,21 @@ test_expect_success 'git diff (empty submodule dir)' ' | ||||||
| ' | ' | ||||||
|  |  | ||||||
| test_expect_success 'conflicted submodule setup' ' | test_expect_success 'conflicted submodule setup' ' | ||||||
|  | 	c=$(test_oid ff_1) && | ||||||
| 	# 39 efs |  | ||||||
| 	c=fffffffffffffffffffffffffffffffffffffff && |  | ||||||
| 	( | 	( | ||||||
| 		echo "000000 $ZERO_OID 0	sub" && | 		echo "000000 $ZERO_OID 0	sub" && | ||||||
| 		echo "160000 1$c 1	sub" && | 		echo "160000 1$c 1	sub" && | ||||||
| 		echo "160000 2$c 2	sub" && | 		echo "160000 2$c 2	sub" && | ||||||
| 		echo "160000 3$c 3	sub" | 		echo "160000 3$c 3	sub" | ||||||
| 	) | git update-index --index-info && | 	) | git update-index --index-info && | ||||||
| 	echo >expect.nosub '\''diff --cc sub | 	echo >expect.nosub "diff --cc sub | ||||||
| index 2ffffff,3ffffff..0000000 | index 2ffffff,3ffffff..0000000 | ||||||
| --- a/sub | --- a/sub | ||||||
| +++ b/sub | +++ b/sub | ||||||
| @@@ -1,1 -1,1 +1,1 @@@ | @@@ -1,1 -1,1 +1,1 @@@ | ||||||
| - Subproject commit 2fffffffffffffffffffffffffffffffffffffff | - Subproject commit 2$c | ||||||
|  -Subproject commit 3fffffffffffffffffffffffffffffffffffffff |  -Subproject commit 3$c | ||||||
| ++Subproject commit 0000000000000000000000000000000000000000'\'' && | ++Subproject commit $ZERO_OID" && | ||||||
|  |  | ||||||
| 	hh=$(git rev-parse HEAD) && | 	hh=$(git rev-parse HEAD) && | ||||||
| 	sed -e "s/$ZERO_OID/$hh/" expect.nosub >expect.withsub | 	sed -e "s/$ZERO_OID/$hh/" expect.nosub >expect.withsub | ||||||
|  |  | ||||||
|  | @ -19,9 +19,11 @@ cat >post.simple <<-\EOF | ||||||
|  |  | ||||||
| 	aeff = aeff * ( aaa ) | 	aeff = aeff * ( aaa ) | ||||||
| EOF | EOF | ||||||
| cat >expect.letter-runs-are-words <<-\EOF | pre=$(git rev-parse --short $(git hash-object pre.simple)) | ||||||
|  | post=$(git rev-parse --short $(git hash-object post.simple)) | ||||||
|  | cat >expect.letter-runs-are-words <<-EOF | ||||||
| 	<BOLD>diff --git a/pre b/post<RESET> | 	<BOLD>diff --git a/pre b/post<RESET> | ||||||
| 	<BOLD>index 330b04f..5ed8eff 100644<RESET> | 	<BOLD>index $pre..$post 100644<RESET> | ||||||
| 	<BOLD>--- a/pre<RESET> | 	<BOLD>--- a/pre<RESET> | ||||||
| 	<BOLD>+++ b/post<RESET> | 	<BOLD>+++ b/post<RESET> | ||||||
| 	<CYAN>@@ -1,3 +1,7 @@<RESET> | 	<CYAN>@@ -1,3 +1,7 @@<RESET> | ||||||
|  | @ -33,9 +35,9 @@ cat >expect.letter-runs-are-words <<-\EOF | ||||||
|  |  | ||||||
| 	<GREEN>aeff = aeff * ( aaa<RESET> ) | 	<GREEN>aeff = aeff * ( aaa<RESET> ) | ||||||
| EOF | EOF | ||||||
| cat >expect.non-whitespace-is-word <<-\EOF | cat >expect.non-whitespace-is-word <<-EOF | ||||||
| 	<BOLD>diff --git a/pre b/post<RESET> | 	<BOLD>diff --git a/pre b/post<RESET> | ||||||
| 	<BOLD>index 330b04f..5ed8eff 100644<RESET> | 	<BOLD>index $pre..$post 100644<RESET> | ||||||
| 	<BOLD>--- a/pre<RESET> | 	<BOLD>--- a/pre<RESET> | ||||||
| 	<BOLD>+++ b/post<RESET> | 	<BOLD>+++ b/post<RESET> | ||||||
| 	<CYAN>@@ -1,3 +1,7 @@<RESET> | 	<CYAN>@@ -1,3 +1,7 @@<RESET> | ||||||
|  | @ -49,9 +51,12 @@ cat >expect.non-whitespace-is-word <<-\EOF | ||||||
| EOF | EOF | ||||||
|  |  | ||||||
| word_diff () { | word_diff () { | ||||||
|  | 	pre=$(git rev-parse --short $(git hash-object pre)) && | ||||||
|  | 	post=$(git rev-parse --short $(git hash-object post)) && | ||||||
| 	test_must_fail git diff --no-index "$@" pre post >output && | 	test_must_fail git diff --no-index "$@" pre post >output && | ||||||
| 	test_decode_color <output >output.decrypted && | 	test_decode_color <output >output.decrypted && | ||||||
| 	test_cmp expect output.decrypted | 	sed -e "2s/index [^ ]*/index $pre..$post/" expect >expected | ||||||
|  | 	test_cmp expected output.decrypted | ||||||
| } | } | ||||||
|  |  | ||||||
| test_language_driver () { | test_language_driver () { | ||||||
|  | @ -77,9 +82,9 @@ test_expect_success 'set up pre and post with runs of whitespace' ' | ||||||
| ' | ' | ||||||
|  |  | ||||||
| test_expect_success 'word diff with runs of whitespace' ' | test_expect_success 'word diff with runs of whitespace' ' | ||||||
| 	cat >expect <<-\EOF && | 	cat >expect <<-EOF && | ||||||
| 		<BOLD>diff --git a/pre b/post<RESET> | 		<BOLD>diff --git a/pre b/post<RESET> | ||||||
| 		<BOLD>index 330b04f..5ed8eff 100644<RESET> | 		<BOLD>index $pre..$post 100644<RESET> | ||||||
| 		<BOLD>--- a/pre<RESET> | 		<BOLD>--- a/pre<RESET> | ||||||
| 		<BOLD>+++ b/post<RESET> | 		<BOLD>+++ b/post<RESET> | ||||||
| 		<CYAN>@@ -1,3 +1,7 @@<RESET> | 		<CYAN>@@ -1,3 +1,7 @@<RESET> | ||||||
|  | @ -97,9 +102,9 @@ test_expect_success 'word diff with runs of whitespace' ' | ||||||
| ' | ' | ||||||
|  |  | ||||||
| test_expect_success '--word-diff=porcelain' ' | test_expect_success '--word-diff=porcelain' ' | ||||||
| 	sed 's/#.*$//' >expect <<-\EOF && | 	sed 's/#.*$//' >expect <<-EOF && | ||||||
| 		diff --git a/pre b/post | 		diff --git a/pre b/post | ||||||
| 		index 330b04f..5ed8eff 100644 | 		index $pre..$post 100644 | ||||||
| 		--- a/pre | 		--- a/pre | ||||||
| 		+++ b/post | 		+++ b/post | ||||||
| 		@@ -1,3 +1,7 @@ | 		@@ -1,3 +1,7 @@ | ||||||
|  | @ -121,9 +126,9 @@ test_expect_success '--word-diff=porcelain' ' | ||||||
| ' | ' | ||||||
|  |  | ||||||
| test_expect_success '--word-diff=plain' ' | test_expect_success '--word-diff=plain' ' | ||||||
| 	cat >expect <<-\EOF && | 	cat >expect <<-EOF && | ||||||
| 		diff --git a/pre b/post | 		diff --git a/pre b/post | ||||||
| 		index 330b04f..5ed8eff 100644 | 		index $pre..$post 100644 | ||||||
| 		--- a/pre | 		--- a/pre | ||||||
| 		+++ b/post | 		+++ b/post | ||||||
| 		@@ -1,3 +1,7 @@ | 		@@ -1,3 +1,7 @@ | ||||||
|  | @ -140,9 +145,9 @@ test_expect_success '--word-diff=plain' ' | ||||||
| ' | ' | ||||||
|  |  | ||||||
| test_expect_success '--word-diff=plain --color' ' | test_expect_success '--word-diff=plain --color' ' | ||||||
| 	cat >expect <<-\EOF && | 	cat >expect <<-EOF && | ||||||
| 		<BOLD>diff --git a/pre b/post<RESET> | 		<BOLD>diff --git a/pre b/post<RESET> | ||||||
| 		<BOLD>index 330b04f..5ed8eff 100644<RESET> | 		<BOLD>index $pre..$post 100644<RESET> | ||||||
| 		<BOLD>--- a/pre<RESET> | 		<BOLD>--- a/pre<RESET> | ||||||
| 		<BOLD>+++ b/post<RESET> | 		<BOLD>+++ b/post<RESET> | ||||||
| 		<CYAN>@@ -1,3 +1,7 @@<RESET> | 		<CYAN>@@ -1,3 +1,7 @@<RESET> | ||||||
|  | @ -158,9 +163,9 @@ test_expect_success '--word-diff=plain --color' ' | ||||||
| ' | ' | ||||||
|  |  | ||||||
| test_expect_success 'word diff without context' ' | test_expect_success 'word diff without context' ' | ||||||
| 	cat >expect <<-\EOF && | 	cat >expect <<-EOF && | ||||||
| 		<BOLD>diff --git a/pre b/post<RESET> | 		<BOLD>diff --git a/pre b/post<RESET> | ||||||
| 		<BOLD>index 330b04f..5ed8eff 100644<RESET> | 		<BOLD>index $pre..$post 100644<RESET> | ||||||
| 		<BOLD>--- a/pre<RESET> | 		<BOLD>--- a/pre<RESET> | ||||||
| 		<BOLD>+++ b/post<RESET> | 		<BOLD>+++ b/post<RESET> | ||||||
| 		<CYAN>@@ -1 +1 @@<RESET> | 		<CYAN>@@ -1 +1 @@<RESET> | ||||||
|  | @ -207,9 +212,9 @@ test_expect_success 'command-line overrides config' ' | ||||||
| ' | ' | ||||||
|  |  | ||||||
| test_expect_success 'command-line overrides config: --word-diff-regex' ' | test_expect_success 'command-line overrides config: --word-diff-regex' ' | ||||||
| 	cat >expect <<-\EOF && | 	cat >expect <<-EOF && | ||||||
| 		<BOLD>diff --git a/pre b/post<RESET> | 		<BOLD>diff --git a/pre b/post<RESET> | ||||||
| 		<BOLD>index 330b04f..5ed8eff 100644<RESET> | 		<BOLD>index $pre..$post 100644<RESET> | ||||||
| 		<BOLD>--- a/pre<RESET> | 		<BOLD>--- a/pre<RESET> | ||||||
| 		<BOLD>+++ b/post<RESET> | 		<BOLD>+++ b/post<RESET> | ||||||
| 		<CYAN>@@ -1,3 +1,7 @@<RESET> | 		<CYAN>@@ -1,3 +1,7 @@<RESET> | ||||||
|  | @ -234,9 +239,9 @@ test_expect_success 'setup: remove diff driver regex' ' | ||||||
| ' | ' | ||||||
|  |  | ||||||
| test_expect_success 'use configured regex' ' | test_expect_success 'use configured regex' ' | ||||||
| 	cat >expect <<-\EOF && | 	cat >expect <<-EOF && | ||||||
| 		<BOLD>diff --git a/pre b/post<RESET> | 		<BOLD>diff --git a/pre b/post<RESET> | ||||||
| 		<BOLD>index 330b04f..5ed8eff 100644<RESET> | 		<BOLD>index $pre..$post 100644<RESET> | ||||||
| 		<BOLD>--- a/pre<RESET> | 		<BOLD>--- a/pre<RESET> | ||||||
| 		<BOLD>+++ b/post<RESET> | 		<BOLD>+++ b/post<RESET> | ||||||
| 		<CYAN>@@ -1,3 +1,7 @@<RESET> | 		<CYAN>@@ -1,3 +1,7 @@<RESET> | ||||||
|  | @ -254,9 +259,11 @@ test_expect_success 'use configured regex' ' | ||||||
| test_expect_success 'test parsing words for newline' ' | test_expect_success 'test parsing words for newline' ' | ||||||
| 	echo "aaa (aaa)" >pre && | 	echo "aaa (aaa)" >pre && | ||||||
| 	echo "aaa (aaa) aaa" >post && | 	echo "aaa (aaa) aaa" >post && | ||||||
| 	cat >expect <<-\EOF && | 	pre=$(git rev-parse --short $(git hash-object pre)) && | ||||||
|  | 	post=$(git rev-parse --short $(git hash-object post)) && | ||||||
|  | 	cat >expect <<-EOF && | ||||||
| 		<BOLD>diff --git a/pre b/post<RESET> | 		<BOLD>diff --git a/pre b/post<RESET> | ||||||
| 		<BOLD>index c29453b..be22f37 100644<RESET> | 		<BOLD>index $pre..$post 100644<RESET> | ||||||
| 		<BOLD>--- a/pre<RESET> | 		<BOLD>--- a/pre<RESET> | ||||||
| 		<BOLD>+++ b/post<RESET> | 		<BOLD>+++ b/post<RESET> | ||||||
| 		<CYAN>@@ -1 +1 @@<RESET> | 		<CYAN>@@ -1 +1 @@<RESET> | ||||||
|  | @ -268,9 +275,11 @@ test_expect_success 'test parsing words for newline' ' | ||||||
| test_expect_success 'test when words are only removed at the end' ' | test_expect_success 'test when words are only removed at the end' ' | ||||||
| 	echo "(:" >pre && | 	echo "(:" >pre && | ||||||
| 	echo "(" >post && | 	echo "(" >post && | ||||||
| 	cat >expect <<-\EOF && | 	pre=$(git rev-parse --short $(git hash-object pre)) && | ||||||
|  | 	post=$(git rev-parse --short $(git hash-object post)) && | ||||||
|  | 	cat >expect <<-EOF && | ||||||
| 		<BOLD>diff --git a/pre b/post<RESET> | 		<BOLD>diff --git a/pre b/post<RESET> | ||||||
| 		<BOLD>index 289cb9d..2d06f37 100644<RESET> | 		<BOLD>index $pre..$post 100644<RESET> | ||||||
| 		<BOLD>--- a/pre<RESET> | 		<BOLD>--- a/pre<RESET> | ||||||
| 		<BOLD>+++ b/post<RESET> | 		<BOLD>+++ b/post<RESET> | ||||||
| 		<CYAN>@@ -1 +1 @@<RESET> | 		<CYAN>@@ -1 +1 @@<RESET> | ||||||
|  | @ -282,9 +291,11 @@ test_expect_success 'test when words are only removed at the end' ' | ||||||
| test_expect_success '--word-diff=none' ' | test_expect_success '--word-diff=none' ' | ||||||
| 	echo "(:" >pre && | 	echo "(:" >pre && | ||||||
| 	echo "(" >post && | 	echo "(" >post && | ||||||
| 	cat >expect <<-\EOF && | 	pre=$(git rev-parse --short $(git hash-object pre)) && | ||||||
|  | 	post=$(git rev-parse --short $(git hash-object post)) && | ||||||
|  | 	cat >expect <<-EOF && | ||||||
| 		diff --git a/pre b/post | 		diff --git a/pre b/post | ||||||
| 		index 289cb9d..2d06f37 100644 | 		index $pre..$post 100644 | ||||||
| 		--- a/pre | 		--- a/pre | ||||||
| 		+++ b/post | 		+++ b/post | ||||||
| 		@@ -1 +1 @@ | 		@@ -1 +1 @@ | ||||||
|  | @ -317,16 +328,6 @@ test_language_driver ruby | ||||||
| test_language_driver tex | test_language_driver tex | ||||||
|  |  | ||||||
| test_expect_success 'word-diff with diff.sbe' ' | test_expect_success 'word-diff with diff.sbe' ' | ||||||
| 	cat >expect <<-\EOF && |  | ||||||
| 	diff --git a/pre b/post |  | ||||||
| 	index a1a53b5..bc8fe6d 100644 |  | ||||||
| 	--- a/pre |  | ||||||
| 	+++ b/post |  | ||||||
| 	@@ -1,3 +1,3 @@ |  | ||||||
| 	a |  | ||||||
|  |  | ||||||
| 	[-b-]{+c+} |  | ||||||
| 	EOF |  | ||||||
| 	cat >pre <<-\EOF && | 	cat >pre <<-\EOF && | ||||||
| 	a | 	a | ||||||
|  |  | ||||||
|  | @ -337,21 +338,35 @@ test_expect_success 'word-diff with diff.sbe' ' | ||||||
|  |  | ||||||
| 	c | 	c | ||||||
| 	EOF | 	EOF | ||||||
|  | 	pre=$(git rev-parse --short $(git hash-object pre)) && | ||||||
|  | 	post=$(git rev-parse --short $(git hash-object post)) && | ||||||
|  | 	cat >expect <<-EOF && | ||||||
|  | 	diff --git a/pre b/post | ||||||
|  | 	index $pre..$post 100644 | ||||||
|  | 	--- a/pre | ||||||
|  | 	+++ b/post | ||||||
|  | 	@@ -1,3 +1,3 @@ | ||||||
|  | 	a | ||||||
|  |  | ||||||
|  | 	[-b-]{+c+} | ||||||
|  | 	EOF | ||||||
| 	test_config diff.suppress-blank-empty true && | 	test_config diff.suppress-blank-empty true && | ||||||
| 	word_diff --word-diff=plain | 	word_diff --word-diff=plain | ||||||
| ' | ' | ||||||
|  |  | ||||||
| test_expect_success 'word-diff with no newline at EOF' ' | test_expect_success 'word-diff with no newline at EOF' ' | ||||||
| 	cat >expect <<-\EOF && | 	printf "%s" "a a a a a" >pre && | ||||||
|  | 	printf "%s" "a a ab a a" >post && | ||||||
|  | 	pre=$(git rev-parse --short $(git hash-object pre)) && | ||||||
|  | 	post=$(git rev-parse --short $(git hash-object post)) && | ||||||
|  | 	cat >expect <<-EOF && | ||||||
| 	diff --git a/pre b/post | 	diff --git a/pre b/post | ||||||
| 	index 7bf316e..3dd0303 100644 | 	index $pre..$post 100644 | ||||||
| 	--- a/pre | 	--- a/pre | ||||||
| 	+++ b/post | 	+++ b/post | ||||||
| 	@@ -1 +1 @@ | 	@@ -1 +1 @@ | ||||||
| 	a a [-a-]{+ab+} a a | 	a a [-a-]{+ab+} a a | ||||||
| 	EOF | 	EOF | ||||||
| 	printf "%s" "a a a a a" >pre && |  | ||||||
| 	printf "%s" "a a ab a a" >post && |  | ||||||
| 	word_diff --word-diff=plain | 	word_diff --word-diff=plain | ||||||
| ' | ' | ||||||
|  |  | ||||||
|  |  | ||||||
|  | @ -440,11 +440,13 @@ test_expect_success 'setup for --combined-all-paths' ' | ||||||
| 	git branch side2c && | 	git branch side2c && | ||||||
| 	git checkout side1c && | 	git checkout side1c && | ||||||
| 	test_seq 1 10 >filename-side1c && | 	test_seq 1 10 >filename-side1c && | ||||||
|  | 	side1cf=$(git hash-object filename-side1c) && | ||||||
| 	git add filename-side1c && | 	git add filename-side1c && | ||||||
| 	git commit -m with && | 	git commit -m with && | ||||||
| 	git checkout side2c && | 	git checkout side2c && | ||||||
| 	test_seq 1 9 >filename-side2c && | 	test_seq 1 9 >filename-side2c && | ||||||
| 	echo ten >>filename-side2c && | 	echo ten >>filename-side2c && | ||||||
|  | 	side2cf=$(git hash-object filename-side2c) && | ||||||
| 	git add filename-side2c && | 	git add filename-side2c && | ||||||
| 	git commit -m iam && | 	git commit -m iam && | ||||||
| 	git checkout -b mergery side1c && | 	git checkout -b mergery side1c && | ||||||
|  | @ -452,13 +454,14 @@ test_expect_success 'setup for --combined-all-paths' ' | ||||||
| 	git rm filename-side1c && | 	git rm filename-side1c && | ||||||
| 	echo eleven >>filename-side2c && | 	echo eleven >>filename-side2c && | ||||||
| 	git mv filename-side2c filename-merged && | 	git mv filename-side2c filename-merged && | ||||||
|  | 	mergedf=$(git hash-object filename-merged) && | ||||||
| 	git add filename-merged && | 	git add filename-merged && | ||||||
| 	git commit | 	git commit | ||||||
| ' | ' | ||||||
|  |  | ||||||
| test_expect_success '--combined-all-paths and --raw' ' | test_expect_success '--combined-all-paths and --raw' ' | ||||||
| 	cat <<-\EOF >expect && | 	cat <<-EOF >expect && | ||||||
| 	::100644 100644 100644 f00c965d8307308469e537302baa73048488f162 088bd5d92c2a8e0203ca8e7e4c2a5c692f6ae3f7 333b9c62519f285e1854830ade0fe1ef1d40ee1b RR	filename-side1c	filename-side2c	filename-merged | 	::100644 100644 100644 $side1cf $side2cf $mergedf RR	filename-side1c	filename-side2c	filename-merged | ||||||
| 	EOF | 	EOF | ||||||
| 	git diff-tree -c -M --raw --combined-all-paths HEAD >actual.tmp && | 	git diff-tree -c -M --raw --combined-all-paths HEAD >actual.tmp && | ||||||
| 	sed 1d <actual.tmp >actual && | 	sed 1d <actual.tmp >actual && | ||||||
|  | @ -482,11 +485,13 @@ test_expect_success FUNNYNAMES 'setup for --combined-all-paths with funny names' | ||||||
| 	git checkout side1d && | 	git checkout side1d && | ||||||
| 	test_seq 1 10 >"$(printf "file\twith\ttabs")" && | 	test_seq 1 10 >"$(printf "file\twith\ttabs")" && | ||||||
| 	git add file* && | 	git add file* && | ||||||
|  | 	side1df=$(git hash-object *tabs) && | ||||||
| 	git commit -m with && | 	git commit -m with && | ||||||
| 	git checkout side2d && | 	git checkout side2d && | ||||||
| 	test_seq 1 9 >"$(printf "i\tam\ttabbed")" && | 	test_seq 1 9 >"$(printf "i\tam\ttabbed")" && | ||||||
| 	echo ten >>"$(printf "i\tam\ttabbed")" && | 	echo ten >>"$(printf "i\tam\ttabbed")" && | ||||||
| 	git add *tabbed && | 	git add *tabbed && | ||||||
|  | 	side2df=$(git hash-object *tabbed) && | ||||||
| 	git commit -m iam && | 	git commit -m iam && | ||||||
| 	git checkout -b funny-names-mergery side1d && | 	git checkout -b funny-names-mergery side1d && | ||||||
| 	git merge --no-commit side2d && | 	git merge --no-commit side2d && | ||||||
|  | @ -494,12 +499,14 @@ test_expect_success FUNNYNAMES 'setup for --combined-all-paths with funny names' | ||||||
| 	echo eleven >>"$(printf "i\tam\ttabbed")" && | 	echo eleven >>"$(printf "i\tam\ttabbed")" && | ||||||
| 	git mv "$(printf "i\tam\ttabbed")" "$(printf "fickle\tnaming")" && | 	git mv "$(printf "i\tam\ttabbed")" "$(printf "fickle\tnaming")" && | ||||||
| 	git add fickle* && | 	git add fickle* && | ||||||
| 	git commit | 	headf=$(git hash-object fickle*) && | ||||||
|  | 	git commit && | ||||||
|  | 	head=$(git rev-parse HEAD) | ||||||
| ' | ' | ||||||
|  |  | ||||||
| test_expect_success FUNNYNAMES '--combined-all-paths and --raw and funny names' ' | test_expect_success FUNNYNAMES '--combined-all-paths and --raw and funny names' ' | ||||||
| 	cat <<-\EOF >expect && | 	cat <<-EOF >expect && | ||||||
| 	::100644 100644 100644 f00c965d8307308469e537302baa73048488f162 088bd5d92c2a8e0203ca8e7e4c2a5c692f6ae3f7 333b9c62519f285e1854830ade0fe1ef1d40ee1b RR	"file\twith\ttabs"	"i\tam\ttabbed"	"fickle\tnaming" | 	::100644 100644 100644 $side1df $side2df $headf RR	"file\twith\ttabs"	"i\tam\ttabbed"	"fickle\tnaming" | ||||||
| 	EOF | 	EOF | ||||||
| 	git diff-tree -c -M --raw --combined-all-paths HEAD >actual.tmp && | 	git diff-tree -c -M --raw --combined-all-paths HEAD >actual.tmp && | ||||||
| 	sed 1d <actual.tmp >actual && | 	sed 1d <actual.tmp >actual && | ||||||
|  | @ -507,7 +514,7 @@ test_expect_success FUNNYNAMES '--combined-all-paths and --raw and funny names' | ||||||
| ' | ' | ||||||
|  |  | ||||||
| test_expect_success FUNNYNAMES '--combined-all-paths and --raw -and -z and funny names' ' | test_expect_success FUNNYNAMES '--combined-all-paths and --raw -and -z and funny names' ' | ||||||
| 	printf "aaf8087c3cbd4db8e185a2d074cf27c53cfb75d7\0::100644 100644 100644 f00c965d8307308469e537302baa73048488f162 088bd5d92c2a8e0203ca8e7e4c2a5c692f6ae3f7 333b9c62519f285e1854830ade0fe1ef1d40ee1b RR\0file\twith\ttabs\0i\tam\ttabbed\0fickle\tnaming\0" >expect && | 	printf "$head\0::100644 100644 100644 $side1df $side2df $headf RR\0file\twith\ttabs\0i\tam\ttabbed\0fickle\tnaming\0" >expect && | ||||||
| 	git diff-tree -c -M --raw --combined-all-paths -z HEAD >actual && | 	git diff-tree -c -M --raw --combined-all-paths -z HEAD >actual && | ||||||
| 	test_cmp expect actual | 	test_cmp expect actual | ||||||
| ' | ' | ||||||
|  |  | ||||||
|  | @ -12,6 +12,7 @@ test_expect_success 'setup' ' | ||||||
| 	git commit -m zero && | 	git commit -m zero && | ||||||
| 	echo one > one && | 	echo one > one && | ||||||
| 	echo two > two && | 	echo two > two && | ||||||
|  | 	blob=$(git hash-object one) && | ||||||
| 	git add one two && | 	git add one two && | ||||||
| 	git commit -m onetwo && | 	git commit -m onetwo && | ||||||
| 	git update-index --assume-unchanged one && | 	git update-index --assume-unchanged one && | ||||||
|  | @ -20,7 +21,7 @@ test_expect_success 'setup' ' | ||||||
| ' | ' | ||||||
|  |  | ||||||
| test_expect_success 'diff-index does not examine assume-unchanged entries' ' | test_expect_success 'diff-index does not examine assume-unchanged entries' ' | ||||||
| 	git diff-index HEAD^ -- one | grep -q 5626abf0f72e58d7a153368ba57db4c673c0e171 | 	git diff-index HEAD^ -- one | grep -q $blob | ||||||
| ' | ' | ||||||
|  |  | ||||||
| test_expect_success 'diff-files does not examine assume-unchanged entries' ' | test_expect_success 'diff-files does not examine assume-unchanged entries' ' | ||||||
|  |  | ||||||
|  | @ -3,34 +3,48 @@ | ||||||
| test_description='test unique sha1 abbreviation on "index from..to" line' | test_description='test unique sha1 abbreviation on "index from..to" line' | ||||||
| . ./test-lib.sh | . ./test-lib.sh | ||||||
|  |  | ||||||
| if ! test_have_prereq SHA1 |  | ||||||
| then |  | ||||||
|        skip_all='not using SHA-1 for objects' |  | ||||||
|        test_done |  | ||||||
| fi |  | ||||||
|  |  | ||||||
| cat >expect_initial <<EOF |  | ||||||
| 100644 blob 51d2738463ea4ca66f8691c91e33ce64b7d41bb1	foo |  | ||||||
| EOF |  | ||||||
|  |  | ||||||
| cat >expect_update <<EOF |  | ||||||
| 100644 blob 51d2738efb4ad8a1e40bed839ab8e116f0a15e47	foo |  | ||||||
| EOF |  | ||||||
|  |  | ||||||
| test_expect_success 'setup' ' | test_expect_success 'setup' ' | ||||||
| 	echo 4827 > foo && | 	test_oid_cache <<-EOF && | ||||||
|  | 	val1 sha1:4827 | ||||||
|  | 	val1 sha256:5664 | ||||||
|  |  | ||||||
|  | 	val2 sha1:11742 | ||||||
|  | 	val2 sha256:10625 | ||||||
|  |  | ||||||
|  | 	hash1 sha1:51d2738463ea4ca66f8691c91e33ce64b7d41bb1 | ||||||
|  | 	hash1 sha256:ae31dfff0af93b2c62b0098a039b38569c43b0a7e97b873000ca42d128f27350 | ||||||
|  |  | ||||||
|  | 	hasht1 sha1:51d27384 | ||||||
|  | 	hasht1 sha256:ae31dfff | ||||||
|  |  | ||||||
|  | 	hash2 sha1:51d2738efb4ad8a1e40bed839ab8e116f0a15e47 | ||||||
|  | 	hash2 sha256:ae31dffada88a46fd5f53c7ed5aa25a7a8951f1d5e88456c317c8d5484d263e5 | ||||||
|  |  | ||||||
|  | 	hasht2 sha1:51d2738e | ||||||
|  | 	hasht2 sha256:ae31dffa | ||||||
|  | 	EOF | ||||||
|  |  | ||||||
|  | 	cat >expect_initial <<-EOF && | ||||||
|  | 	100644 blob $(test_oid hash1)	foo | ||||||
|  | 	EOF | ||||||
|  |  | ||||||
|  | 	cat >expect_update <<-EOF && | ||||||
|  | 	100644 blob $(test_oid hash2)	foo | ||||||
|  | 	EOF | ||||||
|  |  | ||||||
|  | 	echo "$(test_oid val1)" > foo && | ||||||
| 	git add foo && | 	git add foo && | ||||||
| 	git commit -m "initial" && | 	git commit -m "initial" && | ||||||
| 	git cat-file -p HEAD: > actual && | 	git cat-file -p HEAD: > actual && | ||||||
| 	test_cmp expect_initial actual && | 	test_cmp expect_initial actual && | ||||||
| 	echo 11742 > foo && | 	echo "$(test_oid val2)" > foo && | ||||||
| 	git commit -a -m "update" && | 	git commit -a -m "update" && | ||||||
| 	git cat-file -p HEAD: > actual && | 	git cat-file -p HEAD: > actual && | ||||||
| 	test_cmp expect_update actual | 	test_cmp expect_update actual | ||||||
| ' | ' | ||||||
|  |  | ||||||
| cat >expect <<EOF | cat >expect <<EOF | ||||||
| index 51d27384..51d2738e 100644 | index $(test_oid hasht1)..$(test_oid hasht2) 100644 | ||||||
| EOF | EOF | ||||||
|  |  | ||||||
| test_expect_success 'diff does not produce ambiguous index line' ' | test_expect_success 'diff does not produce ambiguous index line' ' | ||||||
|  |  | ||||||
|  | @ -70,7 +70,7 @@ check_raw () { | ||||||
| 	expect=$1 | 	expect=$1 | ||||||
| 	shift | 	shift | ||||||
| 	cat >expected <<-EOF | 	cat >expected <<-EOF | ||||||
| 	:000000 100644 0000000000000000000000000000000000000000 $blob A	$expect | 	:000000 100644 $ZERO_OID $blob A	$expect | ||||||
| 	EOF | 	EOF | ||||||
| 	test_expect_success "--raw $*" " | 	test_expect_success "--raw $*" " | ||||||
| 		git -C '$dir' diff --no-abbrev --raw $* HEAD^ >actual && | 		git -C '$dir' diff --no-abbrev --raw $* HEAD^ >actual && | ||||||
|  |  | ||||||
|  | @ -9,24 +9,27 @@ test_expect_success 'setup binary merge conflict' ' | ||||||
| 	git commit -m one && | 	git commit -m one && | ||||||
| 	echo twoQ2 | q_to_nul >binary && | 	echo twoQ2 | q_to_nul >binary && | ||||||
| 	git commit -a -m two && | 	git commit -a -m two && | ||||||
|  | 	two=$(git rev-parse --short HEAD:binary) && | ||||||
| 	git checkout -b branch-binary HEAD^ && | 	git checkout -b branch-binary HEAD^ && | ||||||
| 	echo threeQ3 | q_to_nul >binary && | 	echo threeQ3 | q_to_nul >binary && | ||||||
| 	git commit -a -m three && | 	git commit -a -m three && | ||||||
|  | 	three=$(git rev-parse --short HEAD:binary) && | ||||||
| 	test_must_fail git merge master && | 	test_must_fail git merge master && | ||||||
| 	echo resolvedQhooray | q_to_nul >binary && | 	echo resolvedQhooray | q_to_nul >binary && | ||||||
| 	git commit -a -m resolved | 	git commit -a -m resolved && | ||||||
|  | 	res=$(git rev-parse --short HEAD:binary) | ||||||
| ' | ' | ||||||
|  |  | ||||||
| cat >expect <<'EOF' | cat >expect <<EOF | ||||||
| resolved | resolved | ||||||
|  |  | ||||||
| diff --git a/binary b/binary | diff --git a/binary b/binary | ||||||
| index 7ea6ded..9563691 100644 | index $three..$res 100644 | ||||||
| Binary files a/binary and b/binary differ | Binary files a/binary and b/binary differ | ||||||
| resolved | resolved | ||||||
|  |  | ||||||
| diff --git a/binary b/binary | diff --git a/binary b/binary | ||||||
| index 6197570..9563691 100644 | index $two..$res 100644 | ||||||
| Binary files a/binary and b/binary differ | Binary files a/binary and b/binary differ | ||||||
| EOF | EOF | ||||||
| test_expect_success 'diff -m indicates binary-ness' ' | test_expect_success 'diff -m indicates binary-ness' ' | ||||||
|  | @ -34,11 +37,11 @@ test_expect_success 'diff -m indicates binary-ness' ' | ||||||
| 	test_cmp expect actual | 	test_cmp expect actual | ||||||
| ' | ' | ||||||
|  |  | ||||||
| cat >expect <<'EOF' | cat >expect <<EOF | ||||||
| resolved | resolved | ||||||
|  |  | ||||||
| diff --combined binary | diff --combined binary | ||||||
| index 7ea6ded,6197570..9563691 | index $three,$two..$res | ||||||
| Binary files differ | Binary files differ | ||||||
| EOF | EOF | ||||||
| test_expect_success 'diff -c indicates binary-ness' ' | test_expect_success 'diff -c indicates binary-ness' ' | ||||||
|  | @ -46,11 +49,11 @@ test_expect_success 'diff -c indicates binary-ness' ' | ||||||
| 	test_cmp expect actual | 	test_cmp expect actual | ||||||
| ' | ' | ||||||
|  |  | ||||||
| cat >expect <<'EOF' | cat >expect <<EOF | ||||||
| resolved | resolved | ||||||
|  |  | ||||||
| diff --cc binary | diff --cc binary | ||||||
| index 7ea6ded,6197570..9563691 | index $three,$two..$res | ||||||
| Binary files differ | Binary files differ | ||||||
| EOF | EOF | ||||||
| test_expect_success 'diff --cc indicates binary-ness' ' | test_expect_success 'diff --cc indicates binary-ness' ' | ||||||
|  | @ -62,23 +65,26 @@ test_expect_success 'setup non-binary with binary attribute' ' | ||||||
| 	git checkout master && | 	git checkout master && | ||||||
| 	test_commit one text && | 	test_commit one text && | ||||||
| 	test_commit two text && | 	test_commit two text && | ||||||
|  | 	two=$(git rev-parse --short HEAD:text) && | ||||||
| 	git checkout -b branch-text HEAD^ && | 	git checkout -b branch-text HEAD^ && | ||||||
| 	test_commit three text && | 	test_commit three text && | ||||||
|  | 	three=$(git rev-parse --short HEAD:text) && | ||||||
| 	test_must_fail git merge master && | 	test_must_fail git merge master && | ||||||
| 	test_commit resolved text && | 	test_commit resolved text && | ||||||
|  | 	res=$(git rev-parse --short HEAD:text) && | ||||||
| 	echo text -diff >.gitattributes | 	echo text -diff >.gitattributes | ||||||
| ' | ' | ||||||
|  |  | ||||||
| cat >expect <<'EOF' | cat >expect <<EOF | ||||||
| resolved | resolved | ||||||
|  |  | ||||||
| diff --git a/text b/text | diff --git a/text b/text | ||||||
| index 2bdf67a..2ab19ae 100644 | index $three..$res 100644 | ||||||
| Binary files a/text and b/text differ | Binary files a/text and b/text differ | ||||||
| resolved | resolved | ||||||
|  |  | ||||||
| diff --git a/text b/text | diff --git a/text b/text | ||||||
| index f719efd..2ab19ae 100644 | index $two..$res 100644 | ||||||
| Binary files a/text and b/text differ | Binary files a/text and b/text differ | ||||||
| EOF | EOF | ||||||
| test_expect_success 'diff -m respects binary attribute' ' | test_expect_success 'diff -m respects binary attribute' ' | ||||||
|  | @ -86,11 +92,11 @@ test_expect_success 'diff -m respects binary attribute' ' | ||||||
| 	test_cmp expect actual | 	test_cmp expect actual | ||||||
| ' | ' | ||||||
|  |  | ||||||
| cat >expect <<'EOF' | cat >expect <<EOF | ||||||
| resolved | resolved | ||||||
|  |  | ||||||
| diff --combined text | diff --combined text | ||||||
| index 2bdf67a,f719efd..2ab19ae | index $three,$two..$res | ||||||
| Binary files differ | Binary files differ | ||||||
| EOF | EOF | ||||||
| test_expect_success 'diff -c respects binary attribute' ' | test_expect_success 'diff -c respects binary attribute' ' | ||||||
|  | @ -98,11 +104,11 @@ test_expect_success 'diff -c respects binary attribute' ' | ||||||
| 	test_cmp expect actual | 	test_cmp expect actual | ||||||
| ' | ' | ||||||
|  |  | ||||||
| cat >expect <<'EOF' | cat >expect <<EOF | ||||||
| resolved | resolved | ||||||
|  |  | ||||||
| diff --cc text | diff --cc text | ||||||
| index 2bdf67a,f719efd..2ab19ae | index $three,$two..$res | ||||||
| Binary files differ | Binary files differ | ||||||
| EOF | EOF | ||||||
| test_expect_success 'diff --cc respects binary attribute' ' | test_expect_success 'diff --cc respects binary attribute' ' | ||||||
|  | @ -115,11 +121,11 @@ test_expect_success 'setup textconv attribute' ' | ||||||
| 	git config diff.upcase.textconv "tr a-z A-Z <" | 	git config diff.upcase.textconv "tr a-z A-Z <" | ||||||
| ' | ' | ||||||
|  |  | ||||||
| cat >expect <<'EOF' | cat >expect <<EOF | ||||||
| resolved | resolved | ||||||
|  |  | ||||||
| diff --git a/text b/text | diff --git a/text b/text | ||||||
| index 2bdf67a..2ab19ae 100644 | index $three..$res 100644 | ||||||
| --- a/text | --- a/text | ||||||
| +++ b/text | +++ b/text | ||||||
| @@ -1 +1 @@ | @@ -1 +1 @@ | ||||||
|  | @ -128,7 +134,7 @@ index 2bdf67a..2ab19ae 100644 | ||||||
| resolved | resolved | ||||||
|  |  | ||||||
| diff --git a/text b/text | diff --git a/text b/text | ||||||
| index f719efd..2ab19ae 100644 | index $two..$res 100644 | ||||||
| --- a/text | --- a/text | ||||||
| +++ b/text | +++ b/text | ||||||
| @@ -1 +1 @@ | @@ -1 +1 @@ | ||||||
|  | @ -140,11 +146,11 @@ test_expect_success 'diff -m respects textconv attribute' ' | ||||||
| 	test_cmp expect actual | 	test_cmp expect actual | ||||||
| ' | ' | ||||||
|  |  | ||||||
| cat >expect <<'EOF' | cat >expect <<EOF | ||||||
| resolved | resolved | ||||||
|  |  | ||||||
| diff --combined text | diff --combined text | ||||||
| index 2bdf67a,f719efd..2ab19ae | index $three,$two..$res | ||||||
| --- a/text | --- a/text | ||||||
| +++ b/text | +++ b/text | ||||||
| @@@ -1,1 -1,1 +1,1 @@@ | @@@ -1,1 -1,1 +1,1 @@@ | ||||||
|  | @ -157,11 +163,11 @@ test_expect_success 'diff -c respects textconv attribute' ' | ||||||
| 	test_cmp expect actual | 	test_cmp expect actual | ||||||
| ' | ' | ||||||
|  |  | ||||||
| cat >expect <<'EOF' | cat >expect <<EOF | ||||||
| resolved | resolved | ||||||
|  |  | ||||||
| diff --cc text | diff --cc text | ||||||
| index 2bdf67a,f719efd..2ab19ae | index $three,$two..$res | ||||||
| --- a/text | --- a/text | ||||||
| +++ b/text | +++ b/text | ||||||
| @@@ -1,1 -1,1 +1,1 @@@ | @@@ -1,1 -1,1 +1,1 @@@ | ||||||
|  | @ -174,9 +180,9 @@ test_expect_success 'diff --cc respects textconv attribute' ' | ||||||
| 	test_cmp expect actual | 	test_cmp expect actual | ||||||
| ' | ' | ||||||
|  |  | ||||||
| cat >expect <<'EOF' | cat >expect <<EOF | ||||||
| diff --combined text | diff --combined text | ||||||
| index 2bdf67a,f719efd..2ab19ae | index $three,$two..$res | ||||||
| --- a/text | --- a/text | ||||||
| +++ b/text | +++ b/text | ||||||
| @@@ -1,1 -1,1 +1,1 @@@ | @@@ -1,1 -1,1 +1,1 @@@ | ||||||
|  | @ -190,9 +196,9 @@ test_expect_success 'diff-tree plumbing does not respect textconv' ' | ||||||
| 	test_cmp expect actual | 	test_cmp expect actual | ||||||
| ' | ' | ||||||
|  |  | ||||||
| cat >expect <<'EOF' | cat >expect <<EOF | ||||||
| diff --cc text | diff --cc text | ||||||
| index 2bdf67a,f719efd..0000000 | index $three,$two..0000000 | ||||||
| --- a/text | --- a/text | ||||||
| +++ b/text | +++ b/text | ||||||
| @@@ -1,1 -1,1 +1,5 @@@ | @@@ -1,1 -1,1 +1,5 @@@ | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	 Junio C Hamano
						Junio C Hamano