git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [GSoC][RFC PATCH 1/2] builtin/refs: add list subcommand

From
Jean-Noël Avila <jn.avila@free.fr>
Date
Jun 27, 2025, 16:27 UTC
Message-ID
<0d3fe70e-2064-4206-9673-c0589a4445f1@free.fr>
In-Reply-To
<20250627074934.1761897-2-meetsoni3017@gmail.com>
Hello,
I'm only focusing on the documentation part.
Le 27/06/2025 à 09:49, Meet Soni a écrit :
Show 15 quoted lines
>
> ---
>  Documentation/git-refs.adoc |  95 +++++++++++++++++++++++++++++++
>  builtin/refs.c              | 110 ++++++++++++++++++++++++++++++++++++
>  2 files changed, 205 insertions(+)
> 
> diff --git a/Documentation/git-refs.adoc b/Documentation/git-refs.adoc
> index 4d6dc994f9..d8f81eaabd 100644
> --- a/Documentation/git-refs.adoc
> +++ b/Documentation/git-refs.adoc
> @@ -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]

please use spaces around '|' in alternative options: [--shell | --perl | --python | --tcl]

> +	      [(--sort=<key>)...] [--format=<format>]

This "[(--sort=<key>)...]" form is new to me. It abides by the synopsis syntax. As I understand it, the user can specify a number of --sort=<key> on the command line.

From the description below, it seems that for --format, the actual syntax should be:

[--format[=<format>]]
> +	      [--include-root-refs] [ --stdin | <pattern>... ]

Here no spaces, after '[' or before ']': [--stdin | <pattern>...]

For syntax precedence, we have not documented anything, but the obvious meaning is "--stdin or a number of <pattern>. OK

> +	      [--points-at=<object>]
> +	      [--merged[=<object>]] [--no-merged[=<object>]]
> +	      [--contains[=<object>]] [--no-contains[=<object>]]
> +	      [--exclude=<pattern> ...]

What are the ... meaning here ? Is it --exclude= followed by a number of <pattern>? What is the separator then? Or is it like for --sort?

Maybe use another placeholder name to differentiate from the <pattern> alternative to --stdin

Show 8 quoted lines
>  
>  DESCRIPTION
>  -----------
> @@ -26,6 +33,11 @@ migrate::
>  verify::
>  	Verify reference database consistency.
>  
> +list::

OK, synopsis is used in the first part, but this man page has not been fully converted. Let's stick to the previous style.

Show 25 quoted lines
> +	List references in the repository with support for filtering, formatting,
> +	and sorting. This subcommand uses the same core logic as
> +	linkgit:git-for-each-ref[1] and offers equivalent functionality.
> +
>  OPTIONS
>  -------
>  
> @@ -57,6 +69,89 @@ 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':
> +
> +<pattern>...::
> +	If one or more patterns are given, only refs are shown that
> +	match against at least one pattern, either using fnmatch(3) or
> +	literally, in the latter case matching completely or from the
> +	beginning up to a slash.
> +> +--stdin::
> +	If `--stdin` is supplied, then the list of patterns is read from
> +	standard input instead of from the argument list.> +
> +--count=<count>::
> +	By default the command shows all refs that match
> +	`<pattern>`.  This option makes it stop after showing
> +	that many refs.

Please revert the sentences and remove the "this option makes it". The option description should state first the action of the option, then talk about default values, behavior, ...

> +
> +--sort=<key>::
> +	A field name to sort on.  Prefix `-` to sort in
Use a verb in imperative mood as much as possible.
Show 6 quoted lines
> +	descending order of the value.  When unspecified,
> +	`refname` is used.  You may use the --sort=<key> option
> +	multiple times, in which case the last key becomes the primary
> +	key.
> +
> +--format=<format>::
Cite the form with optional param
> +	A string that interpolates `%(fieldname)` from a ref being shown and
> +	the object it points at. In addition, the string literal `%%`
> +	renders as `%` and `%xx` - where `xx` are hex digits - renders as
> +	the character with hex code `xx`. For example, `%00` interpolates to

the ASCII character only I guess: encoding matters here as we are usually in UTF-8.

Show 15 quoted lines
> +	`\0` (NUL), `%09` to `\t` (TAB), and `%0a` to `\n` (LF).
> ++
> +When unspecified, `<format>` defaults to `%(objectname) SPC %(objecttype)
> +TAB %(refname)`.
> +
> +--color[=<when>]::
> +	Respect any colors specified in the `--format` option. The
> +	`<when>` field must be one of `always`, `never`, or `auto` (if
> +	`<when>` is absent, behave as if `always` was given).
> +
> +--shell::
> +--perl::
> +--python::
> +--tcl::
> +	If given, strings that substitute `%(fieldname)`
Personal taste: "If given" is useless here.
Show 37 quoted lines
> +	placeholders are quoted as string literals suitable for
> +	the specified host language.  This is meant to produce
> +	a scriptlet that can directly be `eval`ed.
> +
> +--points-at=<object>::
> +	Only list refs which points at the given object.
> +
> +--merged[=<object>]::
> +	Only list refs whose tips are reachable from the
> +	specified commit (HEAD if not specified).
> +
> +--no-merged[=<object>]::
> +	Only list refs whose tips are not reachable from the
> +	specified commit (HEAD if not specified).
> +
> +--contains[=<object>]::
> +	Only list refs which contain the specified commit (HEAD if not
> +	specified).
> +
> +--no-contains[=<object>]::
> +	Only list refs which don't contain the specified commit (HEAD
> +	if not specified).
> +
> +--ignore-case::
> +	Sorting and filtering refs are case insensitive.
> +
> +--omit-empty::
> +	Do not print a newline after formatted refs where the format expands
> +	to the empty string.
> +
> +--exclude=<pattern>::
> +	If one or more patterns are given, only refs which do not match
> +	any excluded pattern(s) are shown. Matching is done using the
> +	same rules as `<pattern>` above.
> +
> +--include-root-refs::
> +	List root refs (HEAD and pseudorefs) apart from regular refs.

The description seems a bit off. Did you really mean "apart from", not "along with"?

Thanks
Jean-Noël
Previous: Meet SoniNext: Junio C Hamano
Message 3 of 65 in “Add refs list subcommand”
  1. Meet SoniJun 27, 2025
  2. [GSoC][RFC PATCH 1/2] builtin/refs: add list subcommandMeet Soni, Jun 27, 2025
  3. Jean-Noël AvilaJun 27, 2025
  4. Junio C HamanoJun 27, 2025
  5. Meet SoniJun 30, 2025
  6. doc:git-for-each-ref: fix styling and typosJean-Noël Avila, Jun 29, 2025
  7. Junio C HamanoJun 30, 2025
  8. Jean-Noël AVILAJun 30, 2025
  9. [GSoC][RFC PATCH 2/2] t: add test for git refs list subcommandMeet Soni, Jun 27, 2025
  10. Junio C HamanoJun 27, 2025
  11. shejialuoJun 28, 2025
  12. Junio C HamanoJun 30, 2025
  13. shejialuoJul 6, 2025
  14. Meet SoniJun 30, 2025
  15. Junio C HamanoJun 30, 2025
  16. Patrick SteinhardtJul 9, 2025
  17. [GSoC][RFC PATCH v2 0/2] Add refs list subcommandMeet Soni, Jul 17, 2025
  18. [GSoC][RFC PATCH v2 1/2] builtin/refs: add list subcommandMeet Soni, Jul 17, 2025
  19. Eric SunshineJul 17, 2025
  20. Meet SoniJul 23, 2025
  21. [GSoC][RFC PATCH v2 2/2] t: add test for git refs list subcommandMeet Soni, Jul 17, 2025
  22. Junio C HamanoJul 17, 2025
  23. Meet SoniJul 23, 2025
  24. Junio C HamanoJul 23, 2025
  25. [GSoC][RFC PATCH v3 0/3] Add refs list subcommandMeet Soni, Jul 23, 2025
  26. [GSoC][RFC PATCH v3 1/3] builtin/refs: add list subcommandMeet Soni, Jul 23, 2025
  27. Patrick SteinhardtJul 24, 2025
  28. Junio C HamanoJul 24, 2025
  29. Meet SoniJul 25, 2025
  30. [GSoC][RFC PATCH v3 2/3] t6300: refactor tests to be shareableMeet Soni, Jul 23, 2025
  31. [GSoC][RFC PATCH v3 3/3] t: add test for git refs list subcommandMeet Soni, Jul 23, 2025
  32. [GSoC][RFC PATCH v4 0/5] Add refs list subcommandMeet Soni, Jul 31, 2025
  33. [GSoC][RFC PATCH v4 1/5] doc: factor out common optionMeet Soni, Jul 31, 2025
  34. [GSoC][RFC PATCH v4 2/5] builtin/for-each-ref: factor out core logic into a helperMeet Soni, Jul 31, 2025
  35. Patrick SteinhardtAug 1, 2025
  36. Meet SoniAug 4, 2025
  37. [GSoC][RFC PATCH v4 3/5] builtin/refs: add list subcommandMeet Soni, Jul 31, 2025
  38. Phillip WoodAug 1, 2025
  39. Junio C HamanoAug 1, 2025
  40. Phillip WoodAug 1, 2025
  41. Junio C HamanoAug 1, 2025
  42. Phillip WoodAug 4, 2025
  43. Meet SoniAug 4, 2025
  44. Phillip WoodAug 4, 2025
  45. Junio C HamanoAug 4, 2025
  46. [GSoC][RFC PATCH v4 4/5] t6300: refactor tests to be shareableMeet Soni, Jul 31, 2025
  47. [GSoC][RFC PATCH v4 5/5] t: add test for git refs list subcommandMeet Soni, Jul 31, 2025
  48. Patrick SteinhardtAug 1, 2025
  49. [GSoC][RFC PATCH v5 0/6] Add refs list subcommandMeet Soni, Aug 4, 2025
  50. [GSoC][RFC PATCH v5 1/6] doc: factor out common optionMeet Soni, Aug 4, 2025
  51. Junio C HamanoAug 4, 2025
  52. [GSoC][RFC PATCH v5 2/6] builtin/for-each-ref: align usage string with the man pageMeet Soni, Aug 4, 2025
  53. [GSoC][RFC PATCH v5 3/6] builtin/for-each-ref: factor out core logic into a helperMeet Soni, Aug 4, 2025
  54. [GSoC][RFC PATCH v5 4/6] builtin/refs: add list subcommandMeet Soni, Aug 4, 2025
  55. [GSoC][RFC PATCH v5 5/6] t6300: refactor tests to be shareableMeet Soni, Aug 4, 2025
  56. [GSoC][RFC PATCH v5 6/6] t: add test for git refs list subcommandMeet Soni, Aug 4, 2025
  57. [GSoC][PATCH v6 0/6] Add refs list subcommandMeet Soni, Aug 5, 2025
  58. [GSoC][PATCH v6 1/6] doc: factor out common optionMeet Soni, Aug 5, 2025
  59. [GSoC][PATCH v6 2/6] builtin/for-each-ref: align usage string with the man pageMeet Soni, Aug 5, 2025
  60. [GSoC][PATCH v6 3/6] builtin/for-each-ref: factor out core logic into a helperMeet Soni, Aug 5, 2025
  61. [GSoC][PATCH v6 4/6] builtin/refs: add list subcommandMeet Soni, Aug 5, 2025
  62. [GSoC][PATCH v6 5/6] t6300: refactor tests to be shareableMeet Soni, Aug 5, 2025
  63. [GSoC][PATCH v6 6/6] t: add test for git refs list subcommandMeet Soni, Aug 5, 2025
  64. Patrick SteinhardtAug 5, 2025
  65. Junio C HamanoAug 5, 2025

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.