From fc09558a16340ec5ea420a2fd11573db3a3b3698 Mon Sep 17 00:00:00 2001 From: Colin Walters Date: Wed, 13 Oct 2010 14:08:55 -0400 Subject: rpmci-inject-rebuild -> rpmci-admin Generalize the tool a bit. --- rpmci-admin | 20 +++++++++ rpmci-inject-rebuild | 20 --------- rpmci/rpmci_admin_main.py | 90 ++++++++++++++++++++++++++++++++++++++ rpmci/rpmci_binrpm_builder_main.py | 18 ++++++++ rpmci/rpmci_inject_rebuild_main.py | 72 ------------------------------ 5 files changed, 128 insertions(+), 92 deletions(-) create mode 100755 rpmci-admin delete mode 100755 rpmci-inject-rebuild create mode 100644 rpmci/rpmci_admin_main.py delete mode 100644 rpmci/rpmci_inject_rebuild_main.py diff --git a/rpmci-admin b/rpmci-admin new file mode 100755 index 0000000..5851a96 --- /dev/null +++ b/rpmci-admin @@ -0,0 +1,20 @@ +#!/usr/bin/python + +# rpmci-admin: +# Administrative tools +# +# Licensed under the new-BSD license (http://www.opensource.org/licenses/bsd-license.php) +# Copyright (C) 2010 Red Hat, Inc. +# Written by Colin Walters + +import os +import sys + +if os.path.isdir('.git'): + sys.path.insert(0, os.getcwd()) + +import rpmci +from rpmci.rpmci_admin_main import main + +if __name__ == '__main__': + main() diff --git a/rpmci-inject-rebuild b/rpmci-inject-rebuild deleted file mode 100755 index bacbf2f..0000000 --- a/rpmci-inject-rebuild +++ /dev/null @@ -1,20 +0,0 @@ -#!/usr/bin/python - -# rpmci-inject-rebuild: -# Request a rebuild -# -# Licensed under the new-BSD license (http://www.opensource.org/licenses/bsd-license.php) -# Copyright (C) 2010 Red Hat, Inc. -# Written by Colin Walters - -import os -import sys - -if os.path.isdir('.git'): - sys.path.insert(0, os.getcwd()) - -import rpmci -from rpmci.rpmci_inject_rebuild_main import main - -if __name__ == '__main__': - main() diff --git a/rpmci/rpmci_admin_main.py b/rpmci/rpmci_admin_main.py new file mode 100644 index 0000000..67f19d0 --- /dev/null +++ b/rpmci/rpmci_admin_main.py @@ -0,0 +1,90 @@ +#!/usr/bin/python + +# rpmci_admin_main.py: +# Implementation of rpmci-admin +# +# Licensed under the new-BSD license (http://www.opensource.org/licenses/bsd-license.php) +# Copyright (C) 2010 Red Hat, Inc. +# Written by Colin Walters + +import os +import sys +import time +import shutil +import optparse +import logging +from ConfigParser import SafeConfigParser +import subprocess +import datetime + +import glib +import gobject +import gio + +from . import artifact +from . import msgqueue + +def rebuild_one(options, config, args): + if len(args) != 1: + print "Usage: rebuild-one MODULE" + sys.exit(1) + module = args[0] + artifact_set = artifact.ArtifactSet.from_config(config) + target = None + for target_iter in artifact_set.get_build_targets(): + if target_iter.module == module: + target = target_iter + break + if target is None: + raise SystemExit("Couldn't find module %r in configuration" % (module, )) + upstream_url = artifact.upstream_vcs_url_for_build_target(config, target) + + vcs_msgqueue_dir = config.get('VCS', 'msgqueue') + vcs_msgqueue = msgqueue.MessageQueue(vcs_msgqueue_dir) + msg = msgqueue.Message(None, {'type': 'update'}, {'url': upstream_url}) + vcs_msgqueue.append(msg) + print "Wrote %s" % (msg.ident, ) + +def rebuild_all(options, config, module): + build_msgqueue_dir = config.get('build', 'msgqueue') + build_msgqueue = msgqueue.MessageQueue(build_msgqueue_dir) + + msg = msgqueue.Message(None, {}, {'rebuild': True}) + build_msgqueue.append(msg) + + print "Wrote %s" % (msg.ident, ) + +def main(): + if hasattr('glib', 'threads_init'): + glib.threads_init() + + opts = optparse.OptionParser("usage: %prog [options] ACTION [args]") + opts.add_option('-c', '--config', dest='config', help="Path to configuration file") + opts.add_option('', '--debug', action='store_true', help="Print verbose debugging") + + (options, args) = opts.parse_args() + + if options.config is None: + print "Must specify --config" + sys.exit(1) + + config = SafeConfigParser({'home': os.environ['HOME']}) + config.read(options.config) + level = logging.DEBUG if options.debug else logging.INFO + logging.basicConfig(stream=sys.stderr, level=level) + + if len(args) < 1: + print "Must specify a valid command:" + print " rebuild-one MODNAME" + print " rebuild-all" + opts.print_usage() + sys.exit(1) + + if args[0] == 'rebuild-one': + rebuild_one(options, config, args[1:]) + elif args[0] == 'rebuild-all': + rebuild_all(options, config, args[1:]) + else: + print "Invalid command" + + sys.exit(0) diff --git a/rpmci/rpmci_binrpm_builder_main.py b/rpmci/rpmci_binrpm_builder_main.py index 3854434..d62eafb 100644 --- a/rpmci/rpmci_binrpm_builder_main.py +++ b/rpmci/rpmci_binrpm_builder_main.py @@ -36,6 +36,9 @@ class BinRPMBuilder(object): srpm_msgqueue_dir = config.get('SRPM', 'msgqueue') self._srpm_msgqueue = msgqueue.MessageQueue(srpm_msgqueue_dir) + build_msgqueue_dir = config.get('build', 'msgqueue') + self._build_msgqueue = msgqueue.MessageQueue(build_msgqueue_dir) + self._artifactset = artifact.ArtifactSet.from_config(config) self._artifact_to_repo = {} artifact_basedir = config.get('build', 'artifactdir') @@ -48,9 +51,11 @@ class BinRPMBuilder(object): def start(self): latest = self._srcrepo.get_latest_version() + logging.info("Doing an initial build now") if latest is not None: self._rebuild_to_repoversion(latest.version) self._srpm_msgqueue.connect(self._on_srpm_message) + self._build_msgqueue.connect(self._on_build_message) def _target_for_srpm(self, srpm_name): (name, ver, rest) = srpm_name.rsplit('-', 2) @@ -80,6 +85,18 @@ class BinRPMBuilder(object): arch = architecture return '%s-%s' % (mock_os, arch) + def _on_build_message(self, q, messages): + rebuild_all = False + for msg in messages: + if 'rebuild' in msg.payload: + logging.info("Processing rebuild all message") + rebuild_all = True + q.consume(msg) + + if rebuild_all: + latest_repo = self._srcrepo.get_latest_version() + self._rebuild_to_repoversion(latest_repo.version) + def _on_srpm_message(self, q, messages): msg_list = list(messages) num_msgs = len(msg_list) @@ -99,6 +116,7 @@ class BinRPMBuilder(object): exec_basedir = os.path.dirname(sys.argv[0]) for artifact in self._artifactset.artifacts: + logging.info("Preparing rebuild of artifact %r" % (artifact.name, )) artifact_srpms = set() failed = False for target in artifact.targets: diff --git a/rpmci/rpmci_inject_rebuild_main.py b/rpmci/rpmci_inject_rebuild_main.py deleted file mode 100644 index 5349be6..0000000 --- a/rpmci/rpmci_inject_rebuild_main.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/python - -# rpmci_inject_rebuild_main.py: -# Implementation of rpmci-inject-rebuild -# -# Licensed under the new-BSD license (http://www.opensource.org/licenses/bsd-license.php) -# Copyright (C) 2010 Red Hat, Inc. -# Written by Colin Walters - -import os -import sys -import time -import shutil -import optparse -import logging -from ConfigParser import SafeConfigParser -import subprocess -import datetime - -import glib -import gobject -import gio - -from . import artifact -from . import msgqueue - -def inject_rebuild(options, config, module): - artifact_set = artifact.ArtifactSet.from_config(config) - target = None - for target_iter in artifact_set.get_build_targets(): - if target_iter.module == module: - target = target_iter - break - if target is None: - raise SystemExit("Couldn't find module %r in configuration" % (module, )) - upstream_url = artifact.upstream_vcs_url_for_build_target(config, target) - - vcs_msgqueue_dir = config.get('VCS', 'msgqueue') - vcs_msgqueue = msgqueue.MessageQueue(vcs_msgqueue_dir) - msg = msgqueue.Message(None, {'type': 'update'}, {'url': upstream_url}) - vcs_msgqueue.append(msg) - print "Wrote %s" % (msg.ident, ) - -def main(): - if hasattr('glib', 'threads_init'): - glib.threads_init() - - opts = optparse.OptionParser("usage: %prog [options] ACTION [args]") - opts.add_option('-c', '--config', dest='config', help="Path to configuration file") - opts.add_option('', '--debug', action='store_true', help="Print verbose debugging") - - (options, args) = opts.parse_args() - - if options.config is None: - print "Must specify --config" - sys.exit(1) - - config = SafeConfigParser({'home': os.environ['HOME']}) - config.read(options.config) - level = logging.DEBUG if options.debug else logging.INFO - logging.basicConfig(stream=sys.stderr, level=level) - - if len(args) < 1: - print "Must specify module to be rebuilt" - opts.print_usage() - sys.exit(1) - - module = args[0] - - inject_rebuild(options, config, module) - - sys.exit(0) -- cgit