changeset 127:e83e96ef12b1

Add treepkg/debian.py and test/test_debian.py with code and tests to extract soem information from debian/control files
author Bernhard Herzog <bh@intevation.de>
date Thu, 22 May 2008 19:13:12 +0000
parents 68d829cac3ff
children 5155b4f9443d
files test/test_debian.py treepkg/debian.py
diffstat 2 files changed, 112 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /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 <bh@intevation.de>
+#
+# 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 <packaging@kolab-konsortium.de>
+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'])
--- /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 <bh@intevation.de>
+#
+# 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))
+
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)