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

Re: sub-fetches discard --ipv4|6 option

From
Jeff King <peff@peff.net>
Date
Sep 15, 2020, 21:23 UTC
Message-ID
<20200915212338.GA2868700@coredump.intra.peff.net>
In-Reply-To
<xmqq4kny2461.fsf@gitster.c.googlers.com>
On Tue, Sep 15, 2020 at 01:09:10PM -0700, Junio C Hamano wrote:
Show 13 quoted lines
> > If you go that route, we have some "_F" macros that take flags. Probably
> > would make sense to add it more consistently, which lets you convert:
> >
> >   OPT_BOOL('f', "foo", &foo, "the foo option");
> >
> > into:
> >
> >   OPT_BOOL_F('f', "foo", &foo, "the foo option", PARSE_OPT_RECURSIVE);
> >
> > but could also be used for other flags.
> 
> What is this "recursive" about?  Does it have much in common with
> "passthru", or are they orthogonal?

I agree the name is not super-descriptive. And it's a bit odd that the parse-options code itself would not care about it. It's simply a convenient bit for the calling code to use (rather than try to manage a separate array whose values correspond). It could be PARSE_OPT_USER1, but that is probably too inscrutable. :)

It's sort-of similar to passthru, but not quite. The problem with passthru is that it _always_ applies to the option. We never parse it as an option itself, but rather always stick its canonicalized form into an array of strings. But for the case we're talking about here, we don't know ahead of time whether we want the passthru behavior or not. It depends on whether we see an option like "--all" (which might even come after us).

So I think the best you could do is:
  1. Keep two separate option lists, "parent" and "child". The parent
     list has "--all" in it. The child list has stuff like "--ipv6".
  2. Parse using the parent list with PARSE_OPT_KEEP_UNKNOWN. That lets
     you decide whether we're in a mode that is spawning child fetch
     processes.
  3. If we are spawning, then everything in the "child" option list
     becomes passthru. We could either mark them as such, or really, I
     guess we could just pass the remainder of argv on as-is (though it
     might be nice to diagnose a bogus config option once in the parent
     rather than in each child).

That would work OK. One downside is that PARSE_OPT_KEEP_UNKNOWN is inherently flaky. It doesn't know if "--foo --bar" is two options, or the option "--foo" with the value "--bar". You could solve that by leaving dummy passthru options in the "parent" list, but now we're back to having two copies.

I guess parse-options could provide a MAYBE_PASSTHRU flag. On the first parse_options() call, it would skip over any such options, leaving them in argv. On the second, the caller would tell it to actually parse them.

-Peff
Previous: Junio C HamanoNext: Junio C Hamano
Message 14 of 49 in “sub-fetches discard --ipv4|6 option”
  1. Alex RiesenSep 14, 2020
  2. Jeff KingSep 14, 2020
  3. Alex RiesenSep 15, 2020
  4. Pass --ipv4 and --ipv6 options to sub-fetches when fetching multiple remotes and submodulesAlex Riesen, Sep 15, 2020
  5. Junio C HamanoSep 15, 2020
  6. Alex RiesenSep 16, 2020
  7. Jeff KingSep 15, 2020
  8. Junio C HamanoSep 16, 2020
  9. Alex RiesenSep 16, 2020
  10. Jeff KingSep 15, 2020
  11. Alex RiesenSep 15, 2020
  12. Jeff KingSep 15, 2020
  13. Junio C HamanoSep 15, 2020
  14. Jeff KingSep 15, 2020
  15. Junio C HamanoSep 15, 2020
  16. Jeff KingSep 16, 2020
  17. Junio C HamanoSep 16, 2020
  18. Alex RiesenSep 15, 2020
  19. Jeff KingSep 16, 2020
  20. Alex RiesenSep 17, 2020
  21. Jeff KingSep 22, 2020
  22. config: option transfer.ipversion to set transport protocol version for network fetchesAlex Riesen, Sep 15, 2020
  23. Jeff KingSep 16, 2020
  24. Alex RiesenSep 17, 2020
  25. Config option to set the transport protocol version for network fetchesAlex Riesen, Sep 17, 2020
  26. Jeff KingSep 17, 2020
  27. Alex RiesenSep 17, 2020
  28. Jeff KingSep 17, 2020
  29. Alex RiesenSep 17, 2020
  30. Junio C HamanoDec 22, 2020
  31. Alex RiesenJan 7, 2021
  32. Alex RiesenSep 17, 2020
  33. Alex RiesenSep 17, 2020
  34. Junio C HamanoSep 16, 2020
  35. Jeff KingSep 16, 2020
  36. Junio C HamanoSep 16, 2020
  37. Junio C HamanoSep 16, 2020
  38. Jeff KingSep 17, 2020
  39. Junio C HamanoSep 17, 2020
  40. Junio C HamanoSep 16, 2020
  41. Alex RiesenSep 17, 2020
  42. Junio C HamanoSep 17, 2020
  43. Alex RiesenSep 18, 2020
  44. Junio C HamanoSep 18, 2020
  45. Alex RiesenSep 21, 2020
  46. Jeff KingSep 22, 2020
  47. Alex RiesenSep 17, 2020
  48. Alex RiesenSep 17, 2020
  49. Junio C HamanoSep 14, 2020

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.