From 983e4af08cd1557096ba55674b22fbcb67473e71 Mon Sep 17 00:00:00 2001 From: 3wc <3wc.git@doesthisthing.work> Date: Mon, 26 Oct 2020 13:33:06 +0200 Subject: [PATCH] Use docopts variables Ref #18 --- .gitignore | 1 + abra | 71 +++++++++++++++++++++--------------------------------- 2 files changed, 28 insertions(+), 44 deletions(-) diff --git a/.gitignore b/.gitignore index 404abb2..2451898 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ coverage/ +/.venv diff --git a/abra b/abra index 8650c5c..deda2bf 100755 --- a/abra +++ b/abra @@ -26,8 +26,8 @@ View logs from running applications: multilogs tail logs from a whole stack Interact with running containers: - cp copy files to a container - run run a command in the specified service's container + cp copy files to a container + run run in 's container Manage servers: server add [user] [port] add docker context @@ -135,8 +135,8 @@ eval "var_$1+=($value)"; else eval "var_$1=$value"; fi; return 0; fi; done return 1; }; stdout() { printf -- "cat <<'EOM'\n%s\nEOM\n" "$1"; }; stderr() { printf -- "cat <<'EOM' >&2\n%s\nEOM\n" "$1"; }; error() { [[ -n $1 ]] && stderr "$1"; stderr "$usage"; _return 1; }; _return() { -printf -- "exit %d\n" "$1"; exit "$1"; }; set -e; trimmed_doc=${DOC:1:1345} -usage=${DOC:40:131}; digest=f2937; shorts=(-c -e -h -s -v) +printf -- "exit %d\n" "$1"; exit "$1"; }; set -e; trimmed_doc=${DOC:1:1352} +usage=${DOC:40:131}; digest=3774c; shorts=(-c -e -h -s -v) longs=(--config --env --help --stack --version); argcounts=(1 1 0 1 0) node_0(){ value __config 0 true; }; node_1(){ value __env 1 true; }; node_2(){ switch __help 2; }; node_3(){ value __stack 3 true; }; node_4(){ @@ -193,7 +193,6 @@ parse_subcommand() { if [ -n "$PREFIX" ]; then PPREFIX="_$2" SPREFIX="$2 " - SSPREFIX=" $2" fi case $SUBCOMMAND in @@ -204,9 +203,7 @@ parse_subcommand() { shift 2 "sub${PPREFIX}_${SUBCOMMAND}" "$@" if [ $? = 127 ]; then - echo "Error: '$SPREFIX$SUBCOMMAND' is not a known subcommand." >&2 - echo " Run '$PROGRAM_NAME$SSPREFIX --help' for a list of known subcommands." >&2 - exit 1 + error "Error: '$SPREFIX$SUBCOMMAND' is not a known subcommand." fi ;; esac @@ -227,37 +224,6 @@ success() { ###### Top-level arguments -ABRA_CONFIG=abra.yml -if [ "$1" == "-c" ]; then - ABRA_CONFIG=$2 - shift 2 -fi - -if [ "$1" == "-e" ]; then - ABRA_ENV=$2 - shift 2 -fi - -if [ "$1" == "-a" ]; then - STACK_NAME=$2 - shift 2 -fi - -###### Load config - -if [ -f "$ABRA_CONFIG" ]; then - require_yq - - if yml_pattern_exists stack_name; then - STACK_NAME=$(yq read "$ABRA_CONFIG" stack_name) - fi - # FIXME load other variables somehow -fi - -if [ -n "$ABRA_ENV" ]; then - # shellcheck disable=SC1090 - source "$ABRA_ENV" || error "Unable to load env from '$ABRA_ENV'" -fi ###### Default settings @@ -598,13 +564,30 @@ sub_volume() { ###### Main -# SUBCOMMAND=$1 -# shift -# shellcheck disable=SC2086,SC2068 -# parse_subcommand $SUBCOMMAND "" $@ - abra() { + declare abra___stack abra___env abra___config abra__command_ abra__args_ + + DOCOPT_PREFIX=abra_ eval "$(docopt "$@")" + + STACK_NAME=$abra___stack + + if [ -n "$abra___env" ]; then + # shellcheck disable=SC1090 + source "$abra___env" || error "Unable to load env from '$abra___env'" + fi + + if [ -n "$abra___config" ]; then + require_yq + + if yml_pattern_exists stack_name; then + STACK_NAME=$(yq read "$ABRA_CONFIG" stack_name) + fi + # FIXME load other variables somehow + fi + + # shellcheck disable=SC2086 + "sub_${abra__command_}" ${abra__args_[*]} } abra "$@"