#!/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")