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>
This commit is contained in:
2026-07-17 15:32:14 -04:00
co-authored by Claude Opus 4.8
parent 2e9e0b0cf9
commit 4357cd7b0f
+8 -4
View File
@@ -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)