From 04762cd823302ca9992b67419e55ad5fc4dbf8fe Mon Sep 17 00:00:00 2001 From: Dean Troyer Date: Tue, 27 Aug 2013 17:06:14 -0500 Subject: [PATCH] Fix is_package_installed() check with dpkg is_package_installed() incorrectly returned '0' for packages that had 'un' status in the dpkg database. Change-Id: I81b77486c2ed7717ed81cb2c2572fe6c4b394ffc --- functions | 28 ++++++++++++++++++++++++---- tests/functions.sh | 22 ++++++++++++++++++++++ 2 files changed, 46 insertions(+), 4 deletions(-) diff --git a/functions b/functions index 41f008ed84..b8df520854 100644 --- a/functions +++ b/functions @@ -317,16 +317,36 @@ function get_packages() { continue fi + # Assume we want this package + package=${line%#*} + inst_pkg=1 + + # Look for # dist:xxx in comment if [[ $line =~ (.*)#.*dist:([^ ]*) ]]; then # We are using BASH regexp matching feature. package=${BASH_REMATCH[1]} distros=${BASH_REMATCH[2]} # In bash ${VAR,,} will lowecase VAR - [[ ${distros,,} =~ ${DISTRO,,} ]] && echo $package - continue + # Look for a match in the distro list + if [[ ! ${distros,,} =~ ${DISTRO,,} ]]; then + # If no match then skip this package + inst_pkg=0 + fi fi - echo ${line%#*} + # Look for # testonly in comment + if [[ $line =~ (.*)#.*testonly.* ]]; then + package=${BASH_REMATCH[1]} + # Are we installing test packages? (test for the default value) + if [[ $INSTALL_TESTONLY_PACKAGES = "False" ]]; then + # If not installing test packages the skip this package + inst_pkg=0 + fi + fi + + if [[ $inst_pkg = 1 ]]; then + echo $package + fi done IFS=$OIFS done @@ -912,7 +932,7 @@ function is_package_installed() { fi if [[ "$os_PACKAGE" = "deb" ]]; then - dpkg -l "$@" > /dev/null 2> /dev/null + dpkg -s "$@" > /dev/null 2> /dev/null elif [[ "$os_PACKAGE" = "rpm" ]]; then rpm --quiet -q "$@" else diff --git a/tests/functions.sh b/tests/functions.sh index 27a6cfeec4..7d486d4cc5 100755 --- a/tests/functions.sh +++ b/tests/functions.sh @@ -367,3 +367,25 @@ if [[ "$VAL" -ne 0 ]]; then else echo "is_package_installed() on non-existing package failed" fi + +# test against removed package...was a bug on Ubuntu +if is_ubuntu; then + PKG=cowsay + if ! (dpkg -s $PKG >/dev/null 2>&1); then + # it was never installed...set up the condition + sudo apt-get install -y cowsay >/dev/null 2>&1 + fi + if (dpkg -s $PKG >/dev/null 2>&1); then + # remove it to create the 'un' status + sudo dpkg -P $PKG >/dev/null 2>&1 + fi + + # now test the installed check on a deleted package + is_package_installed $PKG + VAL=$? + if [[ "$VAL" -ne 0 ]]; then + echo "OK" + else + echo "is_package_installed() on deleted package failed" + fi +fi