gioser

sergio/takana

> Una distribución Linux construida con un laboratorio funcional y hermético en el > sótano, y una terminal mutable, clásica y anárquica en el piso de arriba — diseñada > desde el suelo para que una IA programadora entienda, modifique y co…

TOML 815Rust 56Shell 37Markdown 291229 Definiciones

Etapa G (granja): promote más seguro — patches viajan con la receta + guarda de colisión

Dos bugs del promote de build-farm.sh, hallados al cosechar incoming-clib:
1. mv movía el .toml pero NO sus .patch (quedaban en la cola) ⇒ toda receta
   parcheada fallaba el pack ("leyendo patch ...: No such file or directory").
   Ahora mueve los patches referenciados junto al .toml.
2. mv sobrescribía a ciegas una receta canónica de recipes/ con una variante
   homónima de la cola (p.ej. curl 8.11 mínimo-para-appstream pisando el
   curl 8.20 full). Se agrega guarda: si ya existe recipes/<n>.toml, NO se
   promueve la variante (queda staged para triage) ni se re-publica.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

4517a985c1a9d0a586556f3393c32da0a4d662d2 · por sergio · (hace 3 meses) · padre 0c6290a0b · ver el árbol en este commit

Delta semántico

Ninguna definición cambió: el cambio es de texto, documentación o datos.

1 archivos · +16 −1

diff --git a/scripts/build-farm.sh b/scripts/build-farm.sh
index 8a98983e..6819cb48 100755
--- a/scripts/build-farm.sh
+++ b/scripts/build-farm.sh
@@ -58,7 +58,22 @@ if [ "$PROMOTE" = 1 ] && [ "$ok" -gt 0 ]; then
   echo "==> promoviendo + publicando $ok al repo firmado…"
   for s in "$FARM"/status/*.ok; do
     n=$(basename "$s" .ok)
-    [ -f "$QUEUE/$n.toml" ] && mv "$QUEUE/$n.toml" recipes/
+    # GUARDA DE COLISIÓN: si ya existe una receta canónica en recipes/ y la cola trae
+    # OTRA variante con el mismo nombre, NO la promovemos (mv sobrescribiría lo canónico:
+    # p.ej. un `curl` mínimo-para-appstream pisando el curl 8.20 full de la que dependen tools).
+    # Queda staged en la cola para triage manual; tampoco re-publicamos sobre lo canónico.
+    if [ -f "$QUEUE/$n.toml" ] && [ -f "recipes/$n.toml" ]; then
+      printf "  = %s (ya existe recipes/%s.toml canónica — NO promovido, queda en %s)\n" "$n" "$n" "$QUEUE"
+      continue
+    fi
+    if [ -f "$QUEUE/$n.toml" ]; then
+      # mover la receta Y sus patches referenciados (viven junto al .toml en la cola);
+      # si no, `pack` no los encuentra en recipes/ y falla toda receta parcheada.
+      for p in $(grep -oE '"[^"]+\.patch"' "$QUEUE/$n.toml" | tr -d '"'); do
+        [ -f "$QUEUE/$p" ] && mv -f "$QUEUE/$p" recipes/
+      done
+      mv "$QUEUE/$n.toml" recipes/
+    fi
     "$HAMMER" --store "$STORE" pack "recipes/$n.toml" --repo "$REPO" --distro-version "$DISTRO" --build >/dev/null 2>&1 \
       && printf "  + %s\n" "$n" || printf "  ! %s (pack falló)\n" "$n"
   done