Merge pull request #20 from evax/package-apt-fixes

better handling of virtual packages in __package_apt
This commit is contained in:
telmich 2012-01-18 04:16:23 -08:00
commit dc616a6996
2 changed files with 29 additions and 19 deletions

View file

@ -28,4 +28,11 @@ else
fi fi
# Except dpkg failing, if package is not known / installed # Except dpkg failing, if package is not known / installed
dpkg -s "$name" 2>/dev/null || exit 0 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"
exit 0
fi
done
echo "removed"

View file

@ -27,26 +27,29 @@ else
name="$__object_id" name="$__object_id"
fi fi
state="$(cat "$__object/parameter/state")" state_should="$(cat "$__object/parameter/state")"
is_installed="$(grep "^Status: install ok installed" "$__object/explorer/pkg_status" || true)" 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" aptget="DEBIAN_FRONTEND=noninteractive apt-get --quiet --yes"
case "$state" in if [ "$state_is" != "$state_should" ]; then
installed) case "$state_should" in
# Install only if non-existent installed)
if [ -z "$is_installed" ]; then
echo $aptget install \"$name\" echo $aptget install \"$name\"
fi ;;
;; removed)
removed)
# Remove only if existent
if [ -n "$is_installed" ]; then
echo $aptget remove \"$name\" echo $aptget remove \"$name\"
fi ;;
;; *)
*) echo "Unknown state: $state" >&2
echo "Unknown state: $state" >&2 exit 1
exit 1 ;;
;; esac
esac fi