From e4100e324adc1190751731ddc0994a64a40ab92d Mon Sep 17 00:00:00 2001 From: Evax Software Date: Mon, 16 Jan 2012 18:04:15 +0100 Subject: [PATCH 1/2] better handling of virtual packages in __package_apt --- conf/type/__package_apt/explorer/pkg_status | 9 ++++- conf/type/__package_apt/gencode-remote | 39 +++++++++++---------- 2 files changed, 29 insertions(+), 19 deletions(-) diff --git a/conf/type/__package_apt/explorer/pkg_status b/conf/type/__package_apt/explorer/pkg_status index 86b94825..249e4638 100755 --- a/conf/type/__package_apt/explorer/pkg_status +++ b/conf/type/__package_apt/explorer/pkg_status @@ -28,4 +28,11 @@ else fi # Except dpkg failing, if package is not known / installed -dpkg -s "$name" 2>/dev/null || exit 0 +packages="$(apt-cache showpkg "$name" | grep -A 20 "Reverse Provides:" | sed 1d | cut -d ' ' -f 1) $name" +for p in $packages; do + if [ -n "$(dpkg -s "$p" 2>/dev/null | grep "^Status: install ok installed$")" ]; then + echo "installed $p" + exit 0 + fi +done +echo "removed" diff --git a/conf/type/__package_apt/gencode-remote b/conf/type/__package_apt/gencode-remote index a5384ee3..594ab8cb 100755 --- a/conf/type/__package_apt/gencode-remote +++ b/conf/type/__package_apt/gencode-remote @@ -27,26 +27,29 @@ else name="$__object_id" fi -state="$(cat "$__object/parameter/state")" -is_installed="$(grep "^Status: install ok installed" "$__object/explorer/pkg_status" || true)" +state_should="$(cat "$__object/parameter/state")" +state_is="$(cat "$__object/explorer/pkg_status")" +case "$state_is" in + installed*) + name="$(echo "$state_is" | cut -d ' ' -f 2)" + state_is="installed" + ;; +esac aptget="DEBIAN_FRONTEND=noninteractive apt-get --quiet --yes" -case "$state" in - installed) - # Install only if non-existent - if [ -z "$is_installed" ]; then +if [ "$state_is" != "$state_should" ]; then + case "$state_should" in + installed) echo $aptget install \"$name\" - fi - ;; - removed) - # Remove only if existent - if [ -n "$is_installed" ]; then + ;; + removed) echo $aptget remove \"$name\" - fi - ;; - *) - echo "Unknown state: $state" >&2 - exit 1 - ;; -esac + ;; + *) + echo "Unknown state: $state" >&2 + exit 1 + ;; + esac +fi + From 9317d57ff12a1575bdf5f6a053613d81a111e5c0 Mon Sep 17 00:00:00 2001 From: Evax Software Date: Wed, 18 Jan 2012 09:31:11 +0100 Subject: [PATCH 2/2] make virtual package detection more robust in __package_apt --- conf/type/__package_apt/explorer/pkg_status | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/type/__package_apt/explorer/pkg_status b/conf/type/__package_apt/explorer/pkg_status index 249e4638..dbb3af3e 100755 --- a/conf/type/__package_apt/explorer/pkg_status +++ b/conf/type/__package_apt/explorer/pkg_status @@ -28,7 +28,7 @@ else fi # Except dpkg failing, if package is not known / installed -packages="$(apt-cache showpkg "$name" | grep -A 20 "Reverse Provides:" | sed 1d | cut -d ' ' -f 1) $name" +packages="$(apt-cache showpkg "$name" | sed -e "1,/Reverse Provides:/d" | cut -d ' ' -f 1) $name" for p in $packages; do if [ -n "$(dpkg -s "$p" 2>/dev/null | grep "^Status: install ok installed$")" ]; then echo "installed $p"