Re: [GSoC RFC PATCH v4 1/4] repo: declare the repo command
From: Karthik Nayak <hidden>
Date: 2025-07-15 11:52:19
Lucas Seiki Oshiro [off-list ref] writes:
Currently, `git rev-parse` covers a wide range of functionality not directly related to parsing revisions, as its name says. Over time, many features like parsing datestrings, options, paths, and others were added to it because there wasn't a more appropriated command to place them. Create a new Git command called `repo`. `git repo` will be the main command for obtaining the information about a repository (such as metadata and metrics), returning them in a machine readable format following the syntax "field<LF>value<NUL>".
I don't think we should enforce a syntax on the command level, but rather we should enforce it on the sub-command level. This way any new command, let's say `git repo stats` can provide a more suitable output. Which could be a more human readable format mimicking 'git-sizer'. By not enforcing on a command level, we leave it extendable.
Also declare a subcommand for `repo` called `info`. `git repo info` will bring the functionality of retrieving repository-related information currently returned by `rev-parse`. Also add entries for this new command in: - the build files (Makefile, meson.build, Documentation/meson.build) - builtin.h - git.c - .gitignore - command-list.txt - Documentation
Nit: While it is good to state what this patch does, this list is similar to the diffstat below. Is there additional information it is providing? Perhaps: We add the required tests, documentation and build changes to enable usage of this subcommand. would suffice?
quoted hunk ↗ jump to hunk
Helped-by: Phillip Wood [off-list ref] Helped-by: Junio C Hamano [off-list ref] Helped-by: Justin Tobler [off-list ref] Mentored-by: Karthik Nayak [off-list ref] Mentored-by: Patrick Steinhardt [off-list ref] Signed-off-by: Lucas Seiki Oshiro <redacted> --- .gitignore | 1 + Documentation/git-repo.adoc | 54 +++++++++++++++++++++++++++++++++++++ Documentation/meson.build | 1 + Makefile | 1 + builtin.h | 1 + builtin/repo.c | 38 ++++++++++++++++++++++++++ command-list.txt | 1 + git.c | 1 + meson.build | 1 + 9 files changed, 99 insertions(+) create mode 100644 Documentation/git-repo.adoc create mode 100644 builtin/repo.cdiff --git a/.gitignore b/.gitignore index 04c444404e..1803023427 100644 --- a/.gitignore +++ b/.gitignore@@ -139,6 +139,7 @@ /git-repack /git-replace /git-replay +/git-repo /git-request-pull /git-rerere /git-resetdiff --git a/Documentation/git-repo.adoc b/Documentation/git-repo.adoc new file mode 100644 index 0000000000..6f8fe3f6ea --- /dev/null +++ b/Documentation/git-repo.adoc@@ -0,0 +1,54 @@ +git-repo(1) +=========== + +NAME +---- +git-repo - Retrieve information about a repository + +SYNOPSIS +-------- +[synopsis] +git repo info [<key>...] + +DESCRIPTION +----------- +Retrieve information about the current repository in a machine-readable format. +
I would keep the description of the command short, to: This command retrieve repository level information. The `machine-readable` format is a implementation detail of the 'git-repo info' subcommand.
+`git repo` will be the primary tool to query repository-specific information, +such as metadata that currently can also be done by calling `git rev-parse` (see +linkgit:git-rev-parse[1]). `git repo` doesn't query information unrelated to the +current repository or that is already retrieved by a specialized command, for +example, `git config` (see linkgit:git-config[1]) or `git var` (see +linkgit:git-var[1]). + +This command returns the retrieved data following a null-terminated format with +this syntax: ++ +---------------- +key1<LF>value1<NUL> +key2<LF>value2<NUL> +... +----------------
Shouldn't this whole section be below the 'info' subcommand?
++ +THIS COMMAND IS EXPERIMENTAL. THE BEHAVIOR MAY CHANGE. + +COMMANDS +-------- +info [<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). + +INFO KEYS +--------- + +The set of data that `git repo` can return is grouped into the following +categories: + +SEE ALSO +-------- +linkgit:git-rev-parse[1] + +GIT +--- +Part of the linkgit:git[1] suite
[snip]
Attachments
- signature.asc [application/pgp-signature] 690 bytes