1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 from __future__ import generators
17
18 from buildbot.status.web.base import HtmlResource
19 from buildbot.status.web.base import build_get_class, path_to_builder, path_to_build
20 from buildbot.sourcestamp import SourceStamp
21
23
32
33
34
36 if "reload" in request.args:
37 try:
38 reload_time = int(request.args["reload"][0])
39 return max(reload_time, 15)
40 except ValueError:
41 pass
42 return None
43
64
92
94 """Given two source stamps, we want to assign them to the same row if
95 they are the same version of code, even if they differ in minor detail.
96
97 This function returns an appropriate comparison key for that.
98 """
99 return (ss.branch, ss.revision, ss.patch)
100
135
137
138 status = None
139 changemaster = None
140
141 - def content(self, request, cxt):
142 """This method builds the regular grid display.
143 That is, build stamps across the top, build hosts down the left side
144 """
145
146
147 numBuilds = int(request.args.get("width", [5])[0])
148 categories = request.args.get("category", [])
149 branch = request.args.get("branch", [ANYBRANCH])[0]
150 if branch == 'trunk': branch = None
151
152
153 status = self.getStatus(request)
154 stamps = self.getRecentSourcestamps(status, numBuilds, categories, branch)
155
156 cxt['refresh'] = self.get_reload_time(request)
157
158 cxt.update({'categories': categories,
159 'branch': branch,
160 'ANYBRANCH': ANYBRANCH,
161 'stamps': map(SourceStamp.asDict, stamps)
162 })
163
164 sortedBuilderNames = status.getBuilderNames()[:]
165 sortedBuilderNames.sort()
166
167 cxt['builders'] = []
168
169 for bn in sortedBuilderNames:
170 builds = [None] * len(stamps)
171
172 builder = status.getBuilder(bn)
173 if categories and builder.category not in categories:
174 continue
175
176 build = builder.getBuild(-1)
177 while build and None in builds:
178 ss = build.getSourceStamp(absolute=True)
179 key= self.getSourceStampKey(ss)
180 for i in range(len(stamps)):
181 if key == self.getSourceStampKey(stamps[i]) and builds[i] is None:
182 builds[i] = build
183 build = build.getPreviousBuild()
184
185 b = self.builder_cxt(request, builder)
186 b['builds'] = []
187 for build in builds:
188 b['builds'].append(self.build_cxt(request, build))
189 cxt['builders'].append(b)
190
191 template = request.site.buildbot_service.templates.get_template("grid.html")
192 return template.render(**cxt)
193
194
196
197 status = None
198 changemaster = None
199 default_rev_order = "asc"
200
201 - def content(self, request, cxt):
202 """This method builds the transposed grid display.
203 That is, build hosts across the top, build stamps down the left side
204 """
205
206
207 numBuilds = int(request.args.get("length", [5])[0])
208 categories = request.args.get("category", [])
209 branch = request.args.get("branch", [ANYBRANCH])[0]
210 if branch == 'trunk': branch = None
211
212 rev_order = request.args.get("rev_order", [self.default_rev_order])[0]
213 if rev_order not in ["asc", "desc"]:
214 rev_order = self.default_rev_order
215
216 cxt['refresh'] = self.get_reload_time(request)
217
218
219 status = self.getStatus(request)
220 stamps = self.getRecentSourcestamps(status, numBuilds, categories, branch)
221
222 cxt.update({'categories': categories,
223 'branch': branch,
224 'ANYBRANCH': ANYBRANCH,
225 'stamps': map(SourceStamp.asDict, stamps),
226 })
227
228 sortedBuilderNames = status.getBuilderNames()[:]
229 sortedBuilderNames.sort()
230
231 cxt['sorted_builder_names'] = sortedBuilderNames
232 cxt['builder_builds'] = builder_builds = []
233 cxt['builders'] = builders = []
234 cxt['range'] = range(len(stamps))
235 if rev_order == "desc":
236 cxt['range'].reverse()
237
238 for bn in sortedBuilderNames:
239 builds = [None] * len(stamps)
240
241 builder = status.getBuilder(bn)
242 if categories and builder.category not in categories:
243 continue
244
245 build = builder.getBuild(-1)
246 while build and None in builds:
247 ss = build.getSourceStamp(absolute=True)
248 key = self.getSourceStampKey(ss)
249 for i in range(len(stamps)):
250 if key == self.getSourceStampKey(stamps[i]) and builds[i] is None:
251 builds[i] = build
252 build = build.getPreviousBuild()
253
254 builders.append(self.builder_cxt(request, builder))
255 builder_builds.append(map(lambda b: self.build_cxt(request, b), builds))
256
257 template = request.site.buildbot_service.templates.get_template('grid_transposed.html')
258 data = template.render(**cxt)
259 return data
260