Mercurial > treepkg
changeset 196:86ea689eda5f
Extend debian/control file parser to cope with more real-world file.
Add some test cases.
author | Bernhard Herzog <bh@intevation.de> |
---|---|
date | Fri, 01 Aug 2008 19:54:58 +0000 (2008-08-01) |
parents | e3ab8aca2b08 |
children | bd887d02068a |
files | test/test_debian.py treepkg/debian.py |
diffstat | 2 files changed, 141 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- a/test/test_debian.py Thu Jul 31 10:36:17 2008 +0000 +++ b/test/test_debian.py Fri Aug 01 19:54:58 2008 +0000 @@ -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@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@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@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'])
--- a/treepkg/debian.py Thu Jul 31 10:36:17 2008 +0000 +++ b/treepkg/debian.py Fri Aug 01 19:54:58 2008 +0000 @@ -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:]: