hg site extension
 
(Arne Babenhauserheide)
2011-10-07: added a log writer which writes at most 100 intries per page.

added a log writer which writes at most 100 intries per page.

diff --git a/static.py b/static.py
--- a/static.py
+++ b/static.py
@@ -48,10 +48,10 @@ templates = {
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <!--duplicate for older browsers-->
     <link rel="stylesheet" href="style.css" type="text/css" media="screen" />
     <link rel="stylesheet" href="print.css" type="text/css" media="print" />
-    <title>REPO_NAME</title>
+    <title>{reponame}</title>
 </head>
 <body>
-<h1>REPO_NAME</h1>
+<h1>{reponame}</h1>
 """,
     "foot": "</body></html>",
     "screenstyle": """ """,
@@ -68,7 +68,7 @@ def parsereadme(filepath):
 def writeoverview(ui, repo, target, name):
     """Create the overview page"""
     overview = open(join(target, "index.html"), "w")
-    overview.write(templates["head"].replace("REPO_NAME", name))
+    overview.write(templates["head"].replace("{reponame}", name))
     # add a short identifier from the first line of the readme, if it
     # exists # TODO: Parse different types of readme files
     readme = name
@@ -82,7 +82,7 @@ def writeoverview(ui, repo, target, name
     overview.write("<h2>Changes</h2>")
     ui.pushbuffer()
     t = cmdutil.changeset_templater(ui, repo, patch=False, diffopts=None, mapfile=None, buffered=False)
-    t.use_template("""<div style='float: right; padding-left: 0.5em'><em>({author|person})</em></div><strong> {date|shortdate}: <a href='commits/{node}.html'>{desc|strip|fill68|firstline}</a> <span style='font-size: xx-small'>{branches} {tags}</span><p>{desc|escape}</p>""")
+    t.use_template("""<div style='float: right; padding-left: 0.5em'><em>({author|person})</em></div><strong> {date|shortdate}: <a href='commit/{node}.html'>{desc|strip|fill68|firstline}</a> <span style='font-size: xx-small'>{branches} {tags}</span><p>{desc|escape}</p>""")
     for c in range(1, min(len(repo.changelog), 5)):
         ctx = repo.changectx(str(-c))
         t.show(ctx)
@@ -95,6 +95,47 @@ def writeoverview(ui, repo, target, name
     # finish the overview
     overview.write(templates["foot"])
 
+def writelog(ui, repo, target, name):
+    """Write the full changelog, in steps of 100."""
+    commits = join(target, "commits")
+    if not isdir(commits):
+        os.makedirs(commits)
+    for i in range(len(repo.changelog)/100):
+        d = commits+"-"+str(i+1)+"00"
+        if not isdir(d):
+            os.makedirs(d)
+
+    t = cmdutil.changeset_templater(ui, repo, patch=False, diffopts=None, mapfile=None, buffered=False)
+    t.use_template("""<div style='float: right; padding-left: 0.5em'><em>({author|person})</em></div><strong> {date|shortdate}: <a href='../commit/{node}.html'>{desc|strip|fill68|firstline}</a> <span style='font-size: xx-small'>{branches} {tags}</span><p>{desc|escape}</p>""")
+    logs = []
+    for ck in range(0, len(repo.changelog)/100+1):
+        ui.pushbuffer()
+        if ck:
+            dd = d
+            di = str(ck)+"00"
+            d = commits+"-"+di
+            logs[-1].write("<p><a href=\"../commits-"+di+"\">earlier</a></p>")
+            if ck>2:
+                # the older log gets a reference to the newer one
+                logs[-1].write("<p><a href=\"../commits-"+str(ck-2)+"00"+"\">later</a></p>")
+            elif ck>1:
+                logs[-1].write("<p><a href=\"../commits\">later</a></p>")
+            logs.append(open(join(d, "index.html"), "w"))
+        else:
+            d = commits
+            logs.append(open(join(d, "index.html"), "w"))
+
+        logs[-1].write(templates["head"].replace("{reponame}", name))
+        for c in range(ck*100+1, min(len(repo.changelog), (ck+1)*100)):
+            ctx = repo.changectx(str(-c))
+            t.show(ctx)
+        logs[-1].write(ui.popbuffer())
+
+    for l in logs:
+        l.write(templates["foot"].replace("{reponame}", name))
+        l.close()
+
+
 def parsesite(ui, repo, target, **opts):
     """Create the static folder."""
     idfile = join(target, _staticidentifier)
@@ -130,6 +171,9 @@ def parsesite(ui, repo, target, **opts):
     # then the overview
     writeoverview(ui, repo, target, name)
 
+    # and the log
+    writelog(ui, repo, target, name)
+
 def addrepo(ui, repo, target):
     """Add the repo to the target and make sure it is up to date."""
     try: