repo: declare the repo command

Currently, `git rev-parse` covers a wide range of functionality not
directly related to parsing revisions, as its name suggests. Over time,
many features like parsing datestrings, options, paths, and others
were added to it because there wasn't a more appropriate 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).

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`.

Add the required documentation and build changes to enable usage of
this subcommand.

Helped-by: Phillip Wood <phillip.wood@dunelm.org.uk>
Helped-by: Junio C Hamano <gitster@pobox.com>
Helped-by: Justin Tobler <jltobler@gmail.com>
Helped-by: Eric Sunshine <sunshine@sunshineco.com>
Mentored-by: Karthik Nayak <karthik.188@gmail.com>
Mentored-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Lucas Seiki Oshiro <lucasseikioshiro@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Lucas Seiki Oshiro
2025-08-16 19:45:59 -03:00
committed by Junio C Hamano
parent 16bd9f20a4
commit ab94bb8000
9 changed files with 66 additions and 0 deletions

1
.gitignore vendored
View File

@@ -139,6 +139,7 @@
/git-repack /git-repack
/git-replace /git-replace
/git-replay /git-replay
/git-repo
/git-request-pull /git-request-pull
/git-rerere /git-rerere
/git-reset /git-reset

View File

@@ -0,0 +1,32 @@
git-repo(1)
===========
NAME
----
git-repo - Retrieve information about the repository
SYNOPSIS
--------
[synopsis]
git repo info [<key>...]
DESCRIPTION
-----------
Retrieve information about the repository.
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).
SEE ALSO
--------
linkgit:git-rev-parse[1]
GIT
---
Part of the linkgit:git[1] suite

View File

@@ -116,6 +116,7 @@ manpages = {
'git-repack.adoc' : 1, 'git-repack.adoc' : 1,
'git-replace.adoc' : 1, 'git-replace.adoc' : 1,
'git-replay.adoc' : 1, 'git-replay.adoc' : 1,
'git-repo.adoc' : 1,
'git-request-pull.adoc' : 1, 'git-request-pull.adoc' : 1,
'git-rerere.adoc' : 1, 'git-rerere.adoc' : 1,
'git-reset.adoc' : 1, 'git-reset.adoc' : 1,

View File

@@ -1308,6 +1308,7 @@ BUILTIN_OBJS += builtin/remote.o
BUILTIN_OBJS += builtin/repack.o BUILTIN_OBJS += builtin/repack.o
BUILTIN_OBJS += builtin/replace.o BUILTIN_OBJS += builtin/replace.o
BUILTIN_OBJS += builtin/replay.o BUILTIN_OBJS += builtin/replay.o
BUILTIN_OBJS += builtin/repo.o
BUILTIN_OBJS += builtin/rerere.o BUILTIN_OBJS += builtin/rerere.o
BUILTIN_OBJS += builtin/reset.o BUILTIN_OBJS += builtin/reset.o
BUILTIN_OBJS += builtin/rev-list.o BUILTIN_OBJS += builtin/rev-list.o

View File

@@ -216,6 +216,7 @@ int cmd_remote_ext(int argc, const char **argv, const char *prefix, struct repos
int cmd_remote_fd(int argc, const char **argv, const char *prefix, struct repository *repo); int cmd_remote_fd(int argc, const char **argv, const char *prefix, struct repository *repo);
int cmd_repack(int argc, const char **argv, const char *prefix, struct repository *repo); int cmd_repack(int argc, const char **argv, const char *prefix, struct repository *repo);
int cmd_replay(int argc, const char **argv, const char *prefix, struct repository *repo); int cmd_replay(int argc, const char **argv, const char *prefix, struct repository *repo);
int cmd_repo(int argc, const char **argv, const char *prefix, struct repository *repo);
int cmd_rerere(int argc, const char **argv, const char *prefix, struct repository *repo); int cmd_rerere(int argc, const char **argv, const char *prefix, struct repository *repo);
int cmd_reset(int argc, const char **argv, const char *prefix, struct repository *repo); int cmd_reset(int argc, const char **argv, const char *prefix, struct repository *repo);
int cmd_restore(int argc, const char **argv, const char *prefix, struct repository *repo); int cmd_restore(int argc, const char **argv, const char *prefix, struct repository *repo);

27
builtin/repo.c Normal file
View File

@@ -0,0 +1,27 @@
#include "builtin.h"
#include "parse-options.h"
static const char *const repo_usage[] = {
"git repo info [<key>...]",
NULL
};
static int repo_info(int argc UNUSED, const char **argv UNUSED,
const char *prefix UNUSED, struct repository *repo UNUSED)
{
return 0;
}
int cmd_repo(int argc, const char **argv, const char *prefix,
struct repository *repo)
{
parse_opt_subcommand_fn *fn = NULL;
struct option options[] = {
OPT_SUBCOMMAND("info", &fn, repo_info),
OPT_END()
};
argc = parse_options(argc, argv, prefix, options, repo_usage, 0);
return fn(argc, argv, prefix, repo);
}

View File

@@ -164,6 +164,7 @@ git-remote ancillarymanipulators complete
git-repack ancillarymanipulators complete git-repack ancillarymanipulators complete
git-replace ancillarymanipulators complete git-replace ancillarymanipulators complete
git-replay plumbingmanipulators git-replay plumbingmanipulators
git-repo plumbinginterrogators
git-request-pull foreignscminterface complete git-request-pull foreignscminterface complete
git-rerere ancillaryinterrogators git-rerere ancillaryinterrogators
git-reset mainporcelain history git-reset mainporcelain history

1
git.c
View File

@@ -611,6 +611,7 @@ static struct cmd_struct commands[] = {
{ "repack", cmd_repack, RUN_SETUP }, { "repack", cmd_repack, RUN_SETUP },
{ "replace", cmd_replace, RUN_SETUP }, { "replace", cmd_replace, RUN_SETUP },
{ "replay", cmd_replay, RUN_SETUP }, { "replay", cmd_replay, RUN_SETUP },
{ "repo", cmd_repo, RUN_SETUP },
{ "rerere", cmd_rerere, RUN_SETUP }, { "rerere", cmd_rerere, RUN_SETUP },
{ "reset", cmd_reset, RUN_SETUP }, { "reset", cmd_reset, RUN_SETUP },
{ "restore", cmd_restore, RUN_SETUP | NEED_WORK_TREE }, { "restore", cmd_restore, RUN_SETUP | NEED_WORK_TREE },

View File

@@ -645,6 +645,7 @@ builtin_sources = [
'builtin/repack.c', 'builtin/repack.c',
'builtin/replace.c', 'builtin/replace.c',
'builtin/replay.c', 'builtin/replay.c',
'builtin/repo.c',
'builtin/rerere.c', 'builtin/rerere.c',
'builtin/reset.c', 'builtin/reset.c',
'builtin/rev-list.c', 'builtin/rev-list.c',