diff options
author | Junio C Hamano <gitster@pobox.com> | 2008-05-17 02:02:44 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2008-05-17 02:57:33 -0700 |
commit | 032bea55a3fda805382398020657f738b8176729 (patch) | |
tree | 53e7b5693c5d337202aa7058504e11b3e380534e /t/t4126-apply-empty.sh | |
parent | 5c47f4c6e71e6de08348f837f38a446a2f2b0ed7 (diff) | |
download | git-032bea55a3fda805382398020657f738b8176729.tar.gz |
builtin-apply: do not declare patch is creation when we do not know it
When we see no context nor deleted line in the patch, we used to declare
that the patch creates a new file. But some people create an empty file
and then apply a patch to it. Similarly, a patch that delete everything
is not a deletion patch either.
This commit corrects these two issues. Together with the previous commit,
it allows a diff between an empty file and a line-ful file to be treated
as both creation patch and "add stuff to an existing empty file",
depending on the context. A new test t4126 demonstrates the fix.
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 't/t4126-apply-empty.sh')
-rwxr-xr-x | t/t4126-apply-empty.sh | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/t/t4126-apply-empty.sh b/t/t4126-apply-empty.sh new file mode 100755 index 0000000000..0cfd47cfcf --- /dev/null +++ b/t/t4126-apply-empty.sh @@ -0,0 +1,61 @@ +#!/bin/sh + +test_description='apply empty' + +. ./test-lib.sh + +test_expect_success setup ' + >empty && + git add empty && + test_tick && + git commit -m initial && + for i in a b c d e + do + echo $i + done >empty && + cat empty >expect && + git diff | + sed -e "/^diff --git/d" \ + -e "/^index /d" \ + -e "s|a/empty|empty.orig|" \ + -e "s|b/empty|empty|" >patch0 && + sed -e "s|empty|missing|" patch0 >patch1 && + >empty && + git update-index --refresh +' + +test_expect_success 'apply empty' ' + git reset --hard && + >empty && + rm -f missing && + git apply patch0 && + test_cmp expect empty +' + +test_expect_success 'apply --index empty' ' + git reset --hard && + >empty && + rm -f missing && + git apply --index patch0 && + test_cmp expect empty && + git diff --exit-code +' + +test_expect_success 'apply create' ' + git reset --hard && + >empty && + rm -f missing && + git apply patch1 && + test_cmp expect missing +' + +test_expect_success 'apply --index create' ' + git reset --hard && + >empty && + rm -f missing && + git apply --index patch1 && + test_cmp expect missing && + git diff --exit-code +' + +test_done |