#!/usr/bin/env bash # Pushes this folder to the Gitea repo. Run from inside the visitor-signin folder. set -uo pipefail REMOTE="https://gitea.hideawaygaming.com.au/jessikitty/visitor-signin.git" fail() { printf '\n%s\n' "$1" >&2; exit 1; } [ -f package.json ] || fail "Run this from inside the visitor-signin folder." command -v git >/dev/null || fail "Git is not installed." git config --global core.autocrlf input >/dev/null 2>&1 || true [ -d .git ] || git init -b main || fail "git init failed." if git remote | grep -qx origin; then git remote set-url origin "$REMOTE" else git remote add origin "$REMOTE" fi # An unfinished rebase or merge blocks everything below, and git's own error is # easy to mistake for a push problem. GIT_DIR_PATH=$(git rev-parse --git-dir 2>/dev/null || echo .git) for marker in rebase-merge rebase-apply MERGE_HEAD CHERRY_PICK_HEAD; do if [ -e "$GIT_DIR_PATH/$marker" ]; then cat >&2 <<'MSG' There is an unfinished rebase or merge in this folder. Nothing else can happen until it is settled: git rebase --abort throw the attempt away, back to how things were git status see which files still need attention git rebase --continue after fixing the files git listed If unsure, "git rebase --abort" is the safe one. MSG exit 1 fi done git add -A if [ -n "$(git status --porcelain)" ]; then read -r -p "Describe this change (enter for a dated default): " MSG [ -n "$MSG" ] || MSG="Update $(date '+%Y-%m-%d %H:%M')" git commit -m "$MSG" || fail "git commit failed." echo "Committed." else echo "No file changes to commit. Checking for anything unpushed..." fi git fetch origin || fail "Could not reach Gitea." if git ls-remote --heads origin main | grep -q main; then BEHIND=$(git rev-list --count HEAD..origin/main 2>/dev/null || echo 0) if [ "$BEHIND" -gt 0 ]; then echo "The server has $BEHIND commit(s) this folder does not. Replaying your work on top..." if ! git pull --rebase origin main; then cat >&2 <<'MSG' The two histories could not be joined automatically. See what is on the server that you do not have: git log --oneline HEAD..origin/main If that is nothing you need, and this folder is the good copy: git push --force-with-lease origin main MSG exit 1 fi fi fi git push -u origin main || fail "The push was rejected. Read the message above. Nothing was sent." echo echo "Pushed successfully." echo "https://gitea.hideawaygaming.com.au/jessikitty/visitor-signin"