From aa471079451dc5f54c36ff341830e66bc36f1a97 Mon Sep 17 00:00:00 2001 From: Colin Walters Date: Sun, 3 Oct 2010 16:56:42 -0400 Subject: Add rpmci-update-config, other bits --- rpmci/rpmci_update_config_main.py | 100 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 rpmci/rpmci_update_config_main.py (limited to 'rpmci/rpmci_update_config_main.py') diff --git a/rpmci/rpmci_update_config_main.py b/rpmci/rpmci_update_config_main.py new file mode 100644 index 0000000..98355c1 --- /dev/null +++ b/rpmci/rpmci_update_config_main.py @@ -0,0 +1,100 @@ +#!/usr/bin/python + +# rpmci_update_config_main.py: +# Implementation of rpmci-update-config +# +# 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 +from ConfigParser import SafeConfigParser +import logging +import urllib +import urlparse +import subprocess + +import glib +import gobject +import gio + +from . import msgqueue +from . import artifact +from . import spec + +def _write_vcs_urls(options, config, urls): + mirror_dir = config.get('VCS', 'mirror_dir') + f = open(os.path.join(mirror_dir, 'vcs.txt'), 'w') + for url in urls: + f.write(url) + f.write('\n') + f.close() + +def _run_vcsmirror(options, config): + exec_basedir = os.path.dirname(sys.argv[0]) + + args = [os.path.join(exec_basedir, 'rpmci-vcs-mirror'), + '--config', options.config, + '--clone-then-exit'] + print "Running: %r" % (args, ) + subprocess.check_call(args, stdout=sys.stdout, stderr=sys.stderr) + +def update_config(options, config): + mirror_dir = config.get('VCS', 'mirror_dir') + + artifact_set = artifact.ArtifactSet.from_config(config, 'releases') + + fedora_git_urls = set() + + unique_buildtargets = artifact_set.get_build_targets() + + for target in unique_buildtargets: + url = artifact.fedora_git_url_for_build_target(config, target) + fedora_git_urls.add(url) + + _write_vcs_urls(options, config, fedora_git_urls) + _run_vcsmirror(options, config) + + all_urls = set(fedora_git_urls) + for url in fedora_git_urls: + escaped_url = urllib.quote(url, '') + vcsdir = os.path.join(mirror_dir, escaped_url) + if not os.path.isdir(vcsdir): + raise SystemExit("Not a directory: %r" % (vcsdir, )) + specpath = None + for filename in os.listdir(vcsdir): + if filename.endswith('.spec'): + specpath = os.path.join(vcsdir, filename) + break + assert specpath is not None + spec_obj = spec.Spec(specpath) + upstream_vcs_url = spec_obj.get_vcs() + all_urls.add(upstream_vcs_url) + + _write_vcs_urls(options, config, all_urls) + _run_vcsmirror(options, config) + +def main(): + glib.threads_init() + + opts = optparse.OptionParser("usage: %prog [options]") + 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) + + update_config(options, config) + sys.exit(0) -- cgit