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:
@@ -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)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user