source: soft/build_system/build_system/repsys/branches/V1_6_X/create-srpm @ 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.8 KB
Line 
1#!/usr/bin/python
2
3from RepSys import Error, config, plugins
4from RepSys.rpmutil import get_srpm
5from RepSys.cgiutil import get_targets
6from RepSys.util import mapurl, execcmd, get_helper
7import sys
8import os
9import pwd
10import optparse
11
12class CmdError(Error): pass
13
14class 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
81def 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
98def 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
109if __name__ == "__main__":
110    main()
111
112# vim:ts=4:sw=4:et
Note: See TracBrowser for help on using the repository browser.