diff options
Diffstat (limited to 'create-srpm')
-rwxr-xr-x | create-srpm | 100 |
1 files changed, 57 insertions, 43 deletions
diff --git a/create-srpm b/create-srpm index 3dab068..373b072 100755 --- a/create-srpm +++ b/create-srpm @@ -1,6 +1,7 @@ #!/usr/bin/python -from RepSys import Error, config, plugins +from RepSys import Error, config, plugins, layout +from RepSys.mirror import strip_username from RepSys.rpmutil import get_srpm from RepSys.cgiutil import get_targets from RepSys.util import mapurl, execcmd, get_helper @@ -8,6 +9,9 @@ import sys import os import pwd import optparse +import subprocess +import urlparse +import urllib class CmdError(Error): pass @@ -15,15 +19,13 @@ class CmdIface: def author_email(self, author): return config.get("users", author) - def submit_package(self, packageurl, packagerev, targetname, - dontmapurl_=0, define=[]): + def submit_package(self, urls, revision, targetname, dontmapurl_=0, + define=[]): pw = pwd.getpwuid(os.getuid()) username = pw[0] packager = config.get("users", username) or pw[4] if not packager: raise CmdError, "your email was not found" - elif not packagerev: - raise CmdError, "no revision provided" elif not targetname: raise CmdError, "no target provided" else: @@ -33,45 +35,49 @@ class CmdIface: break else: raise CmdError, "target not found" - try: - tmp = int(packagerev) - except ValueError: - raise CmdError, "invalid revision provided" - for allowed in target.allowed: - if packageurl.startswith(allowed): - break - else: - raise CmdError, "%s is not allowed for this target" \ - % packageurl - newurl = packageurl - if not dontmapurl_: - newurl = mapurl(packageurl) - targetsrpms = get_srpm(newurl, - revision=packagerev, - targetdirs=target.target, - packager=packager, - revname=1, - svnlog=1, - scripts=target.scripts, - macros=target.macros) - - uploadsrpm = get_helper("upload-srpm") - if uploadsrpm: - upload_command = [ uploadsrpm ] + for url in urls: + url = strip_username(url) + for allowed in target.allowed: + if url.startswith(allowed): + break + else: + raise CmdError, "%s is not allowed for this target" \ + % url + if not dontmapurl_: #FIXME don't use it! + urls = [mapurl(url) for url in urls] + uploadsrpms = [] + for url in urls: + urlrev = revision or layout.get_url_revision(url) + url, _ = layout.split_url_revision(url) + targetsrpms = get_srpm(url, + revision=urlrev, + targetdirs=target.target, + packager=packager, + svnlog=1, + revname=1, + scripts=target.scripts, + macros=target.macros) + uploadsrpms.extend(targetsrpms) + uploadcmd = get_helper("upload-srpm") + if uploadcmd: + upload_command = [uploadcmd] if define: for x in define: upload_command.append("--define") upload_command.append(x) upload_command.append(targetname) - upload_command.append(targetsrpms[0]) - status, output = execcmd(" ".join(upload_command), - noerror=1) - if os.path.isfile(targetsrpms[0]): - os.unlink(targetsrpms[0]) - else: - sys.stderr.write("warning: upload ok; temp file '%s' removed unexpectedly\n" % (targetsrpms[0])) + upload_command.extend(uploadsrpms) + command = subprocess.list2cmdline(upload_command) + status, output = execcmd(command, noerror=1) + for srpm in uploadsrpms: + if os.path.isfile(srpm): + os.unlink(srpm) + else: + sys.stderr.write("warning: temporary file "\ + "'%s' removed unexpectedly\n" % srpm) if status != 0: - raise CmdError, "Failed to upload %s:\n%s" % (packageurl, output) + raise CmdError, "Failed to upload "\ + "%s:\n%s" % (" ".join(urls), output) return 1 def submit_targets(self): @@ -79,18 +85,21 @@ class CmdIface: def parse_options(): - usage = "create-srpm <packageurl> -t <target> [-r <revision>]" + usage = "create-srpm <packageurl> -t <target>" parser = optparse.OptionParser(usage=usage) - parser.add_option("-r", "--revision", dest="revision", type="string", - help="the revision number") parser.add_option("-t", "--target", type="string", dest="target", help="target name") parser.add_option("-M", "--nomapping", action="store_true", dest="urlmap", default=False, help="disable url mapping") parser.add_option("--define", action="append") + parser.add_option("--list", dest="list_targets", default=False, + action="store_true", + help="list submit targets available") + parser.add_option("-r", help="revision", dest="revision", + type="int", default=None) opts, args = parser.parse_args() - if not args: + if not opts.list_targets and not args: parser.error("you must supply a package url") return opts, args @@ -100,7 +109,12 @@ def main(): iface = CmdIface() opts, args = parse_options() try: - iface.submit_package(args[0], opts.revision, opts.target, opts.urlmap, opts.define) + if opts.list_targets: + for target in iface.submit_targets(): + print target + else: + iface.submit_package(args, opts.revision, opts.target, opts.urlmap, + opts.define) except Error, e: sys.stderr.write("error: %s\n" % str(e)) sys.exit(1) |