On 13/04/12 00:54, Dave Reisner wrote:
> This will replace our current options parser used in pacman-key and
> makepkg. It follows heuristics closer to that of GNU getopt long (and
> thus pacman itself), with the exception that it does not allow for
> options with optional arguments. Due to the way this parser will be
> used, this sort of functionality will not be needed.
> 
> Instead of relying on eval+set, options are normalized into an array,
> OPTRET, which callers should expect to be populated after returning from
> parseopts. This avoids problems with quotes and spaces in arguments,
> assuming that the user quotes properly when passing into the
> application.
> 
> A new test harness for parseopts is added in test/scripts.
> 
> Signed-off-by: Dave Reisner <[email protected]>
> ---

<snip>

> +
> +     get_argreq() {
> +             local o re="^($1)(:?:?)$"

You only want one :? in the regex.

> +             for o in "${longopts[@]}"; do
> +                     # found option, return number of colons (0 = none, 1 = 
> required)
> +                     [[ $o =~ $re ]] && return ${#BASH_REMATCH[2]}
> +             done
> +             # failure
> +             return 255
> +     }

<snip>

> +test_result() {
> +  local result=$1 tokencount=$2 input=$3; shift 3
> +
> +  if { [[ $result = "$*" ]] || [[ $2 = NULL && -z $1 ]]; } && (( tokencount 
> == $# )); then

What is the "|| [[ $2 = NULL && -z $1 ]];" part for?  I can guess, but
it seems unneeded.


With the minor changes I pointed out in the last few emails, I ack this
patchset.  My biggest complaint is I prefer the name "parse_options"
over "parseopts"!

Allan


Reply via email to