]> git.saurik.com Git - apt.git/commitdiff
* apt-pkg/deb/deblistparser.cc:
authorDavid Kalnischkies <kalnischkies@gmail.com>
Mon, 28 Mar 2011 10:29:38 +0000 (12:29 +0200)
committerDavid Kalnischkies <kalnischkies@gmail.com>
Mon, 28 Mar 2011 10:29:38 +0000 (12:29 +0200)
  - create foo:any provides for all architectures for an allowed package

apt-pkg/deb/deblistparser.cc
apt-pkg/deb/deblistparser.h
apt-pkg/pkgcache.cc
debian/changelog

index b79cef41c7dbc8914c6a97fa2aebf5fee28e83e5..4be626741e0292bef06738ac7cad3c2bfbb8a14a 100644 (file)
@@ -632,7 +632,7 @@ bool debListParser::ParseDepends(pkgCache::VerIterator &Ver,
 
    while (1)
    {
-      Start = ParseDepends(Start,Stop,Package,Version,Op);
+      Start = ParseDepends(Start,Stop,Package,Version,Op,false,!MultiArchEnabled);
       if (Start == 0)
         return _error->Error("Problem parsing dependency %s",Tag);
 
@@ -685,27 +685,28 @@ bool debListParser::ParseProvides(pkgCache::VerIterator &Ver)
       }
    }
 
-   if (Ver->MultiArch == pkgCache::Version::Allowed || Ver->MultiArch == pkgCache::Version::AllAllowed)
+   if (MultiArchEnabled == false)
+      return true;
+   else 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());
+      return NewProvidesAllArch(Ver, Package, Ver.VerStr());
    }
+   else if (Ver->MultiArch == pkgCache::Version::Foreign || Ver->MultiArch == pkgCache::Version::AllForeign)
+      return NewProvidesAllArch(Ver, Ver.ParentPkg().Name(), Ver.VerStr());
 
-   if (Ver->MultiArch != pkgCache::Version::Foreign && Ver->MultiArch != pkgCache::Version::AllForeign)
-      return true;
-
-   if (MultiArchEnabled == false)
-      return true;
-
-   string const Package = Ver.ParentPkg().Name();
-   string const Version = Ver.VerStr();
+   return true;
+}
+                                                                       /*}}}*/
+// ListParser::NewProvides - add provides for all architectures                /*{{{*/
+bool debListParser::NewProvidesAllArch(pkgCache::VerIterator &Ver, string const &Package,
+                               string const &Version) {
    for (std::vector<string>::const_iterator a = Architectures.begin();
        a != Architectures.end(); ++a)
    {
       if (NewProvides(Ver, Package, *a, Version) == false)
         return false;
    }
-
    return true;
 }
                                                                        /*}}}*/
index 06ea7329126e46bc2493d997d72b9e8a0af70eeb..d62ce641cc59888427c3683abf8907eba4e8f59e 100644 (file)
@@ -40,6 +40,7 @@ class debListParser : public pkgCacheGenerator::ListParser
    bool ParseDepends(pkgCache::VerIterator &Ver,const char *Tag,
                     unsigned int Type);
    bool ParseProvides(pkgCache::VerIterator &Ver);
+   bool NewProvidesAllArch(pkgCache::VerIterator &Ver, string const &Package, string const &Version);
    static bool GrabWord(string Word,WordList *List,unsigned char &Out);
    
    public:
index dbcbd9c26a6990b2eb1e793c5b2e31846ba150a5..c6326abf12fb2d98b67d4e73a3b5433668e2c52d 100644 (file)
@@ -317,6 +317,11 @@ pkgCache::PkgIterator pkgCache::GrpIterator::FindPkg(string Arch) const {
        if (unlikely(IsGood() == false || S->FirstPackage == 0))
                return PkgIterator(*Owner, 0);
 
+       /* If we accept any package we simply return the "first"
+          package in this group (the last one added). */
+       if (Arch == "any")
+               return PkgIterator(*Owner, Owner->PkgP + S->FirstPackage);
+
        static string const myArch = _config->Find("APT::Architecture");
        /* Most of the time the package for our native architecture is
           the one we add at first to the cache, but this would be the
@@ -328,11 +333,6 @@ pkgCache::PkgIterator pkgCache::GrpIterator::FindPkg(string Arch) const {
                        return PkgIterator(*Owner, Pkg);
        }
 
-       /* If we accept any package we simply return the "first"
-          package in this group (the last one added). */
-       if (Arch == "any")
-               return PkgIterator(*Owner, Owner->PkgP + S->FirstPackage);
-
        /* Iterate over the list to find the matching arch
           unfortunately this list includes "package noise"
           (= different packages with same calculated hash),
index 8e15a806053734ed0383a52269f26ceb232d95bd..774975050e2912782c0f2503a88aec4f5cf3a0ae 100644 (file)
@@ -27,8 +27,10 @@ apt (0.8.13.1) UNRELEASED; urgency=low
       if non is specified with APT::Architectures (Closes: #612958)
   * cmdline/apt-get.cc:
     - do not show simulation notice for non-root commands (Closes: #619072)
+  * apt-pkg/deb/deblistparser.cc:
+    - create foo:any provides for all architectures for an allowed package
 
- -- David Kalnischkies <kalnischkies@gmail.com>  Sat, 26 Mar 2011 12:53:00 +0100
+ -- David Kalnischkies <kalnischkies@gmail.com>  Mon, 28 Mar 2011 12:28:21 +0200
 
 apt (0.8.13) unstable; urgency=low