summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apt-pkg/sourcelist.cc25
-rw-r--r--doc/sources.list.5.xml8
-rwxr-xr-xtest/integration/test-apt-sources-deb82213
-rw-r--r--test/libapt/sourcelist_test.cc8
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<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
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 @@
<para>Alternatively a rfc822 style format is also supported:
<literallayout>
- 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;