diff --git a/contrib/dokku_client.sh b/contrib/dokku_client.sh index 823f5398d..daac4a192 100755 --- a/contrib/dokku_client.sh +++ b/contrib/dokku_client.sh @@ -54,80 +54,43 @@ if [[ ! -z $DOKKU_HOST ]]; then echo "This is not a git repository" fi - if [[ "$appname" != "" ]] && [[ -n "$*" ]]; then - case "$1" in - apps|help|plugins*|ps:restartall|trace|version) - true - ;; - apps:destroy) - if [[ -z "$2" ]] || [[ "$2" == "force" ]]; then - donotshift="YES" - fi - ;; - *) - donotshift="YES" - ;; - esac - fi - - if [[ "$1" = "apps:create" ]]; then - if [[ -z "$2" ]]; then - appname=$(random_name) - counter=0 - while ssh -p "$DOKKU_PORT" "dokku@$DOKKU_HOST" apps 2>/dev/null| grep -q "$appname"; do - if [[ $counter -ge 100 ]]; then - echo "Error: could not reasonably generate a new app name. try cleaning up some apps..." - ssh -p "$DOKKU_PORT" "dokku@$DOKKU_HOST" apps - exit 1 - else - appname=$(random_name) - counter=$((counter+1)) - fi - done - else - appname="$2" - fi - if git remote add dokku "dokku@$DOKKU_HOST:$appname"; then - echo "-----> Dokku remote added at $DOKKU_HOST" - echo "-----> Application name is $appname" - else - echo "! Dokku remote not added! Do you already have a dokku remote?" - return - fi - git push dokku master - return $? - fi - - if [[ -z "$donotshift" ]]; then - # shellcheck disable=SC2029 - ssh -o LogLevel=QUIET -p "$DOKKU_PORT" -t "dokku@$DOKKU_HOST" "$@" - exit $? - fi - - if [[ -z "$verb" ]]; then - if [[ ! "$1" =~ --* ]]; then - verb=$1 - shift - - if [[ "$1" == "$appname" ]]; then - shift + case "$1" in + apps:create) + if [[ -z "$2" ]]; then + appname=$(random_name) + counter=0 + while ssh -p "$DOKKU_PORT" "dokku@$DOKKU_HOST" apps 2>/dev/null| grep -q "$appname"; do + if [[ $counter -ge 100 ]]; then + echo "Error: could not reasonably generate a new app name. try cleaning up some apps..." + ssh -p "$DOKKU_PORT" "dokku@$DOKKU_HOST" apps + exit 1 + else + appname=$(random_name) + counter=$((counter+1)) + fi + done + else + appname="$2" fi + if git remote add dokku "dokku@$DOKKU_HOST:$appname"; then + echo "-----> Dokku remote added at $DOKKU_HOST" + echo "-----> Application name is $appname" + else + echo "! Dokku remote not added! Do you already have a dokku remote?" + return + fi + git push dokku master + return $? + ;; + apps:destroy) + git remote remove dokku + ;; + esac - args="$*" - else - long_args="--" - for arg in "$@"; do - if [[ "$arg" =~ --* ]]; then - long_args+=" $arg" - args=("${args[@]/$arg}") - else - verb="$arg" - fi - done - fi - fi - # shellcheck disable=SC2086,SC2029 - ssh -o LogLevel=QUIET -p "$DOKKU_PORT" -t "dokku@$DOKKU_HOST" $long_args "$verb" "$appname" "${args[@]}" + [[ -n "$@" ]] && [[ -n "$appname" ]] && app_arg="--app $appname" + # echo "ssh -o LogLevel=QUIET -p $DOKKU_PORT -t dokku@$DOKKU_HOST -- $app_arg $@" + # shellcheck disable=SC2068,SC2086 + ssh -o LogLevel=QUIET -p $DOKKU_PORT -t dokku@$DOKKU_HOST -- $app_arg $@ } if [[ "$0" == "dokku" ]] || [[ "$0" == *dokku_client.sh ]] || [[ "$0" == $(which dokku) ]]; then diff --git a/dokku b/dokku index cb7e7da84..fe669e9dc 100755 --- a/dokku +++ b/dokku @@ -113,7 +113,14 @@ execute_dokku_cmd() { if [[ "$(readlink -f "$PLUGIN_ENABLED_PATH/${PLUGIN_NAME%%:*}")" == *core-plugins* ]] ; then [[ ${argv[0]} == "$PLUGIN_CMD" ]] && shift 1 - [[ ! -z $DOKKU_APP_NAME ]] && set -- "$DOKKU_APP_NAME" "$@" + if [[ ! -z $DOKKU_APP_NAME ]]; then + if [[ "$PLUGIN_CMD" == config* ]] && [[ ${argv[1]} == "--no-restart" ]]; then + shift 1 + set -- "--no-restart" "$DOKKU_APP_NAME" "$@" + else + set -- "$DOKKU_APP_NAME" "$@" + fi + fi set -- "$PLUGIN_CMD" "$@" fi diff --git a/tests/unit/20_client.bats b/tests/unit/20_client.bats index 190fb1f44..c62f1b6a8 100644 --- a/tests/unit/20_client.bats +++ b/tests/unit/20_client.bats @@ -34,7 +34,7 @@ teardown() { echo "status: "$status assert_success git remote | grep dokku - run bash -c "${BATS_TEST_DIRNAME}/../../contrib/dokku_client.sh --force apps:destroy" + run bash -c "${BATS_TEST_DIRNAME}/../../contrib/dokku_client.sh apps:destroy --force" echo "output: "$output echo "status: "$status assert_success @@ -49,7 +49,7 @@ teardown() { assert_success git remote | grep dokku git remote -v | grep $test_app_name - run bash -c "${BATS_TEST_DIRNAME}/../../contrib/dokku_client.sh --force apps:destroy" + run bash -c "${BATS_TEST_DIRNAME}/../../contrib/dokku_client.sh apps:destroy --force" echo "output: "$output echo "status: "$status assert_success