Post-Local sync at 2025-06-07 00:42:50

This commit is contained in:
Mark Randall Havens 2025-06-07 00:42:59 -05:00
parent bcecceb6fb
commit 8bbc1c2cdd
4 changed files with 153 additions and 0 deletions

103
bin/gitfield-resolve.sh Normal file
View file

@ -0,0 +1,103 @@
#!/bin/bash
# gitfield-resolve.sh — 🧠 Recursive GitField Self-Healing Sync Engine
# Author: Solaria + Mark Randall Havens 🌀
# Version: 𝛂∞.21
LOG_FILE=".gitfield/last_resolution.log"
exec > >(tee "$LOG_FILE") 2>&1
echo "🛠️ [GITFIELD] Beginning auto-resolution ritual..."
SIGIL_FILES=$(git diff --name-only --diff-filter=U | grep '\.sigil\.md$')
PUSHED_LOG=".gitfield/pushed.log"
resolve_sigil_conflicts() {
for file in $SIGIL_FILES; do
echo "⚖️ Resolving conflict in: $file"
OUR_TIME=$(grep -Eo '[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9:]{8}' "$file" | head -n1)
THEIR_TIME=$(grep -Eo '[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9:]{8}' "$file" | tail -n1)
if [[ "$OUR_TIME" > "$THEIR_TIME" ]]; then
echo "🧭 Keeping local version ($OUR_TIME)"
git checkout --ours "$file"
else
echo "🧭 Keeping remote version ($THEIR_TIME)"
git checkout --theirs "$file"
fi
git add "$file"
done
}
resolve_log_conflict() {
if [[ -f "$PUSHED_LOG" && $(git ls-files -u | grep "$PUSHED_LOG") ]]; then
echo "📜 Resolving pushed.log by merging unique lines..."
git checkout --ours "$PUSHED_LOG"
cp "$PUSHED_LOG" .log_ours
git checkout --theirs "$PUSHED_LOG"
cp "$PUSHED_LOG" .log_theirs
cat .log_ours .log_theirs | sort | uniq > "$PUSHED_LOG"
rm .log_ours .log_theirs
git add "$PUSHED_LOG"
fi
}
commit_resolution() {
if git diff --cached --quiet; then
echo "✅ No changes to commit."
else
echo "🖋️ Committing auto-resolved changes with GPG signature..."
git commit -S -m "🔄 Auto-resolved sigil + log conflicts via gitfield-resolve"
fi
}
check_and_sync_remotes() {
for remote in $(git remote); do
echo "🔍 Checking $remote for divergence..."
git fetch "$remote" master
BASE=$(git merge-base master "$remote/master")
LOCAL=$(git rev-parse master)
REMOTE=$(git rev-parse "$remote/master")
if [ "$LOCAL" = "$REMOTE" ]; then
echo "$remote is already in sync."
elif [ "$LOCAL" = "$BASE" ]; then
echo "⬇️ Local is behind $remote. Pulling changes..."
git pull --no-rebase "$remote" master || echo "⚠️ Pull failed for $remote"
resolve_sigil_conflicts
resolve_log_conflict
commit_resolution
git push "$remote" master || echo "⚠️ Push failed to $remote"
elif [ "$REMOTE" = "$BASE" ]; then
echo "⬆️ Local is ahead of $remote. Pushing..."
git push "$remote" master || echo "⚠️ Push failed to $remote"
else
echo "⚠️ Divergence with $remote. Attempting merge..."
git pull --no-rebase "$remote" master || echo "❌ Merge failed: Manual fix required."
resolve_sigil_conflicts
resolve_log_conflict
commit_resolution
git push "$remote" master || echo "⚠️ Final push failed to $remote"
fi
done
}
final_force_github() {
if git remote get-url github &>/dev/null; then
echo "🧙 Final override: Forcing sync to GitHub..."
git push --force github master && echo "✅ GitHub forcibly realigned with local truth." || echo "❌ Force push failed. Manual intervention required."
fi
}
# --- Ritual Sequence ---
resolve_sigil_conflicts
resolve_log_conflict
commit_resolution
check_and_sync_remotes
final_force_github
echo "✅ GitField resolution ritual complete."