Maj Claude.md
FIx test offline dépot
This commit is contained in:
23
CLAUDE.md
23
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/
|
Lanceur-geco/
|
||||||
├── git_updater.py # Script principal Python (GUI tkinter)
|
├── 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
|
├── config.ini # Configuration multi-repo
|
||||||
├── build.bat # Script de compilation en .exe via PyInstaller
|
├── build.bat # Script de compilation en .exe via PyInstaller
|
||||||
├── log/ # Dossier de logs (créé automatiquement, 1 fichier par jour)
|
├── 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.
|
- **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`.
|
- **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
|
## Fonctionnement
|
||||||
|
|
||||||
### Auto-update
|
### Auto-update
|
||||||
1. Au démarrage, le programme vérifie si son propre dossier est un dépôt git
|
1. Au démarrage, le programme télécharge `version.txt` depuis le serveur Gitea via HTTP
|
||||||
2. Si oui, il fait un `git fetch` et compare avec le remote
|
2. Compare la version distante avec la constante `VERSION` locale (comparaison par tuple numérique)
|
||||||
3. Si une MAJ du programme est dispo, il propose de la télécharger (`git pull`)
|
3. Si la version distante est supérieure, propose de télécharger le nouvel exe
|
||||||
4. Après mise à jour, il demande un redémarrage
|
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
|
### Vérification des dépôts
|
||||||
1. Lit la liste des dépôts depuis `config.ini` (chemins relatifs à l'exe)
|
1. Lit la liste des dépôts depuis `config.ini` (chemins relatifs à l'exe)
|
||||||
|
|||||||
@@ -321,6 +321,7 @@ def check_repo(repo):
|
|||||||
"local_hash": "",
|
"local_hash": "",
|
||||||
"remote_hash": "",
|
"remote_hash": "",
|
||||||
"needs_clone": False,
|
"needs_clone": False,
|
||||||
|
"offline": False,
|
||||||
}
|
}
|
||||||
|
|
||||||
# Vérifier si le dossier existe et est un repo git
|
# Vérifier si le dossier existe et est un repo git
|
||||||
@@ -340,6 +341,17 @@ def check_repo(repo):
|
|||||||
return result
|
return result
|
||||||
result["branch"] = branch
|
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
|
# Fetch
|
||||||
code, _, err = run_git(["fetch", "origin"], cwd=local_path)
|
code, _, err = run_git(["fetch", "origin"], cwd=local_path)
|
||||||
if code != 0:
|
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")
|
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")
|
tk.Label(top, text="ERREUR", bg=bg_card, fg=red, font=("Segoe UI", 9, "bold")).pack(side="right")
|
||||||
elif res.get("needs_clone"):
|
elif res.get("needs_clone"):
|
||||||
tk.Label(top, text="A CLONER", bg=bg_card, fg=yellow, font=("Segoe UI", 9, "bold")).pack(side="right")
|
tk.Label(top, text="A CLONER", bg=bg_card, fg=yellow, font=("Segoe UI", 9, "bold")).pack(side="right")
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
0.5.1
|
0.5.2
|
||||||
|
|||||||
Reference in New Issue
Block a user