From be3574136b5e70cc7d9eb25cc511d1fb25b8b429 Mon Sep 17 00:00:00 2001 From: Jose Diaz-Gonzalez Date: Fri, 29 Jul 2016 00:07:34 -0400 Subject: [PATCH] Properly handle non-deployed applications during apps:rename An application which has not been deployed will not have an image available, and therefore attempting to remove an (empty) cache directory will fail. Rather than checking for the image - which we should still do, as not having an image for a deployed app is an error state - we should instead only attempt the docker cache removal if the directory cannot be removed via rmdir. Closes #2294 --- plugins/apps/subcommands/rename | 4 +++- tests/unit/10_apps.bats | 13 +++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/plugins/apps/subcommands/rename b/plugins/apps/subcommands/rename index fef991daf..2423ce369 100755 --- a/plugins/apps/subcommands/rename +++ b/plugins/apps/subcommands/rename @@ -13,7 +13,9 @@ apps_rename_cmd() { local NEW_APP="$3" mkdir -p "$DOKKU_ROOT/$NEW_APP" - docker run "$DOKKU_GLOBAL_RUN_ARGS" --rm -v "$DOKKU_ROOT/$OLD_APP/cache:/cache" "dokku/$OLD_APP" chmod 777 -R /cache + if ! rmdir "$DOKKU_ROOT/$OLD_APP/cache" > /dev/null 2>&1; then + docker run "$DOKKU_GLOBAL_RUN_ARGS" --rm -v "$DOKKU_ROOT/$OLD_APP/cache:/cache" "dokku/$OLD_APP" chmod 777 -R /cache + fi rm -rf "$DOKKU_ROOT/$OLD_APP/cache" cp -a "$DOKKU_ROOT/$OLD_APP/." "$DOKKU_ROOT/$NEW_APP" DOKKU_APPS_FORCE_DELETE=1 apps_destroy "$OLD_APP" diff --git a/tests/unit/10_apps.bats b/tests/unit/10_apps.bats index cf8287237..06300e2a2 100644 --- a/tests/unit/10_apps.bats +++ b/tests/unit/10_apps.bats @@ -68,4 +68,17 @@ load test_helper echo "output: "$output echo "status: "$status assert_success + + run dokku apps:create $TEST_APP + echo "output: "$output + echo "status: "$status + assert_success + run bash -c "dokku apps:rename $TEST_APP great-test-name" + echo "output: "$output + echo "status: "$status + assert_output $TEST_APP + run bash -c "dokku --force apps:destroy great-test-name" + echo "output: "$output + echo "status: "$status + assert_success }