[PATCH 2/9] Fix detection of files with only one line in git-apply.
From: Robert Fitzsimons <hidden>
Date: 2016-06-15 22:42:05
Subsystem:
the rest · Maintainer:
Linus Torvalds
A patch which added one line to an empty file or removed the only line from a one line file would be incorrectly detected as an invalid new or delete patch. Added a new test case. Signed-off-by: Robert Fitzsimons <redacted> --- apply.c | 4 ++-- t/t4103-apply-oneline.sh | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+), 2 deletions(-) create mode 100644 t/t4103-apply-oneline.sh babd40afef54b06775b11a877b347685edbedcd2
diff --git a/apply.c b/apply.c
--- a/apply.c
+++ b/apply.c@@ -638,9 +638,9 @@ static int parse_fragment(char *line, un patch->new_name = NULL; } - if (patch->is_new != !oldlines) + if (patch->is_new && (patch->is_new != !oldlines)) return error("new file depends on old contents"); - if (patch->is_delete != !newlines) { + if (patch->is_delete && (patch->is_delete != !newlines)) { if (newlines) return error("deleted file still has contents"); fprintf(stderr, "** warning: file %s becomes empty but is not deleted\n", patch->new_name);
diff --git a/t/t4103-apply-oneline.sh b/t/t4103-apply-oneline.sh
new file mode 100644
--- /dev/null
+++ b/t/t4103-apply-oneline.sh@@ -0,0 +1,46 @@ +#!/bin/sh +# +# Copyright (c) 2005 Junio C Hamano +# Copyright (c) 2005 Robert Fitzsimons +# + +test_description='git-apply files with one line. + +' +. ./test-lib.sh + +# setup + +cat > patch1.patch <<\EOF +diff --git a/main.c b/main.c +new file mode 100644 +--- /dev/null ++++ b/main.c +@@ -0,0 +0,0 @@ +EOF +cat > patch2.patch <<\EOF +diff --git a/main.c b/main.c +--- a/main.c ++++ b/main.c +@@ -0,0 +1,1 @@ ++#include <stdio.h> +EOF +cat > patch3.patch <<\EOF +diff --git a/main.c b/main.c +--- a/main.c ++++ b/main.c +@@ -1,1 +0,0 @@ +-#include <stdio.h> +EOF + +test_expect_success "S = patch1 (new file with no lines)" \ + 'git-apply patch1.patch' + +test_expect_success "S = patch2 (add one line)" \ + 'git-apply patch2.patch' + +test_expect_success "S = patch3 (delete one line)" \ + 'git-apply patch3.patch' + +test_done +