git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCHv2 5/6] builtin/grep.c: respect 'submodule.recurse' option

From
Stefan Beller <sbeller@google.com>
Date
May 22, 2017, 19:48 UTC
Message-ID
<20170522194806.13568-6-sbeller@google.com>
In-Reply-To
<20170522194806.13568-1-sbeller@google.com>

In builtin/grep.c we parse the config before evaluating the command line options. This makes the task of teaching grep to respect the new config option 'submodule.recurse' very easy by just parsing that option.

As an alternative I had implemented a similar structure to treat
submodules as the fetch/push command have, including
* aligning the meaning of the 'recurse_submodules' to possible submodule
  values RECURSE_SUBMODULES_* as defined in submodule.h.
* having a callback to parse the value and
* reacting to the RECURSE_SUBMODULES_DEFAULT state that was the initial
  state.

However all this is not needed for a true boolean value, so let's keep it simple. However this adds another place where "submodule.recurse" is parsed.

Signed-off-by: Stefan Beller <sbeller@google.com>
---
 builtin/grep.c                     |  3 +++
 t/t7814-grep-recurse-submodules.sh | 18 ++++++++++++++++++
 2 files changed, 21 insertions(+)
diff --git a/builtin/grep.c b/builtin/grep.c
index 65070c52fc..7b998801fe 100644
--- a/builtin/grep.c
+++ b/builtin/grep.c
@@ -291,6 +291,9 @@ static int grep_cmd_config(const char *var, const char *value, void *cb)
 			    num_threads, var);
 	}
 
+	if (!strcmp(var, "submodule.recurse"))
+		recurse_submodules = git_config_bool(var, value);
+
 	return st;
 }
 
diff --git a/t/t7814-grep-recurse-submodules.sh b/t/t7814-grep-recurse-submodules.sh
index 5b6eb3a65e..234d2d188b 100755
--- a/t/t7814-grep-recurse-submodules.sh
+++ b/t/t7814-grep-recurse-submodules.sh
@@ -33,6 +33,24 @@ test_expect_success 'grep correctly finds patterns in a submodule' '
 	test_cmp expect actual
 '
 
+test_expect_success 'grep finds patterns in a submodule via config' '
+	test_config submodule.recurse true &&
+	# expect from previous test
+	git grep -e "bar" >actual &&
+	test_cmp expect actual
+'
+
+test_expect_success 'grep --no-recurse-submodules overrides config' '
+	test_config submodule.recurse true &&
+	cat >expect <<-\EOF &&
+	a:foobar
+	b/b:bar
+	EOF
+
+	git grep -e "bar" --no-recurse-submodules >actual &&
+	test_cmp expect actual
+'
+
 test_expect_success 'grep and basic pathspecs' '
 	cat >expect <<-\EOF &&
 	submodule/a:foobar
-- 
2.13.0.18.g7d86cc8ba0
Previous: Stefan BellerNext: Stefan Beller
Message 6 of 11 in “[PATCHv2 0/6] Add option to recurse into submodules”
  1. Stefan BellerMay 22, 2017
  2. 3/6 Introduce submodule.recurse option for worktree manipulatorsStefan Beller, May 22, 2017
  3. 2/6 submodule test invocation: only pass additional argumentsStefan Beller, May 22, 2017
  4. Junio C HamanoMay 23, 2017
  5. Stefan BellerMay 23, 2017
  6. 5/6 builtin/grep.c: respect 'submodule.recurse' optionStefan Beller, May 22, 2017
  7. 4/6 builtin/fetch.c: respect 'submodule.recurse' optionStefan Beller, May 22, 2017
  8. 6/6 builtin/push.c: respect 'submodule.recurse' optionStefan Beller, May 22, 2017
  9. 1/6 submodule.c: add has_submodules to check if we have any submodulesStefan Beller, May 22, 2017
  10. Brandon WilliamsMay 23, 2017
  11. Stefan BellerMay 23, 2017

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.