source: soft/build_system/build_system/repsys/tags/V1_5_5/RepSys/commands/submit.py @ 1

Last change on this file since 1 was 1, checked in by fasma, 12 years ago

Initial Import from Mandriva's soft revision 224062 and package revision 45733

File size: 3.7 KB
Line 
1#!/usr/bin/python
2from RepSys import Error, config
3from RepSys.command import *
4from RepSys.util import execcmd
5from RepSys.rpmutil import get_spec, get_submit_info
6from RepSys.util import get_auth
7import urllib
8import getopt
9import sys
10import re
11
12#try:
13#    import NINZ.client
14#except ImportError:
15#    NINZ = None
16
17import xmlrpclib
18
19HELP = """\
20Usage: repsys submit [OPTIONS] [URL [REVISION]]
21
22Options:
23    -t TARGET  Submit given package URL to given target
24    -l         Just list available targets
25    -h         Show this message
26
27Examples:
28    repsys submit
29    repsys submit foo 14800
30    repsys submit https://repos/svn/cnc/snapshot/foo 14800
31    repsys submit -l https://repos
32"""
33
34def parse_options():
35    parser = OptionParser(help=HELP)
36    parser.defaults["revision"] = ""
37    parser.add_option("-t", dest="target", default="Cooker")
38    parser.add_option("-l", dest="list", action="store_true")
39    opts, args = parser.parse_args()
40    if not args:
41        name, rev = get_submit_info(".")
42        try:
43            yn = raw_input("Submit '%s', revision %d (y/N)? " % (name, rev))
44        except KeyboardInterrupt:
45            yn = "n"
46        if yn.lower() in ("y", "yes"):
47            args = name, str(rev)
48        else:
49            print "Cancelled."
50            sys.exit(1)
51    elif len(args) > 2:
52        raise Error, "invalid arguments"
53    opts.pkgdirurl = default_parent(args[0])
54    if len(args) == 2:
55        opts.revision = re.compile(r".*?(\d+).*").sub(r"\1", args[1])
56    elif not opts.list:
57        raise Error, "provide -l or a revision number"
58    return opts
59
60def submit(pkgdirurl, revision, target, list=0):
61    #if not NINZ:
62    #    raise Error, "you must have NINZ installed to use this command"
63    type, rest = urllib.splittype(pkgdirurl)
64    host, path = urllib.splithost(rest)
65    user, host = urllib.splituser(host)
66    host, port = urllib.splitport(host)
67    if type != "https" and type != "svn+ssh":
68        raise Error, "you must use https:// or svn+ssh:// urls"
69    if user:
70        user, passwd = urllib.splitpasswd(user)
71        if passwd:
72            raise Error, "do not use a password in your command line"
73
74    if type == "https":
75        user, passwd = get_auth(username=user)
76        #soap = NINZ.client.Binding(host=host,
77        #                           url="https://%s/scripts/cnc/soap" % host,
78        #                           ssl=1,
79        #                           auth=(NINZ.client.AUTH.httpbasic,
80        #                                 user, passwd))
81        if port:
82            port = ":"+port
83        else:
84            port = ""
85        iface = xmlrpclib.ServerProxy("https://%s:%s@%s%s/scripts/cnc/xmlrpc"
86                                      % (user, passwd, host, port))
87        try:
88            if list:
89                targets = iface.submit_targets()
90                if not targets:
91                    raise Error, "no targets available"
92                sys.stdout.writelines(['"%s"\n' % x for x in targets])
93            else:
94                iface.submit_package(pkgdirurl, revision, target)
95                print "Package submitted!"
96        #except NINZ.client.SoapError, e:
97        except xmlrpclib.ProtocolError, e:
98            raise Error, "remote error: "+str(e.errmsg)
99        except xmlrpclib.Fault, e:
100            raise Error, "remote error: "+str(e.faultString)
101        except xmlrpclib.Error, e:
102            raise Error, "remote error: "+str(e)
103    else:
104        status, output = execcmd("ssh %s /usr/share/repsys/create-srpm '%s' %s %s" % (host, pkgdirurl, revision, target))
105        if status == 0:
106            print "Package submitted!"
107        else:
108            sys.exit(status)
109           
110def main():
111    do_command(parse_options, submit)
112
113# vim:et:ts=4:sw=4
Note: See TracBrowser for help on using the repository browser.