changeset 141:2c942b75b98b

Extend the gnupg2 recipe so that it extracts the PKITS log.
author Bernhard Herzog <bh@intevation.de>
date Mon, 02 Jun 2008 15:58:13 +0000
parents 0da76aee8035
children 1dcddaacf12e
files recipes/gnupg/gnupg2.py
diffstat 1 files changed, 71 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/recipes/gnupg/gnupg2.py	Mon Jun 02 15:46:41 2008 +0000
+++ b/recipes/gnupg/gnupg2.py	Mon Jun 02 15:58:13 2008 +0000
@@ -7,5 +7,76 @@
 
 """Recipe to build gnugp2 from SVN"""
 
+import os
+import shutil
+import logging
+import re
+
+import treepkg.packager
+import treepkg.util
+
 import base
 base.define_gnupg_packager("gnupg2")
+
+
+class BinaryPackager(treepkg.packager.BinaryPackager):
+
+    pkits_log = treepkg.packager._fromparent("pkits_log")
+
+    def package(self):
+        self.status.creating_binary_package()
+        treepkg.util.ensure_directory(self.binary_dir)
+        self.create_pkits_workdir()
+        try:
+            logging.info("Building binary package; logging to %r", self.logfile)
+            extra_env=dict(GNUPG_PKITS_DIRECTORY=self.pkits_workdir)
+            self.track.builder.build(self.dsc_file, self.binary_dir, self.logfile,
+                                     bindmounts=[self.pkits_workdir],
+                                     extra_packages=["bzip2"],
+                                     extra_env=extra_env)
+            self.extract_pkits_log()
+        finally:
+            self.remove_pkits_workdir()
+        self.status.binary_package_created()
+
+    def create_pkits_workdir(self):
+        self.pkits_workdir = os.path.join(self.parent.base_dir, "pkits-work")
+        treepkg.util.ensure_directory(self.pkits_workdir)
+        shutil.copy(os.path.join(self.track.checkout_dir, "tests", "pkits",
+                                 "PKITS_data.tar.bz2"),
+                    self.pkits_workdir)
+
+    def remove_pkits_workdir(self):
+        shutil.rmtree(self.pkits_workdir)
+
+    def extract_pkits_log(self):
+        testlog = None
+        for line in open(self.logfile):
+            if re.match("--------- END PKITS LOG ---------", line):
+                break
+            elif re.match("-------- BEGIN PKITS LOG --------", line):
+                testlog = []
+            elif testlog is not None and line[:1] in "0123456789":
+                testlog.append(line)
+        else:
+            logging.info("Could not find PKITS LOG in %s", self.logfile)
+            return
+        treepkg.util.ensure_directory(os.path.dirname(self.pkits_log))
+        outfile = open(self.pkits_log, "w")
+        outfile.writelines(testlog)
+        outfile.close()
+
+
+class RevisionPackager(treepkg.packager.RevisionPackager):
+
+    source_packager_cls = SourcePackager
+    binary_packager_cls = BinaryPackager
+
+    pkits_log = treepkg.packager._filenameproperty("pkits_log.txt",
+                                                   dir_attr="log_dir")
+
+    def list_log_files(self):
+        files = super(RevisionPackager, self).list_log_files()
+        if os.path.exists(self.pkits_log):
+            files.append(("PKITS log", self.pkits_log))
+        return files
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)