-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcreate-srpm
executable file
·137 lines (124 loc) · 5 KB
/
create-srpm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
#!/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 urlparse
import urllib
class CmdError(Error): pass
class SubmitDisabled(Error): pass
class CmdIface:
def author_email(self, author):
return config.get("users", author)
def submit_package(self, urls, revision, targetname, dontmapurl_=0,
define=[], svnlog=True):
if config.getbool("submit", "disabled", False):
message = config.get("submit", "disabled-message",
"package submission is temporarily suspended, please "
"try again later")
raise SubmitDisabled, message
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=svnlog,
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)
status, output = execcmd(upload_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("-d", "--debug", default=False, action="store_true",
help="enable debugging output")
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)
parser.add_option("-K", "--keeplog", help="keep changelog as is",
action="store_true", default=False)
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()
if opts.debug:
config.set("global", "verbose", "yes")
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, not opts.keeplog)
except Error, e:
sys.stderr.write("error: %s\n" % str(e))
sys.exit(1)
if __name__ == "__main__":
main()
# vim:ts=4:sw=4:et