Demande utilisateur : pouvoir identifier la build au premier coup d'oeil
sans confondre ancien/nouveau exe lors des tests.
Implémentation :
- build_info.py (gitignored, fallback "dev" pour mode développement)
régénéré automatiquement par scripts/rebuild_anon.ps1 avec :
BUILD_DATE = "2026-04-15 18:15"
BUILD_COMMIT = "234137e"
BUILD_BRANCH = "main"
- Pseudonymisation_Gui_V5.py : fonction _version_long() qui construit
"v5.4 · 2026-04-15 18:15 · #234137e" depuis build_info (avec fallback
silencieux si module absent en dev). Affichée dans :
- Titre fenêtre : "Pseudonymisation de vos documents — v5.4 · ..."
- Status bar en bas à droite
- anonymisation_onefile.spec : build_info.py ajouté aux datas bundlées.
- scripts/rebuild_anon.ps1 : STEP 4a génère build_info.py avant le
PyInstaller avec git rev-parse short + branch + date courante.
- .gitignore : build_info.py exclu (volatile, regénéré).
En mode dev (pas frozen) : affichage "v5.4" seul (fallback).
En mode frozen : affichage complet avec date/commit.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Après deux rebuilds Windows silencieusement échoués (PermissionError
WinError 5 lors du os.remove par PyInstaller), amélioration du script :
1. Renommer l'ancien Anonymisation.exe en Anonymisation.old-HHMMSS.exe
AVANT le build (au lieu de laisser PyInstaller faire os.remove qui
échoue si Defender tient un handle). Move-Item bypass la plupart des
scanners antivirus.
2. Exclusions Defender sur dist/ et build/ (Add-MpPreference).
3. Retry Remove-Item avec délai 10s × 5 sur build/ en cas de lock.
4. Vérification timestamp APRÈS/AVANT : si l'exe final a le même
LastWriteTime qu'avant le build, exit code 2 "ÉCHEC CRITIQUE —
timestamp inchangé". Évite le faux OK quand le build rate mais que
l'ancien exe subsiste.
5. Encodage UTF-8 BOM nécessaire pour PowerShell Windows (accents
français dans les messages).
Validé : rebuild v5d a passé — nouveau exe 17:47:40 (vs ancien 17:09:32),
ancien renommé en Anonymisation.old-174023.exe.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>