170 for key, row in rows: |
170 for key, row in rows: |
171 row['parity'] = parity |
171 row['parity'] = parity |
172 parity = 1 - parity |
172 parity = 1 - parity |
173 yield row |
173 yield row |
174 |
174 |
175 virtual = req.env.get("PATH_INFO", "").strip('/') |
175 try: |
176 if virtual.startswith('static/'): |
176 virtual = req.env.get("PATH_INFO", "").strip('/') |
177 static = os.path.join(templater.templatepath(), 'static') |
177 if virtual.startswith('static/'): |
178 fname = virtual[7:] |
178 static = os.path.join(templater.templatepath(), 'static') |
179 req.write(staticfile(static, fname, req) or |
179 fname = virtual[7:] |
180 tmpl('error', error='%r not found' % fname)) |
180 req.write(staticfile(static, fname, req) or |
181 elif virtual: |
181 tmpl('error', error='%r not found' % fname)) |
182 while virtual: |
182 elif virtual: |
183 real = dict(self.repos).get(virtual) |
183 while virtual: |
|
184 real = dict(self.repos).get(virtual) |
|
185 if real: |
|
186 break |
|
187 up = virtual.rfind('/') |
|
188 if up < 0: |
|
189 break |
|
190 virtual = virtual[:up] |
184 if real: |
191 if real: |
185 break |
192 req.env['REPO_NAME'] = virtual |
186 up = virtual.rfind('/') |
193 try: |
187 if up < 0: |
194 repo = hg.repository(parentui, real) |
188 break |
195 hgweb(repo).run_wsgi(req) |
189 virtual = virtual[:up] |
196 except IOError, inst: |
190 if real: |
197 req.write(tmpl("error", error=inst.strerror)) |
191 req.env['REPO_NAME'] = virtual |
198 except hg.RepoError, inst: |
192 try: |
199 req.write(tmpl("error", error=str(inst))) |
193 repo = hg.repository(parentui, real) |
200 else: |
194 hgweb(repo).run_wsgi(req) |
201 req.write(tmpl("notfound", repo=virtual)) |
195 except IOError, inst: |
|
196 req.write(tmpl("error", error=inst.strerror)) |
|
197 except hg.RepoError, inst: |
|
198 req.write(tmpl("error", error=str(inst))) |
|
199 else: |
202 else: |
200 req.write(tmpl("notfound", repo=virtual)) |
203 if req.form.has_key('static'): |
201 else: |
204 static = os.path.join(templater.templatepath(), "static") |
202 if req.form.has_key('static'): |
205 fname = req.form['static'][0] |
203 static = os.path.join(templater.templatepath(), "static") |
206 req.write(staticfile(static, fname, req) |
204 fname = req.form['static'][0] |
207 or tmpl("error", error="%r not found" % fname)) |
205 req.write(staticfile(static, fname, req) |
208 else: |
206 or tmpl("error", error="%r not found" % fname)) |
209 sortable = ["name", "description", "contact", "lastchange"] |
207 else: |
210 sortcolumn, descending = self.repos_sorted |
208 sortable = ["name", "description", "contact", "lastchange"] |
211 if req.form.has_key('sort'): |
209 sortcolumn, descending = self.repos_sorted |
212 sortcolumn = req.form['sort'][0] |
210 if req.form.has_key('sort'): |
213 descending = sortcolumn.startswith('-') |
211 sortcolumn = req.form['sort'][0] |
214 if descending: |
212 descending = sortcolumn.startswith('-') |
215 sortcolumn = sortcolumn[1:] |
213 if descending: |
216 if sortcolumn not in sortable: |
214 sortcolumn = sortcolumn[1:] |
217 sortcolumn = "" |
215 if sortcolumn not in sortable: |
218 |
216 sortcolumn = "" |
219 sort = [("sort_%s" % column, |
217 |
220 "%s%s" % ((not descending and column == sortcolumn) |
218 sort = [("sort_%s" % column, |
221 and "-" or "", column)) |
219 "%s%s" % ((not descending and column == sortcolumn) |
222 for column in sortable] |
220 and "-" or "", column)) |
223 req.write(tmpl("index", entries=entries, |
221 for column in sortable] |
224 sortcolumn=sortcolumn, descending=descending, |
222 req.write(tmpl("index", entries=entries, |
225 **dict(sort))) |
223 sortcolumn=sortcolumn, descending=descending, |
226 finally: |
224 **dict(sort))) |
227 tmpl = None |