remove_packages: remove a package's -debug package too

An AUR package built with makepkg's debug option comes with pkg-debug,
which nothing depends on, so pacman -Rns leaves it behind. voxtype-debug
then conflicts with voxtype-bin-debug, and update fails on machines
installed before voxtype-bin replaced voxtype. Found by
30-upgrade-from-baseline at 0c0ddf5.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-11-06 09:04:18 -07:00
co-authored by Claude Opus 5.5
parent 344cabc59a
commit 8e18a6238b
2 changed files with 22 additions and 0 deletions
+16
View File
@@ -173,6 +173,22 @@ esac'
called sudo pacman -Rns --noconfirm vim called sudo pacman -Rns --noconfirm vim
} }
@test "remove_packages removes a package's -debug package too, even on its own" {
# voxtype-debug outlives voxtype, and conflicts with voxtype-bin-debug
stub pacman '
[ "$1" = -Qq ] || exit 1
case "$2" in
voxtype|voxtype-debug|herdr-debug) echo "$2" ;;
*) exit 1 ;;
esac'
stub sudo
source "$REPO/utils.sh"
run remove_packages voxtype herdr vim
[ "$status" -eq 0 ]
called sudo pacman -Rns --noconfirm voxtype voxtype-debug herdr-debug
}
@test "remove_packages does nothing when nothing is installed" { @test "remove_packages does nothing when nothing is installed" {
stub pacman 'exit 1' stub pacman 'exit 1'
stub sudo stub sudo
+6
View File
@@ -106,10 +106,16 @@ remove_packages() {
# Match the exact name: pacman -Q also finds a package that provides it, such # Match the exact name: pacman -Q also finds a package that provides it, such
# as herdr-bin for herdr, which pacman -R won't remove by that name # as herdr-bin for herdr, which pacman -R won't remove by that name
# An AUR package built with makepkg's debug option comes with pkg-debug,
# which nothing depends on, so -Rns leaves it behind, and its files conflict
# with the replacement's (voxtype-debug with voxtype-bin-debug)
for pkg in "${packages[@]}"; do for pkg in "${packages[@]}"; do
if [ "$(pacman -Qq "$pkg" 2> /dev/null)" = "$pkg" ]; then if [ "$(pacman -Qq "$pkg" 2> /dev/null)" = "$pkg" ]; then
to_remove+=("$pkg") to_remove+=("$pkg")
fi fi
if [ "$(pacman -Qq "$pkg-debug" 2> /dev/null)" = "$pkg-debug" ]; then
to_remove+=("$pkg-debug")
fi
done done
if [ ${#to_remove[@]} -ne 0 ]; then if [ ${#to_remove[@]} -ne 0 ]; then