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

Re: [PATCH v2 01/19] parse-options-cb: implement parse_opt_pass_strbuf()

From
Junio C Hamano <gitster@pobox.com>
Date
Jun 9, 2015, 23:11 UTC
Message-ID
<xmqqvbewwk7o.fsf@gitster.dls.corp.google.com>
In-Reply-To
<1433314143-4478-2-git-send-email-pyokagan@gmail.com>
Paul Tan <pyokagan@gmail.com> writes:
Show 14 quoted lines
> diff --git a/parse-options-cb.c b/parse-options-cb.c
> index be8c413..5b1dbcf 100644
> --- a/parse-options-cb.c
> +++ b/parse-options-cb.c
> @@ -134,3 +134,32 @@ int parse_opt_noop_cb(const struct option *opt, const char *arg, int unset)
>  {
>  	return 0;
>  }
> +
> +/**
> + * For an option opt, recreates the command-line option in opt->value which
> + * must be an strbuf. This is useful when we need to pass the command-line
> + * option to another command.
> + */

This is to be used to create a single argument, not an entire command line to be executed via run_command() or a shell, right? It wasn't very clear from the above command.

If the same option is given more than once, the earlier ones are discarded and the last one wins. That may be OK for your expected callers, and I do not think this needs to have an option to instead accumulate them, but it needs to be made clear in the comment and the API documentation for future developers who want to use the parse-options API.

Show 35 quoted lines
> +int parse_opt_pass_strbuf(const struct option *opt, const char *arg, int unset)
> +{
> +	struct strbuf *sb = opt->value;
> +
> +	strbuf_reset(sb);
> +
> +	if (opt->long_name) {
> +		strbuf_addstr(sb, unset ? "--no-" : "--");
> +		strbuf_addstr(sb, opt->long_name);
> +		if (arg) {
> +			strbuf_addch(sb, '=');
> +			strbuf_addstr(sb, arg);
> +		}
> +	} else if (opt->short_name && !unset) {
> +		strbuf_addch(sb, '-');
> +		strbuf_addch(sb, opt->short_name);
> +		if (arg)
> +			strbuf_addstr(sb, arg);
> +	} else
> +		return -1;
> +
> +	return 0;
> +}
> diff --git a/parse-options.h b/parse-options.h
> index c71e9da..1d21398 100644
> --- a/parse-options.h
> +++ b/parse-options.h
> @@ -224,6 +224,7 @@ extern int parse_opt_with_commit(const struct option *, const char *, int);
>  extern int parse_opt_tertiary(const struct option *, const char *, int);
>  extern int parse_opt_string_list(const struct option *, const char *, int);
>  extern int parse_opt_noop_cb(const struct option *, const char *, int);
> +extern int parse_opt_pass_strbuf(const struct option *, const char *, int);
>  
>  #define OPT__VERBOSE(var, h)  OPT_COUNTUP('v', "verbose", (var), (h))
>  #define OPT__QUIET(var, h)    OPT_COUNTUP('q', "quiet",   (var), (h))
Previous: Paul TanNext: Paul Tan
Message 3 of 48 in “Make git-pull a builtin”
  1. 00/19 Make git-pull a builtinPaul Tan, Jun 3, 2015
  2. 01/19 parse-options-cb: implement parse_opt_pass_strbuf()Paul Tan, Jun 3, 2015
  3. Junio C HamanoJun 9, 2015
  4. 02/19 parse-options-cb: implement parse_opt_pass_argv_array()Paul Tan, Jun 3, 2015
  5. Stefan BellerJun 3, 2015
  6. Junio C HamanoJun 9, 2015
  7. Paul TanJun 10, 2015
  8. Junio C HamanoJun 10, 2015
  9. 03/19 argv-array: implement argv_array_pushv()Paul Tan, Jun 3, 2015
  10. 04/19 pull: implement skeletal builtin pullPaul Tan, Jun 3, 2015
  11. Junio C HamanoJun 10, 2015
  12. 05/19 pull: implement fetch + mergePaul Tan, Jun 3, 2015
  13. Junio C HamanoJun 9, 2015
  14. 06/19 pull: pass verbosity, --progress flags to fetch and mergePaul Tan, Jun 3, 2015
  15. Junio C HamanoJun 9, 2015
  16. 07/19 pull: pass git-merge's options to git-mergePaul Tan, Jun 3, 2015
  17. 08/19 pull: pass git-fetch's options to git-fetchPaul Tan, Jun 3, 2015
  18. Stefan BellerJun 3, 2015
  19. 09/19 pull: error on no merge candidatesPaul Tan, Jun 3, 2015
  20. Junio C HamanoJun 9, 2015
  21. Paul TanJun 13, 2015
  22. 10/19 pull: support pull.ff configPaul Tan, Jun 3, 2015
  23. Junio C HamanoJun 9, 2015
  24. 11/19 pull: check if in unresolved merge statePaul Tan, Jun 3, 2015
  25. Junio C HamanoJun 10, 2015
  26. Junio C HamanoJun 10, 2015
  27. Paul TanJun 10, 2015
  28. Junio C HamanoJun 10, 2015
  29. Paul TanJun 14, 2015
  30. 12/19 pull: fast-forward working tree if head is updatedPaul Tan, Jun 3, 2015
  31. 13/19 pull: implement pulling into an unborn branchPaul Tan, Jun 3, 2015
  32. Junio C HamanoJun 10, 2015
  33. 14/19 pull: set reflog messagePaul Tan, Jun 3, 2015
  34. 15/19 pull: teach git pull about --rebasePaul Tan, Jun 3, 2015
  35. Junio C HamanoJun 10, 2015
  36. Paul TanJun 10, 2015
  37. Junio C HamanoJun 10, 2015
  38. Paul TanJun 10, 2015
  39. Junio C HamanoJun 10, 2015
  40. Junio C HamanoJun 10, 2015
  41. 16/19 pull: configure --rebase via branch.<name>.rebase or pull.rebasePaul Tan, Jun 3, 2015
  42. 17/19 pull --rebase: exit early when the working directory is dirtyPaul Tan, Jun 3, 2015
  43. Kevin DaudtJun 3, 2015
  44. Kevin DaudtJun 10, 2015
  45. 18/19 pull --rebase: error on no merge candidate casesPaul Tan, Jun 3, 2015
  46. Stefan BellerJun 3, 2015
  47. 19/19 pull: remove redirection to git-pull.shPaul Tan, Jun 3, 2015
  48. Stefan BellerJun 3, 2015

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.