summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Vogt <mvo@debian.org>2014-01-20 08:10:50 +0100
committerMichael Vogt <mvo@debian.org>2014-01-20 08:10:50 +0100
commit75c10df1533ede97e05fef3d1e2fc6a22fc4db00 (patch)
tree2df3cde9610b399fa236e021d92d6e97ae798fec
parent7dd62ea93413a73b4ec394b16ff4e0367d226395 (diff)
add support for multiple URIs in deb822 style sources.list
-rw-r--r--apt-pkg/sourcelist.cc29
-rw-r--r--doc/sources.list.5.xml4
-rwxr-xr-xtest/integration/test-apt-sources-deb82211
-rw-r--r--test/libapt/sourcelist_test.cc4
4 files changed, 32 insertions, 16 deletions
diff --git a/apt-pkg/sourcelist.cc b/apt-pkg/sourcelist.cc
index 5d41fb00e..339005149 100644
--- a/apt-pkg/sourcelist.cc
+++ b/apt-pkg/sourcelist.cc
@@ -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;
}
diff --git a/doc/sources.list.5.xml b/doc/sources.list.5.xml
index a2f6e985e..5a421293e 100644
--- a/doc/sources.list.5.xml
+++ b/doc/sources.list.5.xml
@@ -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
diff --git a/test/integration/test-apt-sources-deb822 b/test/integration/test-apt-sources-deb822
index f461314e6..5c91dd6f5 100755
--- a/test/integration/test-apt-sources-deb822
+++ b/test/integration/test-apt-sources-deb822
@@ -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
diff --git a/test/libapt/sourcelist_test.cc b/test/libapt/sourcelist_test.cc
index b9dd47207..3597b3d58 100644
--- a/test/libapt/sourcelist_test.cc
+++ b/test/libapt/sourcelist_test.cc
@@ -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"
;