From: Patrick Steinhardt <ps@pks.im>
To: git@vger.kernel.org
Cc: Junio C Hamano <gitster@pobox.com>
Subject: [PATCH v2 4/4] builtin/refs: introduce subcommand groups
Date: Fri, 02 Oct 2026 10:09:49 +0200 [thread overview]
Message-ID: <20261002-b4-pks-parse-options-subcommand-groups-v2-4-3299bee52dea@pks.im> (raw)
In-Reply-To: <20261002-b4-pks-parse-options-subcommand-groups-v2-0-3299bee52dea@pks.im>
The git-refs(1) command nowadays has a bunch of different subcommands,
which makes it hard to figure out what's what at a glance. Now that the
parse-options subsystem supports grouping subcommands though we can do
better. The commands roughly fall into the following categories:
- Operations that span across the whole reference database.
- Operations that read references.
- Operations that write references.
Introduce these groups accordingly, which results in the following help
output:
Reference database
migrate migrate the reference database to a different format
verify verify the consistency of the reference database
optimize optimize the reference database
Reading references
list list references
exists check whether a reference exists
Writing references
create create a new reference
delete delete a reference
update update an existing reference
rename rename a reference
Reorder the usage strings to match the new grouping.
Signed-off-by: Patrick Steinhardt <ps@pks.im>
---
Documentation/git-refs.adoc | 2 +-
builtin/refs.c | 32 ++++++++++++++++++++++----------
2 files changed, 23 insertions(+), 11 deletions(-)
diff --git a/Documentation/git-refs.adoc b/Documentation/git-refs.adoc
index 9dc08cbca9..da7260c416 100644
--- a/Documentation/git-refs.adoc
+++ b/Documentation/git-refs.adoc
@@ -11,6 +11,7 @@ SYNOPSIS
[synopsis]
git refs migrate --ref-format=<format> [--no-reflog] [--dry-run]
git refs verify [--strict] [--verbose]
+git refs optimize [--all] [--no-prune] [--auto] [--include <pattern>] [--exclude <pattern>]
git refs list [--count=<count>] [--shell|--perl|--python|--tcl]
[(--sort=<key>)...] [--format=<format>]
[--include-root-refs] [--points-at=<object>]
@@ -19,7 +20,6 @@ git refs list [--count=<count>] [--shell|--perl|--python|--tcl]
[(--exclude=<pattern>)...] [--start-after=<marker>]
[ --stdin | (<pattern>...)]
git refs exists <ref>
-git refs optimize [--all] [--no-prune] [--auto] [--include <pattern>] [--exclude <pattern>]
git refs create [--message=<reason>] [--no-deref] [--create-reflog] <ref> <new-value>
git refs delete [--message=<reason>] [--no-deref] <ref> [<old-value>]
git refs update [--message=<reason>] [--no-deref] [--create-reflog] <ref> <new-value> [<old-value>]
diff --git a/builtin/refs.c b/builtin/refs.c
index 5cd21c25fe..decccc4364 100644
--- a/builtin/refs.c
+++ b/builtin/refs.c
@@ -382,9 +382,9 @@ int cmd_refs(int argc,
const char * const refs_usage[] = {
REFS_MIGRATE_USAGE,
REFS_VERIFY_USAGE,
+ REFS_OPTIMIZE_USAGE,
"git refs list " COMMON_USAGE_FOR_EACH_REF,
REFS_EXISTS_USAGE,
- REFS_OPTIMIZE_USAGE,
REFS_CREATE_USAGE,
REFS_DELETE_USAGE,
REFS_UPDATE_USAGE,
@@ -393,15 +393,27 @@ int cmd_refs(int argc,
};
parse_opt_subcommand_fn *fn = NULL;
struct option opts[] = {
- OPT_SUBCOMMAND("migrate", &fn, cmd_refs_migrate),
- OPT_SUBCOMMAND("verify", &fn, cmd_refs_verify),
- OPT_SUBCOMMAND("list", &fn, cmd_refs_list),
- OPT_SUBCOMMAND("exists", &fn, cmd_refs_exists),
- OPT_SUBCOMMAND("optimize", &fn, cmd_refs_optimize),
- OPT_SUBCOMMAND("create", &fn, cmd_refs_create),
- OPT_SUBCOMMAND("delete", &fn, cmd_refs_delete),
- OPT_SUBCOMMAND("update", &fn, cmd_refs_update),
- OPT_SUBCOMMAND("rename", &fn, cmd_refs_rename),
+ OPT_GROUP(N_("Reference database")),
+ OPT_SUBCOMMAND_F("migrate", &fn, cmd_refs_migrate,
+ N_("migrate the reference database to a different format"), 0),
+ OPT_SUBCOMMAND_F("verify", &fn, cmd_refs_verify,
+ N_("verify the consistency of the reference database"), 0),
+ OPT_SUBCOMMAND_F("optimize", &fn, cmd_refs_optimize,
+ N_("optimize the reference database"), 0),
+ OPT_GROUP(N_("Reading references")),
+ OPT_SUBCOMMAND_F("list", &fn, cmd_refs_list,
+ N_("list references"), 0),
+ OPT_SUBCOMMAND_F("exists", &fn, cmd_refs_exists,
+ N_("check whether a reference exists"), 0),
+ OPT_GROUP(N_("Writing references")),
+ OPT_SUBCOMMAND_F("create", &fn, cmd_refs_create,
+ N_("create a new reference"), 0),
+ OPT_SUBCOMMAND_F("delete", &fn, cmd_refs_delete,
+ N_("delete a reference"), 0),
+ OPT_SUBCOMMAND_F("update", &fn, cmd_refs_update,
+ N_("update an existing reference"), 0),
+ OPT_SUBCOMMAND_F("rename", &fn, cmd_refs_rename,
+ N_("rename a reference"), 0),
OPT_END(),
};
--
2.56.0.353.g0856645cf6.dirty
prev parent reply other threads:[~2026-10-02 8:10 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-01 10:13 [PATCH 0/3] builtin/refs: introduce subcommand groups Patrick Steinhardt
2026-10-01 10:13 ` [PATCH 1/3] parse-options: fix completion format when first option is skipped Patrick Steinhardt
2026-10-01 17:38 ` Junio C Hamano
2026-10-02 7:19 ` Patrick Steinhardt
2026-10-01 10:13 ` [PATCH 2/3] parse-options: allow grouping subcommands Patrick Steinhardt
2026-10-01 17:46 ` Junio C Hamano
2026-10-02 7:19 ` Patrick Steinhardt
2026-10-01 10:13 ` [PATCH 3/3] builtin/refs: introduce subcommand groups Patrick Steinhardt
2026-10-01 17:46 ` Junio C Hamano
2026-10-02 8:09 ` [PATCH v2 0/4] " Patrick Steinhardt
2026-10-02 8:09 ` [PATCH v2 1/4] parse-options: fix completion format when first option is skipped Patrick Steinhardt
2026-10-02 8:09 ` [PATCH v2 2/4] parse-options: extract functions to print single option Patrick Steinhardt
2026-10-02 8:09 ` [PATCH v2 3/4] parse-options: allow grouping subcommands Patrick Steinhardt
2026-10-02 8:09 ` Patrick Steinhardt [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20261002-b4-pks-parse-options-subcommand-groups-v2-4-3299bee52dea@pks.im \
--to=ps@pks.im \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox