]> git.saurik.com Git - apt.git/blobdiff - apt-pkg/deb/debmetaindex.cc
allow repositories to forbid arch:all for specific index targets
[apt.git] / apt-pkg / deb / debmetaindex.cc
index c8026aedf72b6763bad996807645af5e163c890d..46a9f9c9740aa56355d53aedcafaf04b396529bb 100644 (file)
@@ -50,6 +50,7 @@ class APT_HIDDEN debReleaseIndexPrivate                                       /*{{{*/
    time_t ValidUntilMax;
 
    std::vector<std::string> Architectures;
+   std::vector<std::string> NoSupportForAll;
 
    debReleaseIndexPrivate() : CheckValidUntil(metaIndex::TRI_UNSET), ValidUntilMin(0), ValidUntilMax(0) {}
 };
@@ -346,6 +347,11 @@ bool debReleaseIndex::Load(std::string const &Filename, std::string * const Erro
       if (archs.empty() == false)
         d->Architectures = VectorizeString(archs, ' ');
    }
+   {
+      std::string const targets = Section.FindS("No-Support-for-Architecture-all");
+      if (targets.empty() == false)
+        d->NoSupportForAll = VectorizeString(targets, ' ');
+   }
 
    bool FoundHashSum = false;
    bool FoundStrongHashSum = false;
@@ -624,6 +630,13 @@ bool debReleaseIndex::IsArchitectureSupported(std::string const &arch) const/*{{
    return std::find(d->Architectures.begin(), d->Architectures.end(), arch) != d->Architectures.end();
 }
                                                                        /*}}}*/
+bool debReleaseIndex::IsArchitectureAllSupportedFor(IndexTarget const &target) const/*{{{*/
+{
+   if (d->NoSupportForAll.empty())
+      return true;
+   return std::find(d->NoSupportForAll.begin(), d->NoSupportForAll.end(), target.Option(IndexTarget::CREATED_BY)) == d->NoSupportForAll.end();
+}
+                                                                       /*}}}*/
 std::vector <pkgIndexFile *> *debReleaseIndex::GetIndexFiles()         /*{{{*/
 {
    if (Indexes != NULL)