Thread (3 messages) 3 messages, 2 authors, 2026-02-18

Re: [PATCH] apply: strip ./ prefix from --directory argument

From: Patrick Steinhardt <hidden>
Date: 2026-02-17 08:06:59
Subsystem: the rest · Maintainer: Linus Torvalds

On Fri, Feb 13, 2026 at 05:08:30PM +0000, Joaquim Rocha via GitGitGadget wrote:
From: Joaquim Rocha <redacted>

When passing a relative path like --directory=./some/sub, the leading
"./" caused apply to prepend it literally to patch filenames, resulting
in an error (invalid path).

Since using "./" is almost memory muscle for many, strip the "./"
prefix so it behaves the same as --directory=some/sub.
Isn't the problem wider than that though? For example, if you had
"././some/sub" it would break again. Or if you had "some/./sub", or
"some/sub/../sub", or "some//sub".
quoted hunk ↗ jump to hunk
diff --git a/apply.c b/apply.c
index 3de4aa4d2e..a44c54077c 100644
--- a/apply.c
+++ b/apply.c
@@ -5001,6 +5001,10 @@ static int apply_option_parse_directory(const struct option *opt,
 	BUG_ON_OPT_NEG(unset);
 
 	strbuf_reset(&state->root);
+
+	if (starts_with(arg, "./"))
+		arg += 2;
+
 	strbuf_addstr(&state->root, arg);
 	strbuf_complete(&state->root, '/');
 	return 0;
While this change here fixes your observed issues, the next person might
run into a totally different one. So more generally, I think what we'd
rather want to do is to fully normalize the path. How about this
instead:
diff --git a/apply.c b/apply.c
index 9de2eb953e..8946b133a3 100644
--- a/apply.c
+++ b/apply.c
@@ -5002,6 +5002,7 @@ static int apply_option_parse_directory(const struct option *opt,
 
 	strbuf_reset(&state->root);
 	strbuf_addstr(&state->root, arg);
+	strbuf_normalize_path(&state->root);
 	strbuf_complete(&state->root, '/');
 	return 0;
 }
`strbuf_normalize_path()` drops "." components, removes ".." and it
squashes multiple directory separators. So it handles your specific use
case, but also others.

Thanks!

Patrick
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help