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:
@@ -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 "$@"
|
||||
;;
|
||||
|
||||
*)
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
5
plugins/git/subcommands/default
Executable file
5
plugins/git/subcommands/default
Executable 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"
|
||||
16
plugins/git/subcommands/initialize
Executable file
16
plugins/git/subcommands/initialize
Executable 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 "$@"
|
||||
@@ -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")
|
||||
|
||||
Reference in New Issue
Block a user