diff --git a/docs/deployment/methods/git.md b/docs/deployment/methods/git.md index fdcfecb97..1a7678917 100644 --- a/docs/deployment/methods/git.md +++ b/docs/deployment/methods/git.md @@ -12,6 +12,7 @@ git:initialize # Initialize a git repository git:public-key # Outputs the dokku public deploy key git:report [] [] # Displays a git report for one or more apps git:set () # Set or clear a git property for an app +git:unlock # Removes previous git clone folder for new deployment ``` Git-based deployment has been the traditional method of deploying applications in Dokku. As of v0.12.0, Dokku introduces a few ways to customize the experience of deploying via `git push`. A Git-based deployment currently supports building applications via: diff --git a/plugins/git/help-functions b/plugins/git/help-functions index 42f64c255..2dcb432c5 100755 --- a/plugins/git/help-functions +++ b/plugins/git/help-functions @@ -36,5 +36,6 @@ fn-help-content() { git:public-key, Outputs the dokku public deploy key git:report [] [], Displays a git report for one or more apps git:set (), Set or clear a git property for an app + git:unlock , Removes previous git clone folder for new deployment help_content } diff --git a/plugins/git/internal-functions b/plugins/git/internal-functions index c3b05c7ae..e5297f15a 100755 --- a/plugins/git/internal-functions +++ b/plugins/git/internal-functions @@ -193,6 +193,20 @@ cmd-git-sync() { verify_app_name "$APP" + if [[ -d "$DOKKU_LIB_ROOT/data/git/$APP" ]]; then + if [[ has_tty ]]; then + cmd-git-unlock "$APP" + if [[ -d "$DOKKU_LIB_ROOT/data/git/$APP" ]]; then + dokku_log_fail "Failed to delete existing clone folder" + exit 15 + fi + else + dokku_log_fail "Missing tty, try running ssh -t which will allocate new tty for you" + fi + else + dokku_log_info1 "No need to unlock app, carrying on with build" + fi + if [[ -z "$GIT_REMOTE" ]]; then dokku_log_fail "Missing GIT_REMOTE parameter" return @@ -215,6 +229,26 @@ cmd-git-sync() { fi } +cmd-git-unlock() { + declare desc="removes the clone folder for an app" + local cmd="git:unlock" + [[ "$1" == "$cmd" ]] && shift 1 + declare APP + + APP="${ARGS[0]}" + + local APP_CLONE_ROOT="$DOKKU_LIB_ROOT/data/git/$APP" + + if [[ -d "$APP_CLONE_ROOT" ]]; then + dokku_log_info1 "About to delete $APP_CLONE_ROOT" + rm -rf "$APP_CLONE_ROOT" + else + dokku_log_info1 "No clone folder exists app already unlocked" + fi + + dokku_log_info1 "Successfully unlocked $APP" +} + cmd-git-public-key() { declare desc="outputs the dokku public deploy key" local cmd="git:public-key" @@ -331,10 +365,6 @@ fn-git-clone() { dokku_log_fail "The clone subcommand can only be executed for new applications" fi - if [[ -d "$APP_CLONE_ROOT" ]]; then - dokku_log_fail "Clone in progress" - fi - if [[ -z "$GIT_REF" ]]; then GIT_REF="$(fn-git-deploy-branch "$APP")" fi diff --git a/plugins/git/subcommands/unlock b/plugins/git/subcommands/unlock new file mode 100644 index 000000000..ca256e1cc --- /dev/null +++ b/plugins/git/subcommands/unlock @@ -0,0 +1,6 @@ +#!/usr/bin/env bash +source "$PLUGIN_AVAILABLE_PATH/git/internal-functions" +set -eo pipefail +[[ $DOKKU_TRACE ]] && set -x + +cmd-git-unlock "$@"