Browse code

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

Dean Troyer authored on 2013/08/28 07:06:14
Showing 2 changed files
... ...
@@ -317,16 +317,36 @@ function get_packages() {
317 317
                 continue
318 318
             fi
319 319
 
320
+            # Assume we want this package
321
+            package=${line%#*}
322
+            inst_pkg=1
323
+
324
+            # Look for # dist:xxx in comment
320 325
             if [[ $line =~ (.*)#.*dist:([^ ]*) ]]; then
321 326
                 # We are using BASH regexp matching feature.
322 327
                 package=${BASH_REMATCH[1]}
323 328
                 distros=${BASH_REMATCH[2]}
324 329
                 # In bash ${VAR,,} will lowecase VAR
325
-                [[ ${distros,,} =~ ${DISTRO,,} ]] && echo $package
326
-                continue
330
+                # Look for a match in the distro list
331
+                if [[ ! ${distros,,} =~ ${DISTRO,,} ]]; then
332
+                    # If no match then skip this package
333
+                    inst_pkg=0
334
+                fi
335
+            fi
336
+
337
+            # Look for # testonly in comment
338
+            if [[ $line =~ (.*)#.*testonly.* ]]; then
339
+                package=${BASH_REMATCH[1]}
340
+                # Are we installing test packages? (test for the default value)
341
+                if [[ $INSTALL_TESTONLY_PACKAGES = "False" ]]; then
342
+                    # If not installing test packages the skip this package
343
+                    inst_pkg=0
344
+                fi
327 345
             fi
328 346
 
329
-            echo ${line%#*}
347
+            if [[ $inst_pkg = 1 ]]; then
348
+                echo $package
349
+            fi
330 350
         done
331 351
         IFS=$OIFS
332 352
     done
... ...
@@ -912,7 +932,7 @@ function is_package_installed() {
912 912
     fi
913 913
 
914 914
     if [[ "$os_PACKAGE" = "deb" ]]; then
915
-        dpkg -l "$@" > /dev/null 2> /dev/null
915
+        dpkg -s "$@" > /dev/null 2> /dev/null
916 916
     elif [[ "$os_PACKAGE" = "rpm" ]]; then
917 917
         rpm --quiet -q "$@"
918 918
     else
... ...
@@ -367,3 +367,25 @@ if [[ "$VAL" -ne 0 ]]; then
367 367
 else
368 368
     echo "is_package_installed() on non-existing package failed"
369 369
 fi
370
+
371
+# test against removed package...was a bug on Ubuntu
372
+if is_ubuntu; then
373
+    PKG=cowsay
374
+    if ! (dpkg -s $PKG >/dev/null 2>&1); then
375
+        # it was never installed...set up the condition
376
+        sudo apt-get install -y cowsay >/dev/null 2>&1
377
+    fi
378
+    if (dpkg -s $PKG >/dev/null 2>&1); then
379
+        # remove it to create the 'un' status
380
+        sudo dpkg -P $PKG >/dev/null 2>&1
381
+    fi
382
+
383
+    # now test the installed check on a deleted package
384
+    is_package_installed $PKG
385
+    VAL=$?
386
+    if [[ "$VAL" -ne 0 ]]; then
387
+        echo "OK"
388
+    else
389
+        echo "is_package_installed() on deleted package failed"
390
+    fi
391
+fi