🔒 Repository is read-only – file editing is disabled.

PaganLinux/tmp-patch-source-cache.py main

66 linii Raw ← Powrót
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")