From: Jonathan Nieder Date: Tue, 15 Oct 2013 23:14:27 GMT Subject: Re: [PATCH] rev-parse --parseopt: fix handling of optional arguments Message-ID: <20131015231427.GF9464@google.com> In-Reply-To: <1381838425-18244-1-git-send-email-boklm@mars-attacks.org> Nicolas Vigier wrote: > $ 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 ? to mean the option has an optional argument. If the option is supplied without its argument and is nonempty, the argument is taken to be . ). Sensible? Thanks, Jonathan