fix is_package_installed to check provides (virtual packages)

aylurs-gtk-shell-git provides aylurs-gtk-shell, but pacman -Qi
only matches exact package names. This caused the installer to
think ags was missing and try to install aylurs-gtk-shell from
AUR, which conflicts with the already-installed -git variant.

Now uses expac (fast) or pacman loop (fallback) to check if any
installed package provides the requested virtual package name.
This commit is contained in:
2026-05-28 18:27:22 +02:00
parent 832cad605a
commit 110ae9e4eb

View File

@@ -91,8 +91,19 @@ is_package_installed() {
local pkg="$1"
if command -v pacman >/dev/null 2>&1; then
pacman -Qi "$pkg" >/dev/null 2>&1
return $?
pacman -Qi "$pkg" >/dev/null 2>&1 && return 0
if command -v expac >/dev/null 2>&1; then
expac -Q '%n %P' 2>/dev/null | awk -v pkg="$pkg" '
{ for (i=2; i<=NF; i++) if ($i == pkg) {found=1; exit} }
END {exit !found}
' && return 0
else
while IFS= read -r installed; do
[[ -z "$installed" ]] && continue
pacman -Qi "$installed" 2>/dev/null | grep -qP "Provides\s*:\s*.*\b${pkg}\b" && return 0
done < <(pacman -Qq 2>/dev/null)
fi
return 1
fi
return 1