diff --git a/setup-aur.sh b/setup-aur.sh index c73e05a..d446f91 100755 --- a/setup-aur.sh +++ b/setup-aur.sh @@ -232,11 +232,14 @@ repo_has() { # Publie les .pkg d'un build vers local-repo en purgeant d'abord les anciennes # versions de CE paquet (+ son sous-paquet -debug). Le « -[0-9] » empêche # « anaconda » d'attraper « anaconda-widgets » / « anaconda-debug ». +# Prend la LISTE EXPLICITE des fichiers à publier (pas un glob sur le dossier : +# un .pkg d'un build précédent peut traîner dans $BUILD_DIR/ et serait +# republié par-dessus la purge). publish_to_repo() { - local name="$1" d="$2" + local name="$1"; shift rm -f "$LOCAL_REPO/$name"-[0-9]*.pkg.tar.* \ "$LOCAL_REPO/$name"-debug-[0-9]*.pkg.tar.* 2>/dev/null || true - cp -f "$d"/*.pkg.tar.* "$LOCAL_REPO/" || error "Copie de $name vers local-repo échouée" + cp -f "$@" "$LOCAL_REPO/" || error "Copie de $name vers local-repo échouée" } # Construit OU saute (source déjà déposée dans $BUILD_DIR/). @@ -259,8 +262,23 @@ build_or_skip() { chown -R "$BUILD_USER:$BUILD_USER" "$d" su - "$BUILD_USER" -c "cd '$d' && makepkg -sf --noconfirm" \ || error "Build $name échoué" - pacman -U --noconfirm "$d/"*.pkg.tar.* || error "Install de $name échouée" - publish_to_repo "$name" "$d" + # N'installer/publier QUE les paquets produits par CE PKGBUILD dans SA + # version courante (makepkg --packagelist), jamais un glob "$d/"* : après + # un bump de pkgrel, l'ancien .pkg traîne encore dans $d (BUILD_DIR n'est + # pas nettoyé entre les runs) → pacman -U recevait 2× le même nom de + # paquet (« erreur : cible répétée ») et la vieille version repartait + # dans local-repo. Le grep filtre tout bruit éventuel de su - (PAM…). + # NB : --packagelist liste aussi un -debug qui n'est PAS toujours produit + # (paquet pur python : rien à stripper) → ne garder que les fichiers + # réellement présents sur disque. + local -a pkgfiles=() existing=() + local f + mapfile -t pkgfiles < <(su - "$BUILD_USER" -c "cd '$d' && makepkg --packagelist" \ + | grep -E '\.pkg\.tar\.') + for f in "${pkgfiles[@]}"; do [ -e "$f" ] && existing+=("$f"); done + [ "${#existing[@]}" -gt 0 ] || error "Aucun paquet produit trouvé pour $name" + pacman -U --noconfirm "${existing[@]}" || error "Install de $name échouée" + publish_to_repo "$name" "${existing[@]}" success "$name build + install OK" }