summaryrefslogtreecommitdiffstats
path: root/core/includes/packagemanager.inc
diff options
context:
space:
mode:
Diffstat (limited to 'core/includes/packagemanager.inc')
-rw-r--r--core/includes/packagemanager.inc24
1 files changed, 24 insertions, 0 deletions
diff --git a/core/includes/packagemanager.inc b/core/includes/packagemanager.inc
index 1e5b236d..f50455a2 100644
--- a/core/includes/packagemanager.inc
+++ b/core/includes/packagemanager.inc
@@ -83,6 +83,30 @@ list_packet_files() {
}
#
+# Pass list of packages, returns filtered list, with packages removed
+# that are already installed
+#
+filter_installed_packages() {
+ local i
+ if [ "$PACKET_HANDLER" == "dpkg" ]; then
+ declare -A existing
+ for i in $( dpkg -l "$@" 2> /dev/null | awk '$1 == "ii" {print $2}' ); do
+ existing["$i"]=1
+ done
+ for i in "$@"; do
+ [ -n "${existing["${i}"]}" ] || [ -n "${existing["${i}:${AMD64_X86}"]}" ] || echo "$i"
+ done
+ elif [ "$PACKET_HANDLER" == "rpm" ]; then
+ for i in "$@"; do
+ rpm --quiet -q "$i" &> /dev/null || echo "$i"
+ done
+ else
+ pwarning "'Don't know how to determine installation status of packages for $PACKET_HANDLER"
+ echo "$@"
+ fi
+}
+
+#
# install individual package depending on package manager
#
install_packages() {