Commit 4e746d80d229a77b08c5689a64d880bde5fd960f

Edward Thomson 2018-11-05T15:49:11

test: ensure applying a patch can't delete a file twice

diff --git a/tests/apply/apply_helpers.h b/tests/apply/apply_helpers.h
index 9cc9e44..8156335 100644
--- a/tests/apply/apply_helpers.h
+++ b/tests/apply/apply_helpers.h
@@ -419,6 +419,40 @@
 	"@@ -0,0 +1 @@\n" \
 	"+New file.\n" \
 
+#define DIFF_REMOVE_FILE_TWICE \
+	"diff --git a/asparagus.txt b/asparagus.txt\n" \
+	"deleted file mode 100644\n" \
+	"index f516580..0000000\n" \
+	"--- a/asparagus.txt\n" \
+	"+++ /dev/null\n" \
+	"@@ -1,10 +0,0 @@\n" \
+	"-ASPARAGUS SOUP!\n" \
+	"-\n" \
+	"-Take four large bunches of asparagus, scrape it nicely, cut off one inch\n" \
+	"-of the tops, and lay them in water, chop the stalks and put them on the\n" \
+	"-fire with a piece of bacon, a large onion cut up, and pepper and salt;\n" \
+	"-add two quarts of water, boil them till the stalks are quite soft, then\n" \
+	"-pulp them through a sieve, and strain the water to it, which must be put\n" \
+	"-back in the pot; put into it a chicken cut up, with the tops of\n" \
+	"-asparagus which had been laid by, boil it until these last articles are\n" \
+	"-sufficiently done, thicken with flour, butter and milk, and serve it up.\n" \
+	"diff --git a/asparagus.txt b/asparagus.txt\n" \
+	"deleted file mode 100644\n" \
+	"index f516580..0000000\n" \
+	"--- a/asparagus.txt\n" \
+	"+++ /dev/null\n" \
+	"@@ -1,10 +0,0 @@\n" \
+	"-ASPARAGUS SOUP!\n" \
+	"-\n" \
+	"-Take four large bunches of asparagus, scrape it nicely, cut off one inch\n" \
+	"-of the tops, and lay them in water, chop the stalks and put them on the\n" \
+	"-fire with a piece of bacon, a large onion cut up, and pepper and salt;\n" \
+	"-add two quarts of water, boil them till the stalks are quite soft, then\n" \
+	"-pulp them through a sieve, and strain the water to it, which must be put\n" \
+	"-back in the pot; put into it a chicken cut up, with the tops of\n" \
+	"-asparagus which had been laid by, boil it until these last articles are\n" \
+	"-sufficiently done, thicken with flour, butter and milk, and serve it up.\n"
+
 struct iterator_compare_data {
 	struct merge_index_entry *expected;
 	size_t cnt;
diff --git a/tests/apply/both.c b/tests/apply/both.c
index cac5acb..5091b8c 100644
--- a/tests/apply/both.c
+++ b/tests/apply/both.c
@@ -723,3 +723,14 @@ void test_apply_both__readd_deleted_file(void)
 
 	git_diff_free(diff);
 }
+
+void test_apply_both__cant_remove_file_twice(void)
+{
+	git_diff *diff;
+
+	cl_git_pass(git_diff_from_buffer(&diff, DIFF_REMOVE_FILE_TWICE,
+		strlen(DIFF_REMOVE_FILE_TWICE)));
+	cl_git_fail(git_apply(repo, diff, GIT_APPLY_LOCATION_BOTH, NULL));
+
+	git_diff_free(diff);
+}