From: Junio C Hamano <gitster@pobox.com>
To: tilak-raaz <raaztilak07@gmail.com>
Cc: git@vger.kernel.org, wy@wyuan.org, ben.knoble@gmail.com
Subject: Re: [GSoC PATCH v2] submodule: warn on valueless active config
Date: Fri, 14 Aug 2026 15:04:28 -0700 [thread overview]
Message-ID: <xmqqqzk0l5oz.fsf@gitster.g> (raw)
In-Reply-To: <20260814212431.43626-1-raaztilak07@gmail.com> (tilak-raaz's message of "Sat, 15 Aug 2026 02:54:30 +0530")
tilak-raaz <raaztilak07@gmail.com> writes:
> The config parser previously threw a hard error if 'submodule.active'
> was provided without a value, causing commands to abort.
An exerpt from Documentation/SubmittingPatches:
[[present-tense]]
The problem statement that describes the status quo is written in the
present tense. Write "The code does X when it is given input Y",
instead of "The code used to do Y when given input X". You do not
have to say "Currently"---the status quo in the problem statement is
about the code _without_ your change, by project convention.
> Swap repo_config_get_string_multi() to repo_config_get_value_multi()
> to parse valueless keys safely. Use the standard config_error_nonbool()
"valueless true", I think.
> helper to emit a warning to the user rather than crashing.
Good.
> This resolves a NEEDSWORK comment in submodule.c.
Good. Resolving an existing NEEDSWORK is a two step process, (1) to
determine if it still does make sense to do what it suggests to do,
and then (2) do it. The early part of the proposed log message
solves a half of step (1), in a sense that crashing is bad. The
other half is what we should do instead of crashing.
> -/*
> - * NEEDSWORK: Emit a warning if submodule.active exists, but is valueless,
> - * ie, the config looks like: "[submodule] active\n".
> - * Since that is an invalid pathspec, we should inform the user.
> - */
> +
> int is_tree_submodule_active(struct repository *repo,
> const struct object_id *treeish_name,
> const char *path)
> @@ -261,12 +257,16 @@ int is_tree_submodule_active(struct repository *repo,
> free(key);
>
> /* submodule.active is set */
> - if (!repo_config_get_string_multi(repo, "submodule.active", &sl)) {
> + if (!repo_config_get_value_multi(repo, "submodule.active", &sl)) {
> struct pathspec ps;
> struct strvec args = STRVEC_INIT;
> const struct string_list_item *item;
>
> for_each_string_list_item(item, sl) {
> + if (!item->string) {
> + config_error_nonbool("submodule.active");
> + continue;
> + }
> strvec_push(&args, item->string);
> }
And we do warn, but I am not sure if "continue" is sensible, though.
Since we know that the configuration is broken, we should cause the
command to fail (i.e., exit with a non-zero status), shouldn't we?
>
> diff --git a/t/t7400-submodule-basic.sh b/t/t7400-submodule-basic.sh
> index eefdecb0bd..74c26f6630 100755
> --- a/t/t7400-submodule-basic.sh
> +++ b/t/t7400-submodule-basic.sh
> @@ -1549,4 +1549,15 @@ test_expect_success 'submodule add fails when name is reused' '
> )
> '
>
> +
> +test_expect_success 'warn on valueless submodule.active' '
> +test_when_finished "rm -rf empty-active" &&
> +git init empty-active &&
> +test_commit -C empty-active initial &&
> +git -c protocol.file.allow=always -C empty-active submodule add ../empty-active sub &&
> +git -C empty-active config --unset submodule.sub.active &&
> +printf "[submodule]\n\tactive\n" >>empty-active/.git/config &&
> +git -C empty-active submodule status 2>err &&
In other words, shouldn't this say
test_must_fail git submodule status &&
> +grep "missing value for .submodule.active." err
> +'
Curiously, the test part of your patch is severely
whitespace-damaged, even though the C part looked OK. This is quite
puzzling.
prev parent reply other threads:[~2026-08-14 22:04 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-14 17:37 [GSoC PATCH] submodule: warn on valueless active config Tilak Raaz
2026-08-14 17:56 ` Weijie Yuan
2026-08-14 18:04 ` Tilak Raaz
2026-08-14 19:07 ` D. Ben Knoble
2026-08-14 19:14 ` Junio C Hamano
2026-08-14 21:24 ` [GSoC PATCH v2] " tilak-raaz
2026-08-14 22:04 ` Junio C Hamano [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=xmqqqzk0l5oz.fsf@gitster.g \
--to=gitster@pobox.com \
--cc=ben.knoble@gmail.com \
--cc=git@vger.kernel.org \
--cc=raaztilak07@gmail.com \
--cc=wy@wyuan.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox