In later patches we need to tell if a submodule is labeled by
the given labels.

Signed-off-by: Stefan Beller <sbel...@google.com>
---
 submodule-config.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++
 submodule-config.h |  3 +++
 2 files changed, 51 insertions(+)

diff --git a/submodule-config.c b/submodule-config.c
index 7b48e59..b10a773 100644
--- a/submodule-config.c
+++ b/submodule-config.c
@@ -493,3 +493,51 @@ void submodule_free(void)
        cache_free(&cache);
        is_cache_init = 0;
 }
+
+int submodule_applicable_by_labels(const struct string_list *list,
+                                  const struct submodule *sub)
+{
+       int label_apply = 0;
+       struct strbuf sb = STRBUF_INIT;
+
+       if (!list)
+               return 1;
+
+       if (sub->labels) {
+               struct string_list_item *item;
+               for_each_string_list_item(item, sub->labels) {
+                       strbuf_reset(&sb);
+                       strbuf_addf(&sb, "*%s", item->string);
+                       if (string_list_has_string(list, sb.buf)) {
+                               label_apply = 1;
+                               break;
+                       }
+               }
+       }
+       if (sub->path) {
+               /*
+                * NEEDSWORK: This currently works only for
+                * exact paths, but we want to enable
+                * inexact matches such wildcards.
+                */
+               strbuf_reset(&sb);
+               strbuf_addf(&sb, "./%s", sub->path);
+               if (string_list_has_string(list, sb.buf)) {
+                       label_apply = 1;
+               }
+       }
+       if (sub->name) {
+               /*
+                * NEEDSWORK: Same as with path. Do we want to
+                * support wildcards or such?
+                */
+               strbuf_reset(&sb);
+               strbuf_addf(&sb, ":%s", sub->name);
+               if (string_list_has_string(list, sb.buf)) {
+                       label_apply = 1;
+               }
+       }
+       strbuf_release(&sb);
+
+       return label_apply;
+}
diff --git a/submodule-config.h b/submodule-config.h
index 8d61df3..d67f666 100644
--- a/submodule-config.h
+++ b/submodule-config.h
@@ -30,4 +30,7 @@ const struct submodule *submodule_from_path(const unsigned 
char *commit_sha1,
                const char *path);
 void submodule_free(void);
 
+int submodule_applicable_by_labels(const struct string_list *list,
+                                  const struct submodule *sub);
+
 #endif /* SUBMODULE_CONFIG_H */
-- 
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