linux-firmware: los enlaces de WHENCE se encadenan, así que van en tres pasadas
Primer intento con el arreglo: 2078 de 2415 (86 %), y el guardián cortó. La causa es que WHENCE encadena —declara `a -> b` donde `b` es a su vez un enlace que aparece más abajo—, así que en una sola pasada el destino todavía no existe cuando toca crear el primero. Se repite hasta que una pasada no agregue nada, con tope de tres. Y ahora salta los que ya existen, para no recontar. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -77,16 +77,25 @@ cp -a ./* /out/lib/firmware/
|
||||
sed -n 's/^Link:[[:space:]]*//p' /out/lib/firmware/WHENCE \
|
||||
| sed 's/[[:space:]]*->[[:space:]]*/\t/' > /tmp/whence-links.tsv
|
||||
declarados=$(wc -l < /tmp/whence-links.tsv)
|
||||
# TRES PASADAS, y el motivo es medido: WHENCE encadena enlaces —`a -> b` donde `b` es a su vez un
|
||||
# enlace que se declara más abajo—. Con una sola pasada el destino todavía no existe cuando toca
|
||||
# crear el primero, y quedaban 2078 de 2415 (86 %), que es justo lo que hizo saltar al guardián.
|
||||
hechos=0
|
||||
while IFS="$(printf '\t')" read -r dst src; do
|
||||
[ -n "$dst" ] && [ -n "$src" ] || continue
|
||||
dir=$(dirname "/out/lib/firmware/$dst")
|
||||
[ -e "$dir/$src" ] || continue # sólo si el destino existe de verdad
|
||||
mkdir -p "$dir"
|
||||
ln -sf "$src" "/out/lib/firmware/$dst"
|
||||
hechos=$((hechos+1))
|
||||
done < /tmp/whence-links.tsv
|
||||
echo "linux-firmware: $hechos/$declarados enlaces de WHENCE creados"
|
||||
for pasada in 1 2 3; do
|
||||
antes=$hechos
|
||||
while IFS="$(printf '\t')" read -r dst src; do
|
||||
[ -n "$dst" ] && [ -n "$src" ] || continue
|
||||
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
|
||||
mkdir -p "$dir"
|
||||
ln -sf "$src" "$dst_abs"
|
||||
hechos=$((hechos+1))
|
||||
done < /tmp/whence-links.tsv
|
||||
echo "linux-firmware: pasada $pasada — $hechos/$declarados enlaces"
|
||||
[ "$hechos" -eq "$antes" ] && break
|
||||
done
|
||||
[ "$hechos" -ge $((declarados * 9 / 10)) ] || { echo "linux-firmware: sólo $hechos de $declarados enlaces — el árbol no casa con su WHENCE" >&2; exit 1; }
|
||||
|
||||
# ── Aserción de completitud, CONTRA WHENCE y no contra un número mágico ─────────────────────────
|
||||
|
||||
Reference in New Issue
Block a user