aboutsummaryrefslogtreecommitdiffstats
path: root/create-srpm
diff options
context:
space:
mode:
Diffstat (limited to 'create-srpm')
-rwxr-xr-xcreate-srpm126
1 files changed, 126 insertions, 0 deletions
diff --git a/create-srpm b/create-srpm
new file mode 100755
index 0000000..373b072
--- /dev/null
+++ b/create-srpm
@@ -0,0 +1,126 @@
+#!/usr/bin/python
+
+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
+import sys
+import os
+import pwd
+import optparse
+import subprocess
+import urlparse
+import urllib
+
+class CmdError(Error): pass
+
+class CmdIface:
+ def author_email(self, author):
+ return config.get("users", author)
+
+ 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 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"
+ 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.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" % (" ".join(urls), output)
+ return 1
+
+ def submit_targets(self):
+ return [x.name for x in get_targets()]
+
+
+def parse_options():
+ usage = "create-srpm <packageurl> -t <target>"
+ parser = optparse.OptionParser(usage=usage)
+ 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 opts.list_targets and not args:
+ parser.error("you must supply a package url")
+ return opts, args
+
+
+def main():
+ plugins.load()
+ iface = CmdIface()
+ opts, args = parse_options()
+ try:
+ 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)
+
+
+if __name__ == "__main__":
+ main()
+
+# vim:ts=4:sw=4:et