[elbe-devel] [PATCH v4 27/41] Validation and report now use logging
dion at linutronix.de
dion at linutronix.de
Mon Jul 8 17:18:23 CEST 2019
From: Olivier Dion <dion at linutronix.de>
Remove logpath from ElbeProject.__init__ since all callees have
removed their dependency from the asciidoclog object.
logging in check_full_pkgs is made through the 'validation' logger
logging in elbe_report is made through the 'report' logger
logging in elbeproject is using the new logging system since all
dependencies have been resolved at this point.
Signed-off-by: Olivier Dion <dion at linutronix.de>
---
elbepack/commands/buildchroot.py | 2 +-
elbepack/commands/hdimg.py | 2 +-
elbepack/commands/mkcdrom.py | 2 +-
elbepack/dump.py | 100 +++++++++----------
elbepack/elbeproject.py | 201 ++++++++++++++++++---------------------
5 files changed, 138 insertions(+), 169 deletions(-)
diff --git a/elbepack/commands/buildchroot.py b/elbepack/commands/buildchroot.py
index 2e32b14e..6af2fd03 100644
--- a/elbepack/commands/buildchroot.py
+++ b/elbepack/commands/buildchroot.py
@@ -92,7 +92,7 @@ def run_command(argv):
with elbe_logging({"files": opt.output}):
try:
- project = ElbeProject(opt.target, args[0], opt.output, opt.name,
+ project = ElbeProject(opt.target, args[0], opt.name,
opt.buildtype, opt.skip_validation)
except ValidationError:
logging.exception("XML validation failed. Bailing out")
diff --git a/elbepack/commands/hdimg.py b/elbepack/commands/hdimg.py
index ecb40189..252c9e8d 100644
--- a/elbepack/commands/hdimg.py
+++ b/elbepack/commands/hdimg.py
@@ -71,7 +71,7 @@ def run_command(argv):
try:
project = ElbeProject(opt.target,
override_buildtype=opt.buildtype,
- xmlpath=args[0], logpath=opt.output,
+ xmlpath=args[0],
skip_validate=opt.skip_validation)
except ValidationError:
logging.exception("XML validation failed. Bailing out")
diff --git a/elbepack/commands/mkcdrom.py b/elbepack/commands/mkcdrom.py
index 93510273..35b3adb6 100644
--- a/elbepack/commands/mkcdrom.py
+++ b/elbepack/commands/mkcdrom.py
@@ -66,7 +66,7 @@ def run_command(argv):
if not opt.rfs_only:
try:
- project = ElbeProject(args[0], logpath=opt.log,
+ project = ElbeProject(args[0],
override_buildtype=opt.buildtype,
skip_validate=opt.skip_validation)
except ValidationError:
diff --git a/elbepack/dump.py b/elbepack/dump.py
index 20b0bf4b..10df28e8 100644
--- a/elbepack/dump.py
+++ b/elbepack/dump.py
@@ -6,16 +6,20 @@
# SPDX-License-Identifier: GPL-3.0-or-later
import warnings
+import logging
+
from datetime import datetime
from apt import Cache
-from elbepack.asciidoclog import ASCIIDocLog
from elbepack.finetuning import do_finetuning
from elbepack.filesystem import hostfs
from elbepack.version import elbe_version
from elbepack.aptpkgutils import APTPackage
+from elbepack.shellhelper import do
+report = logging.getLogger("report")
+validation = logging.getLogger("validation")
def get_initvm_pkglist():
with warnings.catch_warnings():
@@ -73,15 +77,14 @@ def dump_initvmpkgs(xml):
pass
-def check_full_pkgs(pkgs, fullpkgs, errorname, cache):
+def check_full_pkgs(pkgs, fullpkgs, cache):
# pylint: disable=too-many-statements
# pylint: disable=too-many-branches
- elog = ASCIIDocLog(errorname, True)
- elog.h1("ELBE Package validation")
- elog.h2("Package List validation")
+ validation.info("ELBE Package validation")
+ validation.info("Package List validation")
errors = 0
@@ -90,31 +93,31 @@ def check_full_pkgs(pkgs, fullpkgs, errorname, cache):
name = p.et.text
nomulti_name = name.split(":")[0]
if not cache.has_pkg(nomulti_name):
- elog.printo("- package %s does not exist" % nomulti_name)
+ validation.error("- package %s does not exist" % nomulti_name)
errors += 1
continue
if not cache.is_installed(nomulti_name):
- elog.printo("- package %s is not installed" % nomulti_name)
+ validation.error("- package %s is not installed" % nomulti_name)
errors += 1
continue
ver = p.et.get('version')
pkg = cache.get_pkg(nomulti_name)
if ver and (pkg.installed_version != ver):
- elog.printo(
+ validation.error(
"- package %s version %s does not match installed version %s" %
(name, ver, pkg.installed_version))
errors += 1
continue
if errors == 0:
- elog.printo("No Errors found")
+ validation.info("No Errors found")
if not fullpkgs:
return
- elog.h2("Full Packagelist validation")
+ validation.info("Full Packagelist validation")
errors = 0
pindex = {}
@@ -126,95 +129,88 @@ def check_full_pkgs(pkgs, fullpkgs, errorname, cache):
pindex[name] = p
if not cache.has_pkg(name):
- elog.printo("- package %s does not exist" % name)
+ validation.error("- package %s does not exist" % name)
errors += 1
continue
if not cache.is_installed(name):
- elog.printo("- package %s is not installed" % name)
+ validation.error("- package %s is not installed" % name)
errors += 1
continue
pkg = cache.get_pkg(name)
if pkg.installed_version != ver:
- elog.printo(
+ validation.error(
"- package %s version %s does not match installed version %s" %
(name, ver, pkg.installed_version))
errors += 1
continue
if pkg.installed_md5 != md5:
- elog.printo("- package %s md5 %s does not match installed md5 %s" %
+ validation.error("- package %s md5 %s does not match installed md5 %s" %
(name, md5, pkg.installed_md5))
errors += 1
for cp in cache.get_installed_pkgs():
if cp.name not in pindex:
- elog.printo(
+ validation.error(
"additional package %s installed, that was not requested" %
cp.name)
errors += 1
if errors == 0:
- elog.printo("No Errors found")
+ validation.info("No Errors found")
-def elbe_report(xml, buildenv, cache, reportname, errorname, targetfs):
+def elbe_report(xml, buildenv, cache, targetfs):
# pylint: disable=too-many-arguments
# pylint: disable=too-many-locals
# pylint: disable=too-many-statements
# pylint: disable=too-many-branches
- outf = ASCIIDocLog(reportname)
rfs = buildenv.rfs
- outf.h1("ELBE Report for Project " + xml.text("project/name"))
+ report.info("ELBE Report for Project " + xml.text("project/name"))
- outf.printo(
+ report.info(
"report timestamp: " +
datetime.now().strftime("%Y%m%d-%H%M%S"))
- outf.printo("elbe: %s" % str(elbe_version))
+ report.info("elbe: %s" % str(elbe_version))
slist = rfs.read_file('etc/apt/sources.list')
- outf.h2("Apt Sources dump")
- outf.verbatim_start()
- outf.print_raw(slist)
- outf.verbatim_end()
+ report.info("Apt Sources dump")
+ report.info(slist)
try:
prefs = rfs.read_file("etc/apt/preferences")
except IOError:
prefs = ""
- outf.h2("Apt Preferences dump")
- outf.verbatim_start()
- outf.print_raw(prefs)
- outf.verbatim_end()
+ report.info("Apt Preferences dump")
+ if prefs:
+ report.info(prefs)
- outf.h2("Installed Packages List")
- outf.table()
+ report.info("Installed Packages List")
instpkgs = cache.get_installed_pkgs()
for p in instpkgs:
- outf.printo("|%s|%s|%s" % (p.name, p.installed_version, p.origin))
- outf.table()
+ report.info("|%s|%s|%s" % (p.name, p.installed_version, p.origin))
index = cache.get_fileindex()
mt_index = targetfs.mtime_snap()
- outf.h2("archive extract")
+ report.info("Archive extract")
if xml.has("archive") and not xml.text("archive") is None:
with xml.archive_tmpfile() as fp:
- outf.do('tar xvfj "%s" -h -C "%s"' % (fp.name, targetfs.path))
+ do('tar xvfj "%s" -h -C "%s"' % (fp.name, targetfs.path))
mt_index_postarch = targetfs.mtime_snap()
else:
mt_index_postarch = mt_index
- outf.h2("finetuning log")
- outf.verbatim_start()
+ report.info("Finetuning log")
if xml.has("target/finetuning"):
do_finetuning(xml, buildenv, targetfs)
@@ -222,10 +218,9 @@ def elbe_report(xml, buildenv, cache, reportname, errorname, targetfs):
else:
mt_index_post_fine = mt_index_postarch
- outf.verbatim_end()
- outf.h2("fileslist")
- outf.table()
+
+ report.info("Fileslist")
tgt_pkg_list = set()
@@ -250,23 +245,20 @@ def elbe_report(xml, buildenv, cache, reportname, errorname, targetfs):
pkg = "added in finetuning"
# else leave pkg as is
- outf.printo("|+%s+|%s" % (fpath, pkg))
+ report.info("|+%s+|%s" % (fpath, pkg))
- outf.table()
- outf.h2("Deleted Files")
- outf.table()
+ report.info("Deleted Files")
for fpath in list(mt_index.keys()):
if fpath not in mt_index_post_fine:
if fpath in index:
pkg = index[fpath]
else:
pkg = "postinst generated"
- outf.printo("|+%s+|%s" % (fpath, pkg))
- outf.table()
+ report.info("|+%s+|%s" % (fpath, pkg))
+
+ report.info("Target Package List")
- outf.h2("Target Package List")
- outf.table()
instpkgs = cache.get_installed_pkgs()
pkgindex = {}
for p in instpkgs:
@@ -277,7 +269,7 @@ def elbe_report(xml, buildenv, cache, reportname, errorname, targetfs):
f = targetfs.open('etc/elbe_pkglist', 'w')
for pkg in tgt_pkg_list:
p = pkgindex[pkg]
- outf.printo(
+ report.info(
"|%s|%s|%s|%s" %
(p.name,
p.installed_version,
@@ -289,7 +281,6 @@ def elbe_report(xml, buildenv, cache, reportname, errorname, targetfs):
(p.name,
p.installed_version,
p.installed_md5))
- outf.table()
if xml.has("target/pkgversionlist"):
f.close()
@@ -297,9 +288,8 @@ def elbe_report(xml, buildenv, cache, reportname, errorname, targetfs):
if not xml.has("archive") or xml.text("archive") is None:
return
- elog = ASCIIDocLog(errorname, True)
- elog.h1("Archive validation")
+ validation.info("Archive validation")
errors = 0
@@ -307,15 +297,15 @@ def elbe_report(xml, buildenv, cache, reportname, errorname, targetfs):
if fpath not in mt_index or \
mt_index_postarch[fpath] != mt_index[fpath]:
if fpath not in mt_index_post_fine:
- elog.printo(
+ validation.error(
"- archive file %s deleted in finetuning" %
fpath)
errors += 1
elif mt_index_post_fine[fpath] != mt_index_postarch[fpath]:
- elog.printo(
+ validation.error(
"- archive file %s modified in finetuning" %
fpath)
errors += 1
if errors == 0:
- elog.printo("No Errors found")
+ validation.info("No Errors found")
diff --git a/elbepack/elbeproject.py b/elbepack/elbeproject.py
index cb08032d..64a2850e 100644
--- a/elbepack/elbeproject.py
+++ b/elbepack/elbeproject.py
@@ -12,9 +12,9 @@ import sys
import os
import datetime
import io
+import logging
-from elbepack.asciidoclog import ASCIIDocLog, StdoutLog
-from elbepack.shellhelper import CommandError
+from elbepack.shellhelper import CommandError, do
from elbepack.elbexml import (ElbeXML, NoInitvmNode,
ValidationError, ValidationMode)
@@ -39,6 +39,9 @@ from elbepack.templates import write_pack_template
from elbepack.finetuning import do_prj_finetuning
+validation = logging.getLogger("validation")
+
+
class IncompatibleArchitectureException(Exception):
def __init__(self, oldarch, newarch):
Exception.__init__(
@@ -116,7 +119,6 @@ class ElbeProject (object):
self,
builddir,
xmlpath=None,
- logpath=None,
name=None,
override_buildtype=None,
skip_validate=False,
@@ -181,13 +183,6 @@ class ElbeProject (object):
if not self.name:
self.name = self.xml.text("project/name")
- # If logpath is given, use an AsciiDocLog instance, otherwise log
- # to stdout
- if logpath:
- self.log = ASCIIDocLog(logpath)
- else:
- self.log = StdoutLog()
-
self.repo = ProjectRepo(self.arch, self.codename,
os.path.join(self.builddir, "repo"))
@@ -211,13 +206,13 @@ class ElbeProject (object):
# each time, because the pkglist including the -dev packages is
# tracked nowhere.
self.sysrootenv = None
- self.log.do('rm -rf %s' % self.sysrootpath)
+ do('rm -rf %s' % self.sysrootpath)
# same for host_sysroot instance recreate it in any case
self.host_sysrootenv = None
def build_chroottarball(self):
- self.log.do("tar cJf %s/chroot.tar.xz \
+ do("tar cJf %s/chroot.tar.xz \
--exclude=./tmp/* --exclude=./dev/* \
--exclude=./run/* --exclude=./sys/* \
--exclude=./proc/* --exclude=./var/cache/* \
@@ -247,7 +242,7 @@ class ElbeProject (object):
def build_sysroot(self):
- self.log.do('rm -rf %s; mkdir "%s"' % (self.sysrootpath,
+ do('rm -rf %s; mkdir "%s"' % (self.sysrootpath,
self.sysrootpath))
self.sysrootenv = BuildEnv(self.xml,
@@ -255,7 +250,7 @@ class ElbeProject (object):
clean=True)
# Import keyring
self.sysrootenv.import_keys()
- self.log.printo("Keys imported")
+ logging.info("Keys imported")
self.install_packages(self.sysrootenv, buildenv=False)
@@ -279,36 +274,36 @@ class ElbeProject (object):
env=self.sysrootenv).mark_install_devpkgs(
set(ignore_pkgs), set(ignore_dev_pkgs))
except SystemError as e:
- self.log.printo("mark install devpkgs failed: %s" % str(e))
+ logging.exception("Mark install devpkgs failed")
try:
self.get_rpcaptcache(env=self.sysrootenv).commit()
except SystemError as e:
- self.log.printo("commiting changes failed: %s" % str(e))
+ logging.exception("Commiting changes failed")
raise AptCacheCommitError(str(e))
try:
self.sysrootenv.rfs.dump_elbeversion(self.xml)
except IOError:
- self.log.printo("dump elbeversion into sysroot failed")
+ logging.exception("Dump elbeversion into sysroot failed")
sysrootfilelist = os.path.join(self.builddir, "sysroot-filelist")
with self.sysrootenv.rfs:
- self.log.do("chroot %s /usr/bin/symlinks -cr /usr/lib" %
+ do("chroot %s /usr/bin/symlinks -cr /usr/lib" %
self.sysrootpath)
paths = self.get_sysroot_paths()
- self.log.do("rm %s" % sysrootfilelist, allow_fail=True)
+ do("rm %s" % sysrootfilelist, allow_fail=True)
os.chdir(self.sysrootpath)
for p in paths:
- self.log.do('find -path "%s" >> %s' % (p, sysrootfilelist))
+ do('find -path "%s" >> %s' % (p, sysrootfilelist))
- self.log.do("tar cfJ %s/sysroot.tar.xz -C %s -T %s" %
+ do("tar cfJ %s/sysroot.tar.xz -C %s -T %s" %
(self.builddir, self.sysrootpath, sysrootfilelist))
def build_host_sysroot(self, pkgs, hostsysrootpath):
- self.log.do('rm -rf %s; mkdir "%s"' % (hostsysrootpath,
+ do('rm -rf %s; mkdir "%s"' % (hostsysrootpath,
hostsysrootpath))
self.host_sysrootenv = BuildEnv(self.xml,
@@ -317,7 +312,7 @@ class ElbeProject (object):
arch="amd64")
# Import keyring
self.host_sysrootenv.import_keys()
- self.log.printo("Keys imported")
+ logging.info("Keys imported")
with self.host_sysrootenv:
@@ -333,15 +328,14 @@ class ElbeProject (object):
try:
cache.mark_install(p, None)
except KeyError:
- self.log.printo("No Package " + p)
+ logging.exception("No Package %s", p)
except SystemError as e:
- self.log.printo("Error: Unable to correct problems "
- "in package %s (%s)" % (p, str(e)))
+ logging.exception("Error: Unable to correct problems in package %s", p)
try:
cache.commit()
except SystemError as e:
- self.log.printo("commiting changes failed: %s" % str(e))
+ logging.exception("Commiting changes failed")
raise AptCacheCommitError(str(e))
# This is just a sysroot, some directories
@@ -382,8 +376,8 @@ class ElbeProject (object):
# build target sysroot including libs and headers for the target
self.build_sysroot()
sdktargetpath = os.path.join(self.sdkpath, "sysroots", "target")
- self.log.do("mkdir -p %s" % sdktargetpath)
- self.log.do("tar xJf %s/sysroot.tar.xz -C %s" % (self.builddir,
+ do("mkdir -p %s" % sdktargetpath)
+ do("tar xJf %s/sysroot.tar.xz -C %s" % (self.builddir,
sdktargetpath))
# build host sysroot including cross compiler
hostsysrootpath = os.path.join(self.sdkpath, 'sysroots', 'host')
@@ -398,30 +392,30 @@ class ElbeProject (object):
self.sdkpath)
# create sdk tar and append it to setup script
- self.log.do("cd %s; tar cJf ../sdk.txz ." % self.sdkpath)
- self.log.do("cd %s; rm -rf sdk" % self.builddir)
- self.log.do("cd %s; cat sdk.txz >> %s" % (self.builddir, n))
- self.log.do("cd %s; chmod +x %s" % (self.builddir, n))
- self.log.do("cd %s; rm sdk.txz" % self.builddir)
+ do("cd %s; tar cJf ../sdk.txz ." % self.sdkpath)
+ do("cd %s; rm -rf sdk" % self.builddir)
+ do("cd %s; cat sdk.txz >> %s" % (self.builddir, n))
+ do("cd %s; chmod +x %s" % (self.builddir, n))
+ do("cd %s; rm sdk.txz" % self.builddir)
def pbuild(self, p):
self.pdebuild_init()
src_path = os.path.join(self.builddir, "pdebuilder", "current")
src_uri = p.text('.').replace("LOCALMACHINE", "10.0.2.2").strip()
- self.log.printo("retrieve pbuild sources: %s" % src_uri)
+ logging.info("Retrieve pbuild sources: %s" % src_uri)
if p.tag == 'git':
- self.log.do("git clone %s %s" % (src_uri, src_path))
+ do("git clone %s %s" % (src_uri, src_path))
try:
- self.log.do(
+ do(
"cd %s; git reset --hard %s" %
(src_path, p.et.attrib['revision']))
except IndexError:
pass
elif p.tag == 'svn':
- self.log.do("svn co --non-interactive %s %s" % (src_uri, src_path))
+ do("svn co --non-interactive %s %s" % (src_uri, src_path))
else:
- self.log.printo("unknown pbuild source vcs: %s" % p.tag)
+ logging.info("Unknown pbuild source vcs: %s" % p.tag)
# pdebuild_build(-1) means use all cpus
self.pdebuild_build(cpuset=-1, profile="")
@@ -430,8 +424,6 @@ class ElbeProject (object):
build_sources=False, cdrom_size=None):
self.repo_images = []
- elog = ASCIIDocLog(self.validationpath, True)
-
env = None
sysrootstr = ""
if os.path.exists(self.sysrootpath):
@@ -454,7 +446,7 @@ class ElbeProject (object):
init_codename = self.xml.get_initvm_codename()
if build_bin:
- elog.h1("Binary CD %s" % sysrootstr)
+ validation.info("Binary CD %s" % sysrootstr)
self.repo_images += mk_binary_cdrom(env.rfs,
self.arch,
@@ -464,7 +456,7 @@ class ElbeProject (object):
self.builddir,
cdrom_size=cdrom_size)
if build_sources:
- elog.h1("Source CD %s" % sysrootstr)
+ validation.info("Source CD %s" % sysrootstr)
try:
self.repo_images += mk_source_cdrom(env.rfs,
self.arch,
@@ -475,7 +467,7 @@ class ElbeProject (object):
xml=self.xml)
except SystemError as e:
# e.g. no deb-src urls specified
- elog.printo(str(e))
+ validation.exception(str(e))
def build(self, build_bin=False, build_sources=False, cdrom_size=None,
skip_pkglist=False, skip_pbuild=False):
@@ -516,14 +508,14 @@ class ElbeProject (object):
# However, if its not a full_buildenv, we specify clean here,
# so it gets rebuilt properly.
if not self.has_full_buildenv():
- self.log.do('mkdir -p "%s"' % self.chrootpath)
+ do('mkdir -p "%s"' % self.chrootpath)
self.buildenv = BuildEnv(self.xml, self.chrootpath,
build_sources=build_sources, clean=True)
skip_pkglist = False
# Import keyring
self.buildenv.import_keys()
- self.log.printo("Keys imported")
+ logging.info("Keys imported")
# Install packages
if not skip_pkglist:
@@ -532,7 +524,7 @@ class ElbeProject (object):
try:
self.buildenv.rfs.dump_elbeversion(self.xml)
except IOError:
- self.log.printo("dump elbeversion failed")
+ logging.exception("Dump elbeversion failed")
# Extract target FS. We always create a new instance here with
# clean=true, because we want a pristine directory.
@@ -542,21 +534,14 @@ class ElbeProject (object):
extract_target(self.buildenv.rfs, self.xml, self.targetfs,
self.get_rpcaptcache())
- # The validation file is created using check_full_pkgs() and
- # elbe_report(), both opening the file in append mode. So if an
- # old validation file already exists, it must be deleted first.
- if os.path.isfile(self.validationpath):
- os.unlink(self.validationpath)
-
# Package validation and package list
if not skip_pkglist:
pkgs = self.xml.xml.node("/target/pkg-list")
if self.xml.has("fullpkgs"):
check_full_pkgs(pkgs, self.xml.xml.node("/fullpkgs"),
- self.validationpath, self.get_rpcaptcache())
- else:
- check_full_pkgs(pkgs, None, self.validationpath,
self.get_rpcaptcache())
+ else:
+ check_full_pkgs(pkgs, None, self.get_rpcaptcache())
dump_fullpkgs(self.xml, self.buildenv.rfs, self.get_rpcaptcache())
self.xml.dump_elbe_version()
@@ -567,7 +552,7 @@ class ElbeProject (object):
try:
self.targetfs.dump_elbeversion(self.xml)
except MemoryError:
- self.log.printo("dump elbeversion failed")
+ logging.exception("Dump elbeversion failed")
# install packages for buildenv
if not skip_pkglist:
@@ -578,12 +563,11 @@ class ElbeProject (object):
sourcexmlpath = os.path.join(self.builddir, "source.xml")
self.xml.xml.write(sourcexmlpath)
except MemoryError:
- self.log.printo("write source.xml failed (archive to huge?)")
+ logging.exception("Write source.xml failed (archive to huge?)")
# Elbe report
- reportpath = os.path.join(self.builddir, "elbe-report.txt")
elbe_report(self.xml, self.buildenv, self.get_rpcaptcache(),
- reportpath, self.validationpath, self.targetfs)
+ self.targetfs)
# the current license code raises an exception that interrupts the hole
# build if a licence can't be converted to utf-8. Exception handling
@@ -599,8 +583,7 @@ class ElbeProject (object):
self.buildenv.rfs.write_licenses(f,
os.path.join(self.builddir, "licence.xml"))
except Exception:
- self.log.printo("error during generating licence.txt/xml")
- self.log.printo(sys.exc_info()[0])
+ logging.exception("Error during generating licence.txt/xml")
lic_err = True
finally:
f.close()
@@ -626,12 +609,12 @@ class ElbeProject (object):
grub_version = 202
grub_fw_type = "efi"
elif self.get_rpcaptcache().is_installed('grub-legacy'):
- self.log.printo("package grub-legacy is installed, "
+ logging.warning("package grub-legacy is installed, "
"this is obsolete, skipping grub")
grub_version = 0
grub_fw_type = ""
else:
- self.log.printo("package grub-pc is not installed, skipping grub")
+ logging.warning("package grub-pc is not installed, skipping grub")
# version 0 == skip_grub
grub_version = 0
grub_fw_type = ""
@@ -640,8 +623,8 @@ class ElbeProject (object):
self.build_cdroms(build_bin, build_sources, cdrom_size)
if self.postbuild_file:
- self.log.h2("postbuild script:")
- self.log.do(self.postbuild_file + ' "%s %s %s"' % (
+ logging.info("Postbuild script")
+ do(self.postbuild_file + ' "%s %s %s"' % (
self.builddir,
self.xml.text("project/version"),
self.xml.text("project/name")),
@@ -658,27 +641,27 @@ class ElbeProject (object):
def pdebuild_init(self):
# Remove pdebuilder directory, containing last build results
- self.log.do('rm -rf "%s"' % os.path.join(self.builddir,
+ do('rm -rf "%s"' % os.path.join(self.builddir,
"pdebuilder"))
# Remove pbuilder/result directory
- self.log.do('rm -rf "%s"' % os.path.join(self.builddir,
+ do('rm -rf "%s"' % os.path.join(self.builddir,
"pbuilder", "result"))
# Recreate the directories removed
- self.log.do('mkdir -p "%s"' % os.path.join(self.builddir,
+ do('mkdir -p "%s"' % os.path.join(self.builddir,
"pbuilder", "result"))
def pdebuild(self, cpuset, profile):
self.pdebuild_init()
pbdir = os.path.join(self.builddir, "pdebuilder", "current")
- self.log.do('mkdir -p "%s"' % os.path.join(pbdir))
+ do('mkdir -p "%s"' % os.path.join(pbdir))
try:
for orig_fname in self.orig_files:
ofname = os.path.join(self.builddir, orig_fname)
- self.log.do('mv "%s" "%s"' % (ofname,
+ do('mv "%s" "%s"' % (ofname,
os.path.join(self.builddir,
"pdebuilder")))
finally:
@@ -686,7 +669,7 @@ class ElbeProject (object):
self.orig_files = []
# Untar current_pdebuild.tar.gz into pdebuilder/current
- self.log.do(
+ do(
'tar xfz "%s" -C "%s"' %
(os.path.join(
self.builddir,
@@ -708,7 +691,7 @@ class ElbeProject (object):
cpuset_cmd = ''
try:
- self.log.do('cd "%s"; %s pdebuild --debbuildopts "-j%s -sa" '
+ do('cd "%s"; %s pdebuild --debbuildopts "-j%s -sa" '
'--configfile "%s" '
'--use-pdebuild-internal --buildresult "%s"' % (
os.path.join(self.builddir,
@@ -729,13 +712,12 @@ class ElbeProject (object):
self.repo.include(os.path.join(self.builddir,
"pbuilder", "result", "*.changes"))
except CommandError:
- self.log.printo('')
- self.log.printo('Package fails to build.')
- self.log.printo('Please make sure, that the submitted package '
- 'builds in pbuilder')
+ logging.exception("Package fails to build.\n"
+ "Please make sure, that the submited package "
+ "builds in pbuilder")
def update_pbuilder(self):
- self.log.do(
+ do(
'pbuilder --update --configfile "%s" --aptconfdir "%s"' %
(os.path.join(
self.builddir, "pbuilderrc"), os.path.join(
@@ -743,22 +725,22 @@ class ElbeProject (object):
def create_pbuilder(self):
# Remove old pbuilder directory, if it exists
- self.log.do('rm -rf "%s"' % os.path.join(self.builddir, "pbuilder"))
+ do('rm -rf "%s"' % os.path.join(self.builddir, "pbuilder"))
# make hooks.d and pbuilder directory
- self.log.do(
+ do(
'mkdir -p "%s"' %
os.path.join(
self.builddir,
"pbuilder",
"hooks.d"))
- self.log.do(
+ do(
'mkdir -p "%s"' %
os.path.join(
self.builddir,
"pbuilder",
"aptcache"))
- self.log.do(
+ do(
'mkdir -p "%s"' %
os.path.join(
self.builddir,
@@ -769,7 +751,7 @@ class ElbeProject (object):
pbuilder_write_config(self.builddir, self.xml)
pbuilder_write_apt_conf(self.builddir, self.xml)
pbuilder_write_repo_hook(self.builddir, self.xml)
- self.log.do(
+ do(
'chmod -R 755 "%s"' %
os.path.join(
self.builddir,
@@ -777,7 +759,7 @@ class ElbeProject (object):
"hooks.d"))
# Run pbuilder --create
- self.log.do('pbuilder --create --configfile "%s" --aptconfdir "%s" '
+ do('pbuilder --create --configfile "%s" --aptconfdir "%s" '
'--debootstrapopts --include="git gnupg2"' % (
os.path.join(self.builddir, "pbuilderrc"),
os.path.join(self.builddir, "aptconfdir")))
@@ -787,7 +769,7 @@ class ElbeProject (object):
sourcexmlpath = os.path.join(self.builddir, "source.xml")
self.xml.xml.write(sourcexmlpath)
except MemoryError:
- self.log.printo("write source.xml failed (archive to huge?)")
+ logging.exception("write source.xml failed (archive to huge?)")
def get_rpcaptcache(self, env=None, norecommend=None):
if not env:
@@ -820,7 +802,7 @@ class ElbeProject (object):
if os.path.isfile(elbeversionpath):
return True
- self.log.printo("%s exists, but it does not have "
+ logging.warning("%s exists, but it does not have "
"an etc/elbe_version file." % self.chrootpath)
# Apparently we do not have a functional build environment
return False
@@ -850,7 +832,7 @@ class ElbeProject (object):
# each time, because the pkglist including the -dev packages is
# tracked nowhere.
self.sysrootenv = None
- self.log.do('rm -rf %s' % self.sysrootpath)
+ do('rm -rf %s' % self.sysrootpath)
self.xml = newxml
@@ -871,11 +853,11 @@ class ElbeProject (object):
def write_log_header(self):
if self.name:
- self.log.h1("ELBE Report for Project " + self.name)
+ logging.info("ELBE Report for Project " + self.name)
else:
- self.log.h1("ELBE Report")
- self.log.printo("report timestamp: " +
- datetime.datetime.now().strftime("%Y%m%d-%H%M%S"))
+ logging.info("ELBE Report")
+ logging.info("report timestamp: " +
+ datetime.datetime.now().strftime("%Y%m%d-%H%M%S"))
def install_packages(self, target, buildenv=False):
@@ -897,23 +879,21 @@ class ElbeProject (object):
dump_initvmpkgs(self.xml)
target.need_dumpdebootstrap = False
source = self.xml
+ source_path = "/var/cache/elbe/source.xml"
try:
- initxml = ElbeXML(
- "/var/cache/elbe/source.xml",
- skip_validate=self.skip_validate,
- url_validation=ValidationMode.NO_CHECK)
+ initxml = ElbeXML(source_path,
+ skip_validate=self.skip_validate,
+ url_validation=ValidationMode.NO_CHECK)
self.xml.get_initvmnode_from(initxml)
- except ValidationError as e:
- self.log.printo(
- "/var/cache/elbe/source.xml validation failed")
- self.log.printo(str(e))
- self.log.printo("will not copy initvm node")
+ except ValidationError:
+ logging.exception("%s validation failed. "
+ "Will not copy initvm node", source_path)
except IOError:
- self.log.printo("/var/cache/elbe/source.xml not available")
- self.log.printo("can not copy initvm node")
+ logging.exception("%s not available. "
+ "Can not copy initvm node", source_path)
except NoInitvmNode:
- self.log.printo("/var/cache/elbe/source.xml is available")
- self.log.printo("But it does not contain an initvm node")
+ logging.exception("%s is available. But it does not "
+ "contain an initvm node", source_path)
else:
sourcepath = os.path.join(self.builddir, "source.xml")
source = ElbeXML(sourcepath,
@@ -925,8 +905,8 @@ class ElbeProject (object):
try:
self.xml.get_initvmnode_from(source)
except NoInitvmNode:
- self.log.printo("source.xml is available")
- self.log.printo("But it does not contain an initvm node")
+ logging.exception("source.xml is available. "
+ "But it does not contain an initvm node")
# Seed /etc, we need /etc/hosts for hostname -f to work correctly
if not buildenv:
@@ -948,10 +928,9 @@ class ElbeProject (object):
try:
self.get_rpcaptcache(env=target).mark_install(p, None)
except KeyError:
- self.log.printo("No Package " + p)
- except SystemError as e:
- self.log.printo("Error: Unable to correct problems in "
- "package %s (%s)" % (p, str(e)))
+ logging.exception("No Package " + p)
+ except SystemError:
+ logging.exception("Unable to correct problems in package %s", p)
# temporary disabled because of
# https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=776057
@@ -961,5 +940,5 @@ class ElbeProject (object):
try:
self.get_rpcaptcache(env=target).commit()
except SystemError as e:
- self.log.printo("commiting changes failed: %s" % str(e))
+ logging.exception("Commiting changes failed")
raise AptCacheCommitError(str(e))
--
2.11.0
More information about the elbe-devel
mailing list