Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:maw:playground
osc
osc-offline.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File osc-offline.patch of Package osc
Index: osc/build.py =================================================================== --- osc/build.py (revision 2459) +++ osc/build.py (working copy) @@ -9,6 +9,8 @@ import os import sys +import time +from stat import ST_MTIME, ST_SIZE from tempfile import NamedTemporaryFile from osc.fetch import * from osc.core import get_buildinfo, store_read_apiurl, store_read_project, store_read_package @@ -228,7 +230,7 @@ # make it possible to override configuration of the rc file - for var in ['OSC_PACKAGECACHEDIR', 'OSC_SU_WRAPPER', 'BUILD_ROOT', 'OSC_BUILD_ROOT']: + for var in ['OSC_PACKAGECACHEDIR', 'OSC_SU_WRAPPER', 'BUILD_ROOT', 'OSC_BUILD_ROOT', 'BUILDINFODIR', 'OSC_BUILDINFODIR']: val = os.getenv(var) if val: if var.startswith('OSC_'): var = var[4:] @@ -240,25 +242,87 @@ config['build-root'] = config['build-root'] % {'repo': repo, 'arch': arch} - print 'Getting buildinfo from server' - bi_file = NamedTemporaryFile(suffix='.xml', prefix='buildinfo.', dir = '/tmp') - try: - bi_text = ''.join(get_buildinfo(store_read_apiurl(os.curdir), - store_read_project(os.curdir), - store_read_package(os.curdir), - repo, - arch, - specfile=open(spec).read(), - addlist=opts.extra_pkgs)) + bi_file_name = "%s/buildinfo.%s-%s-%s-%s-%s.xml" % (config['buildinfodir'], + store_read_project(os.curdir), + store_read_package(os.curdir), + repo, + arch, + spec) - except: - print >>sys.stderr, 'wrong repo/arch?' - sys.exit(1) - bi_file.write(bi_text) - bi_file.flush() + # I guess caching this sort of thing for an hour is reasonable + cache_time = 60 * 60 + + # if bi_file_name exists: + # if use_cached_buildinfo == false: + # download the new version + # elif it is older than cache_time seconds and offline is false: + # download the new version + # else: + # use the cached version + # else: + # if offline is true: + # fail + # else: + # download it - bi = Buildinfo(bi_file.name) + use_cached = False + if os.path.exists(bi_file_name): + modtime = os.stat(bi_file_name)[ST_MTIME] + size = os.stat(bi_file_name)[ST_SIZE] + now = time.time() + if opts.dont_use_cached_buildinfo == True: + use_cached = False + elif (now > (cache_time + modtime)) and not opts.offline: + use_cached = False + elif (size == 0): + # we end up with bogus files in the cache for some reason + use_cached = False + else: + use_cached = True + else: + print "opts.offline is %s" % opts.offline + if opts.offline: + # How best to fail? Just let it happen later? + pass + else: + use_cached = False + bi = None + if use_cached: + print "Not getting buildinfo from server; using cached version instead" + bi = Buildinfo(bi_file_name) + else: + try: + os.unlink(bi_file_name) + except OSError: + print "%s probably doesn't exist" % bi_file_name + # This could be improved. + pass + print 'Getting buildinfo from server' + + bi_file = open(bi_file_name, 'a') + + try: + bi_text = ''.join(get_buildinfo(store_read_apiurl(os.curdir), + store_read_project(os.curdir), + store_read_package(os.curdir), + repo, + arch, + specfile=open(spec).read(), + addlist=opts.extra_pkgs)) + + except: + print >>sys.stderr, 'wrong repo/arch?' + sys.exit(1) + bi_file.write(bi_text) + bi_file.flush() + + # now cache what we've got + + + bi = Buildinfo(bi_file_name) + + rpmlist_prefers = [] if opts.prefer_pkgs: print 'Evaluating preferred packages' @@ -308,21 +372,59 @@ rpmlist_file.flush() os.fsync(rpmlist_file) + # We use the same logic here as above with buildinfo + bc_file_name = "%s/buildconfig.%s-%s-%s-%s-%s" % (config['buildinfodir'], + store_read_project(os.curdir), + store_read_package(os.curdir), + repo, + arch, + spec) - print 'Getting buildconfig from server' - bc_file = NamedTemporaryFile(prefix='buildconfig.', dir = '/tmp') - rc = os.system('osc buildconfig %s %s > %s' % (repo, arch, bc_file.name)) - if rc: sys.exit(rc) + use_cached = False + if os.path.exists(bc_file_name): + modtime = os.stat(bc_file_name)[ST_MTIME] + size = os.stat(bc_file_name)[ST_SIZE] + now = time.time() + if opts.dont_use_cached_buildinfo == True: + use_cached = False + elif (now > (cache_time + modtime)) and not opts.offline: + use_cached = False + elif size == 0: + use_cached = False + else: + use_cached = True + else: + if opts.offline: + # Again, how best to fail? Just let it happen later? + pass + else: + use_cached = False + + if use_cached: + print "Not getting buildconfig from server; using cached version instead" + else: + try: + os.unlink(bc_file_name) + except OSError: + print "%s probably doesn't exist" % bc_file_name + + print 'Getting buildconfig from server' + rc = os.system('touch %s' % bc_file_name) + if rc: sys.exit(rc) + rc = os.system('osc buildconfig %s %s > %s' % (repo, arch, bc_file_name)) + if rc: sys.exit(rc) + + print 'Running build' cmd = '%s --root=%s --rpmlist=%s --dist=%s %s %s' \ % (config['build-cmd'], config['build-root'], rpmlist_file.name, - bc_file.name, + bc_file_name, spec, buildargs) Index: osc/conf.py =================================================================== --- osc/conf.py (revision 2459) +++ osc/conf.py (working copy) @@ -42,6 +42,7 @@ 'scheme': 'https', 'user': 'your_username', 'packagecachedir': '/var/tmp/osbuild-packagecache', + 'buildinfodir': '/var/tmp/oscbuild-buildinfodir', 'su-wrapper': 'su -c', 'build-cmd': '/usr/bin/build', 'build-root': '/var/tmp/build-root', Index: osc/commandline.py =================================================================== --- osc/commandline.py (revision 2459) +++ osc/commandline.py (working copy) @@ -1318,6 +1318,10 @@ help='Delete old build root before initializing it') @cmdln.option('--no-changelog', action='store_true', help='don\'t update the package changelog from a changes file') + @cmdln.option('--dont-use-cached-buildinfo', action='store_true', + help="Don't use cached buildinfo even if it exists") + @cmdln.option('--offline', action='store_true', + help="Don't phone home for building; instead use cached data if it exists") @cmdln.option('--noinit', '--no-init', action='store_true', help='Skip initialization of build root and start with build immediately.') @cmdln.option('-p', '--prefer-pkgs', metavar='DIR', action='append',
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor