Re: [PATCH 1/3] git-compat-util: introduce skip_to_opt_val()
- Date: Mon, 04 Dec 2017 05:35:07 -0800
- From: Junio C Hamano <gitster@xxxxxxxxx>
- Subject: Re: [PATCH 1/3] git-compat-util: introduce skip_to_opt_val()
Christian Couder <christian.couder@xxxxxxxxx> writes:
> In the few cases where do_something() accepts NULL and does something
> different with it, the former can be changed to:
> if (skip_to_optional_val(arg, "--key", &arg, NULL) /* the last
> argument is the default value */
That's the thing. If do_something() that takes "" and NULL and
behaves differently is rare, that indicates that the existing code
may not be committed to treat "--key" and "--key=''" the same in the
first place, and I am not 100% convinced that I want to see us
committed to force that design throughout the system by introducing
a helper that hardcodes the equivalence and encourages to use it.
Imagine a command that takes "--do-something" option and does that
"something" unconditionally. We may later extend it to take an
optional argument, i.e. "--do-something=c1,c2,...", to tell the
command to do that "something" under some but not all conditions.
The values c1,c2 would tell that we want that something done only
under either conditions c1 or c2 holds true.
It would be natural to expect that "--do-something=" to do that
"something" under no condition (i.e. as if no such option was
given); that would help scripts that accumulate the set of
conditions in a variable and say "--do-something=$when", by making
it a no-op when the variable $when turns out to be an empty string.
"--do-something" without "=" would not want to mean the same thing.
The above observation makes me suspect that it depends on the "key"
what "--key=$value" we want to be equivalent to "--key". In the
"--do-something" case, we do not want to pretend as if we got an
empty string; instead we'd pretend as if we got "always" or
something like that.
And your "default" would work well for this "default is tied to what
the key is" paradigm, i.e.
skip_to_optional_arg(arg, "--do-something", &arg, "always")
would make us treat "--do-something" and "--do-something=always" the
If it turns out that the default arg almost always is an empty
string, I do not mind
#define skip_to_opt_arg(s,k,v) skip_to_optional_arg(s,k,v,"")