threads / patch / 7511

patchHonor -p<n> when applying git diffs

Subject: [PATCH] Honor -p<n> when applying git diffs

## tl;dr

2 messages between Apr 4, 2007 and Apr 5, 2007. Diffs are folded; open one to read it.

replies: 1people: 2as markdown or json

Shawn O. Pearce· Apr 4, 2007, 15:19 UTC · lore

If the user is trying to apply a Git generated diff file and they have specified a -p<n> option, where <n> is not 1, the user probably has a good reason for doing this. Such as they are me, trying to apply a patch generated in git.git for the git-gui subdirectory to the git-gui.git repository, where there is no git-gui subdirectory present.

Users shouldn't supply -p2 unless they mean it. But if they are supplying it, they probably have thought about how to make this patch apply to their working directory, and want to risk whatever results may come from that.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
---
 builtin-apply.c       |    4 ++--
 t/t4120-apply-popt.sh |   25 +++++++++++++++++++++++++
 2 files changed, 27 insertions(+), 2 deletions(-)
 create mode 100755 t/t4120-apply-popt.sh
Show changes to 2 files +27 −2

builtin-apply.c, t/t4120-apply-popt.sh

diff --git a/builtin-apply.c b/builtin-apply.c
index 27a182b..a5d6126 100644
--- a/builtin-apply.c
+++ b/builtin-apply.c
@@ -417,7 +417,7 @@ static int gitdiff_hdrend(const char *line, struct patch *patch)
 static char *gitdiff_verify_name(const char *line, int isnull, char *orig_name, const char *oldnew)
 {
 	if (!orig_name && !isnull)
-		return find_name(line, NULL, 1, TERM_TAB);
+		return find_name(line, NULL, p_value, TERM_TAB);
 
 	if (orig_name) {
 		int len;
@@ -427,7 +427,7 @@ static char *gitdiff_verify_name(const char *line, int isnull, char *orig_name,
 		len = strlen(name);
 		if (isnull)
 			die("git-apply: bad git-diff - expected /dev/null, got %s on line %d", name, linenr);
-		another = find_name(line, NULL, 1, TERM_TAB);
+		another = find_name(line, NULL, p_value, TERM_TAB);
 		if (!another || memcmp(another, name, len))
 			die("git-apply: bad git-diff - inconsistent %s filename on line %d", oldnew, linenr);
 		free(another);
diff --git a/t/t4120-apply-popt.sh b/t/t4120-apply-popt.sh
new file mode 100755
index 0000000..2f672f3
--- /dev/null
+++ b/t/t4120-apply-popt.sh
@@ -0,0 +1,25 @@
+#!/bin/sh
+#
+# Copyright (c) 2007 Shawn O. Pearce
+#
+
+test_description='git-apply -p handling.'
+
+. ./test-lib.sh
+
+test_expect_success setup '
+	mkdir sub &&
+	echo A >sub/file1 &&
+	cp sub/file1 file1 &&
+	git add sub/file1 &&
+	echo B >sub/file1 &&
+	git diff >patch.file &&
+	rm sub/file1 &&
+	rmdir sub
+'
+
+test_expect_success 'apply git diff with -p2' '
+	git apply -p2 patch.file
+'
+
+test_done
-- 
1.5.1.rc3.672.gf5329
Junio C Hamano· Apr 5, 2007, 05:15 UTC · re: Shawn O. Pearce · lore

Re: [PATCH] Honor -p<n> when applying git diffs

"Shawn O. Pearce" <spearce@spearce.org> writes:
Show 6 quoted lines
> If the user is trying to apply a Git generated diff file and they
> have specified a -p<n> option, where <n> is not 1, the user probably
> has a good reason for doing this.  Such as they are me, trying to
> apply a patch generated in git.git for the git-gui subdirectory to
> the git-gui.git repository, where there is no git-gui subdirectory
> present.
Good point.

← back to recent threads