]> git.saurik.com Git - apt.git/blobdiff - apt-pkg/sourcelist.cc
Merge remote-tracking branch 'mvo/feature/apt-show-nice' into debian/experimental...
[apt.git] / apt-pkg / sourcelist.cc
index 4e580ba04f97a515396d9581505fe14366ebf7d8..bbc514f5bbfea60be776b9e9502bde6f9de6089e 100644 (file)
@@ -78,12 +78,9 @@ bool pkgSourceList::Type::ParseStanza(vector<metaIndex *> &List,
 {
    map<string, string> Options;
 
-   string URI = Tags.FindS("URI");
-   if (!FixupURI(URI))
-   {
-      _error->Error(_("Malformed stanza %u in source list %s (URI parse)"),i,Fd.Name().c_str());
-      return false;
-   }
+   string Enabled = Tags.FindS("Enabled");
+   if (Enabled.size() > 0 && StringToBool(Enabled) == false)
+      return true;
    
    // Define external/internal options
    const char* option_deb822[] = { 
@@ -100,20 +97,34 @@ bool pkgSourceList::Type::ParseStanza(vector<metaIndex *> &List,
    string Suite = Tags.FindS("Suites");
    Suite = SubstVar(Suite,"$(ARCH)",_config->Find("APT::Architecture"));
    string const Section = Tags.FindS("Sections");
+   string URIS = Tags.FindS("URIs");
 
+   std::vector<std::string> list_uris = StringSplit(URIS, " ");
    std::vector<std::string> list_dist = StringSplit(Suite, " ");
    std::vector<std::string> list_section = StringSplit(Section, " ");
-   for (std::vector<std::string>::const_iterator I = list_dist.begin();
-        I != list_dist.end(); I++)
+   
+   for (std::vector<std::string>::const_iterator U = list_uris.begin();
+        U != list_uris.end(); U++)
    {
-      for (std::vector<std::string>::const_iterator J = list_section.begin();
-           J != list_section.end(); J++)
+      std::string URI = (*U);
+      if (!FixupURI(URI))
+      {
+         _error->Error(_("Malformed stanza %u in source list %s (URI parse)"),i,Fd.Name().c_str());
+         return false;
+      }
+
+      for (std::vector<std::string>::const_iterator I = list_dist.begin();
+           I != list_dist.end(); I++)
+      {
+         for (std::vector<std::string>::const_iterator J = list_section.begin();
+              J != list_section.end(); J++)
          {
             if (CreateItem(List, URI, (*I), (*J), Options) == false)
             {
                return false;
             }
          }
+      }
    }
    return true;
 }
@@ -376,21 +387,26 @@ int pkgSourceList::ParseFileDeb822(string File)
    // read step by step
    while (Sources.Step(Tags) == true)
    {
-      if(!Tags.Exists("Type")) 
+      if(!Tags.Exists("Types")) 
          continue;
 
-      string const type = Tags.FindS("Type");
-      Type *Parse = Type::GetType(type.c_str());
-      if (Parse == 0)
+      string const types = Tags.FindS("Types");
+      std::vector<std::string> list_types = StringSplit(types, " ");
+      for (std::vector<std::string>::const_iterator I = list_types.begin();
+        I != list_types.end(); I++)
       {
-         _error->Error(_("Type '%s' is not known on stanza %u in source list %s"),type.c_str(),i,Fd.Name().c_str());
-         return -1;
-      }
+         Type *Parse = Type::GetType((*I).c_str());
+         if (Parse == 0)
+         {
+            _error->Error(_("Type '%s' is not known on stanza %u in source list %s"), (*I).c_str(),i,Fd.Name().c_str());
+            return -1;
+         }
          
-      if (!Parse->ParseStanza(SrcList, Tags, i, Fd))
-         return -1;
+         if (!Parse->ParseStanza(SrcList, Tags, i, Fd))
+            return -1;
 
-      i++;
+         i++;
+      }
    }
 
    // we are done, return the number of stanzas read