Subject: Re: [PATCH v3] repo: show subcommand-specific help text

From: Patrick Steinhardt <[email-masked]>
Date: Wed, 25 Mar 2026 11:01:31 +0100

On Tue, Mar 24, 2026 at 07:48:43PM +0100, Mahi Kassa wrote:
> Use subcommand-specific usage arrays for "git repo info" and
> "git repo structure" so that each command shows only its own
> synopsis in help output.
> 
> Factor the shared usage strings into macros to avoid
> duplicating the same synopsis text in multiple arrays.
> 
> Add tests to cover the subcommand help behavior.
> 
> The previous reroll mistakenly omitted the requested code
> changes; this version includes them.
> 
> ---
> v3:
> - include the requested code changes that were missing from v2
> - factor shared usage strings into macros to avoid duplication
> - restore blank lines between tests and before test_done

By the way, it is highly recommended to respond to some of the review
mails directly, as it helps to create a dialog between submitter and
reviewer. Otherwise reviewers may feel as if they are talking to a code
emitting entity :)

It's not necessary to reply to every single mail, but going like "Oops,
yes, I indeed forgot to add the request code changes. Will fix in the
next version" can go a long way to make the interaction more social.

> diff --git a/builtin/repo.c b/builtin/repo.c
> index 55f9b9095c..71a5c1c29c 100644
> --- a/builtin/repo.c
> +++ b/builtin/repo.c
> @@ -20,11 +20,27 @@
>  #include "tree-walk.h"
>  #include "utf8.h"
>  
> +#define REPO_INFO_USAGE \
> +	"git repo info [--format=(lines|nul) | -z] [--all | <key>...]", \
> +	"git repo info --keys [--format=(lines|nul) | -z]"
> +
> +#define REPO_STRUCTURE_USAGE \
> +	"git repo structure [--format=(table|lines|nul) | -z]"
> +
>  static const char *const repo_usage[] = {
> -	"git repo info [--format=(lines|nul) | -z] [--all | <key>...]",
> -	"git repo info --keys [--format=(lines|nul) | -z]",
> -	"git repo structure [--format=(table|lines|nul) | -z]",
> -	NULL
> +	REPO_INFO_USAGE,
> +	REPO_STRUCTURE_USAGE,
> +	NULL,
> +};
> +
> +static const char *const repo_info_usage[] = {
> +	REPO_INFO_USAGE,
> +	NULL,
> +};
> +
> +static const char *const repo_structure_usage[] = {
> +	REPO_STRUCTURE_USAGE,
> +	NULL,
>  };
>  
>  typedef int get_value_fn(struct repository *repo, struct strbuf *buf);

I think it would make sense to split this out into two commits: one
where you introduce the macros as a preparatory refactoring, and then
the next one where you start to differentiate the different usage
strings.

Otherwise this looks good to me now, thanks!

Patrick