#!/usr/bin/python from RepSys import Error, config from RepSys.rpmutil import get_srpm from RepSys.cgiutil import get_targets from RepSys.util import mapurl, execcmd, get_helper import sys import os import pwd import optparse class CmdError(Error): pass class CmdIface: def author_email(self, author): return config.get("users", author) def submit_package(self, packageurl, packagerev, 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: targetname = targetname.lower() for target in get_targets(): if target.name.lower() == targetname: 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 ] 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])) if status != 0: raise CmdError, "Failed to upload %s:\n%s" % (packageurl, output) return 1 def submit_targets(self): return [x.name for x in get_targets()] def parse_options(): usage = "create-srpm -t [-r ]" 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") opts, args = parser.parse_args() if not args: parser.error("you must supply a package url") return opts, args def main(): iface = CmdIface() opts, args = parse_options() try: iface.submit_package(args[0], opts.revision, opts.target, opts.urlmap, opts.define) except Error, e: sys.stderr.write("error: %s\n" % str(e)) sys.exit(1) if __name__ == "__main__": main() # vim:ts=4:sw=4:et