changeset 25605:dd89304687a3

hgweb: don't dereference symbolic revision in gitweb style Let's make gitweb templates use symbolic revision in navigation links. The majority of links (log, filelog, annotate, etc) still use node hashes. Some pages don't have permanent links to current node hash (so it's not very easy to go from /rev/tip to /rev/<tip hash>), this will be addressed in future patches.
author Anton Shestakov <av6@dwimlabs.net>
date Tue, 16 Jun 2015 14:37:53 +0800
parents 0cdcbc477cac
children 3bb6f5f478a7
files mercurial/templates/gitweb/changelog.tmpl mercurial/templates/gitweb/changeset.tmpl mercurial/templates/gitweb/fileannotate.tmpl mercurial/templates/gitweb/filecomparison.tmpl mercurial/templates/gitweb/filediff.tmpl mercurial/templates/gitweb/filelog.tmpl mercurial/templates/gitweb/filerevision.tmpl mercurial/templates/gitweb/graph.tmpl mercurial/templates/gitweb/manifest.tmpl mercurial/templates/gitweb/map mercurial/templates/gitweb/shortlog.tmpl tests/test-hgweb-commands.t tests/test-hgweb-descend-empties.t tests/test-hgweb-symrev.t
diffstat 14 files changed, 147 insertions(+), 147 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/templates/gitweb/changelog.tmpl	Tue Jun 16 13:59:49 2015 +0800
+++ b/mercurial/templates/gitweb/changelog.tmpl	Tue Jun 16 14:37:53 2015 +0800
@@ -21,13 +21,13 @@
 
 <div class="page_nav">
 <a href="{url|urlescape}summary{sessionvars%urlparameter}">summary</a> |
-<a href="{url|urlescape}shortlog/{rev}{sessionvars%urlparameter}">shortlog</a> |
+<a href="{url|urlescape}shortlog/{symrev}{sessionvars%urlparameter}">shortlog</a> |
 changelog |
 <a href="{url|urlescape}graph{sessionvars%urlparameter}">graph</a> |
 <a href="{url|urlescape}tags{sessionvars%urlparameter}">tags</a> |
 <a href="{url|urlescape}bookmarks{sessionvars%urlparameter}">bookmarks</a> |
 <a href="{url|urlescape}branches{sessionvars%urlparameter}">branches</a> |
-<a href="{url|urlescape}file/{node|short}{sessionvars%urlparameter}">files</a>{archives%archiveentry} |
+<a href="{url|urlescape}file/{symrev}{sessionvars%urlparameter}">files</a>{archives%archiveentry} |
 <a href="{url|urlescape}help{sessionvars%urlparameter}">help</a>
 <br/>
 {changenav%nav}<br/>
--- a/mercurial/templates/gitweb/changeset.tmpl	Tue Jun 16 13:59:49 2015 +0800
+++ b/mercurial/templates/gitweb/changeset.tmpl	Tue Jun 16 14:37:53 2015 +0800
@@ -14,15 +14,15 @@
 
 <div class="page_nav">
 <a href="{url|urlescape}summary{sessionvars%urlparameter}">summary</a> |
-<a href="{url|urlescape}shortlog/{rev}{sessionvars%urlparameter}">shortlog</a> |
-<a href="{url|urlescape}log/{rev}{sessionvars%urlparameter}">changelog</a> |
+<a href="{url|urlescape}shortlog/{symrev}{sessionvars%urlparameter}">shortlog</a> |
+<a href="{url|urlescape}log/{symrev}{sessionvars%urlparameter}">changelog</a> |
 <a href="{url|urlescape}graph{sessionvars%urlparameter}">graph</a> |
 <a href="{url|urlescape}tags{sessionvars%urlparameter}">tags</a> |
 <a href="{url|urlescape}bookmarks{sessionvars%urlparameter}">bookmarks</a> |
 <a href="{url|urlescape}branches{sessionvars%urlparameter}">branches</a> |
-<a href="{url|urlescape}file/{node|short}{sessionvars%urlparameter}">files</a> |
+<a href="{url|urlescape}file/{symrev}{sessionvars%urlparameter}">files</a> |
 changeset |
-<a href="{url|urlescape}raw-rev/{node|short}">raw</a> {archives%archiveentry} |
+<a href="{url|urlescape}raw-rev/{symrev}">raw</a> {archives%archiveentry} |
 <a href="{url|urlescape}help{sessionvars%urlparameter}">help</a>
 <br/>
 </div>
--- a/mercurial/templates/gitweb/fileannotate.tmpl	Tue Jun 16 13:59:49 2015 +0800
+++ b/mercurial/templates/gitweb/fileannotate.tmpl	Tue Jun 16 14:37:53 2015 +0800
@@ -20,15 +20,15 @@
 <a href="{url|urlescape}tags{sessionvars%urlparameter}">tags</a> |
 <a href="{url|urlescape}bookmarks{sessionvars%urlparameter}">bookmarks</a> |
 <a href="{url|urlescape}branches{sessionvars%urlparameter}">branches</a> |
-<a href="{url|urlescape}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">files</a> |
-<a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">changeset</a> |
-<a href="{url|urlescape}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a> |
+<a href="{url|urlescape}file/{symrev}{path|urlescape}{sessionvars%urlparameter}">files</a> |
+<a href="{url|urlescape}rev/{symrev}{sessionvars%urlparameter}">changeset</a> |
+<a href="{url|urlescape}file/{symrev}/{file|urlescape}{sessionvars%urlparameter}">file</a> |
 <a href="{url|urlescape}file/tip/{file|urlescape}{sessionvars%urlparameter}">latest</a> |
-<a href="{url|urlescape}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">revisions</a> |
+<a href="{url|urlescape}log/{symrev}/{file|urlescape}{sessionvars%urlparameter}">revisions</a> |
 annotate |
-<a href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a> |
-<a href="{url|urlescape}comparison/{node|short}/{file|urlescape}{sessionvars%urlparameter}">comparison</a> |
-<a href="{url|urlescape}raw-annotate/{node|short}/{file|urlescape}">raw</a> |
+<a href="{url|urlescape}diff/{symrev}/{file|urlescape}{sessionvars%urlparameter}">diff</a> |
+<a href="{url|urlescape}comparison/{symrev}/{file|urlescape}{sessionvars%urlparameter}">comparison</a> |
+<a href="{url|urlescape}raw-annotate/{symrev}/{file|urlescape}">raw</a> |
 <a href="{url|urlescape}help{sessionvars%urlparameter}">help</a>
 <br/>
 </div>
--- a/mercurial/templates/gitweb/filecomparison.tmpl	Tue Jun 16 13:59:49 2015 +0800
+++ b/mercurial/templates/gitweb/filecomparison.tmpl	Tue Jun 16 14:37:53 2015 +0800
@@ -20,15 +20,15 @@
 <a href="{url|urlescape}tags{sessionvars%urlparameter}">tags</a> |
 <a href="{url|urlescape}bookmarks{sessionvars%urlparameter}">bookmarks</a> |
 <a href="{url|urlescape}branches{sessionvars%urlparameter}">branches</a> |
-<a href="{url|urlescape}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">files</a> |
-<a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">changeset</a> |
-<a href="{url|urlescape}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a> |
+<a href="{url|urlescape}file/{symrev}{path|urlescape}{sessionvars%urlparameter}">files</a> |
+<a href="{url|urlescape}rev/{symrev}{sessionvars%urlparameter}">changeset</a> |
+<a href="{url|urlescape}file/{symrev}/{file|urlescape}{sessionvars%urlparameter}">file</a> |
 <a href="{url|urlescape}file/tip/{file|urlescape}{sessionvars%urlparameter}">latest</a> |
-<a href="{url|urlescape}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">revisions</a> |
-<a href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a> |
-<a href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a> |
+<a href="{url|urlescape}log/{symrev}/{file|urlescape}{sessionvars%urlparameter}">revisions</a> |
+<a href="{url|urlescape}annotate/{symrev}/{file|urlescape}{sessionvars%urlparameter}">annotate</a> |
+<a href="{url|urlescape}diff/{symrev}/{file|urlescape}{sessionvars%urlparameter}">diff</a> |
 comparison |
-<a href="{url|urlescape}raw-diff/{node|short}/{file|urlescape}">raw</a> |
+<a href="{url|urlescape}raw-diff/{symrev}/{file|urlescape}">raw</a> |
 <a href="{url|urlescape}help{sessionvars%urlparameter}">help</a>
 <br/>
 </div>
--- a/mercurial/templates/gitweb/filediff.tmpl	Tue Jun 16 13:59:49 2015 +0800
+++ b/mercurial/templates/gitweb/filediff.tmpl	Tue Jun 16 14:37:53 2015 +0800
@@ -20,15 +20,15 @@
 <a href="{url|urlescape}tags{sessionvars%urlparameter}">tags</a> |
 <a href="{url|urlescape}bookmarks{sessionvars%urlparameter}">bookmarks</a> |
 <a href="{url|urlescape}branches{sessionvars%urlparameter}">branches</a> |
-<a href="{url|urlescape}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">files</a> |
-<a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">changeset</a> |
-<a href="{url|urlescape}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a> |
+<a href="{url|urlescape}file/{symrev}{path|urlescape}{sessionvars%urlparameter}">files</a> |
+<a href="{url|urlescape}rev/{symrev}{sessionvars%urlparameter}">changeset</a> |
+<a href="{url|urlescape}file/{symrev}/{file|urlescape}{sessionvars%urlparameter}">file</a> |
 <a href="{url|urlescape}file/tip/{file|urlescape}{sessionvars%urlparameter}">latest</a> |
-<a href="{url|urlescape}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">revisions</a> |
-<a href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a> |
+<a href="{url|urlescape}log/{symrev}/{file|urlescape}{sessionvars%urlparameter}">revisions</a> |
+<a href="{url|urlescape}annotate/{symrev}/{file|urlescape}{sessionvars%urlparameter}">annotate</a> |
 diff |
-<a href="{url|urlescape}comparison/{node|short}/{file|urlescape}{sessionvars%urlparameter}">comparison</a> |
-<a href="{url|urlescape}raw-diff/{node|short}/{file|urlescape}">raw</a> |
+<a href="{url|urlescape}comparison/{symrev}/{file|urlescape}{sessionvars%urlparameter}">comparison</a> |
+<a href="{url|urlescape}raw-diff/{symrev}/{file|urlescape}">raw</a> |
 <a href="{url|urlescape}help{sessionvars%urlparameter}">help</a>
 <br/>
 </div>
--- a/mercurial/templates/gitweb/filelog.tmpl	Tue Jun 16 13:59:49 2015 +0800
+++ b/mercurial/templates/gitweb/filelog.tmpl	Tue Jun 16 14:37:53 2015 +0800
@@ -20,11 +20,11 @@
 <a href="{url|urlescape}tags{sessionvars%urlparameter}">tags</a> |
 <a href="{url|urlescape}bookmarks{sessionvars%urlparameter}">bookmarks</a> |
 <a href="{url|urlescape}branches{sessionvars%urlparameter}">branches</a> |
-<a href="{url|urlescape}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a> |
+<a href="{url|urlescape}file/{symrev}/{file|urlescape}{sessionvars%urlparameter}">file</a> |
 revisions |
-<a href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a> |
-<a href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a> |
-<a href="{url|urlescape}comparison/{node|short}/{file|urlescape}{sessionvars%urlparameter}">comparison</a> |
+<a href="{url|urlescape}annotate/{symrev}/{file|urlescape}{sessionvars%urlparameter}">annotate</a> |
+<a href="{url|urlescape}diff/{symrev}/{file|urlescape}{sessionvars%urlparameter}">diff</a> |
+<a href="{url|urlescape}comparison/{symrev}/{file|urlescape}{sessionvars%urlparameter}">comparison</a> |
 <a href="{url|urlescape}rss-log/tip/{file|urlescape}">rss</a> |
 <a href="{url|urlescape}help{sessionvars%urlparameter}">help</a>
 <br/>
--- a/mercurial/templates/gitweb/filerevision.tmpl	Tue Jun 16 13:59:49 2015 +0800
+++ b/mercurial/templates/gitweb/filerevision.tmpl	Tue Jun 16 14:37:53 2015 +0800
@@ -20,15 +20,15 @@
 <a href="{url|urlescape}tags{sessionvars%urlparameter}">tags</a> |
 <a href="{url|urlescape}bookmarks{sessionvars%urlparameter}">bookmarks</a> |
 <a href="{url|urlescape}branches{sessionvars%urlparameter}">branches</a> |
-<a href="{url|urlescape}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">files</a> |
-<a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">changeset</a> |
+<a href="{url|urlescape}file/{symrev}{path|urlescape}{sessionvars%urlparameter}">files</a> |
+<a href="{url|urlescape}rev/{symrev}{sessionvars%urlparameter}">changeset</a> |
 file |
 <a href="{url|urlescape}file/tip/{file|urlescape}{sessionvars%urlparameter}">latest</a> |
-<a href="{url|urlescape}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">revisions</a> |
-<a href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a> |
-<a href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a> |
-<a href="{url|urlescape}comparison/{node|short}/{file|urlescape}{sessionvars%urlparameter}">comparison</a> |
-<a href="{url|urlescape}raw-file/{node|short}/{file|urlescape}">raw</a> |
+<a href="{url|urlescape}log/{symrev}/{file|urlescape}{sessionvars%urlparameter}">revisions</a> |
+<a href="{url|urlescape}annotate/{symrev}/{file|urlescape}{sessionvars%urlparameter}">annotate</a> |
+<a href="{url|urlescape}diff/{symrev}/{file|urlescape}{sessionvars%urlparameter}">diff</a> |
+<a href="{url|urlescape}comparison/{symrev}/{file|urlescape}{sessionvars%urlparameter}">comparison</a> |
+<a href="{url|urlescape}raw-file/{symrev}/{file|urlescape}">raw</a> |
 <a href="{url|urlescape}help{sessionvars%urlparameter}">help</a>
 <br/>
 </div>
--- a/mercurial/templates/gitweb/graph.tmpl	Tue Jun 16 13:59:49 2015 +0800
+++ b/mercurial/templates/gitweb/graph.tmpl	Tue Jun 16 14:37:53 2015 +0800
@@ -22,16 +22,16 @@
 <div class="page_nav">
 <a href="{url|urlescape}summary{sessionvars%urlparameter}">summary</a> |
 <a href="{url|urlescape}shortlog{sessionvars%urlparameter}">shortlog</a> |
-<a href="{url|urlescape}log/{rev}{sessionvars%urlparameter}">changelog</a> |
+<a href="{url|urlescape}log/{symrev}{sessionvars%urlparameter}">changelog</a> |
 graph |
 <a href="{url|urlescape}tags{sessionvars%urlparameter}">tags</a> |
 <a href="{url|urlescape}bookmarks{sessionvars%urlparameter}">bookmarks</a> |
 <a href="{url|urlescape}branches{sessionvars%urlparameter}">branches</a> |
-<a href="{url|urlescape}file/{node|short}{sessionvars%urlparameter}">files</a> |
+<a href="{url|urlescape}file/{symrev}{sessionvars%urlparameter}">files</a> |
 <a href="{url|urlescape}help{sessionvars%urlparameter}">help</a>
 <br/>
-<a href="{url|urlescape}graph/{rev}{lessvars%urlparameter}">less</a>
-<a href="{url|urlescape}graph/{rev}{morevars%urlparameter}">more</a>
+<a href="{url|urlescape}graph/{symrev}{lessvars%urlparameter}">less</a>
+<a href="{url|urlescape}graph/{symrev}{morevars%urlparameter}">more</a>
 | {changenav%navgraph}<br/>
 </div>
 
@@ -103,8 +103,8 @@
 </script>
 
 <div class="page_nav">
-<a href="{url|urlescape}graph/{rev}{lessvars%urlparameter}">less</a>
-<a href="{url|urlescape}graph/{rev}{morevars%urlparameter}">more</a>
+<a href="{url|urlescape}graph/{symrev}{lessvars%urlparameter}">less</a>
+<a href="{url|urlescape}graph/{symrev}{morevars%urlparameter}">more</a>
 | {changenav%navgraph}
 </div>
 
--- a/mercurial/templates/gitweb/manifest.tmpl	Tue Jun 16 13:59:49 2015 +0800
+++ b/mercurial/templates/gitweb/manifest.tmpl	Tue Jun 16 14:37:53 2015 +0800
@@ -21,7 +21,7 @@
 <a href="{url|urlescape}bookmarks{sessionvars%urlparameter}">bookmarks</a> |
 <a href="{url|urlescape}branches{sessionvars%urlparameter}">branches</a> |
 files |
-<a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">changeset</a> {archives%archiveentry} |
+<a href="{url|urlescape}rev/{symrev}{sessionvars%urlparameter}">changeset</a> {archives%archiveentry} |
 <a href="{url|urlescape}help{sessionvars%urlparameter}">help</a>
 <br/>
 </div>
@@ -32,7 +32,7 @@
 <td style="font-family:monospace">drwxr-xr-x</td>
 <td style="font-family:monospace"></td>
 <td style="font-family:monospace"></td>
-<td><a href="{url|urlescape}file/{node|short}{up|urlescape}{sessionvars%urlparameter}">[up]</a></td>
+<td><a href="{url|urlescape}file/{symrev}{up|urlescape}{sessionvars%urlparameter}">[up]</a></td>
 <td class="link">&nbsp;</td>
 </tr>
 {dentries%direntry}
--- a/mercurial/templates/gitweb/map	Tue Jun 16 13:59:49 2015 +0800
+++ b/mercurial/templates/gitweb/map	Tue Jun 16 14:37:53 2015 +0800
@@ -66,11 +66,11 @@
     <td style="font-family:monospace"></td>
     <td style="font-family:monospace"></td>
     <td>
-      <a href="{url|urlescape}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">{basename|escape}</a>
-      <a href="{url|urlescape}file/{node|short}{path|urlescape}/{emptydirs|urlescape}{sessionvars%urlparameter}">{emptydirs|escape}</a>
+      <a href="{url|urlescape}file/{symrev}{path|urlescape}{sessionvars%urlparameter}">{basename|escape}</a>
+      <a href="{url|urlescape}file/{symrev}{path|urlescape}/{emptydirs|urlescape}{sessionvars%urlparameter}">{emptydirs|escape}</a>
     </td>
     <td class="link">
-      <a href="{url|urlescape}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">files</a>
+      <a href="{url|urlescape}file/{symrev}{path|urlescape}{sessionvars%urlparameter}">files</a>
     </td>
   </tr>'
 fileentry = '
@@ -79,12 +79,12 @@
     <td style="font-family:monospace" align=right>{date|isodate}</td>
     <td style="font-family:monospace" align=right>{size}</td>
     <td class="list">
-      <a class="list" href="{url|urlescape}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{basename|escape}</a>
+      <a class="list" href="{url|urlescape}file/{symrev}/{file|urlescape}{sessionvars%urlparameter}">{basename|escape}</a>
     </td>
     <td class="link">
-      <a href="{url|urlescape}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a> |
-      <a href="{url|urlescape}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">revisions</a> |
-      <a href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a>
+      <a href="{url|urlescape}file/{symrev}/{file|urlescape}{sessionvars%urlparameter}">file</a> |
+      <a href="{url|urlescape}log/{symrev}/{file|urlescape}{sessionvars%urlparameter}">revisions</a> |
+      <a href="{url|urlescape}annotate/{symrev}/{file|urlescape}{sessionvars%urlparameter}">annotate</a>
     </td>
   </tr>'
 filerevision = filerevision.tmpl
@@ -303,7 +303,7 @@
       {rename%filelogrename}
     </td>
   </tr>'
-archiveentry = ' | <a href="{url|urlescape}archive/{node|short}{extension}{ifeq(path,'/','',path|urlescape)}">{type|escape}</a> '
+archiveentry = ' | <a href="{url|urlescape}archive/{symrev}{extension}{ifeq(path,'/','',path|urlescape)}">{type|escape}</a> '
 indexentry = '
   <tr class="parity{parity}">
     <td>
--- a/mercurial/templates/gitweb/shortlog.tmpl	Tue Jun 16 13:59:49 2015 +0800
+++ b/mercurial/templates/gitweb/shortlog.tmpl	Tue Jun 16 14:37:53 2015 +0800
@@ -21,12 +21,12 @@
 <div class="page_nav">
 <a href="{url|urlescape}summary{sessionvars%urlparameter}">summary</a> |
 shortlog |
-<a href="{url|urlescape}log/{rev}{sessionvars%urlparameter}">changelog</a> |
+<a href="{url|urlescape}log/{symrev}{sessionvars%urlparameter}">changelog</a> |
 <a href="{url|urlescape}graph{sessionvars%urlparameter}">graph</a> |
 <a href="{url|urlescape}tags{sessionvars%urlparameter}">tags</a> |
 <a href="{url|urlescape}bookmarks{sessionvars%urlparameter}">bookmarks</a> |
 <a href="{url|urlescape}branches{sessionvars%urlparameter}">branches</a> |
-<a href="{url|urlescape}file/{node|short}{sessionvars%urlparameter}">files</a>{archives%archiveentry} |
+<a href="{url|urlescape}file/{symrev}{sessionvars%urlparameter}">files</a>{archives%archiveentry} |
 <a href="{url|urlescape}help{sessionvars%urlparameter}">help</a>
 <br/>{changenav%navshort}<br/>
 </div>
--- a/tests/test-hgweb-commands.t	Tue Jun 16 13:59:49 2015 +0800
+++ b/tests/test-hgweb-commands.t	Tue Jun 16 14:37:53 2015 +0800
@@ -1723,16 +1723,16 @@
   <div class="page_nav">
   <a href="/summary?style=gitweb">summary</a> |
   <a href="/shortlog?style=gitweb">shortlog</a> |
-  <a href="/log/3?style=gitweb">changelog</a> |
+  <a href="/log/tip?style=gitweb">changelog</a> |
   graph |
   <a href="/tags?style=gitweb">tags</a> |
   <a href="/bookmarks?style=gitweb">bookmarks</a> |
   <a href="/branches?style=gitweb">branches</a> |
-  <a href="/file/cad8025a2e87?style=gitweb">files</a> |
+  <a href="/file/tip?style=gitweb">files</a> |
   <a href="/help?style=gitweb">help</a>
   <br/>
-  <a href="/graph/3?revcount=30&style=gitweb">less</a>
-  <a href="/graph/3?revcount=120&style=gitweb">more</a>
+  <a href="/graph/tip?revcount=30&style=gitweb">less</a>
+  <a href="/graph/tip?revcount=120&style=gitweb">more</a>
   | <a href="/graph/2ef0ac749a14?style=gitweb">(0)</a> <a href="/graph/tip?style=gitweb">tip</a> <br/>
   </div>
   
@@ -1804,8 +1804,8 @@
   </script>
   
   <div class="page_nav">
-  <a href="/graph/3?revcount=30&style=gitweb">less</a>
-  <a href="/graph/3?revcount=120&style=gitweb">more</a>
+  <a href="/graph/tip?revcount=30&style=gitweb">less</a>
+  <a href="/graph/tip?revcount=120&style=gitweb">more</a>
   | <a href="/graph/2ef0ac749a14?style=gitweb">(0)</a> <a href="/graph/tip?style=gitweb">tip</a> 
   </div>
   
--- a/tests/test-hgweb-descend-empties.t	Tue Jun 16 13:59:49 2015 +0800
+++ b/tests/test-hgweb-descend-empties.t	Tue Jun 16 14:37:53 2015 +0800
@@ -414,7 +414,7 @@
   <a href="/bookmarks?style=gitweb">bookmarks</a> |
   <a href="/branches?style=gitweb">branches</a> |
   files |
-  <a href="/rev/c9f45f7a1659?style=gitweb">changeset</a>  |
+  <a href="/rev/tip?style=gitweb">changeset</a>  |
   <a href="/help?style=gitweb">help</a>
   <br/>
   </div>
@@ -425,7 +425,7 @@
   <td style="font-family:monospace">drwxr-xr-x</td>
   <td style="font-family:monospace"></td>
   <td style="font-family:monospace"></td>
-  <td><a href="/file/c9f45f7a1659/?style=gitweb">[up]</a></td>
+  <td><a href="/file/tip/?style=gitweb">[up]</a></td>
   <td class="link">&nbsp;</td>
   </tr>
   
@@ -434,11 +434,11 @@
   <td style="font-family:monospace"></td>
   <td style="font-family:monospace"></td>
   <td>
-  <a href="/file/c9f45f7a1659/a1?style=gitweb">a1</a>
-  <a href="/file/c9f45f7a1659/a1/a2/a3/a4?style=gitweb">a2/a3/a4</a>
+  <a href="/file/tip/a1?style=gitweb">a1</a>
+  <a href="/file/tip/a1/a2/a3/a4?style=gitweb">a2/a3/a4</a>
   </td>
   <td class="link">
-  <a href="/file/c9f45f7a1659/a1?style=gitweb">files</a>
+  <a href="/file/tip/a1?style=gitweb">files</a>
   </td>
   </tr>
   <tr class="parity0">
@@ -446,11 +446,11 @@
   <td style="font-family:monospace"></td>
   <td style="font-family:monospace"></td>
   <td>
-  <a href="/file/c9f45f7a1659/b1?style=gitweb">b1</a>
-  <a href="/file/c9f45f7a1659/b1/b2/b3?style=gitweb">b2/b3</a>
+  <a href="/file/tip/b1?style=gitweb">b1</a>
+  <a href="/file/tip/b1/b2/b3?style=gitweb">b2/b3</a>
   </td>
   <td class="link">
-  <a href="/file/c9f45f7a1659/b1?style=gitweb">files</a>
+  <a href="/file/tip/b1?style=gitweb">files</a>
   </td>
   </tr>
   <tr class="parity1">
@@ -458,11 +458,11 @@
   <td style="font-family:monospace"></td>
   <td style="font-family:monospace"></td>
   <td>
-  <a href="/file/c9f45f7a1659/d1?style=gitweb">d1</a>
-  <a href="/file/c9f45f7a1659/d1/d2?style=gitweb">d2</a>
+  <a href="/file/tip/d1?style=gitweb">d1</a>
+  <a href="/file/tip/d1/d2?style=gitweb">d2</a>
   </td>
   <td class="link">
-  <a href="/file/c9f45f7a1659/d1?style=gitweb">files</a>
+  <a href="/file/tip/d1?style=gitweb">files</a>
   </td>
   </tr>
   
--- a/tests/test-hgweb-symrev.t	Tue Jun 16 13:59:49 2015 +0800
+++ b/tests/test-hgweb-symrev.t	Tue Jun 16 14:37:53 2015 +0800
@@ -394,8 +394,8 @@
   <a href="/file/9d8c40cba617?style=gitweb">files</a>
 
   $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT 'shortlog?style=gitweb' | egrep $REVLINKS
-  <a href="/log/2?style=gitweb">changelog</a> |
-  <a href="/file/9d8c40cba617?style=gitweb">files</a> | <a href="/archive/tip.zip">zip</a>  |
+  <a href="/log/tip?style=gitweb">changelog</a> |
+  <a href="/file/tip?style=gitweb">files</a> | <a href="/archive/tip.zip">zip</a>  |
   <br/><a href="/shortlog/43c799df6e75?style=gitweb">(0)</a> <a href="/shortlog/tip?style=gitweb">tip</a> <br/>
   <a class="list" href="/rev/9d8c40cba617?style=gitweb">
   <a href="/rev/9d8c40cba617?style=gitweb">changeset</a> |
@@ -409,8 +409,8 @@
   <a href="/shortlog/43c799df6e75?style=gitweb">(0)</a> <a href="/shortlog/tip?style=gitweb">tip</a> 
 
   $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT 'log?style=gitweb' | egrep $REVLINKS
-  <a href="/shortlog/2?style=gitweb">shortlog</a> |
-  <a href="/file/9d8c40cba617?style=gitweb">files</a> | <a href="/archive/tip.zip">zip</a>  |
+  <a href="/shortlog/tip?style=gitweb">shortlog</a> |
+  <a href="/file/tip?style=gitweb">files</a> | <a href="/archive/tip.zip">zip</a>  |
   <a href="/log/43c799df6e75?style=gitweb">(0)</a>  <a href="/log/tip?style=gitweb">tip</a> <br/>
   <a class="title" href="/rev/9d8c40cba617?style=gitweb"><span class="age">Thu, 01 Jan 1970 00:00:00 +0000</span>third<span class="logtags"> <span class="branchtag" title="default">default</span> <span class="tagtag" title="tip">tip</span> </span></a>
   <a href="/rev/9d8c40cba617?style=gitweb">changeset</a><br/>
@@ -421,13 +421,13 @@
   <a href="/log/43c799df6e75?style=gitweb">(0)</a>  <a href="/log/tip?style=gitweb">tip</a> <br/>
 
   $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT 'graph?style=gitweb' | egrep $REVLINKS
-  <a href="/log/2?style=gitweb">changelog</a> |
-  <a href="/file/9d8c40cba617?style=gitweb">files</a> |
-  <a href="/graph/2?revcount=30&style=gitweb">less</a>
-  <a href="/graph/2?revcount=120&style=gitweb">more</a>
+  <a href="/log/tip?style=gitweb">changelog</a> |
+  <a href="/file/tip?style=gitweb">files</a> |
+  <a href="/graph/tip?revcount=30&style=gitweb">less</a>
+  <a href="/graph/tip?revcount=120&style=gitweb">more</a>
   | <a href="/graph/43c799df6e75?style=gitweb">(0)</a> <a href="/graph/tip?style=gitweb">tip</a> <br/>
-  <a href="/graph/2?revcount=30&style=gitweb">less</a>
-  <a href="/graph/2?revcount=120&style=gitweb">more</a>
+  <a href="/graph/tip?revcount=30&style=gitweb">less</a>
+  <a href="/graph/tip?revcount=120&style=gitweb">more</a>
   | <a href="/graph/43c799df6e75?style=gitweb">(0)</a> <a href="/graph/tip?style=gitweb">tip</a> 
 
   $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT 'tags?style=gitweb' | egrep $REVLINKS
@@ -449,15 +449,15 @@
   <a href="/file/9d8c40cba617?style=gitweb">files</a>
 
   $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT 'file?style=gitweb' | egrep $REVLINKS
-  <a href="/rev/9d8c40cba617?style=gitweb">changeset</a>  | <a href="/archive/9d8c40cba617.zip">zip</a>  |
-  <td><a href="/file/9d8c40cba617/?style=gitweb">[up]</a></td>
-  <a href="/file/9d8c40cba617/dir?style=gitweb">dir</a>
-  <a href="/file/9d8c40cba617/dir/?style=gitweb"></a>
-  <a href="/file/9d8c40cba617/dir?style=gitweb">files</a>
-  <a class="list" href="/file/9d8c40cba617/foo?style=gitweb">foo</a>
-  <a href="/file/9d8c40cba617/foo?style=gitweb">file</a> |
-  <a href="/log/9d8c40cba617/foo?style=gitweb">revisions</a> |
-  <a href="/annotate/9d8c40cba617/foo?style=gitweb">annotate</a>
+  <a href="/rev/tip?style=gitweb">changeset</a>  | <a href="/archive/tip.zip">zip</a>  |
+  <td><a href="/file/tip/?style=gitweb">[up]</a></td>
+  <a href="/file/tip/dir?style=gitweb">dir</a>
+  <a href="/file/tip/dir/?style=gitweb"></a>
+  <a href="/file/tip/dir?style=gitweb">files</a>
+  <a class="list" href="/file/tip/foo?style=gitweb">foo</a>
+  <a href="/file/tip/foo?style=gitweb">file</a> |
+  <a href="/log/tip/foo?style=gitweb">revisions</a> |
+  <a href="/annotate/tip/foo?style=gitweb">annotate</a>
 
   $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT 'shortlog?style=gitweb&rev=all()' | egrep $REVLINKS
   <a href="/file?style=gitweb">files</a> | <a href="/archive/tip.zip">zip</a> 
@@ -469,10 +469,10 @@
   <a href="/rev/43c799df6e75?style=gitweb">changeset</a><br/>
 
   $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT 'rev/xyzzy?style=gitweb' | egrep $REVLINKS
-  <a href="/shortlog/1?style=gitweb">shortlog</a> |
-  <a href="/log/1?style=gitweb">changelog</a> |
-  <a href="/file/a7c1559b7bba?style=gitweb">files</a> |
-  <a href="/raw-rev/a7c1559b7bba">raw</a>  | <a href="/archive/a7c1559b7bba.zip">zip</a>  |
+  <a href="/shortlog/xyzzy?style=gitweb">shortlog</a> |
+  <a href="/log/xyzzy?style=gitweb">changelog</a> |
+  <a href="/file/xyzzy?style=gitweb">files</a> |
+  <a href="/raw-rev/xyzzy">raw</a>  | <a href="/archive/xyzzy.zip">zip</a>  |
   <a class="title" href="/raw-rev/a7c1559b7bba">second <span class="logtags"><span class="bookmarktag" title="xyzzy">xyzzy</span> </span></a>
   <a class="list" href="/rev/43c799df6e75?style=gitweb">43c799df6e75</a>
   <a class="list" href="/rev/9d8c40cba617?style=gitweb">9d8c40cba617</a>
@@ -484,8 +484,8 @@
   <a href="/log/a7c1559b7bba/foo?style=gitweb">revisions</a>
 
   $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT 'shortlog/xyzzy?style=gitweb' | egrep $REVLINKS
-  <a href="/log/1?style=gitweb">changelog</a> |
-  <a href="/file/a7c1559b7bba?style=gitweb">files</a> | <a href="/archive/tip.zip">zip</a>  |
+  <a href="/log/xyzzy?style=gitweb">changelog</a> |
+  <a href="/file/xyzzy?style=gitweb">files</a> | <a href="/archive/xyzzy.zip">zip</a>  |
   <br/><a href="/shortlog/43c799df6e75?style=gitweb">(0)</a> <a href="/shortlog/tip?style=gitweb">tip</a> <br/>
   <a class="list" href="/rev/a7c1559b7bba?style=gitweb">
   <a href="/rev/a7c1559b7bba?style=gitweb">changeset</a> |
@@ -496,8 +496,8 @@
   <a href="/shortlog/43c799df6e75?style=gitweb">(0)</a> <a href="/shortlog/tip?style=gitweb">tip</a> 
 
   $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT 'log/xyzzy?style=gitweb' | egrep $REVLINKS
-  <a href="/shortlog/1?style=gitweb">shortlog</a> |
-  <a href="/file/a7c1559b7bba?style=gitweb">files</a> | <a href="/archive/tip.zip">zip</a>  |
+  <a href="/shortlog/xyzzy?style=gitweb">shortlog</a> |
+  <a href="/file/xyzzy?style=gitweb">files</a> | <a href="/archive/xyzzy.zip">zip</a>  |
   <a href="/log/43c799df6e75?style=gitweb">(0)</a>  <a href="/log/tip?style=gitweb">tip</a> <br/>
   <a class="title" href="/rev/a7c1559b7bba?style=gitweb"><span class="age">Thu, 01 Jan 1970 00:00:00 +0000</span>second<span class="logtags"> <span class="bookmarktag" title="xyzzy">xyzzy</span> </span></a>
   <a href="/rev/a7c1559b7bba?style=gitweb">changeset</a><br/>
@@ -506,44 +506,44 @@
   <a href="/log/43c799df6e75?style=gitweb">(0)</a>  <a href="/log/tip?style=gitweb">tip</a> <br/>
 
   $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT 'graph/xyzzy?style=gitweb' | egrep $REVLINKS
-  <a href="/log/1?style=gitweb">changelog</a> |
-  <a href="/file/a7c1559b7bba?style=gitweb">files</a> |
-  <a href="/graph/1?revcount=30&style=gitweb">less</a>
-  <a href="/graph/1?revcount=120&style=gitweb">more</a>
+  <a href="/log/xyzzy?style=gitweb">changelog</a> |
+  <a href="/file/xyzzy?style=gitweb">files</a> |
+  <a href="/graph/xyzzy?revcount=30&style=gitweb">less</a>
+  <a href="/graph/xyzzy?revcount=120&style=gitweb">more</a>
   | <a href="/graph/43c799df6e75?style=gitweb">(0)</a> <a href="/graph/tip?style=gitweb">tip</a> <br/>
-  <a href="/graph/1?revcount=30&style=gitweb">less</a>
-  <a href="/graph/1?revcount=120&style=gitweb">more</a>
+  <a href="/graph/xyzzy?revcount=30&style=gitweb">less</a>
+  <a href="/graph/xyzzy?revcount=120&style=gitweb">more</a>
   | <a href="/graph/43c799df6e75?style=gitweb">(0)</a> <a href="/graph/tip?style=gitweb">tip</a> 
 
   $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT 'file/xyzzy?style=gitweb' | egrep $REVLINKS
-  <a href="/rev/a7c1559b7bba?style=gitweb">changeset</a>  | <a href="/archive/a7c1559b7bba.zip">zip</a>  |
-  <td><a href="/file/a7c1559b7bba/?style=gitweb">[up]</a></td>
-  <a href="/file/a7c1559b7bba/dir?style=gitweb">dir</a>
-  <a href="/file/a7c1559b7bba/dir/?style=gitweb"></a>
-  <a href="/file/a7c1559b7bba/dir?style=gitweb">files</a>
-  <a class="list" href="/file/a7c1559b7bba/foo?style=gitweb">foo</a>
-  <a href="/file/a7c1559b7bba/foo?style=gitweb">file</a> |
-  <a href="/log/a7c1559b7bba/foo?style=gitweb">revisions</a> |
-  <a href="/annotate/a7c1559b7bba/foo?style=gitweb">annotate</a>
+  <a href="/rev/xyzzy?style=gitweb">changeset</a>  | <a href="/archive/xyzzy.zip">zip</a>  |
+  <td><a href="/file/xyzzy/?style=gitweb">[up]</a></td>
+  <a href="/file/xyzzy/dir?style=gitweb">dir</a>
+  <a href="/file/xyzzy/dir/?style=gitweb"></a>
+  <a href="/file/xyzzy/dir?style=gitweb">files</a>
+  <a class="list" href="/file/xyzzy/foo?style=gitweb">foo</a>
+  <a href="/file/xyzzy/foo?style=gitweb">file</a> |
+  <a href="/log/xyzzy/foo?style=gitweb">revisions</a> |
+  <a href="/annotate/xyzzy/foo?style=gitweb">annotate</a>
 
   $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT 'file/xyzzy/foo?style=gitweb' | egrep $REVLINKS
-  <a href="/file/a7c1559b7bba/?style=gitweb">files</a> |
-  <a href="/rev/a7c1559b7bba?style=gitweb">changeset</a> |
+  <a href="/file/xyzzy/?style=gitweb">files</a> |
+  <a href="/rev/xyzzy?style=gitweb">changeset</a> |
   <a href="/file/tip/foo?style=gitweb">latest</a> |
-  <a href="/log/a7c1559b7bba/foo?style=gitweb">revisions</a> |
-  <a href="/annotate/a7c1559b7bba/foo?style=gitweb">annotate</a> |
-  <a href="/diff/a7c1559b7bba/foo?style=gitweb">diff</a> |
-  <a href="/comparison/a7c1559b7bba/foo?style=gitweb">comparison</a> |
-  <a href="/raw-file/a7c1559b7bba/foo">raw</a> |
+  <a href="/log/xyzzy/foo?style=gitweb">revisions</a> |
+  <a href="/annotate/xyzzy/foo?style=gitweb">annotate</a> |
+  <a href="/diff/xyzzy/foo?style=gitweb">diff</a> |
+  <a href="/comparison/xyzzy/foo?style=gitweb">comparison</a> |
+  <a href="/raw-file/xyzzy/foo">raw</a> |
    <td style="font-family:monospace"><a class="list" href="/rev/a7c1559b7bba?style=gitweb">a7c1559b7bba</a></td>
   <a class="list" href="/file/43c799df6e75/foo?style=gitweb">
   <a class="list" href="/file/9d8c40cba617/foo?style=gitweb">9d8c40cba617</a></td>
 
   $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT 'log/xyzzy/foo?style=gitweb' | egrep $REVLINKS
-  <a href="/file/a7c1559b7bba/foo?style=gitweb">file</a> |
-  <a href="/annotate/a7c1559b7bba/foo?style=gitweb">annotate</a> |
-  <a href="/diff/a7c1559b7bba/foo?style=gitweb">diff</a> |
-  <a href="/comparison/a7c1559b7bba/foo?style=gitweb">comparison</a> |
+  <a href="/file/xyzzy/foo?style=gitweb">file</a> |
+  <a href="/annotate/xyzzy/foo?style=gitweb">annotate</a> |
+  <a href="/diff/xyzzy/foo?style=gitweb">diff</a> |
+  <a href="/comparison/xyzzy/foo?style=gitweb">comparison</a> |
   <a href="/rss-log/tip/foo">rss</a> |
   <a href="/log/43c799df6e75/foo?style=gitweb">(0)</a> <a href="/log/tip/foo?style=gitweb">tip</a> 
   <a class="list" href="/rev/a7c1559b7bba?style=gitweb">
@@ -557,14 +557,14 @@
   <a href="/log/43c799df6e75/foo?style=gitweb">(0)</a> <a href="/log/tip/foo?style=gitweb">tip</a> 
 
   $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT 'annotate/xyzzy/foo?style=gitweb' | egrep $REVLINKS
-  <a href="/file/a7c1559b7bba/?style=gitweb">files</a> |
-  <a href="/rev/a7c1559b7bba?style=gitweb">changeset</a> |
-  <a href="/file/a7c1559b7bba/foo?style=gitweb">file</a> |
+  <a href="/file/xyzzy/?style=gitweb">files</a> |
+  <a href="/rev/xyzzy?style=gitweb">changeset</a> |
+  <a href="/file/xyzzy/foo?style=gitweb">file</a> |
   <a href="/file/tip/foo?style=gitweb">latest</a> |
-  <a href="/log/a7c1559b7bba/foo?style=gitweb">revisions</a> |
-  <a href="/diff/a7c1559b7bba/foo?style=gitweb">diff</a> |
-  <a href="/comparison/a7c1559b7bba/foo?style=gitweb">comparison</a> |
-  <a href="/raw-annotate/a7c1559b7bba/foo">raw</a> |
+  <a href="/log/xyzzy/foo?style=gitweb">revisions</a> |
+  <a href="/diff/xyzzy/foo?style=gitweb">diff</a> |
+  <a href="/comparison/xyzzy/foo?style=gitweb">comparison</a> |
+  <a href="/raw-annotate/xyzzy/foo">raw</a> |
    <td style="font-family:monospace"><a class="list" href="/rev/a7c1559b7bba?style=gitweb">a7c1559b7bba</a></td>
   <a class="list" href="/annotate/43c799df6e75/foo?style=gitweb">
   <a class="list" href="/annotate/9d8c40cba617/foo?style=gitweb">9d8c40cba617</a></td>
@@ -572,27 +572,27 @@
   <a href="/annotate/a7c1559b7bba/foo?style=gitweb#l2"
 
   $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT 'diff/xyzzy/foo?style=gitweb' | egrep $REVLINKS
-  <a href="/file/a7c1559b7bba?style=gitweb">files</a> |
-  <a href="/rev/a7c1559b7bba?style=gitweb">changeset</a> |
-  <a href="/file/a7c1559b7bba/foo?style=gitweb">file</a> |
+  <a href="/file/xyzzy?style=gitweb">files</a> |
+  <a href="/rev/xyzzy?style=gitweb">changeset</a> |
+  <a href="/file/xyzzy/foo?style=gitweb">file</a> |
   <a href="/file/tip/foo?style=gitweb">latest</a> |
-  <a href="/log/a7c1559b7bba/foo?style=gitweb">revisions</a> |
-  <a href="/annotate/a7c1559b7bba/foo?style=gitweb">annotate</a> |
-  <a href="/comparison/a7c1559b7bba/foo?style=gitweb">comparison</a> |
-  <a href="/raw-diff/a7c1559b7bba/foo">raw</a> |
+  <a href="/log/xyzzy/foo?style=gitweb">revisions</a> |
+  <a href="/annotate/xyzzy/foo?style=gitweb">annotate</a> |
+  <a href="/comparison/xyzzy/foo?style=gitweb">comparison</a> |
+  <a href="/raw-diff/xyzzy/foo">raw</a> |
    <td style="font-family:monospace"><a class="list" href="/rev/a7c1559b7bba?style=gitweb">a7c1559b7bba</a></td>
   <a class="list" href="/diff/43c799df6e75/foo?style=gitweb">
   <a class="list" href="/diff/9d8c40cba617/foo?style=gitweb">9d8c40cba617</a>
 
   $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT 'comparison/xyzzy/foo?style=gitweb' | egrep $REVLINKS
-  <a href="/file/a7c1559b7bba?style=gitweb">files</a> |
-  <a href="/rev/a7c1559b7bba?style=gitweb">changeset</a> |
-  <a href="/file/a7c1559b7bba/foo?style=gitweb">file</a> |
+  <a href="/file/xyzzy?style=gitweb">files</a> |
+  <a href="/rev/xyzzy?style=gitweb">changeset</a> |
+  <a href="/file/xyzzy/foo?style=gitweb">file</a> |
   <a href="/file/tip/foo?style=gitweb">latest</a> |
-  <a href="/log/a7c1559b7bba/foo?style=gitweb">revisions</a> |
-  <a href="/annotate/a7c1559b7bba/foo?style=gitweb">annotate</a> |
-  <a href="/diff/a7c1559b7bba/foo?style=gitweb">diff</a> |
-  <a href="/raw-diff/a7c1559b7bba/foo">raw</a> |
+  <a href="/log/xyzzy/foo?style=gitweb">revisions</a> |
+  <a href="/annotate/xyzzy/foo?style=gitweb">annotate</a> |
+  <a href="/diff/xyzzy/foo?style=gitweb">diff</a> |
+  <a href="/raw-diff/xyzzy/foo">raw</a> |
    <td style="font-family:monospace"><a class="list" href="/rev/a7c1559b7bba?style=gitweb">a7c1559b7bba</a></td>
   <a class="list" href="/comparison/43c799df6e75/foo?style=gitweb">
   <a class="list" href="/comparison/9d8c40cba617/foo?style=gitweb">9d8c40cba617</a>