def get_prefer_pkgs(dirs, wanted_arch, type): import glob from util import repodata, packagequery, cpio paths = [] repositories = [] suffix = '*.rpm' if type == 'dsc': suffix = '*.deb' for dir in dirs: # check for repodata repository = get_repo(dir) if repository is None: paths += glob.glob(os.path.join(os.path.abspath(dir), suffix)) else: repositories.append(repository) packageQueries = packagequery.PackageQueries(wanted_arch) for repository in repositories: repodataPackageQueries = repodata.queries(repository) for packageQuery in repodataPackageQueries: packageQueries.add(packageQuery) for path in paths: if path.endswith('src.rpm'): continue if path.find('-debuginfo-') > 0: continue packageQuery = packagequery.PackageQuery.query(path) packageQueries.add(packageQuery) prefer_pkgs = dict((name, packageQuery.path()) for name, packageQuery in packageQueries.iteritems()) depfile = create_deps(packageQueries.values()) cpio = cpio.CpioWrite() cpio.add('deps', '\n'.join(depfile)) return prefer_pkgs, cpio
def main(apiurl, opts, argv): repo = argv[0] arch = argv[1] build_descr = argv[2] xp = [] build_root = None cache_dir = None build_uid='' vm_type = config['build-type'] build_descr = os.path.abspath(build_descr) build_type = os.path.splitext(build_descr)[1][1:] if build_type not in ['spec', 'dsc', 'kiwi']: raise oscerr.WrongArgs( 'Unknown build type: \'%s\'. Build description should end in .spec, .dsc or .kiwi.' \ % build_type) if not os.path.isfile(build_descr): raise oscerr.WrongArgs('Error: build description file named \'%s\' does not exist.' % build_descr) buildargs = [] if not opts.userootforbuild: buildargs.append('--norootforbuild') if opts.clean: buildargs.append('--clean') if opts.noinit: buildargs.append('--noinit') if opts.nochecks: buildargs.append('--no-checks') if not opts.no_changelog: buildargs.append('--changelog') if opts.root: build_root = opts.root if opts.jobs: buildargs.append('--jobs=%s' % opts.jobs) elif config['build-jobs'] > 1: buildargs.append('--jobs=%s' % config['build-jobs']) if opts.icecream or config['icecream'] != '0': if opts.icecream: num = opts.icecream else: num = config['icecream'] if int(num) > 0: buildargs.append('--icecream=%s' % num) xp.append('icecream') xp.append('gcc-c++') if opts.ccache: buildargs.append('--ccache') xp.append('ccache') if opts.linksources: buildargs.append('--linksources') if opts.baselibs: buildargs.append('--baselibs') if opts.debuginfo: buildargs.append('--debug') if opts._with: for o in opts._with: buildargs.append('--with=%s' % o) if opts.without: for o in opts.without: buildargs.append('--without=%s' % o) if opts.define: for o in opts.define: buildargs.append('--define=%s' % o) if config['build-uid']: build_uid = config['build-uid'] if opts.build_uid: build_uid = opts.build_uid if build_uid: buildidre = re.compile('^[0-9]{1,5}:[0-9]{1,5}$') if build_uid == 'caller': buildargs.append('--uid=%s:%s' % (os.getuid(), os.getgid())) elif buildidre.match(build_uid): buildargs.append('--uid=%s' % build_uid) else: print >>sys.stderr, 'Error: build-uid arg must be 2 colon separated numerics: "uid:gid" or "caller"' return 1 if opts.vm_type: vm_type = opts.vm_type if opts.alternative_project: prj = opts.alternative_project pac = '_repository' else: prj = store_read_project(os.curdir) if opts.local_package: pac = '_repository' else: pac = store_read_package(os.curdir) if opts.shell: buildargs.append("--shell") # make it possible to override configuration of the rc file for var in ['OSC_PACKAGECACHEDIR', 'OSC_SU_WRAPPER', 'OSC_BUILD_ROOT']: val = os.getenv(var) if val: if var.startswith('OSC_'): var = var[4:] var = var.lower().replace('_', '-') if config.has_key(var): print 'Overriding config value for %s=\'%s\' with \'%s\'' % (var, config[var], val) config[var] = val pacname = pac if pacname == '_repository': if not opts.local_package: try: pacname = store_read_package(os.curdir) except oscerr.NoWorkingCopy: opts.local_package = True if opts.local_package: pacname = os.path.splitext(build_descr)[0] apihost = urlparse.urlsplit(apiurl)[1] if not build_root: build_root = config['build-root'] % {'repo': repo, 'arch': arch, 'project': prj, 'package': pacname, 'apihost': apihost} cache_dir = config['packagecachedir'] % {'apihost': apihost} extra_pkgs = [] if not opts.extra_pkgs: extra_pkgs = config['extra-pkgs'] elif opts.extra_pkgs != ['']: extra_pkgs = opts.extra_pkgs if xp: extra_pkgs += xp prefer_pkgs = {} build_descr_data = open(build_descr).read() # XXX: dirty hack but there's no api to provide custom defines if opts.without: s = '' for i in opts.without: s += "%%define _without_%s 1\n" % i s += "%%define _with_%s 0\n" % i build_descr_data = s + build_descr_data if opts._with: s = '' for i in opts._with: s += "%%define _without_%s 0\n" % i s += "%%define _with_%s 1\n" % i build_descr_data = s + build_descr_data if opts.define: s = '' for i in opts.define: s += "%%define %s\n" % i build_descr_data = s + build_descr_data if opts.prefer_pkgs: print 'Scanning the following dirs for local packages: %s' % ', '.join(opts.prefer_pkgs) prefer_pkgs, cpio = get_prefer_pkgs(opts.prefer_pkgs, arch, build_type) cpio.add(os.path.basename(build_descr), build_descr_data) build_descr_data = cpio.get() # special handling for overlay and rsync-src/dest specialcmdopts = [] if opts.rsyncsrc or opts.rsyncdest : if not opts.rsyncsrc or not opts.rsyncdest: raise oscerr.WrongOptions('When using --rsync-{src,dest} both parameters have to be specified.') myrsyncsrc = os.path.abspath(os.path.expanduser(os.path.expandvars(opts.rsyncsrc))) if not os.path.isdir(myrsyncsrc): raise oscerr.WrongOptions('--rsync-src %s is no valid directory!' % opts.rsyncsrc) # can't check destination - its in the target chroot ;) - but we can check for sanity myrsyncdest = os.path.expandvars(opts.rsyncdest) if not os.path.isabs(myrsyncdest): raise oscerr.WrongOptions('--rsync-dest %s is no absolute path (starting with \'/\')!' % opts.rsyncdest) specialcmdopts = ['--rsync-src='+myrsyncsrc, '--rsync-dest='+myrsyncdest] if opts.overlay: myoverlay = os.path.abspath(os.path.expanduser(os.path.expandvars(opts.overlay))) if not os.path.isdir(myoverlay): raise oscerr.WrongOptions('--overlay %s is no valid directory!' % opts.overlay) specialcmdopts += ['--overlay='+myoverlay] bi_file = None bc_file = None bi_filename = '_buildinfo-%s-%s.xml' % (repo, arch) bc_filename = '_buildconfig-%s-%s' % (repo, arch) if is_package_dir('.') and os.access(osc.core.store, os.W_OK): bi_filename = os.path.join(os.getcwd(), osc.core.store, bi_filename) bc_filename = os.path.join(os.getcwd(), osc.core.store, bc_filename) elif not os.access('.', os.W_OK): bi_file = NamedTemporaryFile(prefix=bi_filename) bi_filename = bi_file.name bc_file = NamedTemporaryFile(prefix=bc_filename) bc_filename = bc_file.name else: bi_filename = os.path.abspath(bi_filename) bc_filename = os.path.abspath(bc_filename) try: if opts.noinit: if not os.path.isfile(bi_filename): raise oscerr.WrongOptions('--noinit is not possible, no local buildinfo file') print 'Use local \'%s\' file as buildinfo' % bi_filename if not os.path.isfile(bc_filename): raise oscerr.WrongOptions('--noinit is not possible, no local buildconfig file') print 'Use local \'%s\' file as buildconfig' % bc_filename elif opts.offline: if not os.path.isfile(bi_filename): raise oscerr.WrongOptions('--offline is not possible, no local buildinfo file') print 'Use local \'%s\' file as buildinfo' % bi_filename if not os.path.isfile(bc_filename): raise oscerr.WrongOptions('--offline is not possible, no local buildconfig file') else: print 'Getting buildinfo from server and store to %s' % bi_filename bi_text = ''.join(get_buildinfo(apiurl, prj, pac, repo, arch, specfile=build_descr_data, addlist=extra_pkgs)) if not bi_file: bi_file = open(bi_filename, 'w') # maybe we should check for errors before saving the file bi_file.write(bi_text) bi_file.flush() print 'Getting buildconfig from server and store to %s' % bc_filename bc = get_buildconfig(apiurl, prj, repo) if not bc_file: bc_file = open(bc_filename, 'w') bc_file.write(bc) bc_file.flush() except urllib2.HTTPError, e: if e.code == 404: # check what caused the 404 if meta_exists(metatype='prj', path_args=(quote_plus(prj), ), template_args=None, create_new=False, apiurl=apiurl): pkg_meta_e = None try: # take care, not to run into double trouble. pkg_meta_e = meta_exists(metatype='pkg', path_args=(quote_plus(prj), quote_plus(pac)), template_args=None, create_new=False, apiurl=apiurl) except: pass if pkg_meta_e: print >>sys.stderr, 'ERROR: Either wrong repo/arch as parameter or a parse error of .spec/.dsc/.kiwi file due to syntax error' else: print >>sys.stderr, 'The package \'%s\' does not exists - please ' \ 'rerun with \'--local-package\'' % pac else: print >>sys.stderr, 'The project \'%s\' does not exists - please ' \ 'rerun with \'--alternative-project <alternative_project>\'' % prj sys.exit(1) else: raise
def main(apiurl, opts, argv): repo = argv[0] arch = argv[1] build_descr = argv[2] xp = [] build_root = None cache_dir = None build_uid = "" vm_type = config["build-type"] build_descr = os.path.abspath(build_descr) build_type = os.path.splitext(build_descr)[1][1:] if build_type not in ["spec", "dsc", "kiwi"]: raise oscerr.WrongArgs( "Unknown build type: '%s'. Build description should end in .spec, .dsc or .kiwi." % build_type ) if not os.path.isfile(build_descr): raise oscerr.WrongArgs("Error: build description file named '%s' does not exist." % build_descr) buildargs = [] if not opts.userootforbuild: buildargs.append("--norootforbuild") if opts.clean: buildargs.append("--clean") if opts.noinit: buildargs.append("--noinit") if opts.nochecks: buildargs.append("--no-checks") if not opts.no_changelog: buildargs.append("--changelog") if opts.root: build_root = opts.root if opts.jobs: buildargs.append("--jobs=%s" % opts.jobs) elif config["build-jobs"] > 1: buildargs.append("--jobs=%s" % config["build-jobs"]) if opts.icecream or config["icecream"] != "0": if opts.icecream: num = opts.icecream else: num = config["icecream"] if int(num) > 0: buildargs.append("--icecream=%s" % num) xp.append("icecream") xp.append("gcc-c++") if opts.ccache: buildargs.append("--ccache") xp.append("ccache") if opts.linksources: buildargs.append("--linksources") if opts.baselibs: buildargs.append("--baselibs") if opts.debuginfo: buildargs.append("--debug") if opts._with: for o in opts._with: buildargs.append("--with=%s" % o) if opts.without: for o in opts.without: buildargs.append("--without=%s" % o) if opts.define: for o in opts.define: buildargs.append("--define=%s" % o) if config["build-uid"]: build_uid = config["build-uid"] if opts.build_uid: build_uid = opts.build_uid if build_uid: buildidre = re.compile("^[0-9]{1,5}:[0-9]{1,5}$") if build_uid == "caller": buildargs.append("--uid=%s:%s" % (os.getuid(), os.getgid())) elif buildidre.match(build_uid): buildargs.append("--uid=%s" % build_uid) else: print >> sys.stderr, 'Error: build-uid arg must be 2 colon separated numerics: "uid:gid" or "caller"' return 1 if opts.vm_type: vm_type = opts.vm_type if opts.alternative_project: prj = opts.alternative_project pac = "_repository" else: prj = store_read_project(os.curdir) if opts.local_package: pac = "_repository" else: pac = store_read_package(os.curdir) if opts.shell: buildargs.append("--shell") # make it possible to override configuration of the rc file for var in ["OSC_PACKAGECACHEDIR", "OSC_SU_WRAPPER", "OSC_BUILD_ROOT"]: val = os.getenv(var) if val: if var.startswith("OSC_"): var = var[4:] var = var.lower().replace("_", "-") if config.has_key(var): print "Overriding config value for %s='%s' with '%s'" % (var, config[var], val) config[var] = val pacname = pac if pacname == "_repository": if not opts.local_package: try: pacname = store_read_package(os.curdir) except oscerr.NoWorkingCopy: opts.local_package = True if opts.local_package: pacname = os.path.splitext(build_descr)[0] apihost = urlparse.urlsplit(apiurl)[1] if not build_root: build_root = config["build-root"] % { "repo": repo, "arch": arch, "project": prj, "package": pacname, "apihost": apihost, } cache_dir = config["packagecachedir"] % {"apihost": apihost} extra_pkgs = [] if not opts.extra_pkgs: extra_pkgs = config["extra-pkgs"] elif opts.extra_pkgs != [""]: extra_pkgs = opts.extra_pkgs if xp: extra_pkgs += xp prefer_pkgs = {} build_descr_data = open(build_descr).read() # XXX: dirty hack but there's no api to provide custom defines if opts.without: s = "" for i in opts.without: s += "%%define _without_%s 1\n" % i s += "%%define _with_%s 0\n" % i build_descr_data = s + build_descr_data if opts._with: s = "" for i in opts._with: s += "%%define _without_%s 0\n" % i s += "%%define _with_%s 1\n" % i build_descr_data = s + build_descr_data if opts.define: s = "" for i in opts.define: s += "%%define %s\n" % i build_descr_data = s + build_descr_data if opts.prefer_pkgs: print "Scanning the following dirs for local packages: %s" % ", ".join(opts.prefer_pkgs) prefer_pkgs, cpio = get_prefer_pkgs(opts.prefer_pkgs, arch, build_type) cpio.add(os.path.basename(build_descr), build_descr_data) build_descr_data = cpio.get() # special handling for overlay and rsync-src/dest specialcmdopts = [] if opts.rsyncsrc or opts.rsyncdest: if not opts.rsyncsrc or not opts.rsyncdest: raise oscerr.WrongOptions("When using --rsync-{src,dest} both parameters have to be specified.") myrsyncsrc = os.path.abspath(os.path.expanduser(os.path.expandvars(opts.rsyncsrc))) if not os.path.isdir(myrsyncsrc): raise oscerr.WrongOptions("--rsync-src %s is no valid directory!" % opts.rsyncsrc) # can't check destination - its in the target chroot ;) - but we can check for sanity myrsyncdest = os.path.expandvars(opts.rsyncdest) if not os.path.isabs(myrsyncdest): raise oscerr.WrongOptions("--rsync-dest %s is no absolute path (starting with '/')!" % opts.rsyncdest) specialcmdopts = ["--rsync-src=" + myrsyncsrc, "--rsync-dest=" + myrsyncdest] if opts.overlay: myoverlay = os.path.abspath(os.path.expanduser(os.path.expandvars(opts.overlay))) if not os.path.isdir(myoverlay): raise oscerr.WrongOptions("--overlay %s is no valid directory!" % opts.overlay) specialcmdopts += ["--overlay=" + myoverlay] bi_file = None bc_file = None bi_filename = "_buildinfo-%s-%s.xml" % (repo, arch) bc_filename = "_buildconfig-%s-%s" % (repo, arch) if is_package_dir(".") and os.access(osc.core.store, os.W_OK): bi_filename = os.path.join(os.getcwd(), osc.core.store, bi_filename) bc_filename = os.path.join(os.getcwd(), osc.core.store, bc_filename) elif not os.access(".", os.W_OK): bi_file = NamedTemporaryFile(prefix=bi_filename) bi_filename = bi_file.name bc_file = NamedTemporaryFile(prefix=bc_filename) bc_filename = bc_file.name else: bi_filename = os.path.abspath(bi_filename) bc_filename = os.path.abspath(bc_filename) try: if opts.noinit: if not os.path.isfile(bi_filename): raise oscerr.WrongOptions("--noinit is not possible, no local buildinfo file") print "Use local '%s' file as buildinfo" % bi_filename if not os.path.isfile(bc_filename): raise oscerr.WrongOptions("--noinit is not possible, no local buildconfig file") print "Use local '%s' file as buildconfig" % bc_filename elif opts.offline: if not os.path.isfile(bi_filename): raise oscerr.WrongOptions("--offline is not possible, no local buildinfo file") print "Use local '%s' file as buildinfo" % bi_filename if not os.path.isfile(bc_filename): raise oscerr.WrongOptions("--offline is not possible, no local buildconfig file") else: print "Getting buildinfo from server and store to %s" % bi_filename bi_text = "".join( get_buildinfo(apiurl, prj, pac, repo, arch, specfile=build_descr_data, addlist=extra_pkgs) ) if not bi_file: bi_file = open(bi_filename, "w") # maybe we should check for errors before saving the file bi_file.write(bi_text) bi_file.flush() print "Getting buildconfig from server and store to %s" % bc_filename bc = get_buildconfig(apiurl, prj, repo) if not bc_file: bc_file = open(bc_filename, "w") bc_file.write(bc) bc_file.flush() except urllib2.HTTPError, e: if e.code == 404: # check what caused the 404 if meta_exists( metatype="prj", path_args=(quote_plus(prj),), template_args=None, create_new=False, apiurl=apiurl ): pkg_meta_e = None try: # take care, not to run into double trouble. pkg_meta_e = meta_exists( metatype="pkg", path_args=(quote_plus(prj), quote_plus(pac)), template_args=None, create_new=False, apiurl=apiurl, ) except: pass if pkg_meta_e: print >> sys.stderr, "ERROR: Either wrong repo/arch as parameter or a parse error of .spec/.dsc/.kiwi file due to syntax error" else: print >> sys.stderr, "The package '%s' does not exists - please " "rerun with '--local-package'" % pac else: print >> sys.stderr, "The project '%s' does not exists - please " "rerun with '--alternative-project <alternative_project>'" % prj sys.exit(1) else: raise
def main(apiurl, opts, argv): repo = argv[0] arch = argv[1] build_descr = argv[2] xp = [] build_root = None cache_dir = None build_uid = '' vm_type = config['build-type'] build_descr = os.path.abspath(build_descr) build_type = os.path.splitext(build_descr)[1][1:] if build_type not in ['spec', 'dsc', 'kiwi']: raise oscerr.WrongArgs( 'Unknown build type: \'%s\'. Build description should end in .spec, .dsc or .kiwi.' \ % build_type) if not os.path.isfile(build_descr): raise oscerr.WrongArgs( 'Error: build description file named \'%s\' does not exist.' % build_descr) buildargs = [] if not opts.userootforbuild: buildargs.append('--norootforbuild') if opts.clean: buildargs.append('--clean') if opts.noinit: buildargs.append('--noinit') if opts.nochecks: buildargs.append('--no-checks') if not opts.no_changelog: buildargs.append('--changelog') if opts.root: build_root = opts.root if opts.jobs: buildargs.append('--jobs=%s' % opts.jobs) elif config['build-jobs'] > 1: buildargs.append('--jobs=%s' % config['build-jobs']) if opts.icecream or config['icecream'] != '0': if opts.icecream: num = opts.icecream else: num = config['icecream'] if int(num) > 0: buildargs.append('--icecream=%s' % num) xp.append('icecream') xp.append('gcc-c++') if opts.ccache: buildargs.append('--ccache') xp.append('ccache') if opts.linksources: buildargs.append('--linksources') if opts.baselibs: buildargs.append('--baselibs') if opts.debuginfo: buildargs.append('--debug') if opts._with: for o in opts._with: buildargs.append('--with=%s' % o) if opts.without: for o in opts.without: buildargs.append('--without=%s' % o) if opts.define: for o in opts.define: buildargs.append('--define=%s' % o) if config['build-uid']: build_uid = config['build-uid'] if opts.build_uid: build_uid = opts.build_uid if build_uid: buildidre = re.compile('^[0-9]{1,5}:[0-9]{1,5}$') if build_uid == 'caller': buildargs.append('--uid=%s:%s' % (os.getuid(), os.getgid())) elif buildidre.match(build_uid): buildargs.append('--uid=%s' % build_uid) else: print >> sys.stderr, 'Error: build-uid arg must be 2 colon separated numerics: "uid:gid" or "caller"' return 1 if opts.vm_type: vm_type = opts.vm_type if opts.alternative_project: prj = opts.alternative_project pac = '_repository' else: prj = store_read_project(os.curdir) if opts.local_package: pac = '_repository' else: pac = store_read_package(os.curdir) if opts.shell: buildargs.append("--shell") # make it possible to override configuration of the rc file for var in ['OSC_PACKAGECACHEDIR', 'OSC_SU_WRAPPER', 'OSC_BUILD_ROOT']: val = os.getenv(var) if val: if var.startswith('OSC_'): var = var[4:] var = var.lower().replace('_', '-') if config.has_key(var): print 'Overriding config value for %s=\'%s\' with \'%s\'' % ( var, config[var], val) config[var] = val pacname = pac if pacname == '_repository': if not opts.local_package: try: pacname = store_read_package(os.curdir) except oscerr.NoWorkingCopy: opts.local_package = True if opts.local_package: pacname = os.path.splitext(build_descr)[0] apihost = urlparse.urlsplit(apiurl)[1] if not build_root: build_root = config['build-root'] % { 'repo': repo, 'arch': arch, 'project': prj, 'package': pacname, 'apihost': apihost } cache_dir = config['packagecachedir'] % {'apihost': apihost} extra_pkgs = [] if not opts.extra_pkgs: extra_pkgs = config['extra-pkgs'] elif opts.extra_pkgs != ['']: extra_pkgs = opts.extra_pkgs if xp: extra_pkgs += xp prefer_pkgs = {} build_descr_data = open(build_descr).read() # XXX: dirty hack but there's no api to provide custom defines if opts.without: s = '' for i in opts.without: s += "%%define _without_%s 1\n" % i s += "%%define _with_%s 0\n" % i build_descr_data = s + build_descr_data if opts._with: s = '' for i in opts._with: s += "%%define _without_%s 0\n" % i s += "%%define _with_%s 1\n" % i build_descr_data = s + build_descr_data if opts.define: s = '' for i in opts.define: s += "%%define %s\n" % i build_descr_data = s + build_descr_data if opts.prefer_pkgs: print 'Scanning the following dirs for local packages: %s' % ', '.join( opts.prefer_pkgs) prefer_pkgs, cpio = get_prefer_pkgs(opts.prefer_pkgs, arch, build_type) cpio.add(os.path.basename(build_descr), build_descr_data) build_descr_data = cpio.get() # special handling for overlay and rsync-src/dest specialcmdopts = [] if opts.rsyncsrc or opts.rsyncdest: if not opts.rsyncsrc or not opts.rsyncdest: raise oscerr.WrongOptions( 'When using --rsync-{src,dest} both parameters have to be specified.' ) myrsyncsrc = os.path.abspath( os.path.expanduser(os.path.expandvars(opts.rsyncsrc))) if not os.path.isdir(myrsyncsrc): raise oscerr.WrongOptions('--rsync-src %s is no valid directory!' % opts.rsyncsrc) # can't check destination - its in the target chroot ;) - but we can check for sanity myrsyncdest = os.path.expandvars(opts.rsyncdest) if not os.path.isabs(myrsyncdest): raise oscerr.WrongOptions( '--rsync-dest %s is no absolute path (starting with \'/\')!' % opts.rsyncdest) specialcmdopts = [ '--rsync-src=' + myrsyncsrc, '--rsync-dest=' + myrsyncdest ] if opts.overlay: myoverlay = os.path.abspath( os.path.expanduser(os.path.expandvars(opts.overlay))) if not os.path.isdir(myoverlay): raise oscerr.WrongOptions('--overlay %s is no valid directory!' % opts.overlay) specialcmdopts += ['--overlay=' + myoverlay] bi_file = None bc_file = None bi_filename = '_buildinfo-%s-%s.xml' % (repo, arch) bc_filename = '_buildconfig-%s-%s' % (repo, arch) if is_package_dir('.') and os.access(osc.core.store, os.W_OK): bi_filename = os.path.join(os.getcwd(), osc.core.store, bi_filename) bc_filename = os.path.join(os.getcwd(), osc.core.store, bc_filename) elif not os.access('.', os.W_OK): bi_file = NamedTemporaryFile(prefix=bi_filename) bi_filename = bi_file.name bc_file = NamedTemporaryFile(prefix=bc_filename) bc_filename = bc_file.name else: bi_filename = os.path.abspath(bi_filename) bc_filename = os.path.abspath(bc_filename) try: if opts.noinit: if not os.path.isfile(bi_filename): raise oscerr.WrongOptions( '--noinit is not possible, no local buildinfo file') print 'Use local \'%s\' file as buildinfo' % bi_filename if not os.path.isfile(bc_filename): raise oscerr.WrongOptions( '--noinit is not possible, no local buildconfig file') print 'Use local \'%s\' file as buildconfig' % bc_filename elif opts.offline: if not os.path.isfile(bi_filename): raise oscerr.WrongOptions( '--offline is not possible, no local buildinfo file') print 'Use local \'%s\' file as buildinfo' % bi_filename if not os.path.isfile(bc_filename): raise oscerr.WrongOptions( '--offline is not possible, no local buildconfig file') else: print 'Getting buildinfo from server and store to %s' % bi_filename bi_text = ''.join( get_buildinfo(apiurl, prj, pac, repo, arch, specfile=build_descr_data, addlist=extra_pkgs)) if not bi_file: bi_file = open(bi_filename, 'w') # maybe we should check for errors before saving the file bi_file.write(bi_text) bi_file.flush() print 'Getting buildconfig from server and store to %s' % bc_filename bc = get_buildconfig(apiurl, prj, repo) if not bc_file: bc_file = open(bc_filename, 'w') bc_file.write(bc) bc_file.flush() except urllib2.HTTPError, e: if e.code == 404: # check what caused the 404 if meta_exists(metatype='prj', path_args=(quote_plus(prj), ), template_args=None, create_new=False, apiurl=apiurl): pkg_meta_e = None try: # take care, not to run into double trouble. pkg_meta_e = meta_exists(metatype='pkg', path_args=(quote_plus(prj), quote_plus(pac)), template_args=None, create_new=False, apiurl=apiurl) except: pass if pkg_meta_e: print >> sys.stderr, 'ERROR: Either wrong repo/arch as parameter or a parse error of .spec/.dsc/.kiwi file due to syntax error' else: print >>sys.stderr, 'The package \'%s\' does not exists - please ' \ 'rerun with \'--local-package\'' % pac else: print >>sys.stderr, 'The project \'%s\' does not exists - please ' \ 'rerun with \'--alternative-project <alternative_project>\'' % prj sys.exit(1) else: raise