From 75c10df1533ede97e05fef3d1e2fc6a22fc4db00 Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Mon, 20 Jan 2014 08:10:50 +0100 Subject: add support for multiple URIs in deb822 style sources.list --- apt-pkg/sourcelist.cc | 29 ++++++++++++++++++----------- doc/sources.list.5.xml | 4 ++-- test/integration/test-apt-sources-deb822 | 11 ++++++++++- test/libapt/sourcelist_test.cc | 4 ++-- 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 &List, { map 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 &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 list_uris = StringSplit(URIS, " "); std::vector list_dist = StringSplit(Suite, " "); std::vector list_section = StringSplit(Section, " "); - for (std::vector::const_iterator I = list_dist.begin(); - I != list_dist.end(); I++) + + for (std::vector::const_iterator U = list_uris.begin(); + U != list_uris.end(); U++) { - for (std::vector::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::const_iterator I = list_dist.begin(); + I != list_dist.end(); I++) + { + for (std::vector::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 @@ Alternatively a rfc822 style format is also supported: 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" ; -- cgit v1.2.3