# HG changeset patch # User Bjoern Ricks # Date 1278949662 0 # Node ID 01c0592989060ea928acf4c666b0797756475126 # Parent 2db42a2a9db9a7225a00dad672c65a3ad2f2abe6 moved packages and logs to revision tag implemented os and arch info diff -r 2db42a2a9db9 -r 01c059298906 treepkg/info/package.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/treepkg/info/package.py Mon Jul 12 15:47:42 2010 +0000 @@ -0,0 +1,44 @@ +# Copyright (C) 2010 by Intevation GmbH +# Authors: +# Bjoern Ricks +# +# This program is free software under the GPL (>=v2) +# Read the file COPYING coming with the software for details. + +"""Classes to read information from binary packages """ + +import os.path + +from treepkg import run + +from treepkg.cmdexpand import cmdexpand + + +class DebianPackage: + + def __init__(self, filename): + self.filename = filename + + def is_package(self): + extension = os.path.splitext(self.filename)[1] + return extension.lower() == ".deb" + + def get_architecture(self): + if not self.is_package(): + return None + arch = run.capture_output(cmdexpand("dpkg-deb -f $debfile Architecture", + debfile=self.filename)) + return arch.strip() + +class BinaryPackage: + + def __init__(self, filename): + self.filename = filename + self.packagetypes = [] + self.packagetypes.append(DebianPackage(self.filename)) + + def get_architecture(self): + for packagetype in self.packagetypes: + retval = packagetype.get_architecture() + if not retval is None: + return retval diff -r 2db42a2a9db9 -r 01c059298906 treepkg/info/status.py --- a/treepkg/info/status.py Mon Jul 12 15:06:22 2010 +0000 +++ b/treepkg/info/status.py Mon Jul 12 15:47:42 2010 +0000 @@ -12,6 +12,7 @@ from treepkg.report import get_packager_group from treepkg.util import md5sum +from treepkg.info.package import BinaryPackage TREEPKG_NAMESPACE_URI = "http://wald.intevation.org/projects/treepkg/" TREEPKG_NAMESPACE_PREFIX = "tpkg" @@ -49,39 +50,42 @@ if self.numnewestrev > 0: revisions = revisions[:self.numnewestrev] + os = track.os + arch = None + for rev in revisions: revision = rev.revision rules_revision = rev.rules_revision status = rev.status.status.description # extend status - platforminfo = self.get_platform(rev) - revinfo = TreepkgTrackRevisionInfo(revision, rules_revision, + + sources = rev.list_source_files() + binaries = rev.list_binary_files() + for binary in binaries: # get arch + binpackage = BinaryPackage(binary) + arch = binpackage.get_architecture() + if not arch is None: + break; + platforminfo = TreepkgPlatformInfo(os, arch) + revinfo = TreepkgTrackRevisionInfo(revision, rules_revision, status, platforminfo) + logs = rev.get_log_files() + for (title, filename) in logs: + loginfo = TreepkgLogInfo(title, filename) + revinfo.add_log(loginfo) + for source in sources: + self.add_package(source, "source", revinfo) + for binary in binaries: + self.add_package(binary, "binary", revinfo) + trackinfo.add_revision(revinfo) - def get_platform(self, revision): - # FIXME - os = "abc os" - arch = "def arch" - platforminfo = TreepkgPlatformInfo(os, arch) - logs = revision.get_log_files() - for (title, filename) in logs: - loginfo = TreepkgLogInfo(title, filename) - platforminfo.add_log(loginfo) - sources = revision.list_source_files() - for source in sources: - self.add_package(source, "source", platforminfo) - binaries = revision.list_binary_files() - for binary in binaries: - self.add_package(binary, "binary", platforminfo) - return platforminfo - - def add_package(self, file, type, platform): + def add_package(self, file, type, revision): name = os.path.basename(file) checksum = md5sum(file) checksuminfo = TreepkgChecksumInfo(checksum, "md5") pkginfo = TreepkgPackageInfo(name, file, type) pkginfo.add_checksum(checksuminfo) - platform.add_package(pkginfo) + revision.add_package(pkginfo) class TreepkgRootInfo: @@ -153,6 +157,14 @@ self.rules = rules self.status = status self.platform = platform + self.packages = [] + self.logs = [] + + def add_package(self, package): + self.packages.append(package) + + def add_log(self, log): + self.logs.append(log) def toxml(self): (doc, root) = createTpkgRoot("revision") @@ -175,6 +187,16 @@ root.appendChild(statusele) # add root.appendChild(self.platform.toxml()) + # add + packagesele = createTpkgElement(doc, "packages") + for package in self.packages: + packagesele.appendChild(package.toxml()) + root.appendChild(packagesele) + # add + logsele = createTpkgElement(doc, "logs") + for log in self.logs: + logsele.appendChild(log.toxml()) + root.appendChild(logsele) return root class TreepkgPlatformInfo: @@ -182,14 +204,8 @@ def __init__(self, os, arch): self.os = os self.arch = arch - self.packages = [] - self.logs = [] - - def add_package(self, package): - self.packages.append(package) - - def add_log(self, log): - self.logs.append(log) + if self.arch is None: + self.arch = "unkown" def toxml(self): (doc, root) = createTpkgRoot("platform") @@ -203,16 +219,6 @@ text = doc.createTextNode(self.arch) archele.appendChild(text) root.appendChild(archele) - # add - packagesele = createTpkgElement(doc, "packages") - for package in self.packages: - packagesele.appendChild(package.toxml()) - root.appendChild(packagesele) - # add - logsele = createTpkgElement(doc, "logs") - for log in self.logs: - logsele.appendChild(log.toxml()) - root.appendChild(logsele) return root class TreepkgLogInfo: diff -r 2db42a2a9db9 -r 01c059298906 treepkg/info/status.xsd --- a/treepkg/info/status.xsd Mon Jul 12 15:06:22 2010 +0000 +++ b/treepkg/info/status.xsd Mon Jul 12 15:47:42 2010 +0000 @@ -44,6 +44,8 @@ + + @@ -57,9 +59,7 @@ - - - +