On Wed, Jun 18, 2008 at 11:52:42AM -0700, Junio C Hamano wrote: > Johannes Schindelin <Johannes.Schindelin@xxxxxx> writes: > > > On Tue, 17 Jun 2008, Junio C Hamano wrote: > > > >> Jeff King <peff@xxxxxxxx> writes: > >> > >> > I think the only right way to accomplish this is to convert the revision > >> > and diff parameters into a parseopt-understandable format. > >> > >> Not necessarily. You could structure individual option parsers like how > >> diff option parsers are done. You iterate over argv[], feed diff option > >> parser the current index into argv[] and ask if it is an option diff > >> understands, have diff eat the option (and possibly its parameter) to > >> advance the index, or allow diff option to say "I do not understand > >> this", and then handle it yourself or hand it to other parsers. > > > > AFAIR Pierre tried a few ways, and settled with a macro to introduce the > > diff options into a caller's options. > > > > IOW it would look something like this: > > > > static struct option builtin_what_options[] = { > > [... options specific to this command ...] > > DIFF__OPT(&diff_options) > > }; > > I think that is the more painful approach Jeff mentioned, and my comment > was to show that it is not the only way. > It seems to me that you could implement Jeff's PARSE_OPT_STOP_AT_UNKNOWN, and then if multiple option parsers are needed you would simply loop over parse_options for each of the commands, waiting for argc to stop changing. Of course Jeff's flag would also need to stop parse_options from eating the first argument. Is this sort of what you are suggesting Junio? -- Shawn -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html