Files
worm/commit-wrapper.sh

99 lines
3.1 KiB
Bash
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
set -euo pipefail
cd "$(dirname "$0")"
LOGFILE="archiv.log"
TIMESTAMP() { date '+%Y-%m-%d %H:%M:%S'; }
log() {
echo "[$(TIMESTAMP)] $1" | tee -a "$LOGFILE"
}
RESTORE_SCRIPT="./restore-archiv.sh"
log "➡️ Starte Archivierungslauf..."
# 1. Dateien aus Neu/ prüfen und nach Archiv/ kopieren
for file in Neu/*; do
[ -e "$file" ] || continue
base=$(basename "$file")
target="Archiv/$base"
if [ -e "$target" ]; then
log "⚠️ Datei '$base' existiert bereits im Archiv. Archivierung abgebrochen."
echo "⚠️ Datei '$base' existiert bereits im Archiv! Bitte umbenennen oder löschen."
exit 1
fi
done
# Kopieren & Löschen
for file in Neu/*; do
[ -e "$file" ] || continue
base=$(basename "$file")
target="Archiv/$base"
cp "$file" "$target"
log "✅ '$base' nach Archiv kopiert."
done
for file in Neu/*; do
[ -e "$file" ] || continue
base=$(basename "$file")
rm "$file"
log "🧹 '$base' aus Neu gelöscht."
done
# 2. Änderungen vormerken (inkl. Löschungen)
# Änderungen vollständig vormerken (auch neue Dateien)
git add --all
log "📝 Alle Änderungen vorgemerkt (git add --all)."
# Prüfen, ob es Änderungen gibt (gestaged oder nicht)
if git status --porcelain | grep . >/dev/null; then
# es gibt Änderungen, Commit starten
if git commit -m "Archivierung von Dateien aus Neu am $(TIMESTAMP)"; then
log "✅ Commit erfolgreich."
else
# Commit fehlgeschlagen: Restore ausführen ...
log "❌ Commit fehlgeschlagen. Versuche Archiv wiederherzustellen..."
echo "⚠️ Commit abgebrochen, da Änderungen im Archiv blockiert wurden."
if [ -x "$RESTORE_SCRIPT" ]; then
"$RESTORE_SCRIPT"
log "♻️ Archiv wurde automatisch wiederhergestellt."
echo " Archiv wurde auf den letzten Commit zurückgesetzt."
else
log "❌ Restore-Skript '$RESTORE_SCRIPT' nicht gefunden oder nicht ausführbar!"
echo "⚠️ Restore-Skript nicht gefunden oder nicht ausführbar!"
fi
exit 1
fi
else
log "📭 Keine Änderungen zum Committen."
echo "Keine Änderungen zum Committen."
exit 0
fi
# 3. Commit versuchen
if git diff --cached --quiet; then
log "📭 Keine Änderungen zum Committen."
echo "Keine Änderungen zum Committen."
exit 0
else
if git commit -m "Archivierung von Dateien aus Neu am $(TIMESTAMP)"; then
log "✅ Commit erfolgreich."
exit 0
else
log "❌ Commit fehlgeschlagen. Versuche Archiv wiederherzustellen..."
echo "⚠️ Commit abgebrochen, da Änderungen im Archiv blockiert wurden."
if [ -x "$RESTORE_SCRIPT" ]; then
"$RESTORE_SCRIPT"
log "♻️ Archiv wurde automatisch wiederhergestellt."
echo " Archiv wurde auf den letzten Commit zurückgesetzt."
else
log "❌ Restore-Skript '$RESTORE_SCRIPT' nicht gefunden oder nicht ausführbar!"
echo "⚠️ Restore-Skript nicht gefunden oder nicht ausführbar!"
fi
exit 1
fi
fi