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
|
#!/usr/bin/python
from RepSys import Error, config
from RepSys.command import *
from RepSys.rpmutil import get_spec, get_submit_info
from RepSys.util import get_auth, execcmd, get_helper
import urllib
import getopt
import sys
import re
#try:
# import NINZ.client
#except ImportError:
# NINZ = None
import xmlrpclib
HELP = """\
Usage: repsys submit [OPTIONS] [URL [REVISION]]
Options:
-t TARGET Submit given package URL to given target
-l Just list available targets
-h Show this message
Examples:
repsys submit
repsys submit foo 14800
repsys submit https://repos/svn/cnc/snapshot/foo 14800
repsys submit -l https://repos
"""
def parse_options():
parser = OptionParser(help=HELP)
parser.defaults["revision"] = ""
parser.add_option("-t", dest="target", default="Cooker")
parser.add_option("-l", dest="list", action="store_true")
parser.add_option("--define", action="append")
opts, args = parser.parse_args()
if not args:
name, rev = get_submit_info(".")
try:
yn = raw_input("Submit '%s', revision %d (y/N)? " % (name, rev))
except KeyboardInterrupt:
yn = "n"
if yn.lower() in ("y", "yes"):
args = name, str(rev)
else:
print "Cancelled."
sys.exit(1)
elif len(args) > 2:
raise Error, "invalid arguments"
opts.pkgdirurl = default_parent(args[0])
if len(args) == 2:
opts.revision = re.compile(r".*?(\d+).*").sub(r"\1", args[1])
elif not opts.list:
raise Error, "provide -l or a revision number"
return opts
def submit(pkgdirurl, revision, target, list=0, define=[]):
#if not NINZ:
# raise Error, "you must have NINZ installed to use this command"
type, rest = urllib.splittype(pkgdirurl)
host, path = urllib.splithost(rest)
user, host = urllib.splituser(host)
host, port = urllib.splitport(host)
if type != "https" and type != "svn+ssh":
raise Error, "you must use https:// or svn+ssh:// urls"
if user:
user, passwd = urllib.splitpasswd(user)
if passwd:
raise Error, "do not use a password in your command line"
if type == "https":
user, passwd = get_auth(username=user)
#soap = NINZ.client.Binding(host=host,
# url="https://%s/scripts/cnc/soap" % host,
# ssl=1,
# auth=(NINZ.client.AUTH.httpbasic,
# user, passwd))
if port:
port = ":"+port
else:
port = ""
iface = xmlrpclib.ServerProxy("https://%s:%s@%s%s/scripts/cnc/xmlrpc"
% (user, passwd, host, port))
try:
if list:
targets = iface.submit_targets()
if not targets:
raise Error, "no targets available"
sys.stdout.writelines(['"%s"\n' % x for x in targets])
else:
iface.submit_package(pkgdirurl, revision, target)
print "Package submitted!"
#except NINZ.client.SoapError, e:
except xmlrpclib.ProtocolError, e:
raise Error, "remote error: "+str(e.errmsg)
except xmlrpclib.Fault, e:
raise Error, "remote error: "+str(e.faultString)
except xmlrpclib.Error, e:
raise Error, "remote error: "+str(e)
else:
# runs a create-srpm in the server through ssh, which will make a
# copy of the rpm in the export directory
if list:
raise Error, "unable to list targets from svn+ssh:// URLs"
createsrpm = get_helper("create-srpm")
command = "ssh %s %s '%s' -r %s -t %s" % (
host, createsrpm, pkgdirurl, revision, target)
if define:
command += " " + " ".join([ "--define " + x for x in define ])
status, output = execcmd(command)
if status == 0:
print "Package submitted!"
else:
sys.stderr.write(output)
sys.exit(status)
def main():
do_command(parse_options, submit)
# vim:et:ts=4:sw=4
|