feat: add ability to initialize a git repository out of band

This is useful in contexts where the repository directory may be created and interacted with via git-http-backend or other methods of updating a repository.
This commit is contained in:
Jose Diaz-Gonzalez
2018-04-01 23:13:11 -04:00
parent 72674e5c6c
commit 83f320ac8e
9 changed files with 120 additions and 12 deletions

View File

@@ -1,6 +1,7 @@
#!/usr/bin/env bash
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
source "$PLUGIN_AVAILABLE_PATH/git/functions"
source "$PLUGIN_AVAILABLE_PATH/git/internal-functions"
case "$1" in
git-hook)
@@ -16,7 +17,7 @@ case "$1" in
;;
help | git:help)
echo -n ""
cmd-git-help "$@"
;;
*)

View File

@@ -211,15 +211,7 @@ git_glob_cmd() {
if [[ $1 == "git-receive-pack" && ! -d "$APP_PATH/refs" ]]; then
[[ ! -d "$DOKKU_ROOT/$APP" ]] && apps_maybe_create "$APP"
git init --bare "$APP_PATH" > /dev/null
local PRERECEIVE_HOOK="$APP_PATH/hooks/pre-receive"
cat > "$PRERECEIVE_HOOK" <<EOF
#!/usr/bin/env bash
set -e; set -o pipefail;
cat | DOKKU_ROOT="$DOKKU_ROOT" dokku git-hook $APP
EOF
chmod +x "$PRERECEIVE_HOOK"
fn-git-create-hook "$APP"
fi
if [[ $1 == "git-receive-pack" ]]; then
@@ -229,3 +221,22 @@ EOF
fi
git-shell -c "$args"
}
fn-git-create-hook() {
declare APP="$1"
local APP_PATH="$DOKKU_ROOT/$APP"
local PRERECEIVE_HOOK="$APP_PATH/hooks/pre-receive"
verify_app_name "$APP"
if [[ ! -d "$APP_PATH/refs" ]]; then
git init --bare "$APP_PATH" > /dev/null
fi
cat > "$PRERECEIVE_HOOK" <<EOF
#!/usr/bin/env bash
set -e; set -o pipefail;
cat | DOKKU_ROOT="$DOKKU_ROOT" dokku git-hook $APP
EOF
chmod +x "$PRERECEIVE_HOOK"
}

View File

@@ -40,3 +40,30 @@ cmd-git-report() {
[[ "$value_exists" == "true" ]] || dokku_log_fail "not deployed"
fi
}
git_help_content_func() {
declare desc="return git plugin help content"
cat<<help_content
git:initialize <app>, Initialize a git repository for an app
git:report [<app>] [<flag>], Displays a git report for one or more apps
git:set <app> <property> (<value>), Set or clear a git property for an app
help_content
}
cmd-git-help() {
if [[ $1 = "git:help" ]] ; then
echo -e 'Usage: dokku git[:COMMAND]'
echo ''
echo 'Manages the git integration for an app.'
echo ''
echo 'Additional commands:'
git_help_content_func | sort | column -c2 -t -s,
echo ''
elif [[ $(ps -o command= $PPID) == *"--all"* ]]; then
git_help_content_func
else
cat<<help_desc
git, Manages the git integration for an app
help_desc
fi
}

View File

@@ -0,0 +1,5 @@
#!/usr/bin/env bash
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
source "$PLUGIN_AVAILABLE_PATH/git/internal-functions"
cmd-git-help "git:help"

View File

@@ -0,0 +1,16 @@
#!/usr/bin/env bash
source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions"
source "$PLUGIN_AVAILABLE_PATH/git/functions"
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
git-initialize-cmd() {
declare desc="initialize a git repository for an app"
local cmd="git:initialize" argv=("$@"); [[ ${argv[0]} == "$cmd" ]] && shift 1
declare APP="$1"
is_valid_app_name "$APP"
dokku_log_info1_quiet "Initializing git repository for $APP"
fn-git-create-hook "$APP"
}
git-initialize-cmd "$@"

View File

@@ -14,7 +14,7 @@ fn-in-array() {
}
git-set-cmd() {
declare desc="sets a git configuration value for an app"
declare desc="set or clear a git property for an app"
local cmd="git:set" argv=("$@"); [[ ${argv[0]} == "$cmd" ]] && shift 1
declare APP="$1" KEY="$2" VALUE="$3"
local VALID_KEYS=("deploy-branch" "rev-env-var")