summaryrefslogtreecommitdiffstats
path: root/fedpkg-pull-build-chain
diff options
context:
space:
mode:
authorColin Walters <walters@verbum.org>2010-02-23 15:08:24 -0500
committerColin Walters <walters@verbum.org>2010-02-23 15:08:24 -0500
commitcee6a3708c0e71f928aa12f72ad22eda6029488b (patch)
tree3d8ea6292647390320f6ee4a21baa6ee12b7e271 /fedpkg-pull-build-chain
parent9ae02b4918c4e6857e2feb5dd0742415045a4a28 (diff)
downloadfedpkg-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-chain69
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)