summaryrefslogtreecommitdiffstats
path: root/rpmci/rpmci_update_config_main.py
diff options
context:
space:
mode:
Diffstat (limited to 'rpmci/rpmci_update_config_main.py')
-rw-r--r--rpmci/rpmci_update_config_main.py100
1 files changed, 100 insertions, 0 deletions
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 <walters@verbum.org>
+
+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)