#!/bin/bash # # Script migliorato per sincronizzare file .m da server remoto # e generare richiesta automatica per Claude Code # # Basato su: sync_server_file.sh # Aggiunge: Rilevamento automatico modifiche e generazione richiesta Claude # # Configurazione REMOTE_USER="alex" REMOTE_HOST="80.211.60.65" REMOTE_PORT="2022" REMOTE_SRC="/usr/local/matlab_func" LOCAL_DST="/home/alex/devel/matlab-ase" PYTHON_DIR="${LOCAL_DST}/matlab_func" # Colori per output RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' BOLD='\033[1m' NC='\033[0m' # No Color # ================================================ # FUNZIONI UTILITY # ================================================ print_header() { echo -e "\n${BLUE}${BOLD}========================================${NC}" echo -e "${BLUE}${BOLD}$1${NC}" echo -e "${BLUE}${BOLD}========================================${NC}\n" } print_step() { echo -e "${YELLOW}[Step $1/$2]${NC} $3" } print_success() { echo -e "${GREEN}✓${NC} $1" } print_error() { echo -e "${RED}✗${NC} $1" } print_info() { echo -e "${BLUE}→${NC} $1" } # Mappa file MATLAB → moduli Python get_affected_module() { local file=$1 local basename=$(basename "$file" .m) # Mapping patterns case "$basename" in CalcoloRSN*|MediaRSN*|ConvRSN*) echo "RSN" ;; CalcoloTLHR*|CalcoloBL*|CalcoloPL*|CalcoloKLHR*|MediaTilt*|ConvTilt*) echo "Tilt" ;; arot*|asse_a*|asse_b*|qmult*|fqa*) echo "Tilt" ;; CalcoloRL*|CalcoloLL*|CalcoloPL*|Calcolo3DEL*|CalcoloCrL*) echo "ATD" ;; CalcoloBiax*|corrTuL*|CalcoloStella*) echo "ATD" ;; ConvATD*|MediaATD*) echo "ATD" ;; database*|carica_parametri*|carica_calibrazione*) echo "Common" ;; ValidaTemp*|Despiking*) echo "Common" ;; *) echo "Unknown" ;; esac } # ================================================ # MAIN SCRIPT # ================================================ print_header "MATLAB → Python Sync Script with Claude Integration" # ------------------------------------------------ # Step 1: Sincronizzazione MATLAB # ------------------------------------------------ print_step 1 6 "Sincronizzazione file MATLAB da server remoto" echo " Host: ${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_PORT}" echo " Source: ${REMOTE_SRC}" echo " Destination: ${LOCAL_DST}" echo "" rsync -avzm -e "ssh -p ${REMOTE_PORT}" \ --include='*/' \ --include='*.m' \ --exclude='*' \ "${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_SRC}" "${LOCAL_DST}" if [ $? -eq 0 ]; then print_success "Sincronizzazione completata" else print_error "Errore durante la sincronizzazione Rsync" exit 1 fi # ------------------------------------------------ # Step 2: Rilevamento modifiche # ------------------------------------------------ print_step 2 6 "Rilevamento modifiche nei file MATLAB" cd "${PYTHON_DIR}" || exit 1 # Aggiungi file .m all'area di staging find "${LOCAL_DST}" -type f -name "*.m" -print0 | xargs -0 git add 2>/dev/null # Ottieni lista modifiche CHANGED_FILES=$(git diff --staged --name-only | grep "\.m$" || echo "") CHANGED_COUNT=$(echo "$CHANGED_FILES" | grep -v '^$' | wc -l) if [ -z "$CHANGED_FILES" ] || [ "$CHANGED_COUNT" -eq 0 ]; then print_success "Nessun file MATLAB modificato - Sistema già sincronizzato" echo "" echo "Nessuna azione richiesta." exit 0 fi print_success "Rilevati ${CHANGED_COUNT} file modificati" # ------------------------------------------------ # Step 3: Analisi moduli interessati # ------------------------------------------------ print_step 3 6 "Analisi moduli Python interessati" declare -A affected_modules for file in $CHANGED_FILES; do module=$(get_affected_module "$file") if [ "$module" != "Unknown" ]; then affected_modules[$module]=1 fi done echo " Moduli da aggiornare:" for module in "${!affected_modules[@]}"; do print_info "$module" done # ------------------------------------------------ # Step 4: Generazione richiesta per Claude # ------------------------------------------------ print_step 4 6 "Generazione richiesta per Claude Code" TIMESTAMP=$(date +%Y%m%d_%H%M%S) REQUEST_FILE="${PYTHON_DIR}/CLAUDE_SYNC_REQUEST_${TIMESTAMP}.md" # Crea richiesta formattata cat > "$REQUEST_FILE" <> "$REQUEST_FILE" echo " - Files: elaboration.py, conversion.py, averaging.py, db_write.py" >> "$REQUEST_FILE" ;; Tilt) echo "- **Tilt Module** → \`src/tilt/\`" >> "$REQUEST_FILE" echo " - Files: elaboration.py, conversion.py, averaging.py, geometry.py, db_write.py" >> "$REQUEST_FILE" ;; ATD) echo "- **ATD Module** → \`src/atd/\`" >> "$REQUEST_FILE" echo " - Files: elaboration.py, conversion.py, averaging.py, db_write.py, star_calculation.py" >> "$REQUEST_FILE" ;; Common) echo "- **Common Module** → \`src/common/\`" >> "$REQUEST_FILE" echo " - Files: database.py, config.py, validators.py" >> "$REQUEST_FILE" ;; esac done cat >> "$REQUEST_FILE" <<'EOF' --- ## 📝 Preview Modifiche (prime 30 righe per file) EOF for file in $CHANGED_FILES; do # Ottieni path relativo rel_path=$(echo "$file" | sed "s|${LOCAL_DST}/||") cat >> "$REQUEST_FILE" </dev/null | head -n 30 >> "$REQUEST_FILE" || echo "No diff available" >> "$REQUEST_FILE" echo '```' >> "$REQUEST_FILE" done cat >> "$REQUEST_FILE" <<'EOF' --- ## ✅ Azione Richiesta Aggiornare il codice Python corrispondente ai file MATLAB modificati sopra. ### Workflow Suggerito 1. **Analizzare modifiche MATLAB** - Leggere i file modificati - Identificare cambiamenti negli algoritmi - Verificare nuovi parametri o modifiche formule 2. **Applicare modifiche Python** - Aggiornare funzioni Python corrispondenti - Mantenere coerenza con architettura esistente - Aggiungere type hints e documentazione 3. **Validare modifiche** ```bash # Test base python -m src.main CU001 A # Validazione completa vs MATLAB python -m src.validation.cli CU001 A --output validation_report.txt # Verifica report cat validation_report.txt | grep "VALIDATION" ``` 4. **Commit e tag** ```bash git add src/ git commit -m "Sync Python from MATLAB changes - $(date +%Y-%m-%d)" git tag python-sync-$(date +%Y%m%d) ``` --- ## 📚 Riferimenti - **Mapping completo**: [MATLAB_SYNC_GUIDE.md](MATLAB_SYNC_GUIDE.md) - **Quick reference**: [sync_matlab_changes.md](sync_matlab_changes.md) - **Validation guide**: [README.md#validation](README.md#validation) --- ## 💡 Note - I file MATLAB sono già stati committati nel repository - Questo è un commit separato che richiede sync Python - Dopo sync Python, eseguire validazione per verificare equivalenza --- *File generato automaticamente - Non modificare manualmente* *Timestamp: $(date +"%Y-%m-%d %H:%M:%S")* EOF print_success "Richiesta salvata: ${REQUEST_FILE}" # ------------------------------------------------ # Step 5: Commit MATLAB changes # ------------------------------------------------ print_step 5 6 "Commit modifiche MATLAB" SYNC_DATE=$(date +"%Y-%m-%d %H:%M:%S") COMMIT_MSG="Sync from remote server: ${SYNC_DATE}" git commit -m "${COMMIT_MSG}" -m "Files changed: ${CHANGED_COUNT}" -m "$(echo "$CHANGED_FILES")" 2>/dev/null if [ $? -eq 0 ]; then MATLAB_COMMIT=$(git rev-parse --short HEAD) print_success "Commit MATLAB completato (${MATLAB_COMMIT})" else print_error "Nessuna modifica da committare (potrebbe essere già committato)" MATLAB_COMMIT="N/A" fi # ------------------------------------------------ # Step 6: Summary e istruzioni # ------------------------------------------------ print_step 6 6 "Preparazione finale" # Copia negli appunti se xclip disponibile CLIPBOARD_COPIED=false if command -v xclip &> /dev/null; then cat "$REQUEST_FILE" | xclip -selection clipboard 2>/dev/null && CLIPBOARD_COPIED=true if [ "$CLIPBOARD_COPIED" = true ]; then print_success "Richiesta copiata negli appunti" fi fi # ================================================ # SUMMARY FINALE # ================================================ print_header "Sincronizzazione Completata" echo -e "${BOLD}Status:${NC}" print_success "File MATLAB sincronizzati: ${CHANGED_COUNT}" print_success "Commit MATLAB: ${MATLAB_COMMIT}" print_success "File richiesta Claude: ${REQUEST_FILE}" [ "$CLIPBOARD_COPIED" = true ] && print_success "Richiesta negli appunti: Pronta per essere incollata" echo "" echo -e "${BOLD}${YELLOW}⚠️ Prossimi Step - AZIONE RICHIESTA:${NC}" echo "" echo -e " ${BLUE}1.${NC} Aprire Claude Code" echo -e " ${BLUE}2.${NC} Incollare o fornire il file:" echo -e " ${GREEN}${REQUEST_FILE}${NC}" echo -e " ${BLUE}3.${NC} Claude analizzerà e aggiornerà Python automaticamente" echo -e " ${BLUE}4.${NC} Validare con:" echo -e " ${GREEN}python -m src.validation.cli CU001 A${NC}" echo "" echo -e "${BOLD}File modificati:${NC}" echo "$CHANGED_FILES" | sed 's/^/ - /' echo "" echo -e "${BOLD}Moduli Python da aggiornare:${NC}" for module in "${!affected_modules[@]}"; do echo " - $module" done echo "" print_header "Fine" # Opzione per aprire file in editor echo -e "${BLUE}Premere ENTER per aprire la richiesta in editor, o CTRL+C per uscire...${NC}" read -r # Apri in editor (priorità: $EDITOR, nano, vi) if [ -n "$EDITOR" ]; then $EDITOR "$REQUEST_FILE" elif command -v nano &> /dev/null; then nano "$REQUEST_FILE" elif command -v vi &> /dev/null; then vi "$REQUEST_FILE" else echo "Nessun editor trovato. File disponibile in: $REQUEST_FILE" fi echo "" print_success "Processo completato!" echo ""