From c7cfd3f62fae247cb0eb1a0c595e0d00a72895c4 Mon Sep 17 00:00:00 2001 From: Rufus King Date: Mon, 27 Jul 2026 14:39:33 -0400 Subject: [PATCH] Newly Added File --- forgejo/forgejo_sync.sh | 92 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 forgejo/forgejo_sync.sh diff --git a/forgejo/forgejo_sync.sh b/forgejo/forgejo_sync.sh new file mode 100644 index 0000000..dde1ce0 --- /dev/null +++ b/forgejo/forgejo_sync.sh @@ -0,0 +1,92 @@ +#!/bin/bash +############################################################################### +# forgejo_sync.sh +# +# Interactive git sync tool for KingDezigns "07 - Projects" folders on NAS16. +# Prompts for which folder to update and a free-form commit description, +# then pulls, stages, commits, and pushes the changes to Forgejo. +# +# Usage: run directly and follow the prompts. +# ./forgejo_sync.sh +############################################################################### + +set -uo pipefail + +PROJECTS_ROOT="/export/kingdezignsnas-16/Public/07 - Projects" + +declare -A FOLDER_MAP=( + [1]="NAS08" + [2]="NAS16" + [3]="PLEX32" + [4]="Infrastructure" +) + +echo "Which folder would you like to update?" +echo " 1) NAS08" +echo " 2) NAS16" +echo " 3) PLEX32" +echo " 4) Infrastructure" +echo "" +read -rp "Enter selection [1-4]: " SELECTION + +FOLDER="${FOLDER_MAP[$SELECTION]:-}" + +if [ -z "$FOLDER" ]; then + echo "Invalid selection. Exiting." + exit 1 +fi + +REPO_PATH="$PROJECTS_ROOT/$FOLDER" + +if [ ! -d "$REPO_PATH" ]; then + echo "ERROR: Folder not found at: $REPO_PATH" + exit 1 +fi + +if [ ! -d "$REPO_PATH/.git" ]; then + echo "ERROR: '$FOLDER' is not yet a git repository (no .git found)." + echo "This folder needs one-time setup first — create the org/repo in" + echo "Forgejo, then run: git init && git remote add origin " + exit 1 +fi + +cd "$REPO_PATH" || exit 1 + +echo "" +echo "Pulling latest changes for $FOLDER..." +if ! git pull --no-edit; then + echo "ERROR: git pull failed — likely a conflict. Resolve manually before continuing." + exit 1 +fi + +if [ -z "$(git status --porcelain)" ]; then + echo "No changes detected in $FOLDER. Nothing to commit." + exit 0 +fi + +echo "" +echo "Changed files:" +git status --short +echo "" + +read -rp "Enter a description for this change: " DESCRIPTION + +if [ -z "$DESCRIPTION" ]; then + echo "A description is required. Exiting without committing." + exit 1 +fi + +git add -A +git commit -m "$DESCRIPTION" + +echo "" +echo "Pushing to Forgejo..." +if git push origin main; then + echo "" + echo "SUCCESS: $FOLDER updated and pushed." +else + echo "" + echo "ERROR: push failed. Your commit was saved locally — retry with:" + echo " cd \"$REPO_PATH\" && git push origin main" + exit 1 +fi