On Mon, Mar 18, 2019 at 11:47:20AM +0900, Junio C Hamano wrote: > Jeff King <peff@xxxxxxxx> writes: > > >> +`OPT_ARGUMENT(long, &int_var, description)`:: > >> Introduce a long-option argument that will be kept in `argv[]`. > >> + If this option was seen, `int_var` will be set to one (except > >> + if a `NULL` pointer was passed). > > > > So this effectively makes it into a "bool" that we keep. I think that's > > fine. It always uses NOARG, so it is not like we would ever need to see > > "we got --foo, and this is the argument it had". > > > > I did wonder if it was possible for "--no-foo" to trigger this (leaving > > the caller who looks at the int unsure if they saw "--foo" or > > "--no-foo"), but it seems that the parse-options code checks for > > OPTION_ARGUMENT before it ever looks at negation. > > When a caller that needs to tell --no-foo and lack of any foo > related option arises, we should be able to update the function > further so that the caller can initialize the variable to -1 > (unspecified) and make sure that 0 is left upon seeing --no-foo > so it's not a show stopper, I guess. The way it is written, I think the intent is that you would do: OPT_ARGUMENT("foo", &saw_foo, ...), OPT_ARGUMENT("no-foo", &saw_no_foo, ...), I'm happy to punt on it until it ever comes up (which I suspect may be never). -Peff