193 if i[0] in allowed or ui.configbool("web", "allow" + i[0], |
193 if i[0] in allowed or ui.configbool("web", "allow" + i[0], |
194 untrusted=True): |
194 untrusted=True): |
195 yield {"type" : i[0], "extension": i[1], |
195 yield {"type" : i[0], "extension": i[1], |
196 "node": nodeid, "url": url} |
196 "node": nodeid, "url": url} |
197 |
197 |
198 sortdefault = None, False |
198 def rawentries(subdir="", **map): |
199 def entries(sortcolumn="", descending=False, subdir="", **map): |
199 |
200 |
|
201 rows = [] |
|
202 parity = paritygen(self.stripecount) |
|
203 descend = self.ui.configbool('web', 'descend', True) |
200 descend = self.ui.configbool('web', 'descend', True) |
204 for name, path in self.repos: |
201 for name, path in self.repos: |
205 |
202 |
206 if not name.startswith(subdir): |
203 if not name.startswith(subdir): |
207 continue |
204 continue |
251 description=description or "unknown", |
248 description=description or "unknown", |
252 description_sort=description.upper() or "unknown", |
249 description_sort=description.upper() or "unknown", |
253 lastchange=d, |
250 lastchange=d, |
254 lastchange_sort=d[1]-d[0], |
251 lastchange_sort=d[1]-d[0], |
255 archives=archivelist(u, "tip", url)) |
252 archives=archivelist(u, "tip", url)) |
256 if (not sortcolumn or (sortcolumn, descending) == sortdefault): |
253 yield row |
257 # fast path for unsorted output |
254 |
258 row['parity'] = parity.next() |
255 sortdefault = None, False |
259 yield row |
256 def entries(sortcolumn="", descending=False, subdir="", **map): |
260 else: |
257 rows = rawentries(subdir=subdir, **map) |
261 rows.append((row["%s_sort" % sortcolumn], row)) |
258 |
262 if rows: |
259 if sortcolumn and sortdefault != (sortcolumn, descending): |
263 rows.sort() |
260 sortkey = '%s_sort' % sortcolumn |
264 if descending: |
261 rows = sorted(rows, key=lambda x: x[sortkey], |
265 rows.reverse() |
262 reverse=descending) |
266 for key, row in rows: |
263 for row, parity in zip(rows, paritygen(self.stripecount)): |
267 row['parity'] = parity.next() |
264 row['parity'] = parity |
268 yield row |
265 yield row |
269 |
266 |
270 self.refresh() |
267 self.refresh() |
271 sortable = ["name", "description", "contact", "lastchange"] |
268 sortable = ["name", "description", "contact", "lastchange"] |
272 sortcolumn, descending = sortdefault |
269 sortcolumn, descending = sortdefault |
273 if 'sort' in req.form: |
270 if 'sort' in req.form: |