Re: [PATCH] rev-parse --parseopt: fix handling of optional arguments
- From
Jonathan Nieder <jrnieder@gmail.com>
- Date
- Oct 15, 2013, 23:14 UTC
- Message-ID
- <20131015231427.GF9464@google.com>
- In-Reply-To
- <1381838425-18244-1-git-send-email-boklm@mars-attacks.org>
Nicolas Vigier wrote:
Show 17 quoted lines
> $ cat /tmp/opt.sh > #!/bin/sh > OPTIONS_SPEC="\ > git [options] > -- > q,quiet be quiet > S,gpg-sign? GPG-sign commit" > echo "$OPTIONS_SPEC" | git rev-parse --parseopt $parseopt_extra -- "$@" > > Then the following two commands give us the same result : > > $ /tmp/opt.sh -S -q > set -- -S -q -- > $ /tmp/opt.sh -S-q > set -- -S '-q' -- > > We cannot know if '-q' is an argument to '-S' or a new option.
Hmph.
As Junio mentioned, inserting '' would be a backward-incompatible change. I don't think it's worth breaking existing scripts. Probably what is needed is a new parseopt special character with the new semantics (e.g.,
Use ?? to mean the option has an optional argument. If the option is supplied without its argument, the argument is taken to be ''.
or something like
Use ?<default> to mean the option has an optional argument. If the option is supplied without its argument and <default> is nonempty, the argument is taken to be <default>.
).
Sensible?
Thanks, Jonathan