[pacman-dev] [PATCH 1/2] pkgdelta: rework option/argument parser
Dave Reisner
d at falconindy.com
Fri Apr 6 15:24:40 EDT 2012
On Fri, Apr 06, 2012 at 08:56:04PM +0200, Florian Pritz wrote:
> Signed-off-by: Florian Pritz <bluewind at xinu.at>
> ---
> scripts/pkgdelta.sh.in | 41 ++++++++++++++++++++++++-----------------
> 1 file changed, 24 insertions(+), 17 deletions(-)
>
> diff --git a/scripts/pkgdelta.sh.in b/scripts/pkgdelta.sh.in
> index 5a2e6a3..806ae23 100644
> --- a/scripts/pkgdelta.sh.in
> +++ b/scripts/pkgdelta.sh.in
> @@ -38,11 +38,14 @@ m4_include(library/output_format.sh)
> # print usage instructions
> usage() {
> printf "pkgdelta (pacman) %s\n\n" "$myver"
> - printf -- "$(gettext "Usage: pkgdelta [-q] <package1> <package2>\n")"
> + printf -- "$(gettext "Usage: pkgdelta [options] <package1> <package2>\n")"
> printf -- "$(gettext "\
> pkgdelta will create a delta file between two packages.\n\
> This delta file can then be added to a database using repo-add.\n\n")"
> printf -- "$(gettext "Example: pkgdelta pacman-3.0.0.pkg.tar.gz pacman-3.0.1.pkg.tar.gz")\n"
> + echo
> + printf -- "$(gettext "Options:\n")"
> + printf -- " -q ""$(gettext "quiet\n")"
> }
>
> version() {
> @@ -123,32 +126,36 @@ create_xdelta()
> return 0
> }
>
> -case "$1" in
> - -h|--help) usage; exit 0 ;;
> - -V|--version) version; exit 0 ;;
> - -q|--quiet) QUIET=1; shift ;;
> -esac
> +declare -a args
>
> -if (( $# != 2 )); then
> +# parse arguments
> +while (( $# )); do
> + case "$1" in
> + -h|--help) usage; exit 0 ;;
> + -V|--version) version; exit 0 ;;
> + -q|--quiet) QUIET=1;;
> + *) args+=("$1");;
Be aware that this goes against POSIX options parsing (which should do a
full stop on the first non-option argument). Invalid options will be
treated as arguments as well. If you want longopts like this, maybe add
in an extra case or two...
while (( $# ));do
case $1 in
-h|--help) usage; exit 0 ;;
-V|--version) version; exit 0 ;;
-q|--quiet) QUIET=1 ;;
--) shift; args+=("$@"); break 2 ;;
-*) echo "invalid option -- '$1'"; usage; exit 1 ;;
*) args+=("$1") ;;
esac
shift
done
> + esac
> + shift
> +done
> +
> +if (( ${#args[@]} != 2 )); then
> usage
> exit 1
> fi
>
> -if [[ ! -f $1 ]]; then
> - error "$(gettext "File '%s' does not exist")" "$1"
> - exit 0
> -fi
> -
> -if [[ ! -f $2 ]]; then
> - error "$(gettext "File '%s' does not exist")" "$2"
> - exit 0
> -fi
> +for i in "${args[@]}"; do
> + if [[ ! -f $i ]]; then
> + error "$(gettext "File '%s' does not exist")" "$i"
> + exit 0
exit 0 seems bad to me here since we're erroring out. I realize that
you're just copying the code that used to be here, though... Dan, what's
the rationale?
> + fi
> +done
>
> if ! type xdelta3 &>/dev/null; then
> error "$(gettext "Cannot find the xdelta3 binary! Is xdelta3 installed?")"
> exit 1
> fi
>
> -create_xdelta "$1" "$2"
> +create_xdelta "${args[0]}" "${args[1]}"
You can simply use "${args[@]}" since we know that this is exactly 2
args.
>
> # vim: set ts=2 sw=2 noet:
> --
> 1.7.9.6
>
More information about the pacman-dev
mailing list