genome_colis : la premiere reception clone depuis le colis
Un runner neuf face a une forge neuve n'avait aucun clone a avancer : recevoir() refusait. Il clone desormais depuis le colis, puis suit le chemin ordinaire (verification, avance rapide, poussee). Une destination existante qui n'est pas un depot reste un refus. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
810670cd30
commit
a9428be752
2 changed files with 17 additions and 2 deletions
|
|
@ -35,6 +35,9 @@ chose que le moteur supposait **déjà en place** :
|
|||
qu'après avoir cloné. `genome_pousser` crée la clé si elle manque (à l'identique du rôle),
|
||||
l'organisation `genome` (publique) et les dépôts manquants (moteur et modèles publics,
|
||||
carte du site et plans privés) — la forme de la forge de Chezlepro, faite à la main.
|
||||
- **Le runner ne savait recevoir un colis que dans un clone existant** : `genome_colis.py
|
||||
recevoir` clone désormais depuis le colis à la première réception (une destination qui
|
||||
existe sans être un dépôt reste un refus). Éprouvé contre une forge vide, témoin compris.
|
||||
- **La simulation échouait sur une lecture** (`systemctl is-active` sautée en `--check`, donc
|
||||
sans `rc`) : `check_mode: false`.
|
||||
|
||||
|
|
|
|||
|
|
@ -98,10 +98,22 @@ def etat(depot: Path, branche: str) -> int:
|
|||
|
||||
def recevoir(depot: Path, colis: Path, pushurl: str, cle: str | None,
|
||||
branche: str) -> int:
|
||||
if not (depot / ".git").exists():
|
||||
raise SystemExit(f"{depot} n'est pas un depot git — rien a recevoir.")
|
||||
if not colis.is_file():
|
||||
raise SystemExit(f"{colis} est introuvable : le colis n'est pas arrive.")
|
||||
# LA PREMIERE RECEPTION (2026-10-13). Un runner NEUF, face a une forge NEUVE, n'a aucun
|
||||
# clone a avancer : il ne peut cloner que ce que la forge porte, et la forge ne porte que
|
||||
# ce que ce colis va lui donner. On clone donc DEPUIS LE COLIS — puis le chemin ordinaire
|
||||
# s'applique (verification, avance rapide, poussee). Une destination qui existe sans etre
|
||||
# un depot reste un refus : on n'ecrase jamais un dossier qu'on ne connait pas.
|
||||
if not (depot / ".git").exists():
|
||||
if depot.exists() and any(depot.iterdir()):
|
||||
raise SystemExit(f"{depot} existe et n'est pas un depot git — rien a recevoir.")
|
||||
r = subprocess.run(["git", "clone", "-q", "--branch", branche, str(colis), str(depot)],
|
||||
capture_output=True, text=True)
|
||||
if r.returncode != 0:
|
||||
raise SystemExit(f"premiere reception impossible depuis le colis :\n "
|
||||
f"{((r.stdout or '') + (r.stderr or '')).strip()}")
|
||||
_git(depot, "remote", "set-url", "origin", pushurl)
|
||||
|
||||
# UN COLIS DOIT ETRE VERIFIABLE AVANT D'ETRE CRU. `git bundle verify` exige d'etre
|
||||
# lance DEPUIS un depot — il verifie que les prerequis du colis sont deja dans cette
|
||||
|
|
|
|||
Loading…
Reference in a new issue