Maj Claude.md

FIx test offline dépot
This commit is contained in:
2026-03-24 17:39:04 +01:00
parent c7779b7ce7
commit 14898275b4
3 changed files with 35 additions and 6 deletions

View File

@@ -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)

View File

@@ -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")

View File

@@ -1 +1 @@
0.5.1
0.5.2