]> juplo.de Git - demos/kafka/training/commitdiff
copy.sh: schulung.conf für selektives Kopieren von Branches
authorKai Moritz <kai.milan.moritz@googlemail.com>
Sun, 31 May 2026 20:59:36 +0000 (20:59 +0000)
committerKai Moritz <kai.milan.moritz@googlemail.com>
Sun, 31 May 2026 20:59:36 +0000 (20:59 +0000)
Neue optionale Konfigurationsdatei schulung.conf (eine Branch-Angabe
pro Zeile, #-Kommentare): Nur gelistete Branches werden kopiert.
technik-check und --livecoding-Branches werden immer kopiert.
Ein --vorlage-Eintrag schließt den zugehörigen Lösungs-Branch
automatisch mit ein. Ohne schulung.conf: Verhalten wie bisher.

schulung.conf ist per .gitignore lokal; schulung.conf.example
dokumentiert das Format.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
.gitignore
copy.sh
schulung.conf.example [new file with mode: 0644]

index 48a23960c511c50018b28e692b3d2a8786dda32b..eda7b66203fce9211f546017f2b493f5e5589cac 100644 (file)
@@ -42,3 +42,6 @@ build/
 
 ### VS Code ###
 .vscode/
+
+### Schulungs-Konfiguration ###
+schulung.conf
diff --git a/copy.sh b/copy.sh
index 3ed195b6a569477ae653bae40f2c098d9b588812..92b856cd818868353372776842cfa21ca952904c 100755 (executable)
--- a/copy.sh
+++ b/copy.sh
@@ -5,6 +5,7 @@ VORLAGEN=../training-exercises/vorlagen
 LIVECODING=../training-exercises/livecoding
 MUSTERLOESUNGEN=../training-exercises/spickzettel
 TECHNIKCHECK=../training-exercises/technik-check
+SELECTED_BRANCHES=()
 
 source lib.sh
 
@@ -28,6 +29,12 @@ while [ $# -gt 0 ]; do
       echo ""
       echo "Ohne --tag und ohne --local: Aktualisiert alle Branches zuerst auf Remote-Stand"
       echo "(erfordert Remote-Zugriff und einheitliche Tags über alle Branches)."
+      echo ""
+      echo "Auswahl über schulung.conf (eine Branch-Angabe pro Zeile, # für Kommentare):"
+      echo "  Ist schulung.conf vorhanden, werden nur die dort aufgeführten Branches"
+      echo "  kopiert. technik-check und --livecoding-Branches werden immer kopiert."
+      echo "  Ein --vorlage-Eintrag schließt automatisch den zugehörigen Lösungs-Branch"
+      echo "  mit ein (sofern vorhanden). Ohne schulung.conf werden alle Branches kopiert."
       exit 0 ;;
     *) echo "Unbekannter Parameter: $1" >&2; exit 1 ;;
   esac
@@ -55,6 +62,8 @@ RSYNC_OPTS=(
   --exclude=diff.sh
   --exclude=push.sh
   --exclude=reset.sh
+  --exclude=schulung.conf
+  --exclude=schulung.conf.example
 )
 
 checkout_branch() {
@@ -81,6 +90,38 @@ sync_header() {
   echo -e "\n${src} → ${dest#../training-exercises/}"
 }
 
+load_schulung_config() {
+  local config="schulung.conf"
+  [ -f "$config" ] || return 0
+  local line solution
+  while IFS= read -r line; do
+    line="${line%%#*}"
+    read -r line <<< "$line"
+    [[ -n "$line" ]] || continue
+    SELECTED_BRANCHES+=("$line")
+    if [[ "$line" == *--vorlage ]]; then
+      solution="${line%--vorlage}"
+      SELECTED_BRANCHES+=("$solution")
+    fi
+  done < "$config"
+}
+
+is_selected() {
+  local branch="$1" b
+  [[ "$branch" == "springkafka/technik-check" ]] && return 0
+  [[ "$branch" == *--livecoding ]] && return 0
+  [ ${#SELECTED_BRANCHES[@]} -eq 0 ] && return 0
+  for b in "${SELECTED_BRANCHES[@]}"; do
+    [[ "$b" == "$branch" ]] && return 0
+  done
+  return 1
+}
+
+load_schulung_config
+if [ ${#SELECTED_BRANCHES[@]} -gt 0 ]; then
+  echo "schulung.conf geladen: ${#SELECTED_BRANCHES[@]} Branches ausgewählt."
+fi
+
 if [ "$TAG_SUFFIX" = "" ] && ! $LOCAL; then
   echo "Kein --tag angegeben — prüfe einheitliche Tags vor der Aktualisierung auf Remote-Stände..."
   _common_suffixes=$(find_common_tag_suffixes) || {
@@ -114,6 +155,11 @@ for i in $BRANCHES; do
     echo -e "\nÜberspringe $branch"
     continue
     ;;
+  esac
+  if ! is_selected "$branch"; then
+    continue
+  fi
+  case "$branch" in
   springkafka/technik-check)
     dest="$TECHNIKCHECK"
     ;;
diff --git a/schulung.conf.example b/schulung.conf.example
new file mode 100644 (file)
index 0000000..4b7dc7b
--- /dev/null
@@ -0,0 +1,26 @@
+# Auswahl der Branches für copy.sh
+#
+# Regeln:
+#   - Eine Branch-Angabe pro Zeile
+#   - Leerzeilen und Zeilen, die mit # beginnen, werden ignoriert
+#   - Ein --vorlage-Eintrag schließt automatisch den zugehörigen Lösungs-Branch mit ein
+#   - Lösungs-Branches ohne --vorlage können explizit angegeben werden
+#   - technik-check und --livecoding-Branches werden immer kopiert (hier nicht nötig)
+#   - Ohne diese Datei werden alle Branches kopiert
+#
+# Kopiere diese Datei nach schulung.conf und passe sie für die aktuelle Schulung an.
+
+# --- Grundlagen ---
+grundlagen/simple-producer--vorlage      # → kopiert auch grundlagen/simple-producer
+grundlagen/simple-consumer--vorlage      # → kopiert auch grundlagen/simple-consumer
+
+# --- Producer / Consumer ---
+producer/spring-producer--vorlage        # → kopiert auch producer/spring-producer
+consumer/spring-consumer--vorlage        # → kopiert auch consumer/spring-consumer
+
+# --- Musterlösungen ohne Übung (explizit angeben) ---
+# producer/spring-producer--generics
+
+# --- Spring Kafka ---
+springkafka/spring-producer--vorlage     # → kopiert auch springkafka/spring-producer
+springkafka/spring-consumer--kafkalistener--vorlage  # nur wenn vorhanden