From: Justin Tobler Date: Mon, 01 Dec 2025 15:11:24 GMT Subject: Re: [PATCH] repo: add -z as an alias for --format=nul to git-repo-structure Message-ID: <3hzpywampwjfsckljdqhyabhkupqmrzbcsc7fhrkg2cl4rjzzm@mygtkda7soxj> In-Reply-To: <20251130203456.28437-1-lucasseikioshiro@gmail.com> On 25/11/30 04:59PM, Lucas Seiki Oshiro wrote: > Other Git commands that have nul-terminated output, such as git-config, > git-status, git-ls-files, and git-repo-info have a flag `-z` for using > the null character as the record separator. > > Add the `-z` flag to git-repo-structure as an alias for `--format=nul`, > making it consistent with the behavior of the other commands. > > Signed-off-by: Lucas Seiki Oshiro > --- > > Hello, again! > > Since git-repo-info and git-repo-structure share the same format parser, this > could be done by only copying the OPT_CALLBACK_F from repo_info. > > I'm cc'ing Justin here, as he was the author of git-repo-structure. Thanks Lucas, looks like you beat me to this change. :) > This patch is based on top of master b31ab939fe (The fourth batch, 2025-11-26) > with lo/repo-info-all merged. Any reason this isn't just based on master? It looks like this patch should apply just fine as I don't see any dependencies. > Documentation/git-repo.adoc | 5 +++-- > builtin/repo.c | 6 +++++- > t/t1901-repo-structure.sh | 6 ++++++ > 3 files changed, 14 insertions(+), 3 deletions(-) > > diff --git a/Documentation/git-repo.adoc b/Documentation/git-repo.adoc > index 70f0a6d2e4..8820954f7e 100644 > --- a/Documentation/git-repo.adoc > +++ b/Documentation/git-repo.adoc > @@ -9,7 +9,7 @@ SYNOPSIS > -------- > [synopsis] > git repo info [--format=(keyvalue|nul)] [-z] [--all | ...] > -git repo structure [--format=(table|keyvalue|nul)] > +git repo structure [--format=(table|keyvalue|nul)] [-z] > > DESCRIPTION > ----------- > @@ -44,7 +44,7 @@ supported: > + > `-z` is an alias for `--format=nul`. > > -`structure [--format=(table|keyvalue|nul)]`:: > +`structure [--format=(table|keyvalue|nul)] [-z]`:: > Retrieve statistics about the current repository structure. The > following kinds of information are reported: > + > @@ -72,6 +72,7 @@ supported: > the delimiter between the key and value instead of '='. Unlike the > `keyvalue` format, values containing "unusual" characters are never > quoted. > +`-z` is an alias for `--format=nul`. If we want to match the format in the section prior, we should add a '+' character on the prior line to separate the sections. With how it is written now, this line will just be appeneded to the previous section. > INFO KEYS > --------- > diff --git a/builtin/repo.c b/builtin/repo.c > index 2a653bd3ea..1c06207a39 100644 > --- a/builtin/repo.c > +++ b/builtin/repo.c > @@ -16,7 +16,7 @@ > > static const char *const repo_usage[] = { > "git repo info [--format=(keyvalue|nul)] [-z] [--all | ...]", > - "git repo structure [--format=(table|keyvalue|nul)]", > + "git repo structure [--format=(table|keyvalue|nul)] [-z]", > NULL > }; > > @@ -529,6 +529,10 @@ static int cmd_repo_structure(int argc, const char **argv, const char *prefix, > OPT_CALLBACK_F(0, "format", &format, N_("format"), > N_("output format"), > PARSE_OPT_NONEG, parse_format_cb), > + OPT_CALLBACK_F('z', NULL, &format, NULL, > + N_("synonym for --format=nul"), > + PARSE_OPT_NONEG | PARSE_OPT_NOARG, > + parse_format_cb), Reusing the same `parse_format_cb()` makes sense and also matches what we do with git-repo-info. Looks good. > OPT_BOOL(0, "progress", &show_progress, N_("show progress")), > OPT_END() > }; > diff --git a/t/t1901-repo-structure.sh b/t/t1901-repo-structure.sh > index 36a71a144e..5a50acf345 100755 > --- a/t/t1901-repo-structure.sh > +++ b/t/t1901-repo-structure.sh > @@ -101,6 +101,12 @@ test_expect_success 'keyvalue and nul format' ' > tr "\n=" "\0\n" expect_nul && > git repo structure --format=nul >out 2>err && > > + test_cmp expect_nul out && > + test_line_count = 0 err && > + > + # Check -z > + git repo structure --format=nul >out 2>err && Did you mean to use the -z option here? -Justin