From c4593faf2df8f9c5e8ac409e40be991294a73e54 Mon Sep 17 00:00:00 2001 From: Junio C Hamano Date: Fri, 10 Jul 2009 18:38:08 -0700 Subject: apply: notice creation/removal patches produced by GNU diff Unified context patch generated by GNU diff has UNIX epoch timestamp on the side that does not exist when the patch is about a creation or a deletion event. Notice this convention when reading a non-git diff. Signed-off-by: Junio C Hamano --- t/t4132-apply-removal.sh | 95 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100755 t/t4132-apply-removal.sh (limited to 't/t4132-apply-removal.sh') diff --git a/t/t4132-apply-removal.sh b/t/t4132-apply-removal.sh new file mode 100755 index 0000000000..bb1ffe3b6c --- /dev/null +++ b/t/t4132-apply-removal.sh @@ -0,0 +1,95 @@ +#!/bin/sh +# +# Copyright (c) 2009 Junio C Hamano + +test_description='git-apply notices removal patches generated by GNU diff' + +. ./test-lib.sh + +test_expect_success setup ' + cat <<-EOF >c && + diff -ruN a/file b/file + --- a/file TS0 + +++ b/file TS1 + @@ -0,0 +1 @@ + +something + EOF + + cat <<-EOF >d && + diff -ruN a/file b/file + --- a/file TS0 + +++ b/file TS1 + @@ -1 +0,0 @@ + -something + EOF + + timeWest="1982-09-16 07:00:00.000000000 -0800" && + timeGMT="1982-09-16 15:00:00.000000000 +0000" && + timeEast="1982-09-17 00:00:00.000000000 +0900" && + + epocWest="1969-12-31 16:00:00.000000000 -0800" && + epocGMT="1970-01-01 00:00:00.000000000 +0000" && + epocEast="1970-01-01 09:00:00.000000000 +0900" && + + sed -e "s/TS0/$epocWest/" -e "s/TS1/$timeWest/" createWest.patch && + sed -e "s/TS0/$epocEast/" -e "s/TS1/$timeEast/" createEast.patch && + sed -e "s/TS0/$epocGMT/" -e "s/TS1/$timeGMT/" createGMT.patch && + + sed -e "s/TS0/$timeWest/" -e "s/TS1/$timeWest/" addWest.patch && + sed -e "s/TS0/$timeEast/" -e "s/TS1/$timeEast/" addEast.patch && + sed -e "s/TS0/$timeGMT/" -e "s/TS1/$timeGMT/" addGMT.patch && + + sed -e "s/TS0/$timeWest/" -e "s/TS1/$timeWest/" emptyWest.patch && + sed -e "s/TS0/$timeEast/" -e "s/TS1/$timeEast/" emptyEast.patch && + sed -e "s/TS0/$timeGMT/" -e "s/TS1/$timeGMT/" emptyGMT.patch && + + sed -e "s/TS0/$timeWest/" -e "s/TS1/$epocWest/" removeWest.patch && + sed -e "s/TS0/$timeEast/" -e "s/TS1/$epocEast/" removeEast.patch && + sed -e "s/TS0/$timeGMT/" -e "s/TS1/$epocGMT/" removeGMT.patch && + + echo something >something && + >empty +' + +for patch in *.patch +do + test_expect_success "test $patch" ' + rm -f file .git/index && + case "$patch" in + create*) + # must be able to create + git apply --index $patch && + test_cmp file something && + # must notice the file is already there + >file && + git add file && + test_must_fail git apply $patch + ;; + add*) + # must be able to create or patch + git apply $patch && + test_cmp file something && + >file && + git apply $patch && + test_cmp file something + ;; + empty*) + # must leave an empty file + cat something >file && + git add file && + git apply --index $patch && + test -f file && + test_cmp empty file + ;; + remove*) + # must remove the file + cat something >file && + git add file && + git apply --index $patch && + ! test -f file + ;; + esac + ' +done + +test_done -- cgit v1.2.1