#!/bin/bash
# espejo-fuentes: baja las fuentes de todo lo que esta en fuentesexternas
# (bibliotecas y herramientas: lo de LFS/BLFS que usamos), comprueba la
# sha256 de cada una y las deja en salida/comunes/fuentes/ con SHA256SUMS,
# para subirlas al servidor (downloads/comunes/fuentes/: make
# subir-comunes-fuentes). Si la direccion original de alguna desaparece,
# bajar-paquetes --para fuentes la baja de esa copia. Pedido del autor,
# 08/10/2026.
set -euo pipefail
AQUI=$(cd "$(dirname "$0")" && pwd)
CAT=$AQUI/../share/summapack/data/fuentesexternas
DEST=$AQUI/salida/comunes/fuentes
mkdir -p "$DEST"
nombre='' url='' sha='' arch=''
fin() {   # una entrada leida: bajarla
    [ -n "$nombre" ] && [ -n "$url" ] || return 0
    local a=${arch:-$(basename "$url")}
    if [ -f "$DEST/$a" ] && [ "$(sha256sum < "$DEST/$a" | cut -d' ' -f1)" = "$sha" ]; then
        echo "   ya esta: $a"
    else
        curl -fsSL --retry 3 -o "$DEST/$a.parcial" "$url"
        [ "$(sha256sum < "$DEST/$a.parcial" | cut -d' ' -f1)" = "$sha" ] || {
            rm -f "$DEST/$a.parcial"; echo "espejo-fuentes: $a vino con otra sha256: se descarta" >&2; exit 1; }
        mv "$DEST/$a.parcial" "$DEST/$a"; echo "   bajado: $a"
    fi
    echo "$sha  $a" >> "$DEST/SHA256SUMS.nuevo"
}
: > "$DEST/SHA256SUMS.nuevo"
while IFS= read -r l; do
    case "$l" in
        \[*) fin; nombre=${l#[}; nombre=${nombre%]}; url='' sha='' arch='' ;;
        url:*) url=${l#url:}; url=${url# } ;;
        sha256:*) sha=${l#sha256:}; sha=${sha# } ;;
        archivo:*) arch=${l#archivo:}; arch=${arch# } ;;
    esac
done < "$CAT"
fin
sort -k2 "$DEST/SHA256SUMS.nuevo" > "$DEST/SHA256SUMS"; rm -f "$DEST/SHA256SUMS.nuevo"
(cd "$DEST" && sha256sum -c --quiet SHA256SUMS) && echo "ok: $(wc -l < "$DEST/SHA256SUMS") fuentes en $DEST"
