Mercurial > public > mercurial-scm > hg-stable
comparison mercurial/hgweb/hgweb_mod.py @ 3407:03e7e8958a27
hgweb: hoist changenav up, and use it in the filelog
author | Brendan Cully <brendan@kublai.com> |
---|---|
date | Sun, 15 Oct 2006 23:51:28 -0700 |
parents | 970b2d6de3b3 |
children | 1ae738bacf74 |
comparison
equal
deleted
inserted
replaced
3406:970b2d6de3b3 | 3407:03e7e8958a27 |
---|---|
25 p = p[:-1] | 25 p = p[:-1] |
26 up = os.path.dirname(p) | 26 up = os.path.dirname(p) |
27 if up == "/": | 27 if up == "/": |
28 return "/" | 28 return "/" |
29 return up + "/" | 29 return up + "/" |
30 | |
31 def revnavgen(pos, pagelen, limit): | |
32 def seq(factor, limit=None): | |
33 if limit: | |
34 yield limit | |
35 if limit >= 20 and limit <= 40: | |
36 yield 50 | |
37 else: | |
38 yield 1 * factor | |
39 yield 3 * factor | |
40 for f in seq(factor * 10): | |
41 yield f | |
42 | |
43 def nav(**map): | |
44 l = [] | |
45 last = 0 | |
46 for f in seq(1, pagelen): | |
47 if f < pagelen or f <= last: | |
48 continue | |
49 if f > limit: | |
50 break | |
51 last = f | |
52 if pos + f < limit: | |
53 l.append(("+%d" % f, pos + f)) | |
54 if pos - f >= 0: | |
55 l.insert(0, ("-%d" % f, pos - f)) | |
56 | |
57 yield {"label": "(0)", "rev": 0} | |
58 | |
59 for label, rev in l: | |
60 yield {"label": label, "rev": rev} | |
61 | |
62 yield {"label": "tip", "rev": "tip"} | |
63 | |
64 return nav | |
30 | 65 |
31 class hgweb(object): | 66 class hgweb(object): |
32 def __init__(self, repo, name=None): | 67 def __init__(self, repo, name=None): |
33 if type(repo) == type(""): | 68 if type(repo) == type(""): |
34 self.repo = hg.repository(ui.ui(), repo) | 69 self.repo = hg.repository(ui.ui(), repo) |
147 tn = None | 182 tn = None |
148 yield diffblock(mdiff.unidiff(to, date1, tn, date2, f, | 183 yield diffblock(mdiff.unidiff(to, date1, tn, date2, f, |
149 opts=diffopts), f, tn) | 184 opts=diffopts), f, tn) |
150 | 185 |
151 def changelog(self, ctx, shortlog=False): | 186 def changelog(self, ctx, shortlog=False): |
152 pos = ctx.rev() | |
153 def changenav(**map): | |
154 def seq(factor, maxchanges=None): | |
155 if maxchanges: | |
156 yield maxchanges | |
157 if maxchanges >= 20 and maxchanges <= 40: | |
158 yield 50 | |
159 else: | |
160 yield 1 * factor | |
161 yield 3 * factor | |
162 for f in seq(factor * 10): | |
163 yield f | |
164 | |
165 l = [] | |
166 last = 0 | |
167 maxchanges = shortlog and self.maxshortchanges or self.maxchanges | |
168 for f in seq(1, maxchanges): | |
169 if f < maxchanges or f <= last: | |
170 continue | |
171 if f > count: | |
172 break | |
173 last = f | |
174 r = "%d" % f | |
175 if pos + f < count: | |
176 l.append(("+" + r, pos + f)) | |
177 if pos - f >= 0: | |
178 l.insert(0, ("-" + r, pos - f)) | |
179 | |
180 yield {"rev": 0, "label": "(0)"} | |
181 | |
182 for label, rev in l: | |
183 yield {"label": label, "rev": rev} | |
184 | |
185 yield {"label": "tip", "rev": "tip"} | |
186 | |
187 def changelist(**map): | 187 def changelist(**map): |
188 parity = (start - end) & 1 | 188 parity = (start - end) & 1 |
189 cl = self.repo.changelog | 189 cl = self.repo.changelog |
190 l = [] # build a list in forward order for efficiency | 190 l = [] # build a list in forward order for efficiency |
191 for i in range(start, end): | 191 for i in range(start, end): |
208 yield e | 208 yield e |
209 | 209 |
210 maxchanges = shortlog and self.maxshortchanges or self.maxchanges | 210 maxchanges = shortlog and self.maxshortchanges or self.maxchanges |
211 cl = self.repo.changelog | 211 cl = self.repo.changelog |
212 count = cl.count() | 212 count = cl.count() |
213 pos = ctx.rev() | |
213 start = max(0, pos - maxchanges + 1) | 214 start = max(0, pos - maxchanges + 1) |
214 end = min(count, start + maxchanges) | 215 end = min(count, start + maxchanges) |
215 pos = end - 1 | 216 pos = end - 1 |
217 | |
218 changenav = revnavgen(pos, maxchanges, count) | |
216 | 219 |
217 yield self.t(shortlog and 'shortlog' or 'changelog', | 220 yield self.t(shortlog and 'shortlog' or 'changelog', |
218 changenav=changenav, | 221 changenav=changenav, |
219 node=hex(cl.tip()), | 222 node=hex(cl.tip()), |
220 rev=pos, changesets=count, entries=changelist, | 223 rev=pos, changesets=count, entries=changelist, |
304 | 307 |
305 def filelog(self, fctx): | 308 def filelog(self, fctx): |
306 f = fctx.path() | 309 f = fctx.path() |
307 fl = fctx.filelog() | 310 fl = fctx.filelog() |
308 count = fl.count() | 311 count = fl.count() |
312 pagelen = self.maxshortchanges | |
309 | 313 |
310 def entries(**map): | 314 def entries(**map): |
315 pos = fctx.filerev() | |
316 start = max(0, pos - pagelen + 1) | |
317 end = min(count, start + pagelen) | |
318 pos = end - 1 | |
311 l = [] | 319 l = [] |
312 parity = (count - 1) & 1 | 320 parity = (count - 1) & 1 |
313 | 321 |
314 for i in range(count): | 322 for i in range(start, end): |
315 ctx = fctx.filectx(i) | 323 ctx = fctx.filectx(i) |
316 n = fl.node(i) | 324 n = fl.node(i) |
317 | 325 |
318 l.insert(0, {"parity": parity, | 326 l.insert(0, {"parity": parity, |
319 "filerev": i, | 327 "filerev": i, |
328 parity = 1 - parity | 336 parity = 1 - parity |
329 | 337 |
330 for e in l: | 338 for e in l: |
331 yield e | 339 yield e |
332 | 340 |
333 yield self.t("filelog", file=f, node=hex(fctx.node()), entries=entries) | 341 nav = revnavgen(fctx.filerev(), self.maxshortchanges, count) |
342 yield self.t("filelog", file=f, node=hex(fctx.node()), nav=nav, | |
343 entries=entries) | |
334 | 344 |
335 def filerevision(self, fctx): | 345 def filerevision(self, fctx): |
336 f = fctx.path() | 346 f = fctx.path() |
337 text = fctx.data() | 347 text = fctx.data() |
338 fl = fctx.filelog() | 348 fl = fctx.filelog() |