[PATCH] apply: squash consecutive slashes with p_value > 0
From: Robie Basak <hidden>
Date: 2016-06-15 22:52:29
Subsystem:
the rest · Maintainer:
Linus Torvalds
"patch" works with -p1 and diffs in the following form:
--- foo.orig//bar
+++ foo//bar
...
patch(1) says that "A sequence of one or more adjacent slashes is
counted as a single slash."
This patch amends git-apply's filename parsing to behave in the same
way, eliminating both '/'s with -p1 in this example.
Test case included.
Signed-off-by: Robie Basak <redacted>
---
builtin/apply.c | 8 ++++++--
t/t4153-apply-doubleslash.sh | 29 +++++++++++++++++++++++++++++
2 files changed, 35 insertions(+), 2 deletions(-)
create mode 100755 t/t4153-apply-doubleslash.sh
diff --git a/builtin/apply.c b/builtin/apply.c
index 84a8a0b..78e25fa 100644
--- a/builtin/apply.c
+++ b/builtin/apply.c@@ -627,9 +627,13 @@ static char *find_name_common(const char *line, char *def, int p_value, if (name_terminate(start, line-start, c, terminate)) break; } - line++; - if (c == '/' && !--p_value) + if (c == '/' && !--p_value) { + while (*line == '/') + line++; start = line; + } else { + line++; + } } if (!start) return squash_slash(def);
diff --git a/t/t4153-apply-doubleslash.sh b/t/t4153-apply-doubleslash.sh
new file mode 100755
index 0000000..1ea76b5
--- /dev/null
+++ b/t/t4153-apply-doubleslash.sh@@ -0,0 +1,29 @@ +#!/bin/sh +# +# Copyright (c) 2011 Canonical Ltd. +# + +test_description='git apply filenames with double slashes + +Try to apply a patch with git-apply where the filename specified has a double +slash after the first (to-be-stripped) component' + +. ./test-lib.sh + +test_expect_success setup ' + test_commit 1 f && + cat > good.patch <<EOF +diff -u a//f b//f +--- a//f ++++ b//f +@@ -1 +1 @@ +-1 ++2 +EOF +' + +test_expect_success 'apply diff with double slashes in filenames' ' + git apply good.patch 2>err +' + +test_done
--
1.7.5.4