]> juplo.de Git - demos/kafka/training/commitdiff
copy.sh: --delete für rsync, veraltete Verzeichnisse bereinigen
authorKai Moritz <kai.milan.moritz@googlemail.com>
Sun, 31 May 2026 00:51:37 +0000 (00:51 +0000)
committerKai Moritz <kai.milan.moritz@googlemail.com>
Sun, 31 May 2026 00:51:37 +0000 (00:51 +0000)
- rsync --delete: beim erneuten Kopieren werden aus dem Branch entfernte
  Dateien auch im Zielverzeichnis gelöscht
- Nach dem Kopieren: Verzeichnisse in vorlagen/, livecoding/, spickzettel/,
  die keinem aktuellen Branch mehr entsprechen, werden gelöscht
- Pfadberechnung im case-Statement vereinheitlicht (dest-Variable)
- trap sichert Cleanup der temporären Datei auch bei Fehlerabbruch

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
copy.sh

diff --git a/copy.sh b/copy.sh
index 6dc43b737b5e75ff40596fd98e74bcdef745c27c..4f00b127a1e16469b9bcb53918b42eacb1b2c1bb 100755 (executable)
--- a/copy.sh
+++ b/copy.sh
@@ -23,6 +23,7 @@ SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
 
 RSYNC_OPTS=(
   rsync -av
+  --delete
   --exclude=.git
   --exclude=target
   --exclude=.idea
@@ -43,11 +44,15 @@ sync_to() {
   "${RSYNC_OPTS[@]}" . "$1"
 }
 
+EXPECTED=$(mktemp)
+trap 'rm -f "$EXPECTED"' EXIT
+
 if [ "$TAG_SUFFIX" != "" ]; then
   git checkout "grundlagen/docker--${TAG_SUFFIX}"
 else
   git checkout grundlagen/docker
 fi
+echo "$VORLAGEN/grundlagen/docker" >> "$EXPECTED"
 sync_to "$VORLAGEN/grundlagen/docker/"
 
 for i in $BRANCHES; do
@@ -60,24 +65,37 @@ for i in $BRANCHES; do
   case "$branch" in
   *--livecoding--schritte)
     echo "Ignoriere Einzelschritte eines Live-Codings: $branch"
+    continue
     ;;
   *--vorlage)
     vorlage="${branch%--vorlage}"
     # Sonderfall: technik-check gehört thematisch zu den Grundlagen
     if [ "$vorlage" = "springkafka/technik-check" ]; then
-      sync_to "$VORLAGEN/grundlagen/technik-check/"
+      dest="$VORLAGEN/grundlagen/technik-check"
     else
-      sync_to "$VORLAGEN/$vorlage/"
+      dest="$VORLAGEN/$vorlage"
     fi
     ;;
   *--livecoding)
-    livecoding="${branch%--livecoding}"
-    sync_to "$LIVECODING/$livecoding/"
+    dest="$LIVECODING/${branch%--livecoding}"
     ;;
   *)
-    sync_to "$MUSTERLOESUNGEN/$branch/"
+    dest="$MUSTERLOESUNGEN/$branch"
     ;;
   esac
+  echo "$dest" >> "$EXPECTED"
+  sync_to "$dest/"
+done
+
+echo -e "\nBereinige veraltete Verzeichnisse..."
+for base in "$VORLAGEN" "$LIVECODING" "$MUSTERLOESUNGEN"; do
+  [ -d "$base" ] || continue
+  while IFS= read -r actual; do
+    if ! grep -qxF "$actual" "$EXPECTED"; then
+      echo "  Entferne: $actual"
+      rm -rf "$actual"
+    fi
+  done < <(find "$base" -mindepth 2 -maxdepth 2 -type d | sort)
 done
 
 if [ "$NEXUS_URL" != "" ]; then