mirror of
https://github.com/git/git.git
synced 2024-12-12 11:24:02 +08:00
467ddc14fe
When reviewing a patch while concentrating primarily on the text after then change, wading through pages of deleted text involves a cognitive burden. Introduce the -D option that omits the preimage text from the patch output for deleted files. When used with -B (represent total rewrite as a single wholesale deletion followed by a single wholesale addition), the preimage text is also omitted. To prevent such a patch from being applied by mistake, the output is designed not to be usable by "git apply" (or GNU "patch"); it is strictly for human consumption. It of course is possible to "apply" such a patch by hand, as a human can read the intention out of such a patch. It however is impossible to apply such a patch even manually in reverse, as the whole point of this option is to omit the information necessary to do so from the output. Initial request by Mart Sõmermaa, documentation and tests helped by Michael J Gruber. Signed-off-by: Michael J Gruber <git@drmicha.warpmail.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
71 lines
1.3 KiB
Bash
Executable File
71 lines
1.3 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
test_description='rewrite diff'
|
|
|
|
. ./test-lib.sh
|
|
|
|
test_expect_success setup '
|
|
|
|
cat "$TEST_DIRECTORY"/../COPYING >test &&
|
|
git add test &&
|
|
tr \
|
|
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" \
|
|
"nopqrstuvwxyzabcdefghijklmNOPQRSTUVWXYZABCDEFGHIJKLM" \
|
|
<"$TEST_DIRECTORY"/../COPYING >test &&
|
|
echo "to be deleted" >test2 &&
|
|
git add test2
|
|
|
|
'
|
|
|
|
test_expect_success 'detect rewrite' '
|
|
|
|
actual=$(git diff-files -B --summary test) &&
|
|
expr "$actual" : " rewrite test ([0-9]*%)$" || {
|
|
echo "Eh? <<$actual>>"
|
|
false
|
|
}
|
|
|
|
'
|
|
|
|
cat >expect <<EOF
|
|
diff --git a/test2 b/test2
|
|
deleted file mode 100644
|
|
index 4202011..0000000
|
|
--- a/test2
|
|
+++ /dev/null
|
|
@@ -1 +0,0 @@
|
|
-to be deleted
|
|
EOF
|
|
test_expect_success 'show deletion diff without -D' '
|
|
|
|
rm test2 &&
|
|
git diff -- test2 >actual &&
|
|
test_cmp expect actual
|
|
'
|
|
|
|
cat >expect <<EOF
|
|
diff --git a/test2 b/test2
|
|
deleted file mode 100644
|
|
index 4202011..0000000
|
|
EOF
|
|
test_expect_success 'suppress deletion diff with -D' '
|
|
|
|
git diff -D -- test2 >actual &&
|
|
test_cmp expect actual
|
|
'
|
|
|
|
test_expect_success 'show deletion diff with -B' '
|
|
|
|
git diff -B -- test >actual &&
|
|
grep "Linus Torvalds" actual
|
|
'
|
|
|
|
test_expect_success 'suppress deletion diff with -B -D' '
|
|
|
|
git diff -B -D -- test >actual &&
|
|
grep -v "Linus Torvalds" actual
|
|
'
|
|
|
|
test_done
|
|
|