index : asp32 | |
Archlinux32 fork of asp - obsolete | gitolite user |
summaryrefslogtreecommitdiff |
author | Dave Reisner <dreisner@archlinux.org> | 2017-07-08 09:29:19 -0400 |
---|---|---|
committer | Dave Reisner <dreisner@archlinux.org> | 2017-07-08 13:25:43 -0400 |
commit | 19dcc3111174284babb30742539bdef4fa8808c9 (patch) | |
tree | 74b1b13a2cf1d10a14ad18a21888e17138c05c28 /asp.in | |
parent | 8d504c6bb58f04ab0b600851ca0c22afc2245173 (diff) |
-rw-r--r-- | asp.in | 42 |
@@ -289,50 +289,34 @@ action__ls-files() { } dispatch_action() { - local a candidates=() - local actions=( - checkout - difflog - disk-usage - export - gc - help - list-all - list-arches - list-local - list-repos - log - ls-files - shortlog - show - untrack - update - ) + local candidates [[ $1 ]] || log_fatal 'no action specified (use -h for help)' - for a in "${actions[@]}"; do - if [[ $a = "$1" ]]; then - candidates=("$a") - break - fi - - [[ $a = "$1"* ]] && candidates+=("$a") - done + # exact match + if declare -F "action__$1" &>/dev/null; then + "action__$@" + return + fi + # prefix match + mapfile -t candidates < <(compgen -A function "action__$1") case ${#candidates[*]} in 0) log_fatal 'unknown action: %s' "$1" ;; 1) - "action__${candidates[0]}" "${@:2}" + "${candidates[0]}" "${@:2}" + return ;; *) { printf "error: verb '%s' is ambiguous; possibilities:" "$1" - printf " '%s'" "${candidates[@]}" + printf " '%s'" "${candidates[@]#action__}" echo } >&2 + return 1 + ;; esac } |