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

Re: [PATCH 06/10] parse-options: never suppress arghelp if LITERAL_ARGHELP is set

From
Stephen Boyd <bebarino@gmail.com>
Date
Dec 3, 2010, 09:16 UTC
Message-ID
<4CF8B55F.8020203@gmail.com>
In-Reply-To
<20101201233136.GG31815@burratino>
On 12/01/10 15:31, Jonathan Nieder wrote:
Show 20 quoted lines
> The PARSE_OPT_LITERAL_ARGHELP flag allows a program to override the
> standard "<argument> for mandatory, [argument] for optional" markup in
> its help message.  Extend it to override the usual "no text for
> disallowed", too (for the PARSE_OPT_NOARG | PARSE_OPT_LITERAL_ARGHELP
> case, which was previously meaningless), to be more intuitive.
> 
> The motivation is to allow update-index to correctly advertise
> 
> 	--cacheinfo <mode> <object> <path>
> 	                      add the specified entry to the index
> 
> while abusing PARSE_OPT_NOARG to disallow the "sticked form"
> 
> 	--cacheinfo=<mode> <object> <path>
> 
> Noticed-by: Stephen Boyd <bebarino@gmail.com>
> Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
> ---
> This seems like the intuitive thing to do, but the motivating use case
> is iffy.  Might be better to introduce a PARSE_OPT_NOSTICKED flag.

parse-options should accept both forms of --cacheinfo above if the option isn't marked PARSE_OPT_NOARG. Marking it NOARG to get rid of the equals sign in the usage seems wrong when both the equals sign and no equals sign can be accepted. The fault lies in the implementation of the low-level callback. It needs to handle more of the parsing.

If --cacheinfo is marked PARSE_OPT_NOARG it should show
	--cacheinfo
If --cacheinfo is marked PARSE_OPT_OPTARG it should show
	--cacheinfo[=<argh>]
If --cacheinfo isn't marked either of the above it should show
	--cacheinfo <argh>

which looks like what you want and it also says it takes an argument unconditionally (perfect?). On top of that, the equals sign is optional (or at least should be). At the point of get_value() p->opt will contain whatever is after the equals sign for the option that is parsed. For options which take no value (NOARG) they'll fail the test if they have anything with an equals sign after it.

By not marking the cacheinfo option NOARG, we've successfully gotten what we want so far. Now we just need to make the cacheinfo callback a bit more like get_arg() and have it look at the context argument. If p->opt is set, we should pull <mode> out of that and make sure we have two more arguments. If p->opt isn't set, we should make sure we have 3 arguments and basically do what is already there.

I know this is a bit more code, but it also means that we don't have this approach bite someone else down the line when they make assumptions about options marked as NOARG not taking arguments.

We should probably add another check like "if argh is set and PARSE_OPT_NOARG is true error out" so this can't be done.

Previous: Jonathan NiederNext: Jonathan Nieder
Message 15 of 21 in “update-index: migrate to parse-options API”
  1. 00/10 update-index: migrate to parse-options APIJonathan Nieder, Dec 1, 2010
  2. 01/10 parse-options: Don't call parse_options_check() so muchJonathan Nieder, Dec 1, 2010
  3. René ScharfeDec 5, 2010
  4. Stephen BoydDec 6, 2010
  5. 02/10 parse-options: clearer reporting of API misuseJonathan Nieder, Dec 1, 2010
  6. Jonathan NiederDec 2, 2010
  7. 02/10 parse-options: clearer reporting of API misuseJonathan Nieder, Dec 2, 2010
  8. 02/10 parse-options: clearer reporting of API misuseJonathan Nieder, Dec 2, 2010
  9. 03/10 parse-options: move NODASH sanity checks to parse_options_checkJonathan Nieder, Dec 1, 2010
  10. 03/10 parse-options: move NODASH sanity checks to parse_options_checkJonathan Nieder, Dec 2, 2010
  11. 04/10 parse-options: sanity check PARSE_OPT_NOARG flagJonathan Nieder, Dec 1, 2010
  12. 04/10 parse-options: sanity check PARSE_OPT_NOARG flagJonathan Nieder, Dec 2, 2010
  13. 05/10 parse-options: do not infer PARSE_OPT_NOARG from option typeJonathan Nieder, Dec 1, 2010
  14. 06/10 parse-options: never suppress arghelp if LITERAL_ARGHELP is setJonathan Nieder, Dec 1, 2010
  15. Stephen BoydDec 3, 2010
  16. Jonathan NiederDec 3, 2010
  17. Stephen BoydDec 3, 2010
  18. 07/10 parse-options: allow git commands to invent new option typesJonathan Nieder, Dec 1, 2010
  19. 08/10 parse-options: make resuming easier after PARSE_OPT_STOP_AT_NON_OPTIONJonathan Nieder, Dec 1, 2010
  20. 09/10 setup: save prefix (original cwd relative to toplevel) in startup_infoJonathan Nieder, Dec 1, 2010
  21. 10/10 update-index: migrate to parse-options APIJonathan Nieder, Dec 1, 2010

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.