]> git.saurik.com Git - apt.git/commitdiff
populate the Architecture field for PackageFiles
authorDavid Kalnischkies <david@kalnischkies.de>
Fri, 12 Jun 2015 12:42:17 +0000 (14:42 +0200)
committerDavid Kalnischkies <david@kalnischkies.de>
Mon, 15 Jun 2015 12:39:37 +0000 (14:39 +0200)
This is mainly visible in the policy, so that you can now pin by b= and
let it only effect Packages files of this architecture and hence the
packages coming from it (which do not need to be from this architecture,
but very likely are in a normal repository setup).

If you should pin by architecture in this way is a different question…

Closes: 687255
apt-pkg/deb/debindexfile.cc
apt-pkg/edsp/edspindexfile.cc
apt-pkg/pkgcachegen.cc
apt-pkg/pkgcachegen.h

index 3a79cbc58f0f9d41256200a9bba91393f4572965..f089cda81366a3bbc1de06f57aa7a6b294f43b4b 100644 (file)
@@ -128,7 +128,7 @@ bool debPackagesIndex::Merge(pkgCacheGenerator &Gen,OpProgress *Prog) const
    if (Dist.empty())
       Dist = "/";
    ::URI Tmp(URI);
-   if (Gen.SelectFile(PackageFile, *this, Target.Option(IndexTarget::COMPONENT)) == false)
+   if (Gen.SelectFile(PackageFile, *this, Target.Option(IndexTarget::ARCHITECTURE), Target.Option(IndexTarget::COMPONENT)) == false)
       return _error->Error("Problem with SelectFile %s",PackageFile.c_str());
 
    // Store the IMS information
@@ -203,7 +203,7 @@ bool debTranslationsIndex::Merge(pkgCacheGenerator &Gen,OpProgress *Prog) const
 
      if (Prog != NULL)
        Prog->SubProgress(0, Target.Description);
-     if (Gen.SelectFile(TranslationFile, *this, Target.Option(IndexTarget::COMPONENT), pkgCache::Flag::NotSource) == false)
+     if (Gen.SelectFile(TranslationFile, *this, "", Target.Option(IndexTarget::COMPONENT), pkgCache::Flag::NotSource) == false)
        return _error->Error("Problem with SelectFile %s",TranslationFile.c_str());
 
      // Store the IMS information
@@ -284,7 +284,7 @@ bool debStatusIndex::Merge(pkgCacheGenerator &Gen,OpProgress *Prog) const
 
    if (Prog != NULL)
       Prog->SubProgress(0,File);
-   if (Gen.SelectFile(File, *this, "now", pkgCache::Flag::NotSource) == false)
+   if (Gen.SelectFile(File, *this, "", "now", pkgCache::Flag::NotSource) == false)
       return _error->Error("Problem with SelectFile %s",File.c_str());
 
    // Store the IMS information
@@ -409,7 +409,7 @@ bool debDebPkgFileIndex::Merge(pkgCacheGenerator& Gen, OpProgress* Prog) const
 
    // and give it to the list parser
    debDebFileParser Parser(DebControl, DebFile);
-   if(Gen.SelectFile(DebFile, *this, "now", pkgCache::Flag::LocalSource) == false)
+   if(Gen.SelectFile(DebFile, *this, "", "now", pkgCache::Flag::LocalSource) == false)
       return _error->Error("Problem with SelectFile %s", DebFile.c_str());
 
    pkgCache::PkgFileIterator File = Gen.GetCurFile();
index 43dd44a7964f858fe484189e73fb74210504e970..a2ec0a19bfcc4d2bdcea412ae7df6af3e54390ab 100644 (file)
@@ -49,7 +49,7 @@ bool edspIndex::Merge(pkgCacheGenerator &Gen,OpProgress *Prog) const
 
    if (Prog != NULL)
       Prog->SubProgress(0,File);
-   if (Gen.SelectFile(File, *this, "edsp") == false)
+   if (Gen.SelectFile(File, *this, "", "edsp") == false)
       return _error->Error("Problem with SelectFile %s",File.c_str());
 
    // Store the IMS information
index 9db4ef41f1dc154226ec11075adcb0cef74ea9ad..ea02059447b8089c60b3ef8f6188167caf8b6347 100644 (file)
@@ -1113,6 +1113,7 @@ bool pkgCacheGenerator::SelectReleaseFile(const string &File,const string &Site,
    added versions. The caller is responsible for setting the IMS fields. */
 bool pkgCacheGenerator::SelectFile(std::string const &File,
                                   pkgIndexFile const &Index,
+                                  std::string const &Architecture,
                                   std::string const &Component,
                                   unsigned long const Flags)
 {
@@ -1133,6 +1134,15 @@ bool pkgCacheGenerator::SelectFile(std::string const &File,
    if (unlikely(idxIndexType == 0))
       return false;
    CurrentFile->IndexType = idxIndexType;
+   if (Architecture.empty())
+      CurrentFile->Architecture = 0;
+   else
+   {
+      map_stringitem_t const arch = StoreString(pkgCacheGenerator::MIXED, Architecture);
+      if (unlikely(arch == 0))
+        return false;
+      CurrentFile->Architecture = arch;
+   }
    map_stringitem_t const component = StoreString(pkgCacheGenerator::MIXED, Component);
    if (unlikely(component == 0))
       return false;
index 2795d09d6a45d5188ec1e74cda23fac139c3956e..ade93795bf31a3dc9ac591ef2ca2e1c8d064f391 100644 (file)
@@ -102,7 +102,7 @@ class APT_HIDDEN pkgCacheGenerator                                  /*{{{*/
    inline map_stringitem_t StoreString(enum StringType const type, const std::string &S) {return StoreString(type, S.c_str(),S.length());};
 
    void DropProgress() {Progress = 0;};
-   bool SelectFile(const std::string &File,pkgIndexFile const &Index, std::string const &Component, unsigned long Flags = 0);
+   bool SelectFile(const std::string &File,pkgIndexFile const &Index, std::string const &Architecture, std::string const &Component, unsigned long Flags = 0);
    bool SelectReleaseFile(const std::string &File, const std::string &Site, unsigned long Flags = 0);
    bool MergeList(ListParser &List,pkgCache::VerIterator *Ver = 0);
    inline pkgCache &GetCache() {return Cache;};