From 7f316a3feab95370f1dd28c08c58bc3c140bf0a0 Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Mon, 20 Jan 2014 08:17:43 +0100 Subject: add support for multipl types in one line --- apt-pkg/sourcelist.cc | 25 +++++++++++++++---------- doc/sources.list.5.xml | 8 ++++---- test/integration/test-apt-sources-deb822 | 13 ++++++++++--- test/libapt/sourcelist_test.cc | 8 ++++---- 4 files changed, 33 insertions(+), 21 deletions(-) diff --git a/apt-pkg/sourcelist.cc b/apt-pkg/sourcelist.cc index 339005149..bbc514f5b 100644 --- a/apt-pkg/sourcelist.cc +++ b/apt-pkg/sourcelist.cc @@ -387,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 list_types = StringSplit(types, " "); + for (std::vector::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 diff --git a/doc/sources.list.5.xml b/doc/sources.list.5.xml index 5a421293e..4d0c4d502 100644 --- a/doc/sources.list.5.xml +++ b/doc/sources.list.5.xml @@ -83,7 +83,7 @@ Alternatively a rfc822 style format is also supported: - Type: deb + Types: deb deb-src URIs: http://example.com Suites: stable testing Sections: component1 component2 @@ -91,9 +91,9 @@ long long long [option1]: [option1-value] - Type: deb-src - URIs: http://example.com - Suites: stable + Types: deb + URIs: http://another.example.com + Suites: experimental Sections: component1 component2 Enabled: no Description: short diff --git a/test/integration/test-apt-sources-deb822 b/test/integration/test-apt-sources-deb822 index 5c91dd6f5..e74fc4cb9 100755 --- a/test/integration/test-apt-sources-deb822 +++ b/test/integration/test-apt-sources-deb822 @@ -17,9 +17,9 @@ testequalwithmsg "Old style sources.list works" "'http://ftp.debian.org/debian/d BASE="# some comment # that contains a : as well -#Type: meep +#Types: meep -Type: deb +Types: deb URIs: http://ftp.debian.org/debian Suites: stable Sections: main @@ -68,7 +68,7 @@ echo "deb http://ftp.debian.org" > $SOURCES testequalwithmsg "Invalid sources.list file gives proper error" "E: Malformed line 1 in source list $TMPWORKINGDIRECTORY/rootdir/etc/apt/sources.list (dist) E: The list of sources could not be read." aptget update --print-uris -echo "Type: deb +echo "Types: deb Suites: stable " > $SOURCES @@ -88,3 +88,10 @@ testequalwithmsg "Multiple URIs work" "'http://ftp.de.debian.org/debian/dists/st '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 + +# multiple Type in one field +echo "$BASE" | sed -e 's#Types: deb#Types: deb deb-src#' > $SOURCES +testequalwithmsg "Multiple Types work" "'http://ftp.debian.org/debian/dists/stable/main/source/Sources.bz2' ftp.debian.org_debian_dists_stable_main_source_Sources 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 3597b3d58..6ab30ba67 100644 --- a/test/libapt/sourcelist_test.cc +++ b/test/libapt/sourcelist_test.cc @@ -22,17 +22,17 @@ void remove_tmpfile(void) int main(int argc, char *argv[]) { const char contents[] = "" - "Type: deb\n" + "Types: deb\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" + "Types: deb\n" "URIs: http://ftp.debian.org/debian\n" - "Suite: unstable\n" - "Section: main non-free\n" + "Suites: unstable\n" + "Sections: main non-free\n" ; FileFd fd; -- cgit v1.2.3