From: Nicolas Vigier Date: Tue, 15 Oct 2013 23:53:14 GMT Subject: Re: [PATCH] rev-parse --parseopt: fix handling of optional arguments Message-ID: <20131015235314.GZ4589@mars-attacks.org> In-Reply-To: <20131015231427.GF9464@google.com> On Tue, 15 Oct 2013, Jonathan Nieder wrote: > 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? Yes, I think it's sensible. I will look at this and propose an other patch. Thanks.