198 ctx = web.repo[hi] |
198 ctx = web.repo[hi] |
199 except (error.RepoError, error.LookupError): |
199 except (error.RepoError, error.LookupError): |
200 return _search(web, req, tmpl) # XXX redirect to 404 page? |
200 return _search(web, req, tmpl) # XXX redirect to 404 page? |
201 |
201 |
202 def changelist(latestonly, **map): |
202 def changelist(latestonly, **map): |
203 l = [] # build a list in forward order for efficiency |
|
204 revs = [] |
203 revs = [] |
205 if start < end: |
204 if pos != -1: |
206 revs = web.repo.changelog.revs(start, end - 1) |
205 revs = web.repo.changelog.revs(pos, 0) |
207 if latestonly: |
206 if latestonly: |
208 for r in revs: |
207 revs = (next(revs),) |
209 pass |
208 curcount = 0 |
210 revs = (r,) |
|
211 for i in revs: |
209 for i in revs: |
212 ctx = web.repo[i] |
210 ctx = web.repo[i] |
213 n = ctx.node() |
211 n = ctx.node() |
214 showtags = webutil.showtag(web.repo, tmpl, 'changelogtag', n) |
212 showtags = webutil.showtag(web.repo, tmpl, 'changelogtag', n) |
215 files = webutil.listfilediffs(tmpl, ctx.files(), n, web.maxfiles) |
213 files = webutil.listfilediffs(tmpl, ctx.files(), n, web.maxfiles) |
216 |
214 |
217 l.append({"parity": parity.next(), |
215 curcount += 1 |
218 "author": ctx.user(), |
216 if curcount > revcount: |
219 "parent": webutil.parents(ctx, i - 1), |
217 break |
220 "child": webutil.children(ctx, i + 1), |
218 yield {"parity": parity.next(), |
221 "changelogtag": showtags, |
219 "author": ctx.user(), |
222 "desc": ctx.description(), |
220 "parent": webutil.parents(ctx, i - 1), |
223 "extra": ctx.extra(), |
221 "child": webutil.children(ctx, i + 1), |
224 "date": ctx.date(), |
222 "changelogtag": showtags, |
225 "files": files, |
223 "desc": ctx.description(), |
226 "rev": i, |
224 "extra": ctx.extra(), |
227 "node": hex(n), |
225 "date": ctx.date(), |
228 "tags": webutil.nodetagsdict(web.repo, n), |
226 "files": files, |
229 "bookmarks": webutil.nodebookmarksdict(web.repo, n), |
227 "rev": i, |
230 "inbranch": webutil.nodeinbranch(web.repo, ctx), |
228 "node": hex(n), |
231 "branches": webutil.nodebranchdict(web.repo, ctx) |
229 "tags": webutil.nodetagsdict(web.repo, n), |
232 }) |
230 "bookmarks": webutil.nodebookmarksdict(web.repo, n), |
233 for e in reversed(l): |
231 "inbranch": webutil.nodeinbranch(web.repo, ctx), |
234 yield e |
232 "branches": webutil.nodebranchdict(web.repo, ctx) |
|
233 } |
235 |
234 |
236 revcount = shortlog and web.maxshortchanges or web.maxchanges |
235 revcount = shortlog and web.maxshortchanges or web.maxchanges |
237 if 'revcount' in req.form: |
236 if 'revcount' in req.form: |
238 revcount = int(req.form.get('revcount', [revcount])[0]) |
237 revcount = int(req.form.get('revcount', [revcount])[0]) |
239 revcount = max(revcount, 1) |
238 revcount = max(revcount, 1) |
244 morevars = copy.copy(tmpl.defaults['sessionvars']) |
243 morevars = copy.copy(tmpl.defaults['sessionvars']) |
245 morevars['revcount'] = revcount * 2 |
244 morevars['revcount'] = revcount * 2 |
246 |
245 |
247 count = len(web.repo) |
246 count = len(web.repo) |
248 pos = ctx.rev() |
247 pos = ctx.rev() |
249 start = max(0, pos - revcount + 1) |
248 parity = paritygen(web.stripecount) |
250 end = pos + 1 |
|
251 parity = paritygen(web.stripecount, offset=start - end) |
|
252 |
249 |
253 changenav = webutil.revnav(web.repo).gen(pos, revcount, count) |
250 changenav = webutil.revnav(web.repo).gen(pos, revcount, count) |
254 |
251 |
255 return tmpl(shortlog and 'shortlog' or 'changelog', changenav=changenav, |
252 return tmpl(shortlog and 'shortlog' or 'changelog', changenav=changenav, |
256 node=ctx.hex(), rev=pos, changesets=count, |
253 node=ctx.hex(), rev=pos, changesets=count, |