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

Re: [PATCH 7/8] reflog: convert to parse_options() API

From
Junio C Hamano <gitster@pobox.com>
Date
Mar 18, 2022, 01:49 UTC
Message-ID
<xmqqy218av2s.fsf@gitster.g>
In-Reply-To
<patch-7.8-19e1ff0c569-20220317T180439Z-avarab@gmail.com>
Ævar Arnfjörð Bjarmason  <avarab@gmail.com> writes:
Show 20 quoted lines
>  int cmd_reflog(int argc, const char **argv, const char *prefix)
>  {
> -	if (argc > 1 && !strcmp(argv[1], "-h"))
> -		usage(_(reflog_usage));
> +	struct option options[] = {
> +		OPT_END()
> +	};
>  
> -	/* With no command, we default to showing it. */
> -	if (argc < 2 || *argv[1] == '-')
> -		return cmd_log_reflog(argc, argv, prefix);
> +	argc = parse_options(argc, argv, prefix, options, reflog_usage,
> +			     PARSE_OPT_KEEP_DASHDASH | PARSE_OPT_KEEP_ARGV0 |
> +			     PARSE_OPT_KEEP_UNKNOWN |
> +			     PARSE_OPT_NO_INTERNAL_HELP);
> +
> +	/*
> +	  * With "git reflog" we default to showing it. !argc is
> +	  * impossible with PARSE_OPT_KEEP_ARGV0.
> +	  */
Funny indentation?
Show 7 quoted lines
> +	if (argc == 1)
> +		goto log_reflog;
> +
> +	if (!strcmp(argv[1], "-h"))
> +		usage_with_options(reflog_usage, options);
> +	else if (*argv[1] == '-')
> +		goto log_reflog;

Unfortunate. KEEP_UNKNOWN is unwieldy, but it is no worse than the original. We do not have options that are common to all "git reflog" subcommands, so the first token after "git reflog" being anything that begins with "-" is a sign that the default "show" command is being asked for.

Show 10 quoted lines
> diff --git a/t/test-lib-functions.sh b/t/test-lib-functions.sh
> index 0f439c99d61..1d004744589 100644
> --- a/t/test-lib-functions.sh
> +++ b/t/test-lib-functions.sh
> @@ -329,7 +329,7 @@ test_commit () {
>  	else
>  		$echo "${3-$1}" >"$indir$file"
>  	fi &&
> -	git ${indir:+ -C "$indir"} add "$file" &&
> +	git ${indir:+ -C "$indir"} add -- "$file" &&
OK.
Looking good.
Previous: Ævar Arnfjörð BjarmasonNext: Ævar Arnfjörð Bjarmason
Message 12 of 15 in “reflog: migrate fully to parse_options()”
  1. 0/8 reflog: migrate fully to parse_options()Ævar Arnfjörð Bjarmason, Mar 17, 2022
  2. 1/8 reflog.c: indent argument listsÆvar Arnfjörð Bjarmason, Mar 17, 2022
  3. John CaiMar 17, 2022
  4. 2/8 reflog: refactor cmd_reflog() to "if" branchesÆvar Arnfjörð Bjarmason, Mar 17, 2022
  5. 3/8 reflog tests: add missing "git reflog exists" testsÆvar Arnfjörð Bjarmason, Mar 17, 2022
  6. 4/8 reflog: move "usage" variables and use macrosÆvar Arnfjörð Bjarmason, Mar 17, 2022
  7. 5/8 git reflog [expire|delete]: make -h output consistent with SYNOPSISÆvar Arnfjörð Bjarmason, Mar 17, 2022
  8. Junio C HamanoMar 18, 2022
  9. 6/8 reflog exists: use parse_options() APIÆvar Arnfjörð Bjarmason, Mar 17, 2022
  10. Junio C HamanoMar 18, 2022
  11. 7/8 reflog: convert to parse_options() APIÆvar Arnfjörð Bjarmason, Mar 17, 2022
  12. Junio C HamanoMar 18, 2022
  13. 8/8 reflog [show]: display sensible -h outputÆvar Arnfjörð Bjarmason, Mar 17, 2022
  14. reflog: fix 'show' subcommand's argvSZEDER Gábor, Mar 28, 2022
  15. Junio C HamanoMar 28, 2022

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.