Просмотр исходного кода

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
David Kalnischkies лет назад: 10
Родитель
Сommit
e21ba62847
2 измененных файлов с 45 добавлено и 4 удалено
  1. 10 4
      apt-pkg/deb/debsrcrecords.cc
  2. 35 0
      test/integration/test-apt-get-build-dep

+ 10 - 4
apt-pkg/deb/debsrcrecords.cc

@@ -33,8 +33,14 @@ using std::max;
 using std::string;
 using std::string;
 
 
 debSrcRecordParser::debSrcRecordParser(std::string const &File,pkgIndexFile const *Index)
 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		/*{{{*/
 // SrcRecordParser::Binaries - Return the binaries field		/*{{{*/
 // ---------------------------------------------------------------------
 // ---------------------------------------------------------------------
@@ -260,7 +266,7 @@ debSrcRecordParser::~debSrcRecordParser()
 
 
 
 
 debDscRecordParser::debDscRecordParser(std::string const &DscFile, pkgIndexFile const *Index)
 debDscRecordParser::debDscRecordParser(std::string const &DscFile, pkgIndexFile const *Index)
-   : debSrcRecordParser(DscFile, Index)
+   : debSrcRecordParser("", Index)
 {
 {
    // support clear signed files
    // support clear signed files
    if (OpenMaybeClearSignedFile(DscFile, Fd) == false)
    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
    // re-init to ensure the updated Fd is used
-   Tags.Init(&Fd);
+   Tags.Init(&Fd, pkgTagFile::SUPPORT_COMMENTS);
    // read the first (and only) record
    // read the first (and only) record
    Step();
    Step();
 
 

+ 35 - 0
test/integration/test-apt-get-build-dep

@@ -9,6 +9,7 @@ configarchitecture 'i386'
 
 
 insertpackage 'stable' 'debhelper' 'i386' '7'
 insertpackage 'stable' 'debhelper' 'i386' '7'
 insertpackage 'stable' 'build-essential' 'i386' '1'
 insertpackage 'stable' 'build-essential' 'i386' '1'
+insertpackage 'stable' 'build-depends' 'i386' '1'
 insertinstalledpackage 'build-conflict' 'i386' '1'
 insertinstalledpackage 'build-conflict' 'i386' '1'
 
 
 setupaptarchive
 setupaptarchive
@@ -149,3 +150,37 @@ E: No architecture information available for armel. See apt.conf(5) APT::Archite
 testfailureequal 'Reading package lists...
 testfailureequal 'Reading package lists...
 Building dependency tree...
 Building dependency tree...
 E: Unable to find a source package for foo' aptget build-dep --simulate foo
 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