99 lines
3.1 KiB
Bash
99 lines
3.1 KiB
Bash
#!/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
|