Lucas Seiki Oshiro <lucasseikioshiro@xxxxxxxxx> writes: > Other Git commands that have nul-terminated output (e.g. git-config, > git-status, git-ls-files) have a flag `-z` for using the null character > as the record separator. > > Add the `-z` flag to git-repo-info as an alias for `--format=nul`, > making it consistent with the behavior of the other commands. > > Mentored-by: Karthik Nayak <karthik.188@xxxxxxxxx> > Mentored-by: Patrick Steinhardt <ps@xxxxxx> > Signed-off-by: Lucas Seiki Oshiro <lucasseikioshiro@xxxxxxxxx> > --- > Documentation/git-repo.adoc | 6 ++++-- > builtin/repo.c | 17 ++++++++++++----- > t/t1900-repo.sh | 12 ++++++++++++ > 3 files changed, 28 insertions(+), 7 deletions(-) > > diff --git a/Documentation/git-repo.adoc b/Documentation/git-repo.adoc > index 2870828d93..f2dc71193c 100644 > --- a/Documentation/git-repo.adoc > +++ b/Documentation/git-repo.adoc > @@ -8,7 +8,7 @@ git-repo - Retrieve information about the repository > SYNOPSIS > -------- > [synopsis] > -git repo info [--format=(keyvalue|nul)] [<key>...] > +git repo info [--format=(keyvalue|nul)|-z] [<key>...] > Nit: Perhaps we can leave a space around '|' to make it easier to read? > DESCRIPTION > ----------- > @@ -18,7 +18,7 @@ THIS COMMAND IS EXPERIMENTAL. THE BEHAVIOR MAY CHANGE. > > COMMANDS > -------- > -`info [--format=(keyvalue|nul)] [<key>...]`:: > +`info [--format=(keyvalue|nul)|-z] [<key>...]`:: > Retrieve metadata-related information about the current repository. Only > the requested data will be returned based on their keys (see "INFO KEYS" > section below). > @@ -40,6 +40,8 @@ supported: > between the key and the value and using a NUL character after each value. > This format is better suited for being parsed by another applications than > `keyvalue`. Unlike in the `keyvalue` format, the values are never quoted. > ++ > +`-z` is an alias for `--format=nul`. > > INFO KEYS > --------- > diff --git a/builtin/repo.c b/builtin/repo.c > index 8c6e7f42ab..b2ec66e454 100644 > --- a/builtin/repo.c > +++ b/builtin/repo.c > @@ -9,7 +9,7 @@ > #include "shallow.h" > > static const char *const repo_usage[] = { > - "git repo info [--format=(keyvalue|nul)] [<key>...]", > + "git repo info [--format=(keyvalue|nul)|-z] [<key>...]", > NULL > }; > > @@ -115,20 +115,27 @@ static int print_fields(int argc, const char **argv, > static int repo_info(int argc, const char **argv, const char *prefix, > struct repository *repo) > { > - const char *format_str = "keyvalue"; > + const char *format_str = NULL; > enum output_format format; > + int format_nul = 0; > struct option options[] = { > OPT_STRING(0, "format", &format_str, N_("format"), > N_("output format")), > + OPT_BOOL('z', NULL, &format_nul, N_("alias for --format=nul")), > OPT_END() > }; > > argc = parse_options(argc, argv, prefix, options, repo_usage, 0); > > - if (!strcmp(format_str, "keyvalue")) > - format = FORMAT_KEYVALUE; > - else if (!strcmp(format_str, "nul")) > + die_for_incompatible_opt2(!!format_nul, "-z", > + !!format_str, "--format"); > + > + format_str = format_str ? format_str : "keyvalue"; > + > + if (format_nul || !strcmp(format_str, "nul")) > format = FORMAT_NUL_TERMINATED; > + else if (!strcmp(format_str, "keyvalue")) > + format = FORMAT_KEYVALUE; > else > die(_("invalid format '%s'"), format_str); > > diff --git a/t/t1900-repo.sh b/t/t1900-repo.sh > index a69c715357..3df55dcc79 100755 > --- a/t/t1900-repo.sh > +++ b/t/t1900-repo.sh > @@ -92,4 +92,16 @@ test_expect_success 'git-repo-info aborts when requesting an invalid format' ' > test_cmp expect actual > ' > > +test_expect_success '-z uses nul-terminated format' ' > + printf "layout.bare\nfalse\0layout.shallow\nfalse\0" >expected && > + git repo info -z layout.bare layout.shallow >actual && > + test_cmp expected actual > +' > + > +test_expect_success 'git repo info fails when using --format and -z' ' > + echo "fatal: options ${SQ}-z${SQ} and ${SQ}--format${SQ} cannot be used together" >expected && > + test_must_fail git repo info -z --format=keyvalue 2>actual && > + test_cmp expected actual > +' > + > test_done > -- > 2.39.5 (Apple Git-154) The rest looks good.
Attachment:
signature.asc
Description: PGP signature