From a37485365c320ebc6fb575442feadb9d0ea6fdec Mon Sep 17 00:00:00 2001 From: Sergio Date: Thu, 17 Sep 2026 21:29:05 +0000 Subject: [PATCH] =?UTF-8?q?linux-firmware:=20los=20337=20enlaces=20=C2=ABs?= =?UTF-8?q?in=20destino=C2=BB=20eran=20mi=20comprobaci=C3=B3n,=20no=20el?= =?UTF-8?q?=20tarball?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Los que faltaban son casi todos de la forma `ath11k/WCN6855/hw2.1/regdb.bin -> ../hw2.0/regdb.bin`: un `..` no resuelve si el directorio desde el que cuelga todavía no existe, y yo probaba el destino ANTES del mkdir. Con el directorio creado primero resuelven los 2415 de 2415 — medido sobre el árbol desempaquetado, no deducido. Queda dicho en la receta porque la lectura fácil era la contraria: «WHENCE declara enlaces a blobs que el tarball no trae», que habría llevado a bajar el umbral y sellar un artefacto con 337 firmwares inalcanzables. Y si el destino de verdad no existe, ahora se borra el directorio vacío que el mkdir haya dejado: un directorio vacío en el artefacto es exactamente lo que el §3 de CLAUDE.md prohíbe. Co-Authored-By: Claude Opus 5 (1M context) --- recipes/linux-firmware.toml | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/recipes/linux-firmware.toml b/recipes/linux-firmware.toml index 31f15bea..7f37da2d 100644 --- a/recipes/linux-firmware.toml +++ b/recipes/linux-firmware.toml @@ -88,8 +88,16 @@ for pasada in 1 2 3; do dst_abs="/out/lib/firmware/$dst" [ -e "$dst_abs" ] && continue # ya hecho (o es un fichero de verdad) dir=$(dirname "$dst_abs") - [ -e "$dir/$src" ] || continue # sólo si el destino existe de verdad + # El directorio del enlace se crea ANTES de resolver el destino: muchos son de la forma + # `ath11k/WCN6855/hw2.1/regdb.bin -> ../hw2.0/regdb.bin`, y un `..` no resuelve si el + # directorio desde el que cuelga todavía no existe. Medido: con el test hecho antes del + # mkdir fallaban 337 de 2415 y parecía que el tarball venía roto; con el mkdir primero + # resuelven los 2415. El fallo estaba en la comprobación, no en los datos. mkdir -p "$dir" + if [ ! -e "$dir/$src" ]; then + rmdir "$dir" 2>/dev/null || true # no dejar un directorio vacío de recuerdo + continue + fi ln -sf "$src" "$dst_abs" hechos=$((hechos+1)) done < /tmp/whence-links.tsv