diff options
author | Colin Walters <walters@verbum.org> | 2010-02-23 15:08:24 -0500 |
---|---|---|
committer | Colin Walters <walters@verbum.org> | 2010-02-23 15:08:24 -0500 |
commit | cee6a3708c0e71f928aa12f72ad22eda6029488b (patch) | |
tree | 3d8ea6292647390320f6ee4a21baa6ee12b7e271 /fedpkg-pull-build-chain | |
parent | 9ae02b4918c4e6857e2feb5dd0742415045a4a28 (diff) | |
download | fedpkg-make-pull-cee6a3708c0e71f928aa12f72ad22eda6029488b.tar.gz fedpkg-make-pull-cee6a3708c0e71f928aa12f72ad22eda6029488b.tar.xz fedpkg-make-pull-cee6a3708c0e71f928aa12f72ad22eda6029488b.zip |
[fedpkg-pull-build-chain] Much closer to working
Diffstat (limited to 'fedpkg-pull-build-chain')
-rwxr-xr-x[-rw-r--r--] | fedpkg-pull-build-chain | 69 |
1 files changed, 57 insertions, 12 deletions
diff --git a/fedpkg-pull-build-chain b/fedpkg-pull-build-chain index 47f4ba7..4c943b3 100644..100755 --- a/fedpkg-pull-build-chain +++ b/fedpkg-pull-build-chain @@ -13,19 +13,28 @@ import getopt import os import sys import subprocess +import shutil + +def check_call_verbose(*args, **kwargs): + print "Running: %r" % (args[0], ) + subprocess.check_call(*args, **kwargs) def main(): try: - opts, args = getopt.getopt(sys.argv[1:], '', ['release', 'arch']) + opts, args = getopt.getopt(sys.argv[1:], '', ['release=', 'arch=', 'resultdir=', 'force']) except getopt.GetoptError, e: + print unicode(e) print "Usage: fedpkg-pull-build-chain --release=F-12 --resultdir=/path/to/repo rpm1 rpm2 ..." sys.exit(1) + force = False release = None resultdir = None architectures = [] for o, a in opts: - if o in ('--release', ): + if o in ('--force', ): + force = True + elif o in ('--release', ): release = a elif o in ('--arch', ): architectures.append(a) @@ -40,13 +49,40 @@ def main(): sys.exit(1) if len(architectures) == 0: - architectures.append(subprocess.check_call(['uname', '-m'], stdout=subprocess.PIPE).communicate()[0]) + architectures.append(subprocess.Popen(['uname', '-m'], stdout=subprocess.PIPE).communicate()[0].strip()) + + if not os.path.exists(resultdir): + print "Creating repository in %r" % (resultdir, ) + os.mkdir(resultdir) + check_call_verbose(['createrepo', '.'], cwd=resultdir) + + try: + os.mkdir('_build') + except OSError, e: + pass + + mockreleases = [] + for f in ('site-defaults.cfg', 'logging.ini'): + shutil.copy2('/etc/mock/' + f, '_build') + + for architecture in architectures: + # FIXME do this better + mockrelease = 'fedora-' + release[2:].lower() + '-' + architecture + f_in = open(os.path.join('/etc', 'mock', mockrelease + '.cfg')) + new_mockrelease_path = os.path.join('_build', mockrelease + '.cfg') + f_out = open(new_mockrelease_path, 'w') + for line in f_in: + f_out.write(line) + f_in.close() + f_out.write('config_opts[\'yum.conf\'] += """[buildchain]\nname=buildchain\nbaseurl=file://%s\n"""' % (os.path.abspath(resultdir), )) + f_out.close() + mockreleases.append(mockrelease) failed = [] for arg in args: if not os.path.isdir(arg): print "Checking out %r from fedora-cvs" % (arg, ) - subprocess.check_call(['fedora-cvs', arg], stdout=sys.stdout, stderr=sys.stderr) + check_call_verbose(['fedora-cvs', arg], stdout=sys.stdout, stderr=sys.stderr) release_dir = os.path.join(arg, release) for filename in os.listdir(release_dir): fpath = os.path.join(release_dir, filename) @@ -54,8 +90,11 @@ def main(): print "Deleting old srpm: " + fpath os.unlink(fpath) print "Running fedpkg-make-pull" + args = ['fedpkg-make-pull'] + if force: + args.append('--force') try: - subprocess.check_call(['fedpkg-make-pull'], stdout=sys.stdout, stderr=sys.stderr) + check_call_verbose(args, stdout=sys.stdout, stderr=sys.stderr, cwd=release_dir) except subprocess.CalledProcessError, e: print "Failed: " + unicode(e) failed.append(arg) @@ -72,26 +111,32 @@ def main(): mock_resultdir = os.path.join('_build', arg) try: - os.mkdir(mock_resultdir) + os.makedirs(mock_resultdir) except OSError, e: # assume EEXIST, and clean out old results for filename in os.listdir(mock_resultdir): os.unlink(os.path.join(mock_resultdir, filename)) - for architecture in architectures: - # FIXME do this better - mockrelease = 'fedora-' + release[2:].lower() + '-' + architecture + + current_failed = False + for mockrelease in mockreleases: try: - subprocess.check_call(['mock', '-r', mockrelease, '--resultdir=' + mock_resultdir, 'rebuild', srpm], stdout=sys.stdout, stderr=sys.stderr) + check_call_verbose(['mock', '--configdir=_build', '-r', mockrelease, '--resultdir=' + mock_resultdir, 'rebuild', srpm], stdout=sys.stdout, stderr=sys.stderr) except subprocess.CalledProcessError, e: print "Failed: " + unicode(e) + current_failed = True failed.append(arg) - continue + break + if current_failed: + continue for filename in os.listdir(mock_resultdir): if not filename.endswith('.rpm'): continue - os.link(os.path.join(resultdir, filename), os.path.join(mock_resultdir, filename)) + src = os.path.join(mock_resultdir, filename) + linkname = os.path.join(resultdir, filename) + print "Linking %r to %r" % (src, linkname) + os.link(src, linkname) if len(failed) > 0: sys.exit(1) |