Mercurial > public > mercurial-scm > hg-stable
diff mercurial/hgweb.py @ 142:529bf610092e
Prettify the web interface
Add header, footer templates
Add null parent handling
Combine files and directories
Add parity flag for alternating line colors
Add line numbers to filerevision
author | mpm@selenic.com |
---|---|
date | Mon, 23 May 2005 20:57:48 -0800 |
parents | c77a679e9cfa |
children | e8a360cd5a9f 083c38bdfa64 |
line wrap: on
line diff
--- a/mercurial/hgweb.py Mon May 23 16:06:25 2005 -0800 +++ b/mercurial/hgweb.py Mon May 23 20:57:48 2005 -0800 @@ -122,6 +122,10 @@ if len(files) > self.maxfiles: yield self.t("fileellipses") + def parent(self, t1, node, rev): + if node != hex(nullid): + yield self.t(t1, node = node, rev = rev) + def diff(self, node1, node2, files): def filterfiles(list, files): l = [ x for x in list if x in files ] @@ -169,6 +173,12 @@ tn = "" yield prettyprint(mdiff.unidiff(to, date1, tn, date2, f)) + def header(self): + yield self.t("header", repo = self.reponame) + + def footer(self): + yield self.t("footer", repo = self.reponame) + def changelog(self, pos=None): def changenav(): def seq(factor = 1): @@ -191,6 +201,7 @@ yield self.t("naventry", rev = count - 1) def changelist(): + parity = (start - end) & 1 cl = self.repo.changelog l = [] # build a list in forward order for efficiency for i in range(start, end + 1): @@ -202,9 +213,14 @@ l.insert(0, self.t( 'changelogentry', + parity = parity, author = obfuscate(changes[1]), shortdesc = cgi.escape(changes[4].splitlines()[0]), age = age(t), + parent1 = self.parent("changelogparent", + hex(p1), cl.rev(p1)), + parent2 = self.parent("changelogparent", + hex(p2), cl.rev(p2)), p1 = hex(p1), p2 = hex(p2), p1rev = cl.rev(p1), p2rev = cl.rev(p2), manifest = hex(changes[0]), @@ -213,6 +229,7 @@ files = self.listfilediffs(changes[3], n), rev = i, node = hn)) + parity = 1 - parity yield l @@ -222,8 +239,12 @@ start = max(0, pos - self.maxchanges) end = min(count - 1, start + self.maxchanges) - yield self.t('changelog', repo = self.reponame, changenav = changenav, - rev = pos, changesets = count, changelist = changelist) + yield self.t('changelog', + header = self.header(), + footer = self.footer(), + repo = self.reponame, + changenav = changenav, + rev = pos, changesets = count, entries = changelist) def changeset(self, nodeid): n = bin(nodeid) @@ -243,10 +264,17 @@ yield self.diff(p1, n, changes[3]) yield self.t('changeset', + header = self.header(), + footer = self.footer(), + repo = self.reponame, diff = diff, rev = cl.rev(n), node = nodeid, shortdesc = cgi.escape(changes[4].splitlines()[0]), + parent1 = self.parent("changesetparent", + hex(p1), cl.rev(p1)), + parent2 = self.parent("changesetparent", + hex(p2), cl.rev(p2)), p1 = hex(p1), p2 = hex(p2), p1rev = cl.rev(p1), p2rev = cl.rev(p2), manifest = hex(changes[0]), @@ -262,6 +290,8 @@ def entries(): l = [] + parity = (count - 1) & 1 + for i in range(count): n = fl.node(i) @@ -272,6 +302,7 @@ t = float(cs[2].split(' ')[0]) l.insert(0, self.t("filelogentry", + parity = parity, filenode = hex(n), filerev = i, file = f, @@ -282,10 +313,14 @@ shortdesc = cgi.escape(cs[4].splitlines()[0]), p1 = hex(p1), p2 = hex(p2), p1rev = fl.rev(p1), p2rev = fl.rev(p2))) + parity = 1 - parity yield l yield self.t("filelog", + header = self.header(), + footer = self.footer(), + repo = self.reponame, file = f, filenode = filenode, entries = entries) @@ -301,11 +336,21 @@ p1, p2 = fl.parents(n) t = float(cs[2].split(' ')[0]) mfn = cs[0] + + def lines(): + for l, t in enumerate(text.splitlines(1)): + yield self.t("fileline", + line = t, + linenumber = "% 6d" % (l + 1), + parity = l & 1) yield self.t("filerevision", file = f, + header = self.header(), + footer = self.footer(), + repo = self.reponame, filenode = node, path = up(f), - text = text, + text = lines(), rev = changerev, node = hex(cn), manifest = hex(mfn), @@ -313,6 +358,10 @@ age = age(t), date = time.asctime(time.gmtime(t)), shortdesc = cgi.escape(cs[4].splitlines()[0]), + parent1 = self.parent("filerevparent", + hex(p1), fl.rev(p1)), + parent2 = self.parent("filerevparent", + hex(p2), fl.rev(p2)), p1 = hex(p1), p2 = hex(p2), p1rev = fl.rev(p1), p2rev = fl.rev(p2)) @@ -332,6 +381,8 @@ mfn = cs[0] def annotate(): + parity = 1 + last = None for r, l in fl.annotate(n): try: cnode = ncache[r] @@ -348,7 +399,12 @@ name = name[:f] bcache[r] = name + if last != cnode: + parity = 1 - parity + last = cnode + yield self.t("annotateline", + parity = parity, node = hex(cnode), rev = r, author = name, @@ -356,6 +412,9 @@ line = cgi.escape(l)) yield self.t("fileannotate", + header = self.header(), + footer = self.footer(), + repo = self.reponame, file = f, filenode = node, annotate = annotate, @@ -367,6 +426,10 @@ age = age(t), date = time.asctime(time.gmtime(t)), shortdesc = cgi.escape(cs[4].splitlines()[0]), + parent1 = self.parent("filerevparent", + hex(p1), fl.rev(p1)), + parent2 = self.parent("filerevparent", + hex(p2), fl.rev(p2)), p1 = hex(p1), p2 = hex(p2), p1rev = fl.rev(p1), p2rev = fl.rev(p2)) @@ -375,10 +438,8 @@ rev = self.repo.manifest.rev(bin(mnode)) node = self.repo.changelog.node(rev) - dirs = {} files = {} - short = {} - + p = path[1:] l = len(p) @@ -388,37 +449,41 @@ remain = f[l:] if "/" in remain: short = remain[:remain.find("/") + 1] # bleah - dirs[short] = 1 + files[short] = (f, None) else: short = os.path.basename(remain) files[short] = (f, n) - def dirlist(): - dl = dirs.keys() - dl.sort() - - for d in dl: - yield self.t("manifestdirentry", - path = os.path.join(path, d), - manifest = mnode, basename = d[:-1]) - def filelist(): + parity = 0 fl = files.keys() fl.sort() for f in fl: full, fnode = files[f] - yield self.t("manifestfileentry", - file = full, manifest = mnode, filenode = hex(fnode), - basename = f) + if fnode: + yield self.t("manifestfileentry", + file = full, + manifest = mnode, + filenode = hex(fnode), + parity = parity, + basename = f) + else: + yield self.t("manifestdirentry", + parity = parity, + path = os.path.join(path, f), + manifest = mnode, basename = f[:-1]) + parity = 1 - parity yield self.t("manifest", + header = self.header(), + footer = self.footer(), + repo = self.reponame, manifest = mnode, rev = rev, node = hex(node), path = path, up = up(path), - dirs = dirlist, - files = filelist) + entries = filelist) def filediff(self, file, changeset): n = bin(changeset) @@ -431,6 +496,9 @@ yield self.diff(p1, n, file) yield self.t("filediff", + header = self.header(), + footer = self.footer(), + repo = self.reponame, file = file, filenode = hex(mf[file]), node = changeset, @@ -439,12 +507,7 @@ p1rev = self.repo.changelog.rev(p1), diff = diff) - # header and footer, css # add tags to things - # show parents - # diff between rev and parent in changeset and file - # manifest links - # browse at top # tags -> list of changesets corresponding to tags # find tag, changeset, file