1 |
vip-ire |
1.1 |
diff -up plague-0.4.5.8/server/PackageJob.py.scm-updates plague-0.4.5.8/server/PackageJob.py |
2 |
|
|
--- plague-0.4.5.8/server/PackageJob.py.scm-updates 2008-09-21 07:38:41.000000000 -0600 |
3 |
|
|
+++ plague-0.4.5.8/server/PackageJob.py 2011-04-09 09:56:01.290335772 -0600 |
4 |
|
|
@@ -37,6 +37,7 @@ from plague import ArchUtils |
5 |
|
|
from plague import DebugUtils |
6 |
|
|
|
7 |
|
|
CVS_CMD = "/usr/bin/cvs" |
8 |
|
|
+GIT_CMD = "/usr/bin/git" |
9 |
|
|
MAKE_CMD = "/usr/bin/make" |
10 |
|
|
|
11 |
|
|
DEBUG = False |
12 |
|
|
@@ -134,7 +135,7 @@ class PackageJob: |
13 |
|
|
self.username = username |
14 |
|
|
self.starttime = time.time() |
15 |
|
|
self.endtime = 0 |
16 |
|
|
- self.use_cvs = self._server_cfg.get_bool("CVS", "use_cvs") |
17 |
|
|
+ |
18 |
|
|
self._source = source |
19 |
|
|
self.result_dir = None |
20 |
|
|
self.srpm_path = None |
21 |
|
|
@@ -150,7 +151,7 @@ class PackageJob: |
22 |
|
|
"server_work_dir"), "srpm_http_dir") |
23 |
|
|
|
24 |
|
|
first_stage = 'initialize' |
25 |
|
|
- if self.use_cvs == False: |
26 |
|
|
+ if source.endswith(".src.rpm") or source.find("/") != -1: |
27 |
|
|
first_stage = 'prep' |
28 |
|
|
pjc = PackageJobController(self, first_stage, 'waiting') |
29 |
|
|
pjc.start() |
30 |
|
|
@@ -289,54 +290,96 @@ class PackageJob: |
31 |
|
|
dirname = "%s-%s-%d" % (self.uid, self._source, time.time()) |
32 |
|
|
tmpdir = self._server_cfg.get_str("Directories", "tmpdir") |
33 |
|
|
self.checkout_tmpdir = os.path.join(tmpdir, dirname) |
34 |
|
|
- if os.path.exists(self.checkout_tmpdir): |
35 |
|
|
- shutil.rmtree(self.checkout_tmpdir, ignore_errors=True) |
36 |
|
|
+ if not self._source.endswith(".src.rpm") and self._source.find("/") == -1: |
37 |
|
|
+ if os.path.exists(self.checkout_tmpdir): |
38 |
|
|
+ shutil.rmtree(self.checkout_tmpdir, ignore_errors=True) |
39 |
|
|
os.makedirs(self.checkout_tmpdir) |
40 |
|
|
|
41 |
|
|
- # Set up CVS environment |
42 |
|
|
- env_args = "CVSROOT='%s'" % self._target_cfg.get_str("CVS", "cvs_root") |
43 |
|
|
- cvs_rsh = self._target_cfg.get_str("CVS", "cvs_rsh") |
44 |
|
|
- if len(cvs_rsh) > 0: |
45 |
|
|
- env_args = "%s CVS_RSH='%s'" % (env_args, cvs_rsh) |
46 |
|
|
- |
47 |
|
|
- # Checkout the module |
48 |
|
|
- cmd = 'umask 0022; cd %s; %s %s co -r %s %s' % (self.checkout_tmpdir, env_args, CVS_CMD, |
49 |
|
|
- self._source, self.package) |
50 |
|
|
- debugprint("%d: Running %s" % (self.uid, cmd)) |
51 |
|
|
- s, o = commands.getstatusoutput(cmd) |
52 |
|
|
- if s != 0: |
53 |
|
|
- err_msg = "Error: could not check out %s from %s - output was:\n\n" \ |
54 |
|
|
- "%s" % (self._source, self._target_str, o) |
55 |
|
|
- else: |
56 |
|
|
- # Just in case the 'common' directory didn't come along for the ride, |
57 |
|
|
- # get it from CVS |
58 |
|
|
- pkg_path = os.path.join(self.checkout_tmpdir, self.package) |
59 |
|
|
- if not os.path.exists(os.path.join(pkg_path, "common")): |
60 |
|
|
- cmd = 'cd %s; %s %s co common' % (pkg_path, env_args, CVS_CMD) |
61 |
|
|
+ if self._target_cfg.has_option("SCM", "cvs_root"): |
62 |
|
|
+ # Set up CVS environment |
63 |
|
|
+ env_args = "CVSROOT='%s'" % self._target_cfg.get_str("SCM", "cvs_root") |
64 |
|
|
+ cvs_rsh = self._target_cfg.get_str("SCM", "cvs_rsh") |
65 |
|
|
+ if len(cvs_rsh) > 0: |
66 |
|
|
+ env_args = "%s CVS_RSH='%s'" % (env_args, cvs_rsh) |
67 |
|
|
+ |
68 |
|
|
+ # Checkout the module |
69 |
|
|
+ cmd = 'umask 0022; cd %s; %s %s co -r %s %s' % (self.checkout_tmpdir, env_args, CVS_CMD, |
70 |
|
|
+ self._source, self.package) |
71 |
|
|
+ debugprint("%d: Running %s" % (self.uid, cmd)) |
72 |
|
|
+ s, o = commands.getstatusoutput(cmd) |
73 |
|
|
+ if s != 0: |
74 |
|
|
+ err_msg = "Error: could not check out %s from %s - output was:\n\n" \ |
75 |
|
|
+ "%s" % (self._source, self._target_str, o) |
76 |
|
|
+ else: |
77 |
|
|
+ # Just in case the 'common' directory didn't come along for the ride, |
78 |
|
|
+ # get it from CVS |
79 |
|
|
+ pkg_path = os.path.join(self.checkout_tmpdir, self.package) |
80 |
|
|
+ if not os.path.exists(os.path.join(pkg_path, "common")): |
81 |
|
|
+ cmd = 'cd %s; %s %s co common' % (pkg_path, env_args, CVS_CMD) |
82 |
|
|
+ debugprint("%d: Running %s" % (self.uid, cmd)) |
83 |
|
|
+ s, o = commands.getstatusoutput(cmd) |
84 |
|
|
+ if s != 0: |
85 |
|
|
+ err_msg = "Error: could not check out common directory - " \ |
86 |
|
|
+ "output was:\n\n%s" % (self._source, self._target_str, o) |
87 |
|
|
+ |
88 |
|
|
+ self.bm.notify_checkout_done(self) |
89 |
|
|
+ |
90 |
|
|
+ if err_msg: |
91 |
|
|
+ raise PrepError(err_msg) |
92 |
|
|
+ |
93 |
|
|
+ elif self._target_cfg.has_option("SCM", "git_root"): |
94 |
|
|
+ gitroot = self._target_cfg.get_str("SCM", "git_root") |
95 |
|
|
+ gitrepo = "%s/%s" % (gitroot, self.package) |
96 |
|
|
+ commonrepo = os.path.dirname(gitroot) + '/common' |
97 |
|
|
+ self.checkout_path = os.path.basename(self.package) |
98 |
|
|
+ if self.package.endswith('.git'): |
99 |
|
|
+ self.checkout_path = os.path.basename(self.package[:-4]) |
100 |
|
|
+ commonrepo = os.path.dirname(gitroot) + '/common.git' |
101 |
|
|
+ sourcedir = '%s/%s' % (self.checkout_tmpdir, self.checkout_path) |
102 |
|
|
+ |
103 |
|
|
+ # Checkout the module |
104 |
|
|
+ cmd = 'cd %s; umask 0022; %s clone -n %s %s' % (self.checkout_tmpdir, |
105 |
|
|
+ GIT_CMD, gitrepo, self.checkout_path) |
106 |
|
|
+ debugprint("%d: Running %s" % (self.uid, cmd)) |
107 |
|
|
+ s, o = commands.getstatusoutput(cmd) |
108 |
|
|
+ if s == 0: |
109 |
|
|
+ cmd = 'cd %s; umask 0022; %s reset --hard %s' % (sourcedir, GIT_CMD, self._source) |
110 |
|
|
debugprint("%d: Running %s" % (self.uid, cmd)) |
111 |
|
|
s, o = commands.getstatusoutput(cmd) |
112 |
|
|
- if s != 0: |
113 |
|
|
- err_msg = "Error: could not check out common directory - " \ |
114 |
|
|
- "output was:\n\n%s" % (self._source, self._target_str, o) |
115 |
|
|
- |
116 |
|
|
- self.bm.notify_checkout_done(self) |
117 |
|
|
- |
118 |
|
|
- if err_msg: |
119 |
|
|
- raise PrepError(err_msg) |
120 |
|
|
- |
121 |
|
|
+ |
122 |
|
|
+ if s != 0: |
123 |
|
|
+ err_msg = "Error: could not check out %s from %s - output was:\n\n" \ |
124 |
|
|
+ "%s" % (self._source, self._target_str, o) |
125 |
|
|
+ |
126 |
|
|
+ self.bm.notify_checkout_done(self) |
127 |
|
|
+ |
128 |
|
|
+ if err_msg: |
129 |
|
|
+ raise PrepError(err_msg) |
130 |
|
|
+ else: |
131 |
|
|
+ self.bm.notify_checkout_done(self) |
132 |
|
|
+ |
133 |
|
|
+ raise PrepError( "Error: could not check out %s from %s\n" % |
134 |
|
|
+ (self._source, self._target_str) ) |
135 |
|
|
+ |
136 |
|
|
self._set_cur_stage('make_srpm') |
137 |
|
|
return False |
138 |
|
|
|
139 |
|
|
def _stage_make_srpm(self): |
140 |
|
|
- # Map our target to the CVS target alias, since CVS may have |
141 |
|
|
+ # Map our target to the SCM target alias, since SCM may have |
142 |
|
|
# different target names than we expose |
143 |
|
|
- cvs_target = self._target_dict['target'] |
144 |
|
|
- cvs_alias = self._target_cfg.get_str("Aliases", "cvs_alias") |
145 |
|
|
- if len(cvs_alias) > 0: |
146 |
|
|
- cvs_target = cvs_alias |
147 |
|
|
+ srpm_dir = None |
148 |
|
|
+ if self._target_cfg.has_option("SCM", "cvs_root"): |
149 |
|
|
+ cvs_target = self._target_dict['target'] |
150 |
|
|
+ cvs_alias = self._target_cfg.get_str("Aliases", "cvs_alias") |
151 |
|
|
+ if len(cvs_alias) > 0: |
152 |
|
|
+ cvs_target = cvs_alias |
153 |
|
|
+ |
154 |
|
|
+ self.srpm_path = None |
155 |
|
|
+ srpm_dir = os.path.join(self.checkout_tmpdir, self.package, cvs_target) |
156 |
|
|
+ |
157 |
|
|
+ elif self._target_cfg.has_option("SCM", "git_root"): |
158 |
|
|
+ srpm_dir = os.path.join(self.checkout_tmpdir, self.checkout_path) |
159 |
|
|
|
160 |
|
|
- self.srpm_path = None |
161 |
|
|
- srpm_dir = os.path.join(self.checkout_tmpdir, self.package, cvs_target) |
162 |
|
|
if not os.path.exists(srpm_dir): |
163 |
|
|
msg = "Error: could not find checkout directory %s for %s. Sources probably don't exist for this target." % (srpm_dir, self._source) |
164 |
|
|
raise PrepError(msg) |
165 |
|
|
@@ -383,8 +426,8 @@ class PackageJob: |
166 |
|
|
|
167 |
|
|
def _stage_prep(self): |
168 |
|
|
|
169 |
|
|
- # In SRPM-only mode, cvs_tag is path to the SRPM to build |
170 |
|
|
- if self.use_cvs == False: |
171 |
|
|
+ # In SRPM-only mode, _source is path to the SRPM to build |
172 |
|
|
+ if self._source.endswith(".src.rpm") or self._source.find("/") != -1: |
173 |
|
|
self.srpm_path = self._source |
174 |
|
|
|
175 |
|
|
# fail the job if we can't access the SRPM. Can happen during |
176 |
|
|
@@ -425,9 +468,10 @@ class PackageJob: |
177 |
|
|
shutil.copy(self.srpm_path, self.srpm_http_path) |
178 |
|
|
self.srpm_path = None |
179 |
|
|
|
180 |
|
|
- # Remove CVS checkout and make_srpm dirs |
181 |
|
|
- if self.use_cvs == True: |
182 |
|
|
- shutil.rmtree(self.checkout_tmpdir, ignore_errors=True) |
183 |
|
|
+ # Remove SCM checkout and make_srpm dirs |
184 |
|
|
+ if not self._source.endswith(".src.rpm") and self._source.find("/") == -1: |
185 |
|
|
+ if os.path.exists(self.checkout_tmpdir): |
186 |
|
|
+ shutil.rmtree(self.checkout_tmpdir, ignore_errors=True) |
187 |
|
|
|
188 |
|
|
self._request_arch_jobs() |
189 |
|
|
self._set_cur_stage('waiting') |
190 |
|
|
@@ -554,8 +598,9 @@ class PackageJob: |
191 |
|
|
self._event.wait() |
192 |
|
|
self._event.clear() |
193 |
|
|
except PrepError, e: |
194 |
|
|
- if self.use_cvs == True: |
195 |
|
|
- shutil.rmtree(self.checkout_tmpdir, ignore_errors=True) |
196 |
|
|
+ if not self._source.endswith(".src.rpm") and self._source.find("/") == -1: |
197 |
|
|
+ if os.path.exists(self.checkout_tmpdir): |
198 |
|
|
+ shutil.rmtree(self.checkout_tmpdir, ignore_errors=True) |
199 |
|
|
subj = 'Prep Error (Job %s): %s on %s' % (self.uid, self._source, self._target_str) |
200 |
|
|
self.email_result(self.username, resultstring=e.msg, subject=subj) |
201 |
|
|
self._stage_failed(e.msg) |
202 |
|
|
diff -up plague-0.4.5.8/server/UserInterface.py.scm-updates plague-0.4.5.8/server/UserInterface.py |
203 |
|
|
--- plague-0.4.5.8/server/UserInterface.py.scm-updates 2011-04-09 09:55:35.647857242 -0600 |
204 |
|
|
+++ plague-0.4.5.8/server/UserInterface.py 2011-04-09 09:56:01.294335535 -0600 |
205 |
|
|
@@ -58,7 +58,7 @@ def validate_package_name(name): |
206 |
|
|
return False |
207 |
|
|
return True |
208 |
|
|
|
209 |
|
|
-def validate_cvs_tag(tag): |
210 |
|
|
+def validate_scm_tag(tag): |
211 |
|
|
safe_list = ['-', '_', '.', ':', '~', '[', ']', '+'] |
212 |
|
|
for c in tag: |
213 |
|
|
if not (c in safe_list) and not c.isalnum(): |
214 |
|
|
@@ -117,28 +117,8 @@ class UserInterface: |
215 |
|
|
def enqueue(self, email, package, source, target_alias, buildreq=None): |
216 |
|
|
""" Accept a job to build and stuff it into the job database """ |
217 |
|
|
|
218 |
|
|
- is_cvs_tag = True |
219 |
|
|
- if source.endswith(".src.rpm") or source.find("/") != -1: |
220 |
|
|
- is_cvs_tag = False |
221 |
|
|
- |
222 |
|
|
# Do source-type specifc validation |
223 |
|
|
- if is_cvs_tag: |
224 |
|
|
- if self._cfg.get_bool("CVS", "use_cvs") == False: |
225 |
|
|
- self.email_result(email, source, "Error setting up build for %s on "\ |
226 |
|
|
- "%s: this server builds SRPMs, not CVS checkouts." % (source, target_alias)) |
227 |
|
|
- return (-1, "This build server is set up for building SRPMS only. ", -1) |
228 |
|
|
- |
229 |
|
|
- if not validate_cvs_tag(source): |
230 |
|
|
- self.email_result(email, source, "Error setting up build for %s on "\ |
231 |
|
|
- "%s: The CVS tag '%s' contained an illegal character. "\ |
232 |
|
|
- "Submit a bug report?" % (package, target_alias, cvs_tag)) |
233 |
|
|
- return (-1, "The CVS tag contained an illegal character.", -1) |
234 |
|
|
- else: |
235 |
|
|
- if self._cfg.get_bool("CVS", "use_cvs") == True: |
236 |
|
|
- self.email_result(email, source, "Error setting up build for %s on "\ |
237 |
|
|
- "%s: this server builds CVS checkouts, not SRPMs." % (source, target_alias)) |
238 |
|
|
- return (-1, "This build server is set up for building CVS checkouts only. ", -1) |
239 |
|
|
- |
240 |
|
|
+ if source.endswith(".src.rpm") or source.find("/") != -1: |
241 |
|
|
# We limit the database field to 255 chars |
242 |
|
|
if len(source) > 255: |
243 |
|
|
self.email_result(email, source, "Error setting up build for %s on "\ |
244 |
|
|
@@ -150,6 +130,12 @@ class UserInterface: |
245 |
|
|
self.email_result(email, source, "Error setting up build for %s on "\ |
246 |
|
|
"%s: The SRPM does not exist, or is not accessible. Remember to use absolute paths." % (source, target_alias)) |
247 |
|
|
return (-1, "SRPM does not exist or is not accessible, remember to use absolute paths.", -1) |
248 |
|
|
+ else: |
249 |
|
|
+ if not validate_scm_tag(source): |
250 |
|
|
+ self.email_result(email, source, "Error setting up build for %s on "\ |
251 |
|
|
+ "%s: The SCM tag '%s' contained an illegal character. "\ |
252 |
|
|
+ "Submit a bug report?" % (package, target_alias, scm_tag)) |
253 |
|
|
+ return (-1, "The SCM tag contained an illegal character.", -1) |
254 |
|
|
|
255 |
|
|
if not validate_package_name(package): |
256 |
|
|
self.email_result(email, source, "Error setting up build for %s on "\ |