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 <sbel...@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

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to