From: Kai Moritz Date: Sun, 31 May 2026 20:59:36 +0000 (+0000) Subject: copy.sh: schulung.conf für selektives Kopieren von Branches X-Git-Tag: scripting--2026-06-04~8 X-Git-Url: http://juplo.de/gitweb/?a=commitdiff_plain;h=c431af964ee52ffd60caab0646772b7a296742df;p=demos%2Fkafka%2Ftraining copy.sh: schulung.conf für selektives Kopieren von Branches 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 --- diff --git a/.gitignore b/.gitignore index 48a23960..eda7b662 100644 --- a/.gitignore +++ b/.gitignore @@ -42,3 +42,6 @@ build/ ### VS Code ### .vscode/ + +### Schulungs-Konfiguration ### +schulung.conf diff --git a/copy.sh b/copy.sh index 3ed195b6..92b856cd 100755 --- 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 index 00000000..4b7dc7b3 --- /dev/null +++ b/schulung.conf.example @@ -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