[Treepkg-commits] r121 - in trunk: test treepkg
scm-commit@wald.intevation.org
scm-commit at wald.intevation.org
Fri Aug 1 21:54:59 CEST 2008
Author: bh
Date: 2008-08-01 21:54:58 +0200 (Fri, 01 Aug 2008)
New Revision: 121
Modified:
trunk/test/test_debian.py
trunk/treepkg/debian.py
Log:
Extend debian/control file parser to cope with more real-world file.
Add some test cases.
Modified: trunk/test/test_debian.py
===================================================================
--- trunk/test/test_debian.py 2008-07-31 10:36:17 UTC (rev 120)
+++ trunk/test/test_debian.py 2008-08-01 19:54:58 UTC (rev 121)
@@ -53,3 +53,121 @@
self.assertEquals(parsed.build_depends,
['debhelper', 'libgpg-error-dev', 'bison',
'autotools-dev', 'cdbs'])
+
+
+class TestDebianControlFileBuildDepsWithContinuation(unittest.TestCase,
+ FileTestMixin):
+
+ control_contents = """\
+Source: kdebase
+Section: kde
+Priority: optional
+Maintainer: Kolab-Konsortium Packager <packaging at kolab-konsortium.de>
+Build-Depends: cdbs (>= 0.4.51), debhelper (>= 6), quilt, cmake (>= 2.4.5),
+ kdepimlibs5-dev (>= 4:4.0.84), libphonon-dev (>= 4:4.2~),
+ libplasma-dev (>= 4:4.0.84), libqimageblitz-dev (>= 1:0.0.4-2),
+ libsmbclient-dev, libusb-dev, libxkbfile-dev, libraw1394-dev,
+ libstreamanalyzer-dev, libxrender-dev, zlib1g-dev, libglu1-mesa-dev,
+ libpci-dev, libxt-dev, libxext-dev, pkg-config, libglib2.0-dev
+Standards-Version: 3.7.3
+
+Package: kdebase
+Section: kde
+Architecture: all
+Description: base applications from the official KDE release
+"""
+
+ def test(self):
+ filename = self.create_temp_file("control", self.control_contents)
+ parsed = DebianControlFile(filename)
+ self.assertEquals(parsed.packages,
+ [('kdebase', 'all')])
+ self.assertEquals(parsed.build_depends,
+ ['cdbs', 'debhelper', 'quilt', 'cmake',
+ 'kdepimlibs5-dev', 'libphonon-dev', 'libplasma-dev',
+ 'libqimageblitz-dev', 'libsmbclient-dev',
+ 'libusb-dev', 'libxkbfile-dev', 'libraw1394-dev',
+ 'libstreamanalyzer-dev', 'libxrender-dev',
+ 'zlib1g-dev', 'libglu1-mesa-dev', 'libpci-dev',
+ 'libxt-dev', 'libxext-dev', 'pkg-config',
+ 'libglib2.0-dev'])
+
+
+class TestDebianControlFileWithComments(unittest.TestCase, FileTestMixin):
+
+ control_contents = """\
+Source: kdebase
+Section: kde
+Priority: optional
+Maintainer: Kolab-Konsortium Packager <packaging at kolab-konsortium.de>
+Build-Depends: cdbs (>= 0.4.51), debhelper (>= 6), quilt, cmake (>= 2.4.5),
+ kdepimlibs5-dev (>= 4:4.0.84), libphonon-dev (>= 4:4.2~), libplasma-dev (>= 4:4.0.84),
+ libqimageblitz-dev (>= 1:0.0.4-2), libsmbclient-dev, libusb-dev, libxkbfile-dev,
+ libraw1394-dev, libstreamanalyzer-dev, libxrender-dev, zlib1g-dev, libglu1-mesa-dev,
+ libpci-dev, libxt-dev, libxext-dev, pkg-config, libglib2.0-dev
+Standards-Version: 3.7.3
+
+# commented out
+# Package: foo
+# Section: kde
+# Architecture: all
+
+Package: kdebase
+Section: kde
+Architecture: all
+Description: base applications from the official KDE release
+"""
+
+ def test(self):
+ filename = self.create_temp_file("control", self.control_contents)
+ parsed = DebianControlFile(filename)
+ self.assertEquals(parsed.packages,
+ [('kdebase', 'all')])
+ self.assertEquals(parsed.build_depends,
+ ['cdbs', 'debhelper', 'quilt', 'cmake',
+ 'kdepimlibs5-dev', 'libphonon-dev', 'libplasma-dev',
+ 'libqimageblitz-dev', 'libsmbclient-dev',
+ 'libusb-dev', 'libxkbfile-dev', 'libraw1394-dev',
+ 'libstreamanalyzer-dev', 'libxrender-dev',
+ 'zlib1g-dev', 'libglu1-mesa-dev', 'libpci-dev',
+ 'libxt-dev', 'libxext-dev', 'pkg-config',
+ 'libglib2.0-dev'])
+
+
+class TestDebianControlFileWithExtraEmptyLines(unittest.TestCase,
+ FileTestMixin):
+
+ control_contents = """\
+Source: kdebase
+Section: kde
+Priority: optional
+Maintainer: Kolab-Konsortium Packager <packaging at kolab-konsortium.de>
+Build-Depends: cdbs (>= 0.4.51), debhelper (>= 6), quilt, cmake (>= 2.4.5),
+ kdepimlibs5-dev (>= 4:4.0.84), libphonon-dev (>= 4:4.2~), libplasma-dev (>= 4:4.0.84),
+ libqimageblitz-dev (>= 1:0.0.4-2), libsmbclient-dev, libusb-dev, libxkbfile-dev,
+ libraw1394-dev, libstreamanalyzer-dev, libxrender-dev, zlib1g-dev, libglu1-mesa-dev,
+ libpci-dev, libxt-dev, libxext-dev, pkg-config, libglib2.0-dev
+Standards-Version: 3.7.3
+
+
+Package: kdebase
+Section: kde
+Architecture: all
+Description: base applications from the official KDE release
+
+"""
+
+ def test(self):
+ filename = self.create_temp_file("control", self.control_contents)
+ parsed = DebianControlFile(filename)
+ self.assertEquals(parsed.packages,
+ [('kdebase', 'all')])
+ self.assertEquals(parsed.build_depends,
+ ['cdbs', 'debhelper', 'quilt', 'cmake',
+ 'kdepimlibs5-dev', 'libphonon-dev', 'libplasma-dev',
+ 'libqimageblitz-dev', 'libsmbclient-dev',
+ 'libusb-dev', 'libxkbfile-dev', 'libraw1394-dev',
+ 'libstreamanalyzer-dev', 'libxrender-dev',
+ 'zlib1g-dev', 'libglu1-mesa-dev', 'libpci-dev',
+ 'libxt-dev', 'libxext-dev', 'pkg-config',
+ 'libglib2.0-dev'])
Modified: trunk/treepkg/debian.py
===================================================================
--- trunk/treepkg/debian.py 2008-07-31 10:36:17 UTC (rev 120)
+++ trunk/treepkg/debian.py 2008-08-01 19:54:58 UTC (rev 121)
@@ -33,15 +33,29 @@
self.parse(filename)
def parse(self, filename):
- lines = [line.strip() for line in open(filename).readlines()]
- paragraphs = []
- while lines:
- try:
- empty_line = lines.index("")
- except ValueError:
- empty_line = len(lines)
- paragraphs.append(lines[:empty_line])
- lines = lines[empty_line + 1:]
+ paragraph = []
+ paragraphs = [paragraph]
+ for lineno, line in enumerate(open(filename)):
+ stripped = line.strip()
+ if stripped.startswith("#"):
+ continue
+ if not stripped:
+ if paragraph:
+ paragraph = []
+ paragraphs.append(paragraph)
+ else:
+ if line[:1] in " \t":
+ # handle continuation line
+ if paragraph:
+ paragraph[-1] += " " + stripped
+ else:
+ raise RuntimeError("%s:%d: Continuation line without"
+ " preceding line"
+ % (filename, lineno))
+ else:
+ paragraph.append(stripped)
+ if not paragraphs[-1]:
+ del paragraphs[-1]
self.handle_source_paragraph(paragraphs[0])
for paragraph in paragraphs[1:]:
More information about the Treepkg-commits
mailing list