# HG changeset patch # User Bernhard Herzog # Date 1212422293 0 # Node ID 2c942b75b98bb2eaddd7a422ee283e7b2255ae68 # Parent 0da76aee803553b094a30b08f63651c095f4c472 Extend the gnupg2 recipe so that it extracts the PKITS log. diff -r 0da76aee8035 -r 2c942b75b98b recipes/gnupg/gnupg2.py --- 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