mercurial/hgweb.py
changeset 142 529bf610092e
parent 138 c77a679e9cfa
child 153 e8a360cd5a9f
child 155 083c38bdfa64
--- 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