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:
15
lib/utils.sh
15
lib/utils.sh
@@ -91,8 +91,19 @@ is_package_installed() {
|
|||||||
local pkg="$1"
|
local pkg="$1"
|
||||||
|
|
||||||
if command -v pacman >/dev/null 2>&1; then
|
if command -v pacman >/dev/null 2>&1; then
|
||||||
pacman -Qi "$pkg" >/dev/null 2>&1
|
pacman -Qi "$pkg" >/dev/null 2>&1 && return 0
|
||||||
return $?
|
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
|
fi
|
||||||
|
|
||||||
return 1
|
return 1
|
||||||
|
|||||||
Reference in New Issue
Block a user