# HG changeset patch # User Bernhard Herzog # Date 1211483592 0 # Node ID e83e96ef12b1ebaf0b8365d6a256865d916458c2 # Parent 68d829cac3ff33a30553c01d98c8d6223e296a25 Add treepkg/debian.py and test/test_debian.py with code and tests to extract soem information from debian/control files diff -r 68d829cac3ff -r e83e96ef12b1 test/test_debian.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/test_debian.py Thu May 22 19:13:12 2008 +0000 @@ -0,0 +1,56 @@ +# Copyright (C) 2008 by Intevation GmbH +# Authors: +# Bernhard Herzog +# +# This program is free software under the GPL (>=v2) +# Read the file COPYING coming with the software for details. + +"""Tests for treepkg.debian""" + +import unittest + +from filesupport import FileTestMixin + +from treepkg.debian import DebianControlFile + + +class TestDebianControlFile(unittest.TestCase, FileTestMixin): + + control_contents = """\ +Source: libksba +Section: libs +Priority: optional +Maintainer: Kolab-Konsortium Packager +Uploaders: Removed for the test +Build-Depends: debhelper (>= 4.2), libgpg-error-dev (>= 1.2), bison, autotools-dev, cdbs +Standards-Version: 3.7.2 + +Package: libksba-dev +Section: libdevel +Architecture: any +Depends: libksba8 (>= ${Source-Version}) +Replaces: libksba0 +Description: Test description + Some more text. + . + Development library files. + +Package: libksba8 +Section: libs +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends} +Description: Test description + Some more text. + . + Runtime library files. +""" + + def test(self): + filename = self.create_temp_file(self.id() + "-control", + self.control_contents) + parsed = DebianControlFile(filename) + self.assertEquals(parsed.packages, + [('libksba-dev', 'any'), ('libksba8', 'any')]) + self.assertEquals(parsed.build_depends, + ['debhelper', 'libgpg-error-dev', 'bison', + 'autotools-dev', 'cdbs']) diff -r 68d829cac3ff -r e83e96ef12b1 treepkg/debian.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/treepkg/debian.py Thu May 22 19:13:12 2008 +0000 @@ -0,0 +1,56 @@ +# Copyright (C) 2007, 2008 by Intevation GmbH +# Authors: +# Bernhard Herzog +# +# This program is free software under the GPL (>=v2) +# Read the file COPYING coming with the software for details. + +"""Support code for debian packages""" + +from treepkg.util import extract_value_for_key + + +class DebianControlFile(object): + + """Parses a debian/control file and makes some of it available. + + Instances have the following instance variables: + + packages -- A list of the names of all packages defined in the + control file + + build_depends -- A list with the names of all package listed as + Build-Depends. + """ + + def __init__(self, filename): + """Initialize the instance from a file given by filename""" + self.packages = [] + self.build_depends = [] + 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:] + + self.handle_souce_paragraph(paragraphs[0]) + for paragraph in paragraphs[1:]: + self.handle_package_paragraph(paragraph) + + def handle_souce_paragraph(self, paragraph): + raw_deps = extract_value_for_key(paragraph, "Build-Depends:") + for dep in raw_deps.split(","): + self.build_depends.append(dep.split()[0]) + + def handle_package_paragraph(self, paragraph): + package_name = extract_value_for_key(paragraph, "Package:") + arch = extract_value_for_key(paragraph, "Architecture:") + self.packages.append((package_name, arch)) +