tawasuyu

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 1471Shell 174Rust 105Markdown 943556 Definiciones

estado: buscar el artefacto por el name INTERNO, no el basename del fichero

El grafo buscaba store/<hash>-<basename> pero el artefacto se sella por el name INTERNO de la receta
(qtbase.toml → name=qt6-qtbase → store/<hash>-qt6-qtbase). Las qt6-* KDE salían 'debt' aunque
estuvieran selladas. Fix: nodo lleva iname=d['name']; state_of busca por iname. Las aristas de deps
siguen por basename (así resuelve resolve_dep_path). qtbase ahora sale sealed correctamente.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

4357cd7b0fd6dbd94c14eb7c7265d727c0c8dda1 · por sergio · (hace 3 meses) · padre 2e9e0b0cf · ver el árbol en este commit

Delta semántico · 3

scripts/build-state.py

1 archivos · +8 −4

diff --git a/scripts/build-state.py b/scripts/build-state.py
index 292a55ed..d34938a0 100755
--- a/scripts/build-state.py
+++ b/scripts/build-state.py
@@ -77,6 +77,10 @@ def load_recipes():
             b = d.get("build", {})
             recs[n] = dict(
                 path=f,
+                # el artefacto se sella por el `name` INTERNO, que puede diferir del basename del
+                # fichero (qtbase.toml → name="qt6-qtbase"). El store lookup usa iname; las aristas de
+                # deps siguen usando el basename (así resuelve `resolve_dep_path`).
+                iname=d.get("name") or n,
                 version=d.get("version"),
                 link=b.get("link"),
                 compiler=b.get("compiler"),
@@ -95,13 +99,13 @@ def vigente_hash(path):
     except Exception:
         return None
 
-def state_of(name, h):
+def state_of(iname, h):
     if h is None:
         return "unhashable"
-    if os.path.isdir(os.path.join(STORE, f"{h[3:]}-{name}")):
+    if os.path.isdir(os.path.join(STORE, f"{h[3:]}-{iname}")):
         return "sealed"
     # ¿hay algún sellado histórico? distingue "cambió" de "nunca construida".
-    if glob.glob(os.path.join(STORE, f"*-{name}")):
+    if glob.glob(os.path.join(STORE, f"*-{iname}")):
         return "debt"
     return "never"
 
@@ -136,7 +140,7 @@ def main():
             r["hash"] = None; r["state"] = "unhashable"; continue
         h = vigente_hash(r["path"])
         r["hash"] = h
-        r["state"] = state_of(n, h)
+        r["state"] = state_of(r.get("iname", n), h)
 
     order = toposort(recs)