]> git.ipfire.org Git - thirdparty/git.git/commitdiff
builtin/refs: add list subcommand
authorMeet Soni <meetsoni3017@gmail.com>
Tue, 5 Aug 2025 09:27:56 +0000 (14:57 +0530)
committerJunio C Hamano <gitster@pobox.com>
Tue, 5 Aug 2025 16:11:54 +0000 (09:11 -0700)
Git's reference management is distributed across multiple commands. As
part of an ongoing effort to consolidate and modernize reference
handling, introduce a `list` subcommand under the `git refs` umbrella as
a replacement for `git for-each-ref`.

Implement `cmd_refs_list` by having it call the `for_each_ref_core()`
helper function. This helper was factored out of the original
`cmd_for_each_ref` in a preceding commit, allowing both commands to
share the same core logic as independent peers.

Add documentation for the new command. The man page leverages the shared
options file, created in a previous commit, by using the AsciiDoc
`include::` macro to ensure consistency with git-for-each-ref(1).

Mentored-by: Patrick Steinhardt <ps@pks.im>
Mentored-by: shejialuo <shejialuo@gmail.com>
Mentored-by: Karthik Nayak <karthik.188@gmail.com>
Signed-off-by: Meet Soni <meetsoni3017@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Documentation/git-refs.adoc
builtin/refs.c

index 4d6dc994f92eb2e8c726fc3543557f89aba3d341..e608980711814ae4c7b186efdb4eb5a25cb8ae0a 100644 (file)
@@ -11,6 +11,13 @@ SYNOPSIS
 [synopsis]
 git refs migrate --ref-format=<format> [--no-reflog] [--dry-run]
 git refs verify [--strict] [--verbose]
+git refs list [--count=<count>] [--shell|--perl|--python|--tcl]
+                  [(--sort=<key>)...] [--format=<format>]
+                  [--include-root-refs] [--points-at=<object>]
+                  [--merged[=<object>]] [--no-merged[=<object>]]
+                  [--contains[=<object>]] [--no-contains[=<object>]]
+                  [(--exclude=<pattern>)...] [--start-after=<marker>]
+                  [ --stdin | <pattern>... ]
 
 DESCRIPTION
 -----------
@@ -26,6 +33,11 @@ migrate::
 verify::
        Verify reference database consistency.
 
+list::
+       List references in the repository with support for filtering,
+       formatting, and sorting. This subcommand is an alias for
+       linkgit:git-for-each-ref[1] and offers identical functionality.
+
 OPTIONS
 -------
 
@@ -57,6 +69,10 @@ The following options are specific to 'git refs verify':
 --verbose::
        When verifying the reference database consistency, be chatty.
 
+The following options are specific to 'git refs list':
+
+include::for-each-ref-options.adoc[]
+
 KNOWN LIMITATIONS
 -----------------
 
index c7ad0a2963a3d1eccd20e4e30723a57ee4c13745..76224feba4d55a0ff2908df51eb2eb264f9fb962 100644 (file)
@@ -6,6 +6,7 @@
 #include "refs.h"
 #include "strbuf.h"
 #include "worktree.h"
+#include "for-each-ref.h"
 
 #define REFS_MIGRATE_USAGE \
        N_("git refs migrate --ref-format=<format> [--no-reflog] [--dry-run]")
@@ -101,6 +102,17 @@ static int cmd_refs_verify(int argc, const char **argv, const char *prefix,
        return ret;
 }
 
+static int cmd_refs_list(int argc, const char **argv, const char *prefix,
+                          struct repository *repo)
+{
+       static char const * const refs_list_usage[] = {
+               N_("git refs list " COMMON_USAGE_FOR_EACH_REF),
+               NULL
+       };
+
+       return for_each_ref_core(argc, argv, prefix, repo, refs_list_usage);
+}
+
 int cmd_refs(int argc,
             const char **argv,
             const char *prefix,
@@ -109,12 +121,14 @@ int cmd_refs(int argc,
        const char * const refs_usage[] = {
                REFS_MIGRATE_USAGE,
                REFS_VERIFY_USAGE,
+               "git refs list " COMMON_USAGE_FOR_EACH_REF,
                NULL,
        };
        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_END(),
        };