🔒 Repository is read-only – file editing is disabled.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
#!/usr/bin/env python3
"""Sekcja 9a: nie kasuj DUZYCH archiwow z cache zrodel.
Kasowanie po kazdym buildzie oznacza, ze linux-firmware (875 MB, uzywany przez
245 receptur *-firmware) jest pobierany od nowa przy kazdym z nich: ~215 GB
transferu. Prog rozmiaru (domyslnie 100 MB) zachowuje drogie archiwa, a nadal
sprzata drobnice. Konfigurowalne: PAGBUILD_KEEP_SOURCE_MB.
"""
import sys
P = "/tmp/pagbuild-src/pagbuild"
APPLY = "--apply" in sys.argv
text = open(P, newline="", encoding="utf-8").read()
OLD = """ _purged=0
for _cs in "${CACHED_SRCS[@]:-}"; do
[[ -n "$_cs" && "$_cs" != GIT:* ]] || continue
# bezpieczeństwo: tylko zwykłe pliki wewnątrz katalogu cache
if [[ "$_cs" == "$SRC_CACHE/"* && -f "$_cs" ]]; then
rm -f "$_cs" && _purged=$((_purged + 1))
fi
done
if [[ $_purged -gt 0 ]]; then
echo "🧹 Usunięto $_purged źródło/a z cache po udanym buildzie"
fi"""
NEW = """ # Duże archiwa zostawiamy w cache: są drogie do ponownego pobrania.
# linux-firmware (875 MB) jest używany przez 245 receptur *-firmware, więc
# kasowanie po każdym buildzie oznaczało ~215 GB ponownych pobrań.
# Próg: PAGBUILD_KEEP_SOURCE_MB (domyślnie 100 MB).
_keep_mb="${PAGBUILD_KEEP_SOURCE_MB:-100}"
_keep_bytes=$(( _keep_mb * 1048576 ))
_purged=0
_kept=0
for _cs in "${CACHED_SRCS[@]:-}"; do
[[ -n "$_cs" && "$_cs" != GIT:* ]] || continue
# bezpieczeństwo: tylko zwykłe pliki wewnątrz katalogu cache
if [[ "$_cs" == "$SRC_CACHE/"* && -f "$_cs" ]]; then
_fsz=$(stat -c%s "$_cs" 2>/dev/null || echo 0)
if [[ "$_fsz" -ge "$_keep_bytes" ]]; then
_kept=$((_kept + 1))
continue
fi
rm -f "$_cs" && _purged=$((_purged + 1))
fi
done
if [[ $_purged -gt 0 ]]; then
echo "🧹 Usunięto $_purged źródło/a z cache po udanym buildzie"
fi
if [[ $_kept -gt 0 ]]; then
echo "💾 Zachowano w cache $_kept duże źródło/a (>= ${_keep_mb} MB)"
fi"""
n = text.count(OLD)
print(f"dopasowan: {n}")
if n != 1:
print("!!! PRZERWANO")
sys.exit(1)
text = text.replace(OLD, NEW, 1)
if APPLY:
open(P, "w", newline="", encoding="utf-8").write(text)
print("ZAPISANO")
else:
print("DRY-RUN")