1
0
mirror of https://github.com/moparisthebest/pacman synced 2024-11-11 11:55:12 -05:00
pacman/scripts/library
Dave Reisner 8679cd68d8 scripts/library: introduce parseopts
This will replace our current options parser used in pacman-key,
makepkg, and ideally elsewhere. 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 <dreisner@archlinux.org>
2012-04-24 08:38:36 -05:00
..
output_format.sh scripts: refactor output formatting functions 2011-06-15 09:18:05 -05:00
parse_options.sh Revert "parseopts: normalize options into an array" 2012-04-07 11:03:48 -05:00
parseopts.sh scripts/library: introduce parseopts 2012-04-24 08:38:36 -05:00
README scripts/library: introduce parseopts 2012-04-24 08:38:36 -05:00

This folder contains code snippets that can be reused by multiple
scripts.  A brief description of each file follows.

output_format.sh:
Provides basic output formatting functions with levels 'msg', 'msg2',
'warning' and 'error'.  The 'msg' amd 'msg2' functions print to stdout
and can be silenced by defining 'QUIET'.  The 'warning' and 'error'
functions print to stderr with the appropriate prefix added to the
message.

parse_options.sh:
A getopt replacement to avoids portability issues, in particular the
lack of long option name support in the default getopt provided by some
platforms.
Usage: parse_option $SHORT_OPTS $LONG_OPTS "$@"

parseopts.sh:
A getopt_long-like parser which portably supports longopts and shortopts
with some GNU extensions. It does not allow for options with optional
arguments. For both short and long opts, options requiring an argument
should be suffixed with a colon. After the first argument containing
the short opts, any number of valid long opts may be be passed. The end
of the options delimiter must then be added, followed by the user arguments
to the calling program.

Reccommended Usage:
  OPT_SHORT='fb:z'
  OPT_LONG=('foo' 'bar:' 'baz')
  if ! parseopts "$OPT_SHORT" "${OPT_LONG[@]}" -- "$@"; then
    exit 1
  fi
  set -- "${OPTRET[@]}"
Returns:
  0: parse success
  1: parse failure (error message supplied)