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

[RFC_PATCHv4 7/7] WIP status/diff: respect submodule.actionOnLabel

From
Stefan Beller <sbeller@google.com>
Date
Mar 22, 2016, 02:06 UTC
Message-ID
<1458612372-10966-8-git-send-email-sbeller@google.com>
In-Reply-To
<1458612372-10966-1-git-send-email-sbeller@google.com>

When 'submodule.actionOnLabel' is set, submodules which are selected by a label will be inspected in status and diff. If a submodule is not selected, it is ignored.

Signed-off-by: Stefan Beller <sbeller@google.com>
---
 submodule.c                | 15 +++++++++++++++
 t/t7400-submodule-basic.sh | 13 +++++++++++++
 2 files changed, 28 insertions(+)
diff --git a/submodule.c b/submodule.c
index 458189c..86c0a49 100644
--- a/submodule.c
+++ b/submodule.c
@@ -20,6 +20,8 @@ static struct string_list changed_submodule_paths;
 static int initialized_fetch_ref_tips;
 static struct sha1_array ref_tips_before_fetch;
 static struct sha1_array ref_tips_after_fetch;
+static struct string_list action_labels = STRING_LIST_INIT_DUP;
+static int use_action_labels;
 
 /*
  * The following flag is set if the .gitmodules file is unmerged. We then
@@ -161,10 +163,20 @@ void set_diffopt_flags_from_submodule_config(struct diff_options *diffopt,
 {
 	const struct submodule *submodule = submodule_from_path(null_sha1, path);
 	if (submodule) {
+		char *ignoreMode;
 		if (submodule->ignore)
 			handle_ignore_submodules_arg(diffopt, submodule->ignore);
 		else if (gitmodules_is_unmerged)
 			DIFF_OPT_SET(diffopt, IGNORE_SUBMODULES);
+
+		if (!use_action_labels)
+			return;
+
+		if (submodule_applicable_by_labels(&action_labels, submodule))
+			ignoreMode = "none";
+		else
+			ignoreMode = "all";
+		handle_ignore_submodules_arg(diffopt, ignoreMode);
 	}
 }
 
@@ -175,6 +187,9 @@ int submodule_config(const char *var, const char *value, void *cb)
 		if (parallel_jobs < 0)
 			die(_("negative values not allowed for submodule.fetchJobs"));
 		return 0;
+	} else if (!strcmp(var, "submodule.actiononlabel")) {
+		use_action_labels = 1;
+		string_list_append(&action_labels, value);
 	} else if (starts_with(var, "submodule."))
 		return parse_submodule_config_option(var, value);
 	else if (!strcmp(var, "fetch.recursesubmodules")) {
diff --git a/t/t7400-submodule-basic.sh b/t/t7400-submodule-basic.sh
index 58da5c4..52ea3c6 100755
--- a/t/t7400-submodule-basic.sh
+++ b/t/t7400-submodule-basic.sh
@@ -1281,4 +1281,17 @@ test_expect_success 'clone and subsequent updates correctly auto-initialize subm
 	test_cmp actual expected2
 '
 
+test_expect_success 'status ignores unlabeled submodules' '
+	# Add submodules with and without label
+	# perform a change on disk
+	# observe the change indicated by git status
+	# the submodule not in the label system is ignored.
+	true && true
+'
+
+test_expect_success 'diff applies to action-on-label selection' '
+	# similar to status
+	true && true
+'
+
 test_done
-- 
2.7.0.rc0.45.g6b4c145
Previous: Stefan Beller
Message 22 of 22 in “[RFC_PATCHv4 0/7] Git submodule labels”
  1. Stefan BellerMar 22, 2016
  2. 1/7 git submodule: teach `add` to label submodulesStefan Beller, Mar 22, 2016
  3. Junio C HamanoMar 22, 2016
  4. Junio C HamanoMar 22, 2016
  5. 2/7 submodule-config: keep labels aroundStefan Beller, Mar 22, 2016
  6. 3/7 submodule-config: add method to check for being labeledStefan Beller, Mar 22, 2016
  7. Junio C HamanoMar 22, 2016
  8. Stefan BellerMar 23, 2016
  9. 4/7 submodule init: redirect stdout to stderrStefan Beller, Mar 22, 2016
  10. Sebastian SchuberthMar 22, 2016
  11. Junio C HamanoMar 22, 2016
  12. Stefan BellerMar 22, 2016
  13. Sebastian SchuberthMar 22, 2016
  14. Junio C HamanoMar 22, 2016
  15. 5/7 submodule update: respect submodule.actionOnLabelStefan Beller, Mar 22, 2016
  16. Junio C HamanoMar 22, 2016
  17. Stefan BellerMar 23, 2016
  18. Junio C HamanoMar 24, 2016
  19. Stefan BellerMar 24, 2016
  20. Junio C HamanoMar 24, 2016
  21. 6/7 clone: allow specification of submodules to be clonedStefan Beller, Mar 22, 2016
  22. 7/7 WIP status/diff: respect submodule.actionOnLabelStefan Beller, Mar 22, 2016

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.