]> git.saurik.com Git - apt.git/commitdiff
* apt-pkg/cacheiterator.h:
authorDavid Kalnischkies <kalnischkies@gmail.com>
Fri, 25 Mar 2011 21:12:29 +0000 (22:12 +0100)
committerDavid Kalnischkies <kalnischkies@gmail.com>
Fri, 25 Mar 2011 21:12:29 +0000 (22:12 +0100)
  - return "all" instead of native architecture without breaking the abi
    (too much) by extending enum instead of using bitflags (LP: #733741)

With the next abi break that enum should be a char bitflag instead

apt-pkg/cacheiterators.h
apt-pkg/deb/deblistparser.cc
apt-pkg/pkgcache.h
apt-pkg/pkgcachegen.cc
debian/changelog
test/integration/test-bug-549968-install-depends-of-not-installed
test/integration/test-bug-590438-broken-provides-thanks-to-remove-order
test/integration/test-bug-593360-modifiers-in-names
test/integration/test-bug-612099-multiarch-conflicts
test/integration/test-release-candidate-switching

index 31b3aced3b45f8212521ea2fb3d978d24997a168..8f9f811da06d2947a917eb8f2dac6f92219cbce4 100644 (file)
@@ -206,6 +206,10 @@ class pkgCache::VerIterator : public Iterator<Version, VerIterator> {
        inline const char *VerStr() const {return S->VerStr == 0?0:Owner->StrP + S->VerStr;};
        inline const char *Section() const {return S->Section == 0?0:Owner->StrP + S->Section;};
        inline const char *Arch() const {
+               if (S->MultiArch == pkgCache::Version::All ||
+                   S->MultiArch == pkgCache::Version::AllForeign ||
+                   S->MultiArch == pkgCache::Version::AllAllowed)
+                       return "all";
                return S->ParentPkg == 0?0:Owner->StrP + ParentPkg()->Arch;
        };
        __deprecated inline const char *Arch(bool const pseudo) const {
index edc001abb9924bc6447c5de80da8bc64b6fce574..b79cef41c7dbc8914c6a97fa2aebf5fee28e83e5 100644 (file)
@@ -106,7 +106,7 @@ bool debListParser::NewVersion(pkgCache::VerIterator &Ver)
       Ver->MultiArch = pkgCache::Version::None;
    else if (MultiArch == "same") {
       // Parse multi-arch
-      if (Section.FindS("Architecture") == "all")
+      if (ArchitectureAll() == true)
       {
         /* Arch all packages can't be Multi-Arch: same */
         _error->Warning("Architecture: all package '%s' can't be Multi-Arch: same",
@@ -127,6 +127,14 @@ bool debListParser::NewVersion(pkgCache::VerIterator &Ver)
       Ver->MultiArch = pkgCache::Version::None;
    }
 
+   if (ArchitectureAll() == true)
+      switch (Ver->MultiArch)
+      {
+        case pkgCache::Version::Foreign: Ver->MultiArch = pkgCache::Version::AllForeign; break;
+        case pkgCache::Version::Allowed: Ver->MultiArch = pkgCache::Version::AllAllowed; break;
+        default: Ver->MultiArch = pkgCache::Version::All;
+      }
+
    // Archive Size
    Ver->Size = Section.FindULL("Size");
    // Unpacked Size (in K)
@@ -677,13 +685,13 @@ bool debListParser::ParseProvides(pkgCache::VerIterator &Ver)
       }
    }
 
-   if (Ver->MultiArch == pkgCache::Version::Allowed)
+   if (Ver->MultiArch == pkgCache::Version::Allowed || Ver->MultiArch == pkgCache::Version::AllAllowed)
    {
       string const Package = string(Ver.ParentPkg().Name()).append(":").append("any");
       NewProvides(Ver, Package, "any", Ver.VerStr());
    }
 
-   if (Ver->MultiArch != pkgCache::Version::Foreign)
+   if (Ver->MultiArch != pkgCache::Version::Foreign && Ver->MultiArch != pkgCache::Version::AllForeign)
       return true;
 
    if (MultiArchEnabled == false)
index 89a296ce978dcd6fd5bbfd3bb20f8128915b7c76..d654a29769a97024b4d7c26a70d05c211da1c078 100644 (file)
@@ -506,8 +506,8 @@ struct pkgCache::Version
        if it is built for another architecture as the requester.
        Same indicates that builds for different architectures can
        be co-installed on the system */
-   // FIXME: remove All on abi break
-   enum {None, All, Foreign, Same, Allowed} MultiArch;
+   /* FIXME: A bitflag would be better with the next abibreak… */
+   enum {None, All, Foreign, Same, Allowed, AllForeign, AllAllowed} MultiArch;
 
    /** \brief references all the PackageFile's that this version came from
 
index ae031fee4641f7279f3c36ce8ed95a3d511f504f..b0ee04554995636c16d5d609576b08c28299e872 100644 (file)
@@ -638,7 +638,7 @@ bool pkgCacheGenerator::FinishCache(OpProgress *Progress)
                - 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::Same);
+              bool const coInstall = ((V->MultiArch & pkgCache::Version::Same) == pkgCache::Version::Same);
               for (vector<string>::const_iterator A = archs.begin(); A != archs.end(); ++A)
               {
                  if (*A == Arch)
index e46c69ca4ed384e8ce89b111d99f9a32a5cc8755..b0bec1ba2e5c03d866f9e03604f90d03dd8a9a78 100644 (file)
@@ -18,8 +18,11 @@ apt (0.8.13.1) UNRELEASED; urgency=low
   * apt-pkg/pkgcachegen.cc:
     - make "all"->"native" an implementation detail of NewPackage
       rather than rewrite it in higher methods
+  * apt-pkg/cacheiterator.h:
+    - return "all" instead of native architecture without breaking the abi
+      (too much) by extending enum instead of using bitflags (LP: #733741)
 
- -- David Kalnischkies <kalnischkies@gmail.com>  Fri, 25 Mar 2011 20:15:18 +0100
+ -- David Kalnischkies <kalnischkies@gmail.com>  Fri, 25 Mar 2011 22:07:59 +0100
 
 apt (0.8.13) unstable; urgency=low
 
index d5eae1ae6d5a02c9c49590e2109996e6fda7fd2d..7b4b4b71c7db89e7408ab775a54c5526ebaf1b02 100755 (executable)
@@ -22,5 +22,5 @@ Package extracoolstuff is not installed, so not removed
 The following NEW packages will be installed:
   coolstuff
 0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
-Inst coolstuff (1.0 unstable [i386])
-Conf coolstuff (1.0 unstable [i386])' aptget install coolstuff extracoolstuff- -o Debug::pkgDepCache::Marker=1 -s
+Inst coolstuff (1.0 unstable [all])
+Conf coolstuff (1.0 unstable [all])' aptget install coolstuff extracoolstuff- -o Debug::pkgDepCache::Marker=1 -s
index 72de6eacba634ad2aee8bcb7a836ca69ecd1687d..0f64939484f1497bec69b28a5886be8d7b863b42 100755 (executable)
@@ -62,13 +62,13 @@ predependsgawk2() {
        echo "$pkgbasefile
 Pre-Depends: $1
 " >> rootdir/var/lib/dpkg/status
-       testequalor2 "Inst coolstuff (1-1 localhost [i386])
-Conf coolstuff (1-1 localhost [i386])
+       testequalor2 "Inst coolstuff (1-1 localhost [all])
+Conf coolstuff (1-1 localhost [all])
 Inst gawk2 (1:3.1.7.dfsg-5 localhost [i386])
 Conf gawk2 (1:3.1.7.dfsg-5 localhost [i386])
-Remv mawk [1.3.3-15]" "Inst coolstuff (1-1 localhost [i386])
+Remv mawk [1.3.3-15]" "Inst coolstuff (1-1 localhost [all])
 Inst gawk2 (1:3.1.7.dfsg-5 localhost [i386])
-Conf coolstuff (1-1 localhost [i386])
+Conf coolstuff (1-1 localhost [all])
 Conf gawk2 (1:3.1.7.dfsg-5 localhost [i386])
 Remv mawk [1.3.3-15]" aptget install gawk2 mawk- -sqq -o PreDepends=$(echo "$1" | sed 's/ //g')
 }
index c34b499b0c462c54538b974f86e2d689d16905e1..83a3cfabfdc7699731c18c7f19a2eaeb4373808a 100755 (executable)
@@ -36,29 +36,29 @@ Building dependency tree...
 The following NEW packages will be installed:
   apt
 0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
-Inst apt (0.8.8 localhost [i386])
-Conf apt (0.8.8 localhost [i386])' aptget install apt -s
+Inst apt (0.8.8 localhost [all])
+Conf apt (0.8.8 localhost [all])' aptget install apt -s
 
 testequal 'Reading package lists...
 Building dependency tree...
 The following NEW packages will be installed:
   apt+
 0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
-Inst apt+ (0.8.8 localhost [i386])
-Conf apt+ (0.8.8 localhost [i386])' aptget install apt+ -s
+Inst apt+ (0.8.8 localhost [all])
+Conf apt+ (0.8.8 localhost [all])' aptget install apt+ -s
 
 testequal 'Reading package lists...
 Building dependency tree...
 The following NEW packages will be installed:
   apt+
 0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
-Inst apt+ (0.8.8 localhost [i386])
-Conf apt+ (0.8.8 localhost [i386])' aptget install apt++ -s
+Inst apt+ (0.8.8 localhost [all])
+Conf apt+ (0.8.8 localhost [all])' aptget install apt++ -s
 
 testequal 'Reading package lists...
 Building dependency tree...
 The following NEW packages will be installed:
   apt+
 0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
-Inst apt+ (0.8.8 localhost [i386])
-Conf apt+ (0.8.8 localhost [i386])' aptget purge apt++ -s
+Inst apt+ (0.8.8 localhost [all])
+Conf apt+ (0.8.8 localhost [all])' aptget purge apt++ -s
index 6d09a4fa10d58eead63a0d4de8fb25550fc4a447..b8cfe59e2f3632ee19fc47f1796bbfb09825a6f2 100755 (executable)
@@ -67,9 +67,9 @@ The following NEW packages will be installed:
 The following packages will be upgraded:
   libc6
 1 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
-Inst libc6 [1.0] (2.0 testing [i386])
+Inst libc6 [1.0] (2.0 testing [all])
 Inst foobar (1.0 stable [i386])
-Conf libc6 (2.0 testing [i386])
+Conf libc6 (2.0 testing [all])
 Conf foobar (1.0 stable [i386])' aptget install foobar/stable libc6 -st testing
 
 testequal 'Reading package lists...
@@ -78,8 +78,8 @@ Reading state information...
 The following packages will be upgraded:
   libc6
 1 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
-Inst libc6 [1.0] (2.0 testing [i386])
-Conf libc6 (2.0 testing [i386])' aptget upgrade -t testing -s
+Inst libc6 [1.0] (2.0 testing [all])
+Conf libc6 (2.0 testing [all])' aptget upgrade -t testing -s
 aptget upgrade -y -qq 2>&1 > /dev/null
 testdpkginstalled libc6
 
@@ -171,8 +171,8 @@ Reading state information...
 The following packages will be upgraded:
   libc6-same
 1 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
-Inst libc6-same [1.0] (2.0 testing [i386])
-Conf libc6-same (2.0 testing [i386])' aptget upgrade -t testing -s
+Inst libc6-same [1.0] (2.0 testing [all])
+Conf libc6-same (2.0 testing [all])' aptget upgrade -t testing -s
 aptget upgrade -y -qq 2>&1 > /dev/null
 testdpkginstalled libc6-same
 
index b79828a9e1bef993aec302b78c1b59f884c2f137..b6dbe99db4b6193013755ecc33eebd2ec54680f5 100755 (executable)
@@ -95,7 +95,7 @@ E: Trivial Only specified but this is not a trivial operation." aptget install a
 testequal "Reading package lists...
 Building dependency tree...
 Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok'
-Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok-common' because of 'amarok'
+Selected version '2.3.2-2+exp' (experimental [all]) for 'amarok-common' because of 'amarok'
 Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok-utils' because of 'amarok'
 The following extra packages will be installed:
    amarok-common (2.3.2-2+exp)
@@ -117,7 +117,7 @@ E: Trivial Only specified but this is not a trivial operation." aptget install a
 testequal "Reading package lists...
 Building dependency tree...
 Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok-null'
-Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok-common' because of 'amarok-null'
+Selected version '2.3.2-2+exp' (experimental [all]) for 'amarok-common' because of 'amarok-null'
 Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok-utils' because of 'amarok-null'
 The following extra packages will be installed:
    amarok-common (2.3.2-2+exp)
@@ -140,7 +140,7 @@ E: Trivial Only specified but this is not a trivial operation." aptget install a
 testequal "Reading package lists...
 Building dependency tree...
 Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok'
-Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok-common' because of 'amarok'
+Selected version '2.3.2-2+exp' (experimental [all]) for 'amarok-common' because of 'amarok'
 Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok-utils' because of 'amarok'
 Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok-null'
 The following extra packages will be installed:
@@ -170,7 +170,7 @@ Building dependency tree...
 Selected version '2.3.2-2+exp' (experimental2 [i386]) for 'amarok-less'
 Selected version '5:4.6.0+exp' (experimental [i386]) for 'phonon-backend-xine' because of 'amarok-less'
 Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok-higher'
-Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok-common' because of 'amarok-higher'
+Selected version '2.3.2-2+exp' (experimental [all]) for 'amarok-common' because of 'amarok-higher'
 Selected version '5:4.6.0+exp' (experimental [i386]) for 'phonon-backend-xine' because of 'amarok-higher'
 Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok-utils' because of 'amarok-higher'
 The following extra packages will be installed:
@@ -195,7 +195,7 @@ E: Trivial Only specified but this is not a trivial operation." aptget install a
 testequal "Reading package lists...
 Building dependency tree...
 Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok-null2'
-Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok-common' because of 'amarok-null2'
+Selected version '2.3.2-2+exp' (experimental [all]) for 'amarok-common' because of 'amarok-null2'
 Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok-utils' because of 'amarok-null2'
 The following extra packages will be installed:
    amarok-common (2.3.2-2+exp)
@@ -218,7 +218,7 @@ E: Trivial Only specified but this is not a trivial operation." aptget install a
 testequal "Reading package lists...
 Building dependency tree...
 Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok-xine'
-Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok-common' because of 'amarok-xine'
+Selected version '2.3.2-2+exp' (experimental [all]) for 'amarok-common' because of 'amarok-xine'
 Selected version '5:4.6.0+exp' (experimental [i386]) for 'phonon-backend-xine' because of 'amarok-xine'
 Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok-utils' because of 'amarok-xine'
 The following extra packages will be installed:
@@ -242,7 +242,7 @@ E: Trivial Only specified but this is not a trivial operation." aptget install a
 testequal "Reading package lists...
 Building dependency tree...
 Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok-xine2'
-Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok-common' because of 'amarok-xine2'
+Selected version '2.3.2-2+exp' (experimental [all]) for 'amarok-common' because of 'amarok-xine2'
 Selected version '5:4.20.0+exp' (experimental [i386]) for 'phonon-backend-null' because of 'amarok-xine2'
 Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok-utils' because of 'amarok-xine2'
 The following extra packages will be installed:
@@ -266,9 +266,9 @@ E: Trivial Only specified but this is not a trivial operation." aptget install a
 testequal "Reading package lists...
 Building dependency tree...
 Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok-xine3'
-Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok-common' because of 'amarok-xine3'
+Selected version '2.3.2-2+exp' (experimental [all]) for 'amarok-common' because of 'amarok-xine3'
 Selected version '5:4.6.0+exp' (experimental [i386]) for 'phonon-backend-xine3' because of 'amarok-xine3'
-Selected version '2.0' (experimental [i386]) for 'intermediatepkg' because of 'phonon-backend-xine3'
+Selected version '2.0' (experimental [all]) for 'intermediatepkg' because of 'phonon-backend-xine3'
 Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok-utils' because of 'amarok-xine3'
 The following extra packages will be installed:
    amarok-common (2.3.2-2+exp)
@@ -293,7 +293,7 @@ E: Trivial Only specified but this is not a trivial operation." aptget install a
 testequal "Reading package lists...
 Building dependency tree...
 Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok-xine4'
-Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok-common' because of 'amarok-xine4'
+Selected version '2.3.2-2+exp' (experimental [all]) for 'amarok-common' because of 'amarok-xine4'
 Selected version '5:4.20.0+exp' (experimental [i386]) for 'phonon-backend-null' because of 'amarok-xine4'
 Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok-utils' because of 'amarok-xine4'
 The following extra packages will be installed:
@@ -317,7 +317,7 @@ E: Trivial Only specified but this is not a trivial operation." aptget install a
 testequal "Reading package lists...
 Building dependency tree...
 Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok-broken'
-Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok-common' because of 'amarok-broken'
+Selected version '2.3.2-2+exp' (experimental [all]) for 'amarok-common' because of 'amarok-broken'
 Selected version '5:4.20.0+exp' (experimental [i386]) for 'phonon-backend-null' because of 'amarok-broken'
 Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok-utils' because of 'amarok-broken'
 The following extra packages will be installed:
@@ -341,7 +341,7 @@ E: Trivial Only specified but this is not a trivial operation." aptget install a
 testequal "Reading package lists...
 Building dependency tree...
 Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok-recommends'
-Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok-common' because of 'amarok-recommends'
+Selected version '2.3.2-2+exp' (experimental [all]) for 'amarok-common' because of 'amarok-recommends'
 Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok-utils' because of 'amarok-recommends'
 The following extra packages will be installed:
    amarok-common (2.3.2-2+exp)
@@ -364,7 +364,7 @@ E: Trivial Only specified but this is not a trivial operation." aptget install a
 testequal "Reading package lists...
 Building dependency tree...
 Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok-recommends'
-Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok-common' because of 'amarok-recommends'
+Selected version '2.3.2-2+exp' (experimental [all]) for 'amarok-common' because of 'amarok-recommends'
 The following extra packages will be installed:
    amarok-common (2.3.2-2+exp)
 Recommended packages:
@@ -385,7 +385,7 @@ E: Trivial Only specified but this is not a trivial operation." aptget install a
 testequal "Reading package lists...
 Building dependency tree...
 Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok-recommends2'
-Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok-common' because of 'amarok-recommends2'
+Selected version '2.3.2-2+exp' (experimental [all]) for 'amarok-common' because of 'amarok-recommends2'
 The following extra packages will be installed:
    amarok-common (2.3.2-2+exp)
    libc6 (2.11.2-7+sid)
@@ -406,7 +406,7 @@ E: Trivial Only specified but this is not a trivial operation." aptget install a
 # if one depends doesn't work, we don't need to look deeper…
 testequal "Reading package lists...
 Building dependency tree...
-Selected version '1.0' (experimental [i386]) for 'uninstallablepkg'
+Selected version '1.0' (experimental [all]) for 'uninstallablepkg'
 Some packages could not be installed. This may mean that you have
 requested an impossible situation or if you are using the unstable
 distribution that some required packages have not yet been created