]> git.saurik.com Git - apt.git/commitdiff
correct architecture detection for 'rc' packages for purge
authorDavid Kalnischkies <david@kalnischkies.de>
Tue, 25 Nov 2014 11:10:15 +0000 (12:10 +0100)
committerDavid Kalnischkies <david@kalnischkies.de>
Sun, 7 Dec 2014 18:12:51 +0000 (19:12 +0100)
We were already considering these cases, but the code was flawed, so
that packages changing architectures are incorrectly handled and hence
the wrong architecture is used to call dpkg with, so that dpkg says the
package isn't installed (which it isn't for the requested architecture).

Closes: 770898
apt-pkg/deb/dpkgpm.cc
test/integration/framework
test/integration/test-ubuntu-bug-761175-remove-purge

index 593875071754b77f391e87427fad0ae81a53178b..3fbda05522ef5dccf7dcc2691597a253ce5facc3 100644 (file)
@@ -201,18 +201,10 @@ pkgCache::VerIterator FindNowVersion(const pkgCache::PkgIterator &Pkg)
 {
    pkgCache::VerIterator Ver;
    for (Ver = Pkg.VersionList(); Ver.end() == false; ++Ver)
-   {
-      pkgCache::VerFileIterator Vf = Ver.FileList();
-      pkgCache::PkgFileIterator F = Vf.File();
-      for (F = Vf.File(); F.end() == false; ++F)
-      {
-         if (F && F.Archive())
-         {
-            if (strcmp(F.Archive(), "now")) 
-               return Ver;
-         }
-      }
-   }
+      for (pkgCache::VerFileIterator Vf = Ver.FileList(); Vf.end() == false; ++Vf)
+        for (pkgCache::PkgFileIterator F = Vf.File(); F.end() == false; ++F)
+           if (F->Archive != 0 && strcmp(F.Archive(), "now") == 0)
+              return Ver;
    return Ver;
 }
                                                                        /*}}}*/
index ff059f59e8c69e2628a9340266d63ee9665d8a7d..298f4c9b2a46c844bfef50c584da3cf816526552 100644 (file)
@@ -635,12 +635,8 @@ buildaptarchive() {
 
 createaptftparchiveconfig() {
        local COMPRESSORS="$(cut -d'    ' -f 1 ${TMPWORKINGDIRECTORY}/rootdir/etc/testcase-compressor.conf | tr '\n' ' ')"
-       COMPRESSORS="${COMPRESSORS%* }"
-       local ARCHS="$(find pool/ -name '*.deb' | grep -oE '_[a-z0-9-]+\.deb$' | sort | uniq | sed -e '/^_all.deb$/ d' -e 's#^_\([a-z0-9-]*\)\.deb$#\1#' | tr '\n' ' ')"
-       if [ -z "$ARCHS" ]; then
-               # the pool is empty, so we will operate on faked packages - let us use the configured archs
-               ARCHS="$(getarchitectures)"
-       fi
+       local COMPRESSORS="${COMPRESSORS%* }"
+       local ARCHS="$(getarchitectures)"
        echo -n 'Dir {
        ArchiveDir "' >> ftparchive.conf
        echo -n $(readlink -f .) >> ftparchive.conf
@@ -1489,3 +1485,19 @@ aptautotest_aptget_update() {
        done
 }
 aptautotest_apt_update() { aptautotest_aptget_update "$@"; }
+
+testaptautotestnodpkgwarning() {
+       local TESTCALL="$1"
+       while [ -n "$2" ]; do
+               if [ "$2" = '-s' ]; then return; fi
+               shift
+       done
+       testfailure grep '^dpkg: warning:.*ignor.*' "${TMPWORKINGDIRECTORY}/rootdir/tmp-before/${TESTCALL}.output"
+}
+
+aptautotest_aptget_install() { testaptautotestnodpkgwarning "$@"; }
+aptautotest_aptget_remove() { testaptautotestnodpkgwarning "$@"; }
+aptautotest_aptget_purge() { testaptautotestnodpkgwarning "$@"; }
+aptautotest_apt_install() { testaptautotestnodpkgwarning "$@"; }
+aptautotest_apt_remove() { testaptautotestnodpkgwarning "$@"; }
+aptautotest_apt_purge() { testaptautotestnodpkgwarning "$@"; }
index 14648e9b8533f4e7346f8c0b9fe8fd98b1a7055d..0b5a91246275cb4e0a29644178505ad89492a2ff 100755 (executable)
@@ -4,33 +4,53 @@ set -e
 TESTDIR=$(readlink -f $(dirname $0))
 . $TESTDIR/framework
 setupenvironment
-configarchitecture 'native'
-
-setupsimplenativepackage 'compiz-core' 'native' '1.0' 'unstable'
-BUILDDIR='incoming/compiz-core-1.0'
-mkdir -p ${BUILDDIR}/debian/compiz-core/etc
-echo 'foo=bar;' > ${BUILDDIR}/compiz.conf
-echo 'compiz.conf      /etc/compiz.conf' >> ${BUILDDIR}/debian/install
-buildpackage "$BUILDDIR" 'unstable' 'main' 'native'
-rm -rf "$BUILDDIR"
+configarchitecture 'amd64' 'i386'
+
+buildcompizpkg() {
+       setupsimplenativepackage "compiz-core-$1" "$2" "$3" "$4"
+       BUILDDIR="incoming/compiz-core-$1-$3"
+       mkdir -p ${BUILDDIR}/debian/compiz-core/etc
+       echo 'foo=bar;' > ${BUILDDIR}/compiz.conf
+       echo 'compiz.conf       /etc/compiz.conf' >> ${BUILDDIR}/debian/install
+       buildpackage "$BUILDDIR" "$4" 'main' "$2"
+       rm -rf "$BUILDDIR"
+}
+buildcompizpkg 'native' 'all' '1.0' 'stable'
+buildcompizpkg 'all' 'native' '1.0' 'stable'
+buildcompizpkg 'native' 'native' '2.0' 'unstable'
+buildcompizpkg 'all' 'all' '2.0' 'unstable'
 
 setupaptarchive
 
+runtests() {
+       testdpkgnotinstalled compiz-core-$1
+       testsuccess aptget install compiz-core-$1 -t "${2:-unstable}"
+       testdpkginstalled compiz-core-$1
 
-testdpkgnotinstalled compiz-core
-testsuccess aptget install compiz-core
-testdpkginstalled compiz-core
-
-testsuccess aptget remove compiz-core -y
-testdpkgnotinstalled compiz-core
-
-msgtest 'Check that conffiles are still around for' 'compiz-core'
-dpkg -l compiz-core | grep -q '^rc' && msgpass || msgfail
+       testsuccess aptget remove compiz-core-$1 -y
+       testdpkgnotinstalled compiz-core-$1
+       testdpkgstatus 'rc' '1' "compiz-core-$1"
 
-testequal 'Reading package lists...
+       testequal "Reading package lists...
 Building dependency tree...
 Reading state information...
 The following packages will be REMOVED:
-  compiz-core*
+  compiz-core-$1*
 0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded.
-Purg compiz-core' aptget purge compiz-core -s
+Purg compiz-core-$1" aptget purge compiz-core-$1 -s
+       testsuccess aptget purge compiz-core-$1 -y
+       testequal "dpkg-query: no packages found matching compiz-core-$1" dpkg -l compiz-core-$1
+}
+
+msgmsg 'Test in multi arch environment'
+runtests 'native'
+runtests 'all'
+runtests 'native' 'stable'
+runtests 'all' 'stable'
+
+msgmsg 'Test in single arch environment'
+configarchitecture 'amd64'
+runtests 'native'
+runtests 'all'
+runtests 'native' 'stable'
+runtests 'all' 'stable'