Index: clientlib/python/osc/osc/babysitter.py =================================================================== --- clientlib/python/osc/osc/babysitter.py (Revision 4150) +++ clientlib/python/osc/osc/babysitter.py (Arbeitskopie) @@ -62,6 +62,10 @@ def run(prg): print >>sys.stderr, 'aborted.' return 1 + except oscerr.APIError, e: + print >>sys.stderr, 'BuildService API error:', e.msg + return 1 + except oscerr.UnreadableFile, e: print >>sys.stderr, e.msg return 1 Index: clientlib/python/osc/osc/fetch.py =================================================================== --- clientlib/python/osc/osc/fetch.py (Revision 4150) +++ clientlib/python/osc/osc/fetch.py (Arbeitskopie) @@ -5,7 +5,7 @@ # and distributed under the terms of the GNU General Public Licence, # either version 2, or (at your option) any later version. -import sys, os +import sys, os, tempfile import urllib2 from urlgrabber.grabber import URLGrabber, URLGrabError from urlgrabber.mirror import MirrorGroup @@ -173,7 +173,7 @@ def verify_pacs(pac_list): print >>sys.stderr, """ - If the key is missing, install it first. For example, do the following: - gpg --keyserver pgp.mit.edu --recv-keys %(name)s + gpg --recv-keys %(name)s gpg --armor --export %(name)s > %(dir)s/keyfile-%(name)s and, as root: rpm --import %(dir)s/keyfile-%(name)s @@ -182,7 +182,8 @@ def verify_pacs(pac_list): - If the key is unavailable, you may use --no-verify (which may pose a risk). """ % {'name': missing_key, - 'dir': os.path.expanduser('~')} + 'dir': tempfile.gettempdir()} + else: print >>sys.stderr, """ Index: clientlib/python/osc/osc/oscerr.py =================================================================== --- clientlib/python/osc/osc/oscerr.py (Revision 4150) +++ clientlib/python/osc/osc/oscerr.py (Arbeitskopie) @@ -23,6 +23,12 @@ class ConfigError(OscBaseError): OscBaseError.__init__(self) self.msg = msg +class APIError(OscBaseError): + """Exception raised when there is an error in the output from the API""" + def __init__(self, msg): + OscBaseError.__init__(self) + self.msg = msg + class NoConfigfile(OscBaseError): """Exception raised when osc's configfile cannot be found""" def __init__(self, fname, msg): Index: clientlib/python/osc/osc/build.py =================================================================== --- clientlib/python/osc/osc/build.py (Revision 4150) +++ clientlib/python/osc/osc/build.py (Arbeitskopie) @@ -14,6 +14,7 @@ from tempfile import NamedTemporaryFile from osc.fetch import * from osc.core import get_buildinfo, store_read_apiurl, store_read_project, store_read_package, meta_exists, quote_plus, get_buildconfig import osc.conf +import oscerr try: from xml.etree import cElementTree as ET except ImportError: @@ -24,13 +25,15 @@ from conf import config change_personality = { 'i686': 'linux32', 'i586': 'linux32', + 'i386': 'linux32', 'ppc': 'powerpc32', 's390': 's390', } can_also_build = { - 'x86_64': ['i686', 'i586'], + 'x86_64': ['i686', 'i586', 'i386'], 'i686': ['i586'], + 'i386': ['i586'], 'ppc64': ['ppc'], 's390x': ['s390'], } @@ -82,12 +85,23 @@ class Buildinfo: self.deps = [] for node in root.findall('bdep'): - p = Pac(node.get('name'), - node.get('version'), - node.get('release'), + p_name = node.get('name') + p_arch = node.get('arch') + if not p_arch: + p_arch = self.buildarch + p_version = node.get('version') + p_release = node.get('release') + + if not (p_name and p_arch and p_version and p_release): + raise oscerr.APIError( + "buildinfo for package %s/%s/%s/%s is incomplete" % (p_name, p_arch, p_version, p_release)) + + p = Pac(p_name, + p_version, + p_release, node.get('project'), node.get('repository'), - node.get('arch'), + p_arch, node.get('preinstall'), node.get('runscripts'), self.buildarch, # buildarch is used only for the URL to access the full tree... @@ -390,7 +404,9 @@ def main(opts, argv): # change personality, if needed if bi.buildarch in can_also_build.get(hostarch, []): cmd = change_personality[bi.buildarch] + ' ' + cmd - + else: + print >>sys.stderr, 'Error: hostarch \'%s\' cannot build \'%s\'.' % (hostarch, bi.buildarch) + return 1 print cmd rc = os.system(cmd)