* apt-pkg/pkgcachegen.cc:
authorDavid Kalnischkies <kalnischkies@gmail.com>
Mon, 7 Feb 2011 10:45:06 +0000 (11:45 +0100)
committerDavid Kalnischkies <kalnischkies@gmail.com>
Mon, 7 Feb 2011 10:45:06 +0000 (11:45 +0100)
  - in multiarch, let :all packages conflict with :any packages
    with a different version to be sure

apt-pkg/pkgcachegen.cc
debian/changelog

index ed35174..5b943cc 100644 (file)
@@ -638,21 +638,19 @@ bool pkgCacheGenerator::FinishCache(OpProgress *Progress)
         Dynamic<pkgCache::PkgIterator> DynP(P);
         for (; P.end() != true; P = G.NextPkg(P))
         {
-           if (strcmp(P.Arch(),"all") == 0)
-              continue;
            pkgCache::PkgIterator allPkg;
            Dynamic<pkgCache::PkgIterator> DynallPkg(allPkg);
            pkgCache::VerIterator V = P.VersionList();
            Dynamic<pkgCache::VerIterator> DynV(V);
            for (; V.end() != true; V++)
            {
-              string const Arch = V.Arch(true);
+              char const * const Arch = P.Arch();
               map_ptrloc *OldDepLast = NULL;
               /* MultiArch handling introduces a lot of implicit Dependencies:
                - MultiArch: same → Co-Installable if they have the same version
                - Architecture: all → Need to be Co-Installable for internal reasons
                - All others conflict with all other group members */
-              bool const coInstall = (V->MultiArch == pkgCache::Version::All ||
+              bool const coInstall = ((V->MultiArch == pkgCache::Version::All && strcmp(Arch, "all") != 0) ||
                                        V->MultiArch == pkgCache::Version::Same);
               if (V->MultiArch == pkgCache::Version::All && allPkg.end() == true)
                  allPkg = G.FindPkg("all");
@@ -686,9 +684,15 @@ bool pkgCacheGenerator::FinishCache(OpProgress *Progress)
                     }
                  } else {
                        // Conflicts: ${self}:other
-                       NewDepends(D, V, "",
-                                  pkgCache::Dep::NoOp, pkgCache::Dep::Conflicts,
-                                  OldDepLast);
+                       if (strcmp(Arch, "all") == 0) {
+                               NewDepends(D, V, V.VerStr(),
+                                          pkgCache::Dep::NotEquals, pkgCache::Dep::Conflicts,
+                                          OldDepLast);
+                       } else {
+                               NewDepends(D, V, "",
+                                          pkgCache::Dep::NoOp, pkgCache::Dep::Conflicts,
+                                          OldDepLast);
+                       }
                  }
               }
            }
index 7fb6557..ecaca2a 100644 (file)
@@ -79,6 +79,9 @@ apt (0.8.11) UNRELEASED; urgency=low
   * apt-pkg/algorithms.cc:
     - mark pseudo packages of installed all packages as configured
       in the simulation as we don't call configure for these packages
+  * apt-pkg/pkgcachegen.cc:
+    - in multiarch, let :all packages conflict with :any packages
+      with a different version to be sure
 
   [ Michael Vogt ]
   * methods/http.cc:
@@ -96,7 +99,7 @@ apt (0.8.11) UNRELEASED; urgency=low
       will actually test uncompressed indexes regardless of the internal
       default value of Acquire::GzipIndexes.
 
- -- David Kalnischkies <kalnischkies@gmail.com>  Mon, 07 Feb 2011 11:26:03 +0100
+ -- David Kalnischkies <kalnischkies@gmail.com>  Mon, 07 Feb 2011 11:42:41 +0100
 
 apt (0.8.10.3) unstable; urgency=low