summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Kalnischkies <david@kalnischkies.de>2016-01-02 13:19:32 +0100
committerDavid Kalnischkies <david@kalnischkies.de>2016-01-02 16:19:40 +0100
commite21ba62847687b5dc655b28ef7dd67d6eb7336e2 (patch)
tree2a8e27b136138e5ca865373db2dd864c76b4af65
parent55153bf94ff28a23318e79aa48242244c4d82b3c (diff)
support comments in debian/control parsing
Now (55153bf94ff28a23318e79aa48242244c4d82b3c) that pkgTagFile can be told to deal with all sorts of comments we can use this mode to parse dsc (as by catch) and debian/control files properly even in the wake of multiline fields spliced with comments like Build-Depends. Closes: 806775
-rw-r--r--apt-pkg/deb/debsrcrecords.cc14
-rwxr-xr-xtest/integration/test-apt-get-build-dep35
2 files changed, 45 insertions, 4 deletions
diff --git a/apt-pkg/deb/debsrcrecords.cc b/apt-pkg/deb/debsrcrecords.cc
index cef7ad10e..cefaf46ac 100644
--- a/apt-pkg/deb/debsrcrecords.cc
+++ b/apt-pkg/deb/debsrcrecords.cc
@@ -33,8 +33,14 @@ using std::max;
using std::string;
debSrcRecordParser::debSrcRecordParser(std::string const &File,pkgIndexFile const *Index)
- : Parser(Index), d(NULL), Fd(File,FileFd::ReadOnly, FileFd::Extension), Tags(&Fd,102400),
- iOffset(0), Buffer(NULL) {}
+ : Parser(Index), d(NULL), Tags(&Fd), iOffset(0), Buffer(NULL)
+{
+ if (File.empty() == false)
+ {
+ if (Fd.Open(File, FileFd::ReadOnly, FileFd::Extension))
+ Tags.Init(&Fd, 102400);
+ }
+}
// SrcRecordParser::Binaries - Return the binaries field /*{{{*/
// ---------------------------------------------------------------------
@@ -260,7 +266,7 @@ debSrcRecordParser::~debSrcRecordParser()
debDscRecordParser::debDscRecordParser(std::string const &DscFile, pkgIndexFile const *Index)
- : debSrcRecordParser(DscFile, Index)
+ : debSrcRecordParser("", Index)
{
// support clear signed files
if (OpenMaybeClearSignedFile(DscFile, Fd) == false)
@@ -270,7 +276,7 @@ debDscRecordParser::debDscRecordParser(std::string const &DscFile, pkgIndexFile
}
// re-init to ensure the updated Fd is used
- Tags.Init(&Fd);
+ Tags.Init(&Fd, pkgTagFile::SUPPORT_COMMENTS);
// read the first (and only) record
Step();
diff --git a/test/integration/test-apt-get-build-dep b/test/integration/test-apt-get-build-dep
index 3d6550b60..b1c36222a 100755
--- a/test/integration/test-apt-get-build-dep
+++ b/test/integration/test-apt-get-build-dep
@@ -9,6 +9,7 @@ configarchitecture 'i386'
insertpackage 'stable' 'debhelper' 'i386' '7'
insertpackage 'stable' 'build-essential' 'i386' '1'
+insertpackage 'stable' 'build-depends' 'i386' '1'
insertinstalledpackage 'build-conflict' 'i386' '1'
setupaptarchive
@@ -149,3 +150,37 @@ E: No architecture information available for armel. See apt.conf(5) APT::Archite
testfailureequal 'Reading package lists...
Building dependency tree...
E: Unable to find a source package for foo' aptget build-dep --simulate foo
+
+msgmsg 'Test with a dsc' 'with comments'
+cat > comments.dsc <<EOF
+# I love comments
+# I love them so much, I give them their own paragraph
+
+#This is my first package
+Format: 3.0 (native)
+Source: comments
+Binary: comments
+Architecture: all
+Version: 1
+#Version: 2
+Maintainer: Joe Sixpack <joe@example.org>
+Build-Depends: debhelper (>= 5),
+# TODO: add more
+ build-depends (= 1),
+Standards-Version: 3.9.6
+# This is the end…
+
+# or this?
+EOF
+testsuccessequal "Reading package lists...
+Building dependency tree...
+Note, using file './comments.dsc' to get the build dependencies
+The following NEW packages will be installed:
+ build-depends build-essential debhelper
+0 upgraded, 3 newly installed, 0 to remove and 0 not upgraded.
+Inst build-depends (1 stable [i386])
+Inst build-essential (1 stable [i386])
+Inst debhelper (7 stable [i386])
+Conf build-depends (1 stable [i386])
+Conf build-essential (1 stable [i386])
+Conf debhelper (7 stable [i386])" aptget build-dep --simulate ./comments.dsc