From: Meet Soni Date: Tue, 05 Aug 2025 09:27:52 GMT Subject: [GSoC][PATCH v6 0/6] Add refs list subcommand Message-ID: <20250805092758.5321-1-meetsoni3017@gmail.com> In-Reply-To: <20250804092255.1092973-1-meetsoni3017@gmail.com> Hello everyone, This is the sixth version of the patch series that introduces the git refs list subcommand. changes in v6: - rebased onto v2.51.0-rc0 Meet Soni (6): doc: factor out common option builtin/for-each-ref: align usage string with the man page builtin/for-each-ref: factor out core logic into a helper builtin/refs: add list subcommand t6300: refactor tests to be shareable t: add test for git refs list subcommand Documentation/for-each-ref-options.adoc | 88 + Documentation/git-for-each-ref.adoc | 89 +- Documentation/git-refs.adoc | 16 + builtin/for-each-ref.c | 36 +- builtin/refs.c | 14 + for-each-ref.h | 26 + t/for-each-ref-tests.sh | 2141 +++++++++++++++++++++++ t/meson.build | 1 + t/t0450/adoc-help-mismatches | 1 - t/t1461-refs-list.sh | 8 + t/t6300-for-each-ref.sh | 2140 +--------------------- 11 files changed, 2316 insertions(+), 2244 deletions(-) create mode 100644 Documentation/for-each-ref-options.adoc create mode 100644 for-each-ref.h create mode 100644 t/for-each-ref-tests.sh create mode 100755 t/t1461-refs-list.sh Range-diff against v5: 1: d2fa47a2b9 ! 1: fd4959594c doc: factor out common option @@ Documentation/for-each-ref-options.adoc (new) + +--include-root-refs:: + List root refs (HEAD and pseudorefs) apart from regular refs. ++ ++--start-after=:: ++ Allows paginating the output by skipping references up to and including the ++ specified marker. When paging, it should be noted that references may be ++ deleted, modified or added between invocations. Output will only yield those ++ references which follow the marker lexicographically. Output begins from the ++ first reference that would come after the marker alphabetically. Cannot be ++ used with `--sort=` or `--stdin` options, or the __ argument(s) ++ to limit the refs. ## Documentation/git-for-each-ref.adoc ## @@ Documentation/git-for-each-ref.adoc: host language allowing their direct evaluation in that language. @@ Documentation/git-for-each-ref.adoc: host language allowing their direct evaluat - ---include-root-refs:: - List root refs (HEAD and pseudorefs) apart from regular refs. +- +---start-after=:: +- Allows paginating the output by skipping references up to and including the +- specified marker. When paging, it should be noted that references may be +- deleted, modified or added between invocations. Output will only yield those +- references which follow the marker lexicographically. Output begins from the +- first reference that would come after the marker alphabetically. Cannot be +- used with `--sort=` or `--stdin` options, or the __ argument(s) +- to limit the refs. +include::for-each-ref-options.adoc[] FIELD NAMES 2: 48a006dca9 ! 2: 1ed0717f6b builtin/for-each-ref: align usage string with the man page @@ builtin/for-each-ref.c +#define COMMON_USAGE_FOR_EACH_REF \ + "[--count=] [--shell|--perl|--python|--tcl]\n" \ + " [(--sort=)...] [--format=]\n" \ -+ " [--include-root-refs] [ --stdin | ... ]\n" \ -+ " [--points-at=]\n" \ ++ " [--include-root-refs] [--points-at=]\n" \ + " [--merged[=]] [--no-merged[=]]\n" \ + " [--contains[=]] [--no-contains[=]]\n" \ -+ " [--exclude= ...]" ++ " [(--exclude=)...] [--start-after=]\n" \ ++ " [ --stdin | ... ]" + static char const * const for_each_ref_usage[] = { - N_("git for-each-ref [] []"), - N_("git for-each-ref [--points-at ]"), - N_("git for-each-ref [--merged []] [--no-merged []]"), - N_("git for-each-ref [--contains []] [--no-contains []]"), +- N_("git for-each-ref [--start-after ]"), + "git for-each-ref " COMMON_USAGE_FOR_EACH_REF, NULL }; 3: b7788d477a ! 3: 69f147aa12 builtin/for-each-ref: factor out core logic into a helper @@ Commit message ## builtin/for-each-ref.c ## @@ - #include "builtin.h" #include "commit.h" #include "config.h" + #include "environment.h" +#include "for-each-ref.h" #include "gettext.h" #include "object.h" @@ builtin/for-each-ref.c -#define COMMON_USAGE_FOR_EACH_REF \ - "[--count=] [--shell|--perl|--python|--tcl]\n" \ - " [(--sort=)...] [--format=]\n" \ -- " [--include-root-refs] [ --stdin | ... ]\n" \ -- " [--points-at=]\n" \ +- " [--include-root-refs] [--points-at=]\n" \ - " [--merged[=]] [--no-merged[=]]\n" \ - " [--contains[=]] [--no-contains[=]]\n" \ -- " [--exclude= ...]" +- " [(--exclude=)...] [--start-after=]\n" \ +- " [ --stdin | ... ]" - -static char const * const for_each_ref_usage[] = { - "git for-each-ref " COMMON_USAGE_FOR_EACH_REF, @@ builtin/for-each-ref.c: int cmd_for_each_ref(int argc, - usage_with_options(for_each_ref_usage, opts); + usage_with_options(usage, opts); - sorting = ref_sorting_options(&sorting_options); - ref_sorting_set_sort_flags_all(sorting, REF_SORTING_ICASE, icase); + if (filter.start_after && sorting_options.nr > 1) + die(_("cannot use --start-after with custom sort options")); @@ builtin/for-each-ref.c: int cmd_for_each_ref(int argc, strvec_clear(&vec); return 0; @@ for-each-ref.h (new) +#define COMMON_USAGE_FOR_EACH_REF \ + "[--count=] [--shell|--perl|--python|--tcl]\n" \ + " [(--sort=)...] [--format=]\n" \ -+ " [--include-root-refs] [ --stdin | ... ]\n" \ -+ " [--points-at=]\n" \ ++ " [--include-root-refs] [--points-at=]\n" \ + " [--merged[=]] [--no-merged[=]]\n" \ + " [--contains[=]] [--no-contains[=]]\n" \ -+ " [--exclude= ...]" ++ " [(--exclude=)...] [--start-after=]\n" \ ++ " [ --stdin | ... ]" + +/* + * The core logic for for-each-ref and its clones. 4: 97088dab96 ! 4: 4195415eb5 builtin/refs: add list subcommand @@ Documentation/git-refs.adoc: SYNOPSIS git refs migrate --ref-format= [--no-reflog] [--dry-run] git refs verify [--strict] [--verbose] +git refs list [--count=] [--shell|--perl|--python|--tcl] -+ [(--sort=)...] [--format=] -+ [--include-root-refs] [ --stdin | ... ] -+ [--points-at=] -+ [--merged[=]] [--no-merged[=]] -+ [--contains[=]] [--no-contains[=]] -+ [--exclude= ...] ++ [(--sort=)...] [--format=] ++ [--include-root-refs] [--points-at=] ++ [--merged[=]] [--no-merged[=]] ++ [--contains[=]] [--no-contains[=]] ++ [(--exclude=)...] [--start-after=] ++ [ --stdin | ... ] DESCRIPTION ----------- 5: abe9df9c4f = 5: d3da47e950 t6300: refactor tests to be shareable 6: a037a47dcd = 6: df2c3fc720 t: add test for git refs list subcommand -- 2.34.1