]> git.saurik.com Git - apt.git/commitdiff
add support for multiple URIs in deb822 style sources.list
authorMichael Vogt <mvo@debian.org>
Mon, 20 Jan 2014 07:10:50 +0000 (08:10 +0100)
committerMichael Vogt <mvo@debian.org>
Mon, 20 Jan 2014 07:10:50 +0000 (08:10 +0100)
apt-pkg/sourcelist.cc
doc/sources.list.5.xml
test/integration/test-apt-sources-deb822
test/libapt/sourcelist_test.cc

index 5d41fb00eeeeed71d544ac143260e52b615c165b..3390051491e5463d018f249009b97a7cb52b4407 100644 (file)
@@ -78,13 +78,6 @@ 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;
@@ -104,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;
 }
index a2f6e985eb8dfac45e855368bd8529ceeb256c88..5a421293ee096b19ea558f954e81f0c6e2b8746e 100644 (file)
@@ -84,7 +84,7 @@
    <para>Alternatively a rfc822 style format is also supported:
    <literallayout>
      Type: deb
-     URI: http://example.com
+     URIs: http://example.com
      Suites: stable testing
      Sections: component1 component2
      Description: short
@@ -92,7 +92,7 @@
      [option1]: [option1-value]
 
      Type: deb-src
-     URI: http://example.com
+     URIs: http://example.com
      Suites: stable
      Sections: component1 component2
      Enabled: no
index f461314e6ef7952f810e1ad95959225ec90ff7ba..5c91dd6f5504113dd9147d5790284fc61fc3c629 100755 (executable)
@@ -20,7 +20,7 @@ BASE="# some comment
 #Type: meep
 
 Type: deb
-URI: http://ftp.debian.org/debian
+URIs: http://ftp.debian.org/debian
 Suites: stable
 Sections: main
 Description: summay
@@ -79,3 +79,12 @@ E: The list of sources could not be read."  aptget update --print-uris
 echo "$BASE"  > $SOURCES
 echo "Enabled: no" >> $SOURCES
 testempty aptget update --print-uris
+
+# multiple URIs
+echo "$BASE"  | sed -e 's#http://ftp.debian.org/debian#http://ftp.debian.org/debian http://ftp.de.debian.org/debian#' > $SOURCES
+testequalwithmsg "Multiple URIs work" "'http://ftp.de.debian.org/debian/dists/stable/main/binary-i386/Packages.bz2' ftp.de.debian.org_debian_dists_stable_main_binary-i386_Packages 0 :
+'http://ftp.de.debian.org/debian/dists/stable/main/i18n/Translation-en.bz2' ftp.de.debian.org_debian_dists_stable_main_i18n_Translation-en 0 :
+'http://ftp.de.debian.org/debian/dists/stable/InRelease' ftp.de.debian.org_debian_dists_stable_InRelease 0 
+'http://ftp.debian.org/debian/dists/stable/main/binary-i386/Packages.bz2' ftp.debian.org_debian_dists_stable_main_binary-i386_Packages 0 :
+'http://ftp.debian.org/debian/dists/stable/main/i18n/Translation-en.bz2' ftp.debian.org_debian_dists_stable_main_i18n_Translation-en 0 :
+'http://ftp.debian.org/debian/dists/stable/InRelease' ftp.debian.org_debian_dists_stable_InRelease 0 "  aptget update --print-uris 
index b9dd47207d6add9734c38bec64a6223de8bac6e8..3597b3d583228ac2be1569eba653df177ba81b46 100644 (file)
@@ -23,14 +23,14 @@ int main(int argc, char *argv[])
 {
    const char contents[] = ""
       "Type: deb\n"
-      "URI: http://ftp.debian.org/debian\n"
+      "URIs: http://ftp.debian.org/debian\n"
       "Suites: stable\n"
       "Sections: main\n"
       "Description: short\n"
       " long description that can be very long\n"
       "\n"
       "Type: deb\n"
-      "URI: http://ftp.debian.org/debian\n"
+      "URIs: http://ftp.debian.org/debian\n"
       "Suite: unstable\n"
       "Section: main non-free\n"
       ;