[PATCH 3/5] grep: fix bug when recuring with relative pathspec
From: Brandon Williams <hidden>
Date: 2017-02-24 23:51:21
Subsystem:
the rest · Maintainer:
Linus Torvalds
Fix a bug which causes a child process for a submodule to error out when a relative pathspec with a ".." is provided in the superproject. While at it, correctly construct the super-prefix to be used in a submodule when not at the root of the repository. Signed-off-by: Brandon Williams <redacted> --- builtin/grep.c | 8 ++++++-- t/t7814-grep-recurse-submodules.sh | 2 +- 2 files changed, 7 insertions(+), 3 deletions(-)
diff --git a/builtin/grep.c b/builtin/grep.c
index 2c727ef49..65f3413d1 100644
--- a/builtin/grep.c
+++ b/builtin/grep.c@@ -538,6 +538,7 @@ static int grep_submodule_launch(struct grep_opt *opt, int status, i; const char *end_of_base; const char *name; + struct strbuf buf = STRBUF_INIT; struct work_item *w = opt->output_priv; end_of_base = strchr(gs->name, ':');
@@ -550,9 +551,11 @@ static int grep_submodule_launch(struct grep_opt *opt, argv_array_push(&cp.env_array, GIT_DIR_ENVIRONMENT); /* Add super prefix */ + quote_path_relative(name, opt->prefix, &buf); argv_array_pushf(&cp.args, "--super-prefix=%s%s/", super_prefix ? super_prefix : "", - name); + buf.buf); + strbuf_release(&buf); argv_array_push(&cp.args, "grep"); /*
@@ -1199,7 +1202,8 @@ int cmd_grep(int argc, const char **argv, const char *prefix) parse_pathspec(&pathspec, 0, PATHSPEC_PREFER_CWD | - (opt.max_depth != -1 ? PATHSPEC_MAXDEPTH_VALID : 0), + (opt.max_depth != -1 ? PATHSPEC_MAXDEPTH_VALID : 0) | + (super_prefix ? PATHSPEC_FROMROOT : 0), prefix, argv + i); pathspec.max_depth = opt.max_depth; pathspec.recursive = 1;
diff --git a/t/t7814-grep-recurse-submodules.sh b/t/t7814-grep-recurse-submodules.sh
index 418ba68fe..e0932b2b7 100755
--- a/t/t7814-grep-recurse-submodules.sh
+++ b/t/t7814-grep-recurse-submodules.sh@@ -227,7 +227,7 @@ test_expect_success 'grep history with moved submoules' ' test_cmp expect actual ' -test_expect_failure 'grep using relative path' ' +test_expect_success 'grep using relative path' ' test_when_finished "rm -rf parent sub" && git init sub && echo "foobar" >sub/file &&
--
2.11.0.483.g087da7b7c-goog