25 return t + "s" |
25 return t + "s" |
26 def fmt(t, c): |
26 def fmt(t, c): |
27 return "%d %s" % (c, plural(t, c)) |
27 return "%d %s" % (c, plural(t, c)) |
28 |
28 |
29 now = time.time() |
29 now = time.time() |
30 then = x[2][0] |
30 then = x[0] |
31 delta = max(1, int(now - then)) |
31 delta = max(1, int(now - then)) |
32 |
32 |
33 scales = [["second", 1], |
33 scales = [["second", 1], |
34 ["minute", 60], |
34 ["minute", 60], |
35 ["hour", 3600], |
35 ["hour", 3600], |
153 return |
153 return |
154 |
154 |
155 common_filters = { |
155 common_filters = { |
156 "escape": cgi.escape, |
156 "escape": cgi.escape, |
157 "age": age, |
157 "age": age, |
158 "date": lambda x: util.datestr(x[2]), |
158 "date": lambda x: util.datestr(x), |
159 "addbreaks": nl2br, |
159 "addbreaks": nl2br, |
160 "obfuscate": obfuscate, |
160 "obfuscate": obfuscate, |
161 "short": (lambda x: x[:12]), |
161 "short": (lambda x: x[:12]), |
162 "firstline": (lambda x: x.splitlines(1)[0]), |
162 "firstline": (lambda x: x.splitlines(1)[0]), |
163 "permissions": (lambda x: x and "-rwxr-xr-x" or "-rw-r--r--"), |
163 "permissions": (lambda x: x and "-rwxr-xr-x" or "-rw-r--r--"), |
164 "rfc822date": lambda x: util.datestr(x[2], "%a, %d %b %Y %H:%M:%S"), |
164 "rfc822date": lambda x: util.datestr(x, "%a, %d %b %Y %H:%M:%S"), |
165 } |
165 } |
166 |
166 |
167 class hgweb: |
167 class hgweb: |
168 def __init__(self, repo, name=None): |
168 def __init__(self, repo, name=None): |
169 if type(repo) == type(""): |
169 if type(repo) == type(""): |
182 self.repo = hg.repository(self.repo.ui, self.repo.root) |
182 self.repo = hg.repository(self.repo.ui, self.repo.root) |
183 self.maxchanges = int(self.repo.ui.config("web", "maxchanges", 10)) |
183 self.maxchanges = int(self.repo.ui.config("web", "maxchanges", 10)) |
184 self.maxfiles = int(self.repo.ui.config("web", "maxfiles", 10)) |
184 self.maxfiles = int(self.repo.ui.config("web", "maxfiles", 10)) |
185 self.allowpull = self.repo.ui.configbool("web", "allowpull", True) |
185 self.allowpull = self.repo.ui.configbool("web", "allowpull", True) |
186 |
186 |
187 def date(self, cs): |
187 def date(self, t): |
188 return util.datestr(cs[2]) |
188 return util.datestr(t) |
189 |
189 |
190 def listfiles(self, files, mf): |
190 def listfiles(self, files, mf): |
191 for f in files[:self.maxfiles]: |
191 for f in files[:self.maxfiles]: |
192 yield self.t("filenodelink", node=hex(mf[f]), file=f) |
192 yield self.t("filenodelink", node=hex(mf[f]), file=f) |
193 if len(files) > self.maxfiles: |
193 if len(files) > self.maxfiles: |
309 "parent": self.parents("changelogparent", |
309 "parent": self.parents("changelogparent", |
310 cl.parents(n), cl.rev), |
310 cl.parents(n), cl.rev), |
311 "changelogtag": self.showtag("changelogtag",n), |
311 "changelogtag": self.showtag("changelogtag",n), |
312 "manifest": hex(changes[0]), |
312 "manifest": hex(changes[0]), |
313 "desc": changes[4], |
313 "desc": changes[4], |
314 "date": changes, |
314 "date": changes[2], |
315 "files": self.listfilediffs(changes[3], n), |
315 "files": self.listfilediffs(changes[3], n), |
316 "rev": i, |
316 "rev": i, |
317 "node": hn}) |
317 "node": hn}) |
318 parity = 1 - parity |
318 parity = 1 - parity |
319 |
319 |
370 parent=self.parents("changelogparent", |
370 parent=self.parents("changelogparent", |
371 cl.parents(n), cl.rev), |
371 cl.parents(n), cl.rev), |
372 changelogtag=self.showtag("changelogtag",n), |
372 changelogtag=self.showtag("changelogtag",n), |
373 manifest=hex(changes[0]), |
373 manifest=hex(changes[0]), |
374 desc=changes[4], |
374 desc=changes[4], |
375 date=changes, |
375 date=changes[2], |
376 files=self.listfilediffs(changes[3], n), |
376 files=self.listfilediffs(changes[3], n), |
377 rev=i, |
377 rev=i, |
378 node=hn) |
378 node=hn) |
379 |
379 |
380 if count >= self.maxchanges: |
380 if count >= self.maxchanges: |
416 cl.parents(n), cl.rev), |
416 cl.parents(n), cl.rev), |
417 changesettag=self.showtag("changesettag",n), |
417 changesettag=self.showtag("changesettag",n), |
418 manifest=hex(changes[0]), |
418 manifest=hex(changes[0]), |
419 author=changes[1], |
419 author=changes[1], |
420 desc=changes[4], |
420 desc=changes[4], |
421 date=changes, |
421 date=changes[2], |
422 files=files, |
422 files=files, |
423 archives=archivelist()) |
423 archives=archivelist()) |
424 |
424 |
425 def filelog(self, f, filenode): |
425 def filelog(self, f, filenode): |
426 cl = self.repo.changelog |
426 cl = self.repo.changelog |
478 text=lines(), |
478 text=lines(), |
479 rev=changerev, |
479 rev=changerev, |
480 node=hex(cn), |
480 node=hex(cn), |
481 manifest=hex(mfn), |
481 manifest=hex(mfn), |
482 author=cs[1], |
482 author=cs[1], |
483 date=cs, |
483 date=cs[2], |
484 parent=self.parents("filerevparent", |
484 parent=self.parents("filerevparent", |
485 fl.parents(n), fl.rev, file=f), |
485 fl.parents(n), fl.rev, file=f), |
486 permissions=self.repo.manifest.readflags(mfn)[f]) |
486 permissions=self.repo.manifest.readflags(mfn)[f]) |
487 |
487 |
488 def fileannotate(self, f, node): |
488 def fileannotate(self, f, node): |
530 path=up(f), |
530 path=up(f), |
531 rev=changerev, |
531 rev=changerev, |
532 node=hex(cn), |
532 node=hex(cn), |
533 manifest=hex(mfn), |
533 manifest=hex(mfn), |
534 author=cs[1], |
534 author=cs[1], |
535 date=cs, |
535 date=cs[2], |
536 parent=self.parents("fileannotateparent", |
536 parent=self.parents("fileannotateparent", |
537 fl.parents(n), fl.rev, file=f), |
537 fl.parents(n), fl.rev, file=f), |
538 permissions=self.repo.manifest.readflags(mfn)[f]) |
538 permissions=self.repo.manifest.readflags(mfn)[f]) |
539 |
539 |
540 def manifest(self, mnode, path): |
540 def manifest(self, mnode, path): |