From dcc4f5d26b98ed305ede265a03396ee97506c6f5 Mon Sep 17 00:00:00 2001 From: alex Date: Mon, 13 Oct 2025 22:41:22 +0200 Subject: [PATCH] convertito in formato unix sync enhanced --- sync_server_file_enhanced.sh | 746 +++++++++++++++++------------------ 1 file changed, 373 insertions(+), 373 deletions(-) diff --git a/sync_server_file_enhanced.sh b/sync_server_file_enhanced.sh index 9fa2b0d..8ba9713 100755 --- a/sync_server_file_enhanced.sh +++ b/sync_server_file_enhanced.sh @@ -1,373 +1,373 @@ -#!/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 "" +#!/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 ""