diff --git a/CLAUDE.md b/CLAUDE.md index 41eabf7..48094d5 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -11,6 +11,7 @@ Le programme peut **s'auto-mettre à jour** car il est lui-même dans un dépôt ``` Lanceur-geco/ ├── git_updater.py # Script principal Python (GUI tkinter) +├── version.txt # Fichier contenant le numéro de version (ex: "0.5.1") ├── config.ini # Configuration multi-repo ├── build.bat # Script de compilation en .exe via PyInstaller ├── log/ # Dossier de logs (créé automatiquement, 1 fichier par jour) @@ -23,13 +24,27 @@ Lanceur-geco/ - **Accès lecture seule** : le programme ne fait que `git fetch`, `git pull` et `git checkout`. Jamais de `git push`, `git commit`, `git add`, ou toute opération d'écriture vers le remote. - **Multi-repo** : le programme peut surveiller plusieurs dépôts Git configurés dans `config.ini`. +## Versioning + +- La version est définie en dur dans `git_updater.py` via la constante `VERSION` (ex: `VERSION = "0.5.1"`) +- Le fichier `version.txt` à la racine du projet contient le même numéro de version (utilisé par le mécanisme d'auto-update distant) +- Format : **semver simplifié** `MAJEUR.MINEUR.PATCH` (ex: `0.5.1`) +- **Les deux doivent toujours être synchronisés** : quand on change la version, mettre à jour `VERSION` dans `git_updater.py` ET `version.txt` + +### Mécanisme de comparaison + +- La fonction `_version_tuple(v)` convertit la chaîne version en tuple d'entiers (ex: `"0.5.1"` -> `(0, 5, 1)`) pour permettre la comparaison numérique +- L'auto-update télécharge `version.txt` depuis le serveur Gitea via HTTP (`{repo_url}/raw/branch/master/version.txt`) et compare avec la `VERSION` locale +- Si la version distante est supérieure, une mise à jour est proposée + ## Fonctionnement ### Auto-update -1. Au démarrage, le programme vérifie si son propre dossier est un dépôt git -2. Si oui, il fait un `git fetch` et compare avec le remote -3. Si une MAJ du programme est dispo, il propose de la télécharger (`git pull`) -4. Après mise à jour, il demande un redémarrage +1. Au démarrage, le programme télécharge `version.txt` depuis le serveur Gitea via HTTP +2. Compare la version distante avec la constante `VERSION` locale (comparaison par tuple numérique) +3. Si la version distante est supérieure, propose de télécharger le nouvel exe +4. Stratégie de remplacement : télécharge dans `.new`, renomme l'exe actuel en `.old`, place le nouveau +5. Après mise à jour, demande un redémarrage ### Vérification des dépôts 1. Lit la liste des dépôts depuis `config.ini` (chemins relatifs à l'exe) diff --git a/git_updater.py b/git_updater.py index 9446ab5..a559e20 100644 --- a/git_updater.py +++ b/git_updater.py @@ -321,6 +321,7 @@ def check_repo(repo): "local_hash": "", "remote_hash": "", "needs_clone": False, + "offline": False, } # Vérifier si le dossier existe et est un repo git @@ -340,6 +341,17 @@ def check_repo(repo): return result result["branch"] = branch + # Vérifier que le remote est accessible via l'URL du config.ini + code, _, err = run_git(["ls-remote", "--exit-code", url, "HEAD"]) + if code != 0: + log.warning(f"[{name}] Remote inaccessible: {url}") + result["error"] = "Depot hors ligne (remote inaccessible)" + result["offline"] = True + return result + + # Mettre à jour l'URL origin si elle a changé dans config.ini + run_git(["remote", "set-url", "origin", url], cwd=local_path) + # Fetch code, _, err = run_git(["fetch", "origin"], cwd=local_path) if code != 0: @@ -711,7 +723,9 @@ class App(tk.Tk): tk.Label(top, text=res["name"], bg=bg_card, fg=fg, font=("Segoe UI", 11, "bold")).pack(side="left") - if res.get("error"): + if res.get("offline"): + tk.Label(top, text="HORS LIGNE", bg=bg_card, fg=yellow, font=("Segoe UI", 9, "bold")).pack(side="right") + elif res.get("error"): tk.Label(top, text="ERREUR", bg=bg_card, fg=red, font=("Segoe UI", 9, "bold")).pack(side="right") elif res.get("needs_clone"): tk.Label(top, text="A CLONER", bg=bg_card, fg=yellow, font=("Segoe UI", 9, "bold")).pack(side="right") diff --git a/version.txt b/version.txt index 4b9fcbe..cb0c939 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -0.5.1 +0.5.2