From bf18623e06ced1b2e659b6327dddab55c5d450dd Mon Sep 17 00:00:00 2001 From: fbt Date: Mon, 9 Feb 2015 16:22:26 +0300 Subject: [PATCH] woo proper handling --- zpac | 101 +++++++++++++++++++++++++++++++++++++---------------------- 1 file changed, 64 insertions(+), 37 deletions(-) diff --git a/zpac b/zpac index b710d0a..0127e52 100755 --- a/zpac +++ b/zpac @@ -142,6 +142,41 @@ abs.get() { svn checkout "svn://svn.archlinux.org/${svn_repo}/${1}/trunk" "${cfg_workdir}/${1}" } +args_norm() { + declare arg opt c + declare -g argv + + while (( $# )); do + unset -v arg opt c + + case "$1" in + (--) argv+=( "$1" ); break;; + + (--*) + IFS='=' read arg opt <<< "$1" + argv+=( "$arg" ) + + [[ "$opt" ]] && { + argv+=( "$opt" ) + } + ;; + + (-*) + while read -n1 c + do + case "$c" in + -|'') :;; + *) argv+=( "-$c" );; + esac + done <<< "$1" + ;; + + (*) argv+=( "$1" );; + esac + shift + done +} + main() { if [[ -f "$HOME/.config/zpac.rc.sh" ]]; then source "$HOME/.config/zpac.rc.sh" @@ -151,43 +186,34 @@ main() { case "$1" in (--) shift; break;; + (-h) usage; return 0;; + + (-s) action='search';; + (-A) + action='search' + flag_search_aur=1;; + (-S) + action='search' + flag_search_syncdb=1;; + + (-d) + if [[ "$action" == 'get' ]]; then + flag_get_deps=1 + else + action='get' + fi + ;; + + (-w) + cfg_workdir="$2" + shift;; + + (-f) flag_force=1;; + (-*) - while read -n1 c - do - case "$c" in - (-|'') :;; - - (h) usage; return 0;; - - (s) action='search';; - (A) - action='search' - flag_search_aur=1;; - (S) - action='search' - flag_search_syncdb=1;; - - (d) - if [[ "$action" == 'get' ]]; then - flag_get_deps=1 - else - action='get' - fi - ;; - - (w) - cfg_workdir="$2" - shift;; - - (f) flag_force=1;; - - (*) - err "Unknown key: $1" - usage - return 1 - ;; - esac - done <<< "$1" + err "Unknown key: $1" + usage + return 1 ;; (*) break;; @@ -273,4 +299,5 @@ main() { esac } -main "$@" +args_norm "$@" +main "${argv[@]}"