Re: [RFC_PATCHv4 3/7] submodule-config: add method to check for being labeled
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Mar 22, 2016, 22:30 UTC
- Message-ID
- <xmqqegb2f8nn.fsf@gitster.mtv.corp.google.com>
- In-Reply-To
- <1458612372-10966-4-git-send-email-sbeller@google.com>
Stefan Beller <sbeller@google.com> writes:
Show 5 quoted lines
> In later patches we need to tell if a submodule is labeled by > the given labels. > > Signed-off-by: Stefan Beller <sbeller@google.com> > ---
Hmph, I would have expected that something like this would touch the module_list() implementation. Probably that would happen in future steps, I guess?
Show 72 quoted lines
> 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 */