#!/usr/bin/env bash source "$PLUGIN_CORE_AVAILABLE_PATH/common/property-functions" source "$PLUGIN_AVAILABLE_PATH/git/functions" source "$PLUGIN_AVAILABLE_PATH/git/internal-functions" set -eo pipefail [[ $DOKKU_TRACE ]] && set -x trigger-git-git-from-directory() { declare desc="updates a repository from a directory" declare trigger="git-from-directory" declare APP="$1" SOURCECODE_WORK_DIR="$2" USER_NAME="${3:-Dokku}" USER_EMAIL="${4:-automated@dokku.sh}" local APP_ROOT="$DOKKU_ROOT/$APP" local DOKKU_DEPLOY_BRANCH="$(fn-git-deploy-branch "$APP")" local REV local TMP_WORK_DIR=$(mktemp -d "/tmp/dokku-${DOKKU_PID}-${FUNCNAME[0]}.XXXXXX") local TMP_WORK_DIR_2=$(mktemp -d "/tmp/dokku-${DOKKU_PID}-${FUNCNAME[0]}.XXXXXX") trap "rm -rf '$TMP_WORK_DIR' '$TMP_WORK_DIR_2' >/dev/null" RETURN INT TERM EXIT local has_code=true local git_objects="$(fn-git-cmd "$APP_ROOT" count-objects 2>/dev/null || true)" if [[ -z "$git_objects" ]] || [[ "$git_objects" == "0 objects, 0 kilobytes" ]]; then local has_code=false fi dokku_log_info1 "Updating git repository with specified build context" if [[ "$has_code" == "false" ]]; then # setup new repo local DEPLOY_BRANCH="$(fn-git-deploy-branch "$APP")" cp -rT "$SOURCECODE_WORK_DIR" "$TMP_WORK_DIR" suppress_output fn-git-cmd "$TMP_WORK_DIR" init suppress_output fn-git-cmd "$TMP_WORK_DIR" checkout -b "$DEPLOY_BRANCH" suppress_output fn-git-cmd "$TMP_WORK_DIR" config init.defaultBranch "$DEPLOY_BRANCH" suppress_output fn-git-cmd "$TMP_WORK_DIR" config user.name "$USER_NAME" suppress_output fn-git-cmd "$TMP_WORK_DIR" config user.email "$USER_EMAIL" suppress_output fn-git-cmd "$TMP_WORK_DIR" add --all suppress_output fn-git-cmd "$TMP_WORK_DIR" commit -m "Initial commit" REV="$(fn-git-cmd "$TMP_WORK_DIR" rev-parse HEAD)" fn-git-create-hook "$APP" fn-git-clone "$APP" "$TMP_WORK_DIR" "$DEPLOY_BRANCH" else # update existing repo GIT_TERMINAL_PROMPT=0 suppress_output git clone "$APP_ROOT" "$TMP_WORK_DIR_2" cp -rT "$SOURCECODE_WORK_DIR" "$TMP_WORK_DIR" mv "$TMP_WORK_DIR_2/.git" "$TMP_WORK_DIR/.git" suppress_output fn-git-cmd "$TMP_WORK_DIR" config user.name "$USER_NAME" suppress_output fn-git-cmd "$TMP_WORK_DIR" config user.email "$USER_EMAIL" suppress_output fn-git-cmd "$TMP_WORK_DIR" add --all suppress_output fn-git-cmd "$TMP_WORK_DIR" update-index --refresh if suppress_output fn-git-cmd "$TMP_WORK_DIR" diff-index --quiet HEAD --; then dokku_log_warn "No changes detected, skipping git commit" dokku_log_warn "Call 'ps:rebuild' on app to rebuild the app from existing source" return 1 fi suppress_output fn-git-cmd "$TMP_WORK_DIR" commit -m "Automated commit @ $(date +%s)" REV="$(fn-git-cmd "$TMP_WORK_DIR" rev-parse HEAD)" fn-git-fetch "$APP" "$TMP_WORK_DIR" "$REV" fi rm -rf "$TMP_WORK_DIR" "$TMP_WORK_DIR_2" >/dev/null if git_receive_app "$APP" "$REV"; then return else local exit_code=$? local DOKKU_DEPLOY_BRANCH="$(fn-git-deploy-branch "$APP")" if [[ "$has_code" == "false" ]]; then fn-git-cmd "$APP_ROOT" update-ref -d HEAD else fn-git-cmd "$APP_ROOT" update-ref "refs/heads/$DOKKU_DEPLOY_BRANCH" "$DOKKU_DEPLOY_BRANCH^" fi return "$exit_code" fi } trigger-git-git-from-directory "$@"