1 | #!/usr/bin/python |
---|
2 | |
---|
3 | from RepSys import Error, config, plugins |
---|
4 | from RepSys.rpmutil import get_srpm |
---|
5 | from RepSys.cgiutil import get_targets |
---|
6 | from RepSys.util import mapurl, execcmd, get_helper |
---|
7 | import sys |
---|
8 | import os |
---|
9 | import pwd |
---|
10 | import optparse |
---|
11 | |
---|
12 | class CmdError(Error): pass |
---|
13 | |
---|
14 | class CmdIface: |
---|
15 | def author_email(self, author): |
---|
16 | return config.get("users", author) |
---|
17 | |
---|
18 | def submit_package(self, packageurl, packagerev, targetname, |
---|
19 | dontmapurl_=0, define=[]): |
---|
20 | pw = pwd.getpwuid(os.getuid()) |
---|
21 | username = pw[0] |
---|
22 | packager = config.get("users", username) or pw[4] |
---|
23 | if not packager: |
---|
24 | raise CmdError, "your email was not found" |
---|
25 | elif not packagerev: |
---|
26 | raise CmdError, "no revision provided" |
---|
27 | elif not targetname: |
---|
28 | raise CmdError, "no target provided" |
---|
29 | else: |
---|
30 | targetname = targetname.lower() |
---|
31 | for target in get_targets(): |
---|
32 | if target.name.lower() == targetname: |
---|
33 | break |
---|
34 | else: |
---|
35 | raise CmdError, "target not found" |
---|
36 | try: |
---|
37 | tmp = int(packagerev) |
---|
38 | except ValueError: |
---|
39 | raise CmdError, "invalid revision provided" |
---|
40 | for allowed in target.allowed: |
---|
41 | if packageurl.startswith(allowed): |
---|
42 | break |
---|
43 | else: |
---|
44 | raise CmdError, "%s is not allowed for this target" \ |
---|
45 | % packageurl |
---|
46 | newurl = packageurl |
---|
47 | if not dontmapurl_: |
---|
48 | newurl = mapurl(packageurl) |
---|
49 | targetsrpms = get_srpm(newurl, |
---|
50 | revision=packagerev, |
---|
51 | targetdirs=target.target, |
---|
52 | packager=packager, |
---|
53 | revname=1, |
---|
54 | svnlog=1, |
---|
55 | scripts=target.scripts, |
---|
56 | macros=target.macros) |
---|
57 | |
---|
58 | uploadsrpm = get_helper("upload-srpm") |
---|
59 | if uploadsrpm: |
---|
60 | upload_command = [ uploadsrpm ] |
---|
61 | if define: |
---|
62 | for x in define: |
---|
63 | upload_command.append("--define") |
---|
64 | upload_command.append(x) |
---|
65 | upload_command.append(targetname) |
---|
66 | upload_command.append(targetsrpms[0]) |
---|
67 | status, output = execcmd(" ".join(upload_command), |
---|
68 | noerror=1) |
---|
69 | if os.path.isfile(targetsrpms[0]): |
---|
70 | os.unlink(targetsrpms[0]) |
---|
71 | else: |
---|
72 | sys.stderr.write("warning: upload ok; temp file '%s' removed unexpectedly\n" % (targetsrpms[0])) |
---|
73 | if status != 0: |
---|
74 | raise CmdError, "Failed to upload %s:\n%s" % (packageurl, output) |
---|
75 | return 1 |
---|
76 | |
---|
77 | def submit_targets(self): |
---|
78 | return [x.name for x in get_targets()] |
---|
79 | |
---|
80 | |
---|
81 | def parse_options(): |
---|
82 | usage = "create-srpm <packageurl> -t <target> [-r <revision>]" |
---|
83 | parser = optparse.OptionParser(usage=usage) |
---|
84 | parser.add_option("-r", "--revision", dest="revision", type="string", |
---|
85 | help="the revision number") |
---|
86 | parser.add_option("-t", "--target", type="string", dest="target", |
---|
87 | help="target name") |
---|
88 | parser.add_option("-M", "--nomapping", action="store_true", |
---|
89 | dest="urlmap", default=False, |
---|
90 | help="disable url mapping") |
---|
91 | parser.add_option("--define", action="append") |
---|
92 | opts, args = parser.parse_args() |
---|
93 | if not args: |
---|
94 | parser.error("you must supply a package url") |
---|
95 | return opts, args |
---|
96 | |
---|
97 | |
---|
98 | def main(): |
---|
99 | plugins.load() |
---|
100 | iface = CmdIface() |
---|
101 | opts, args = parse_options() |
---|
102 | try: |
---|
103 | iface.submit_package(args[0], opts.revision, opts.target, opts.urlmap, opts.define) |
---|
104 | except Error, e: |
---|
105 | sys.stderr.write("error: %s\n" % str(e)) |
---|
106 | sys.exit(1) |
---|
107 | |
---|
108 | |
---|
109 | if __name__ == "__main__": |
---|
110 | main() |
---|
111 | |
---|
112 | # vim:ts=4:sw=4:et |
---|