merge with stable
authorMartin Geisler <mg@lazybytes.net>
Sun, 13 Mar 2011 13:05:16 +0100
changeset 13607 2151703e7f84
parent 13604 3f6a4579f803 (current diff)
parent 13606 1532ed1e50ca (diff)
child 13608 63ab6b0ccedc
merge with stable
hgext/transplant.py
--- a/hgext/transplant.py	Sun Mar 13 12:24:17 2011 +0100
+++ b/hgext/transplant.py	Sun Mar 13 13:05:16 2011 +0100
@@ -453,8 +453,13 @@
     '''transplant changesets from another branch
 
     Selected changesets will be applied on top of the current working
-    directory with the log of the original changeset. If --log is
-    specified, log messages will have a comment appended of the form::
+    directory with the log of the original changeset. The changesets
+    are copied and will thus appear twice in the history. Use the
+    rebase extension instead if you want to move a whole branch of
+    unpublished changesets.
+
+    If --log is specified, log messages will have a comment appended
+    of the form::
 
       (transplanted from CHANGESETHASH)
 
@@ -469,9 +474,9 @@
     transplanted, otherwise you will be prompted to select the
     changesets you want.
 
-    :hg:`transplant --branch REVISION --all` will rebase the selected
-    branch (up to the named revision) onto your current working
-    directory.
+    :hg:`transplant --branch REVISION --all` will transplant the
+    selected branch (up to the named revision) onto your current
+    working directory.
 
     You can optionally mark selected transplanted changesets as merge
     changesets. You will not be prompted to transplant any ancestors
--- a/mercurial/hgweb/request.py	Sun Mar 13 12:24:17 2011 +0100
+++ b/mercurial/hgweb/request.py	Sun Mar 13 13:05:16 2011 +0100
@@ -66,7 +66,7 @@
 
     def drain(self):
         '''need to read all data from request, httplib is half-duplex'''
-        length = int(self.env.get('CONTENT_LENGTH', 0))
+        length = int(self.env.get('CONTENT_LENGTH') or 0)
         for s in util.filechunkiter(self.inp, limit=length):
             pass
 
--- a/mercurial/hgweb/webcommands.py	Sun Mar 13 12:24:17 2011 +0100
+++ b/mercurial/hgweb/webcommands.py	Sun Mar 13 13:05:16 2011 +0100
@@ -21,8 +21,8 @@
 
 __all__ = [
    'log', 'rawfile', 'file', 'changelog', 'shortlog', 'changeset', 'rev',
-   'manifest', 'tags', 'branches', 'summary', 'filediff', 'diff', 'annotate',
-   'filelog', 'archive', 'static', 'graph', 'help',
+   'manifest', 'tags', 'bookmarks', 'branches', 'summary', 'filediff', 'diff',
+   'annotate', 'filelog', 'archive', 'static', 'graph', 'help',
 ]
 
 def log(web, req, tmpl):
@@ -205,6 +205,7 @@
                          "rev": i,
                          "node": hex(n),
                          "tags": webutil.nodetagsdict(web.repo, n),
+                         "bookmarks": webutil.nodebookmarksdict(web.repo, n),
                          "inbranch": webutil.nodeinbranch(web.repo, ctx),
                          "branches": webutil.nodebranchdict(web.repo, ctx)
                         })
@@ -247,6 +248,8 @@
 def changeset(web, req, tmpl):
     ctx = webutil.changectx(web.repo, req)
     showtags = webutil.showtag(web.repo, tmpl, 'changesettag', ctx.node())
+    showbookmarks = webutil.showbookmark(web.repo, tmpl, 'changesetbookmark',
+                                         ctx.node())
     showbranch = webutil.nodebranchnodefault(ctx)
 
     files = []
@@ -270,6 +273,7 @@
                 parent=webutil.parents(ctx),
                 child=webutil.children(ctx),
                 changesettag=showtags,
+                changesetbookmark=showbookmarks,
                 changesetbranch=showbranch,
                 author=ctx.user(),
                 desc=ctx.description(),
@@ -277,6 +281,7 @@
                 files=files,
                 archives=web.archivelist(ctx.hex()),
                 tags=webutil.nodetagsdict(web.repo, ctx.node()),
+                bookmarks=webutil.nodebookmarksdict(web.repo, ctx.node()),
                 branch=webutil.nodebranchnodefault(ctx),
                 inbranch=webutil.nodeinbranch(web.repo, ctx),
                 branches=webutil.nodebranchdict(web.repo, ctx))
@@ -384,6 +389,30 @@
                 entriesnotip=lambda **x: entries(True, 0, **x),
                 latestentry=lambda **x: entries(True, 1, **x))
 
+def bookmarks(web, req, tmpl):
+    i = web.repo._bookmarks.items()
+    i.reverse()
+    parity = paritygen(web.stripecount)
+
+    def entries(notip=False, limit=0, **map):
+        count = 0
+        for k, n in i:
+            if notip and k == "tip":
+                continue
+            if limit > 0 and count >= limit:
+                continue
+            count = count + 1
+            yield {"parity": parity.next(),
+                   "bookmark": k,
+                   "date": web.repo[n].date(),
+                   "node": hex(n)}
+
+    return tmpl("bookmarks",
+                node=hex(web.repo.changelog.tip()),
+                entries=lambda **x: entries(False, 0, **x),
+                entriesnotip=lambda **x: entries(True, 0, **x),
+                latestentry=lambda **x: entries(True, 1, **x))
+
 def branches(web, req, tmpl):
     tips = (web.repo[n] for t, n in web.repo.branchtags().iteritems())
     heads = web.repo.heads()
@@ -721,7 +750,8 @@
         user = cgi.escape(templatefilters.person(ctx.user()))
         branch = ctx.branch()
         branch = branch, web.repo.branchtags().get(branch) == ctx.node()
-        data.append((node, vtx, edges, desc, user, age, branch, ctx.tags()))
+        data.append((node, vtx, edges, desc, user, age, branch, ctx.tags(),
+                     ctx.bookmarks()))
 
     return tmpl('graph', rev=rev, revcount=revcount, uprev=uprev,
                 lessvars=lessvars, morevars=morevars, downrev=downrev,
--- a/mercurial/hgweb/webutil.py	Sun Mar 13 12:24:17 2011 +0100
+++ b/mercurial/hgweb/webutil.py	Sun Mar 13 13:05:16 2011 +0100
@@ -90,6 +90,9 @@
 def nodetagsdict(repo, node):
     return [{"name": i} for i in repo.nodetags(node)]
 
+def nodebookmarksdict(repo, node):
+    return [{"name": i} for i in repo.nodebookmarks(node)]
+
 def nodebranchdict(repo, ctx):
     branches = []
     branch = ctx.branch()
@@ -118,6 +121,10 @@
     for t in repo.nodetags(node):
         yield tmpl(t1, tag=t, **args)
 
+def showbookmark(repo, tmpl, t1, node=nullid, **args):
+    for t in repo.nodebookmarks(node):
+        yield tmpl(t1, bookmark=t, **args)
+
 def cleanpath(repo, path):
     path = path.lstrip('/')
     return util.canonpath(repo.root, '', path)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/paper/bookmarks.tmpl	Sun Mar 13 13:05:16 2011 +0100
@@ -0,0 +1,49 @@
+{header}
+<title>{repo|escape}: bookmarks</title>
+<link rel="alternate" type="application/atom+xml"
+   href="{url}atom-bookmarks" title="Atom feed for {repo|escape}: bookmarks" />
+<link rel="alternate" type="application/rss+xml"
+   href="{url}rss-bookmarks" title="RSS feed for {repo|escape}: bookmarks" />
+</head>
+<body>
+
+<div class="container">
+<div class="menu">
+<div class="logo">
+<a href="http://mercurial.selenic.com/">
+<img src="{staticurl}hglogo.png" alt="mercurial" /></a>
+</div>
+<ul>
+<li><a href="{url}shortlog{sessionvars%urlparameter}">log</a></li>
+<li><a href="{url}graph{sessionvars%urlparameter}">graph</a></li>
+<li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
+<li class="active">bookmarks</li>
+<li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
+</ul>
+<ul>
+<li><a href="{url}help{sessionvars%urlparameter}">help</a></li>
+</ul>
+</div>
+
+<div class="main">
+<h2><a href="{url}{sessionvars%urlparameter}">{repo|escape}</a></h2>
+<h3>bookmarks</h3>
+
+<form class="search" action="{url}log">
+{sessionvars%hiddenformentry}
+<p><input name="rev" id="search1" type="text" size="30" /></p>
+<div id="hint">find changesets by author, revision,
+files, or words in the commit message</div>
+</form>
+
+<table class="bigtable">
+<tr>
+ <th>bookmark</th>
+ <th>node</th>
+</tr>
+{entries%bookmarkentry}
+</table>
+</div>
+</div>
+
+{footer}
--- a/mercurial/templates/paper/branches.tmpl	Sun Mar 13 12:24:17 2011 +0100
+++ b/mercurial/templates/paper/branches.tmpl	Sun Mar 13 13:05:16 2011 +0100
@@ -17,6 +17,7 @@
 <li><a href="{url}shortlog{sessionvars%urlparameter}">log</a></li>
 <li><a href="{url}graph{sessionvars%urlparameter}">graph</a></li>
 <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
+<li><a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a></li>
 <li class="active">branches</li>
 </ul>
 <ul>
--- a/mercurial/templates/paper/changeset.tmpl	Sun Mar 13 12:24:17 2011 +0100
+++ b/mercurial/templates/paper/changeset.tmpl	Sun Mar 13 13:05:16 2011 +0100
@@ -12,6 +12,7 @@
  <li><a href="{url}shortlog/{node|short}{sessionvars%urlparameter}">log</a></li>
  <li><a href="{url}graph/{node|short}{sessionvars%urlparameter}">graph</a></li>
  <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
+ <li><a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a></li>
  <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
 </ul>
 <ul>
@@ -30,7 +31,7 @@
 <div class="main">
 
 <h2><a href="{url}{sessionvars%urlparameter}">{repo|escape}</a></h2>
-<h3>changeset {rev}:{node|short} {changesetbranch%changelogbranchname} {changesettag}</h3>
+<h3>changeset {rev}:{node|short} {changesetbranch%changelogbranchname} {changesettag} {changesetbookmark}</h3>
 
 <form class="search" action="{url}log">
 {sessionvars%hiddenformentry}
--- a/mercurial/templates/paper/error.tmpl	Sun Mar 13 12:24:17 2011 +0100
+++ b/mercurial/templates/paper/error.tmpl	Sun Mar 13 13:05:16 2011 +0100
@@ -13,6 +13,7 @@
 <li><a href="{url}shortlog{sessionvars%urlparameter}">log</a></li>
 <li><a href="{url}graph{sessionvars%urlparameter}">graph</a></li>
 <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
+<li><a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a></li>
 <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
 <li><a href="{url}help{sessionvars%urlparameter}">help</a></li>
 </ul>
--- a/mercurial/templates/paper/fileannotate.tmpl	Sun Mar 13 12:24:17 2011 +0100
+++ b/mercurial/templates/paper/fileannotate.tmpl	Sun Mar 13 13:05:16 2011 +0100
@@ -13,6 +13,7 @@
 <li><a href="{url}shortlog/{node|short}{sessionvars%urlparameter}">log</a></li>
 <li><a href="{url}graph/{node|short}{sessionvars%urlparameter}">graph</a></li>
 <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
+<li><a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a></li>
 <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
 </ul>
 
--- a/mercurial/templates/paper/filediff.tmpl	Sun Mar 13 12:24:17 2011 +0100
+++ b/mercurial/templates/paper/filediff.tmpl	Sun Mar 13 13:05:16 2011 +0100
@@ -13,6 +13,7 @@
 <li><a href="{url}shortlog/{node|short}{sessionvars%urlparameter}">log</a></li>
 <li><a href="{url}graph/{node|short}{sessionvars%urlparameter}">graph</a></li>
 <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
+<li><a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a></li>
 <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
 </ul>
 <ul>
--- a/mercurial/templates/paper/filelog.tmpl	Sun Mar 13 12:24:17 2011 +0100
+++ b/mercurial/templates/paper/filelog.tmpl	Sun Mar 13 13:05:16 2011 +0100
@@ -17,6 +17,7 @@
 <li><a href="{url}shortlog/{node|short}{sessionvars%urlparameter}">log</a></li>
 <li><a href="{url}graph/{node|short}{sessionvars%urlparameter}">graph</a></li>
 <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
+<li><a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a></li>
 <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
 </ul>
 <ul>
--- a/mercurial/templates/paper/graph.tmpl	Sun Mar 13 12:24:17 2011 +0100
+++ b/mercurial/templates/paper/graph.tmpl	Sun Mar 13 13:05:16 2011 +0100
@@ -18,6 +18,7 @@
 <li><a href="{url}shortlog/{node|short}{sessionvars%urlparameter}">log</a></li>
 <li class="active">graph</li>
 <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
+<li><a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a></li>
 <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
 </ul>
 <ul>
@@ -110,6 +111,12 @@
 				tagspan += '<span class="tag">' + tag + '</span> ';
 			}
 		}
+		if (cur[8].length) \{
+			for (var b in cur[8]) \{
+				var bookmark = cur[8][b];
+				tagspan += '<span class="tag">' + bookmark + '</span> ';
+			}
+		}
 		tagspan += '</span>';
 	}
 	
--- a/mercurial/templates/paper/help.tmpl	Sun Mar 13 12:24:17 2011 +0100
+++ b/mercurial/templates/paper/help.tmpl	Sun Mar 13 13:05:16 2011 +0100
@@ -17,6 +17,7 @@
 <li><a href="{url}shortlog{sessionvars%urlparameter}">log</a></li>
 <li><a href="{url}graph{sessionvars%urlparameter}">graph</a></li>
 <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
+<li><a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a></li>
 <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
 </ul>
 <ul>
--- a/mercurial/templates/paper/helptopics.tmpl	Sun Mar 13 12:24:17 2011 +0100
+++ b/mercurial/templates/paper/helptopics.tmpl	Sun Mar 13 13:05:16 2011 +0100
@@ -17,6 +17,7 @@
 <li><a href="{url}shortlog{sessionvars%urlparameter}">log</a></li>
 <li><a href="{url}graph{sessionvars%urlparameter}">graph</a></li>
 <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
+<li><a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a></li>
 <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
 </ul>
 <ul>
--- a/mercurial/templates/paper/manifest.tmpl	Sun Mar 13 12:24:17 2011 +0100
+++ b/mercurial/templates/paper/manifest.tmpl	Sun Mar 13 13:05:16 2011 +0100
@@ -13,6 +13,7 @@
 <li><a href="{url}shortlog/{node|short}{sessionvars%urlparameter}">log</a></li>
 <li><a href="{url}graph/{node|short}{sessionvars%urlparameter}">graph</a></li>
 <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
+<li><a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a></li>
 <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
 </ul>
 <ul>
--- a/mercurial/templates/paper/map	Sun Mar 13 12:24:17 2011 +0100
+++ b/mercurial/templates/paper/map	Sun Mar 13 13:05:16 2011 +0100
@@ -141,6 +141,18 @@
       {node|short}
     </td>
   </tr>'
+bookmarks = bookmarks.tmpl
+bookmarkentry = '
+  <tr class="tagEntry parity{parity}">
+    <td>
+      <a href="{url}rev/{node|short}{sessionvars%urlparameter}">
+        {bookmark|escape}
+      </a>
+    </td>
+    <td class="node">
+      {node|short}
+    </td>
+  </tr>'
 branches = branches.tmpl
 branchentry = '
   <tr class="tagEntry parity{parity}">
@@ -155,6 +167,7 @@
   </tr>'
 changelogtag = '<span class="tag">{name|escape}</span> '
 changesettag = '<span class="tag">{tag|escape}</span> '
+changesetbookmark = '<span class="tag">{bookmark|escape}</span> '
 changelogbranchhead = '<span class="branchhead">{name|escape}</span> '
 changelogbranchname = '<span class="branchname">{name|escape}</span> '
 
--- a/mercurial/templates/paper/search.tmpl	Sun Mar 13 12:24:17 2011 +0100
+++ b/mercurial/templates/paper/search.tmpl	Sun Mar 13 13:05:16 2011 +0100
@@ -13,6 +13,7 @@
 <li><a href="{url}shortlog{sessionvars%urlparameter}">log</a></li>
 <li><a href="{url}graph{sessionvars%urlparameter}">graph</a></li>
 <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
+<li><a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a></li>
 <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
 <li><a href="{url}help{sessionvars%urlparameter}">help</a></li>
 </ul>
--- a/mercurial/templates/paper/shortlog.tmpl	Sun Mar 13 12:24:17 2011 +0100
+++ b/mercurial/templates/paper/shortlog.tmpl	Sun Mar 13 13:05:16 2011 +0100
@@ -17,6 +17,7 @@
 <li class="active">log</li>
 <li><a href="{url}graph/{node|short}{sessionvars%urlparameter}">graph</a></li>
 <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
+<li><a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a></li>
 <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
 </ul>
 <ul>
--- a/mercurial/templates/paper/shortlogentry.tmpl	Sun Mar 13 12:24:17 2011 +0100
+++ b/mercurial/templates/paper/shortlogentry.tmpl	Sun Mar 13 13:05:16 2011 +0100
@@ -1,5 +1,5 @@
  <tr class="parity{parity}">
   <td class="age">{age(date)}</td>
   <td class="author">{author|person}</td>
-  <td class="description"><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{desc|strip|firstline|escape|nonempty}</a>{inbranch%changelogbranchname}{branches%changelogbranchhead}{tags % '<span class="tag">{name|escape}</span> '}</td>
+  <td class="description"><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{desc|strip|firstline|escape|nonempty}</a>{inbranch%changelogbranchname}{branches%changelogbranchhead}{tags % '<span class="tag">{name|escape}</span> '}{bookmarks % '<span class="tag">{name|escape}</span> '}</td>
  </tr>
--- a/mercurial/templates/paper/tags.tmpl	Sun Mar 13 12:24:17 2011 +0100
+++ b/mercurial/templates/paper/tags.tmpl	Sun Mar 13 13:05:16 2011 +0100
@@ -17,6 +17,7 @@
 <li><a href="{url}shortlog{sessionvars%urlparameter}">log</a></li>
 <li><a href="{url}graph{sessionvars%urlparameter}">graph</a></li>
 <li class="active">tags</li>
+<li><a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a></li>
 <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
 </ul>
 <ul>
--- a/tests/test-hgweb-commands.t	Sun Mar 13 12:24:17 2011 +0100
+++ b/tests/test-hgweb-commands.t	Sun Mar 13 13:05:16 2011 +0100
@@ -15,6 +15,7 @@
   adding da/foo
   adding foo
   $ hg tag 1.0
+  $ hg bookmark something
   $ echo another > foo
   $ hg branch stable
   marked working directory as branch stable
@@ -204,6 +205,7 @@
   <li class="active">log</li>
   <li><a href="/graph/1d22e65f027e">graph</a></li>
   <li><a href="/tags">tags</a></li>
+  <li><a href="/bookmarks">bookmarks</a></li>
   <li><a href="/branches">branches</a></li>
   </ul>
   <ul>
@@ -244,7 +246,7 @@
    <tr class="parity0">
     <td class="age">1970-01-01</td>
     <td class="author">test</td>
-    <td class="description"><a href="/rev/1d22e65f027e">branch</a><span class="branchhead">stable</span> <span class="tag">tip</span> </td>
+    <td class="description"><a href="/rev/1d22e65f027e">branch</a><span class="branchhead">stable</span> <span class="tag">tip</span> <span class="tag">something</span> </td>
    </tr>
    <tr class="parity1">
     <td class="age">1970-01-01</td>
@@ -296,6 +298,7 @@
    <li><a href="/shortlog/2ef0ac749a14">log</a></li>
    <li><a href="/graph/2ef0ac749a14">graph</a></li>
    <li><a href="/tags">tags</a></li>
+   <li><a href="/bookmarks">bookmarks</a></li>
    <li><a href="/branches">branches</a></li>
   </ul>
   <ul>
@@ -314,7 +317,7 @@
   <div class="main">
   
   <h2><a href="/">test</a></h2>
-  <h3>changeset 0:2ef0ac749a14  <span class="tag">1.0</span> </h3>
+  <h3>changeset 0:2ef0ac749a14  <span class="tag">1.0</span>  </h3>
   
   <form class="search" action="/log">
   
@@ -409,6 +412,7 @@
   <li><a href="/shortlog">log</a></li>
   <li><a href="/graph">graph</a></li>
   <li><a href="/tags">tags</a></li>
+  <li><a href="/bookmarks">bookmarks</a></li>
   <li><a href="/branches">branches</a></li>
   <li><a href="/help">help</a></li>
   </ul>
@@ -811,7 +815,7 @@
   <script>
   <!-- hide script content
   
-  var data = [["1d22e65f027e", [0, 1], [[0, 0, 1]], "branch", "test", "1970-01-01", ["stable", true], ["tip"]], ["a4f92ed23982", [0, 1], [[0, 0, 1]], "Added tag 1.0 for changeset 2ef0ac749a14", "test", "1970-01-01", ["default", true], []], ["2ef0ac749a14", [0, 1], [], "base", "test", "1970-01-01", ["default", false], ["1.0"]]];
+  var data = [["1d22e65f027e", [0, 1], [[0, 0, 1]], "branch", "test", "1970-01-01", ["stable", true], ["tip"], ["something"]], ["a4f92ed23982", [0, 1], [[0, 0, 1]], "Added tag 1.0 for changeset 2ef0ac749a14", "test", "1970-01-01", ["default", true], [], []], ["2ef0ac749a14", [0, 1], [], "base", "test", "1970-01-01", ["default", false], ["1.0"], []]];
   var graph = new Graph();
   graph.scale(39);
   
@@ -1070,7 +1074,7 @@
 
   $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '/graph/' \
   >     | grep '^var data ='
-  var data = [["40b4d6888e92", [0, 1], [[0, 0, 1]], "\u80fd", "test", "1970-01-01", ["stable", true], ["tip"]], ["1d22e65f027e", [0, 1], [[0, 0, 1]], "branch", "test", "1970-01-01", ["stable", false], []], ["a4f92ed23982", [0, 1], [[0, 0, 1]], "Added tag 1.0 for changeset 2ef0ac749a14", "test", "1970-01-01", ["default", true], []], ["2ef0ac749a14", [0, 1], [], "base", "test", "1970-01-01", ["default", false], ["1.0"]]];
+  var data = [["40b4d6888e92", [0, 1], [[0, 0, 1]], "\u80fd", "test", "1970-01-01", ["stable", true], ["tip"], ["something"]], ["1d22e65f027e", [0, 1], [[0, 0, 1]], "branch", "test", "1970-01-01", ["stable", false], [], []], ["a4f92ed23982", [0, 1], [[0, 0, 1]], "Added tag 1.0 for changeset 2ef0ac749a14", "test", "1970-01-01", ["default", true], [], []], ["2ef0ac749a14", [0, 1], [], "base", "test", "1970-01-01", ["default", false], ["1.0"], []]];
 
 ERRORS ENCOUNTERED
 
--- a/tests/test-hgweb-descend-empties.t	Sun Mar 13 12:24:17 2011 +0100
+++ b/tests/test-hgweb-descend-empties.t	Sun Mar 13 13:05:16 2011 +0100
@@ -51,6 +51,7 @@
   <li><a href="/shortlog/9087c84a0f5d">log</a></li>
   <li><a href="/graph/9087c84a0f5d">graph</a></li>
   <li><a href="/tags">tags</a></li>
+  <li><a href="/bookmarks">bookmarks</a></li>
   <li><a href="/branches">branches</a></li>
   </ul>
   <ul>
--- a/tests/test-hgweb-diffs.t	Sun Mar 13 12:24:17 2011 +0100
+++ b/tests/test-hgweb-diffs.t	Sun Mar 13 13:05:16 2011 +0100
@@ -43,6 +43,7 @@
    <li><a href="/shortlog/0cd96de13884">log</a></li>
    <li><a href="/graph/0cd96de13884">graph</a></li>
    <li><a href="/tags">tags</a></li>
+   <li><a href="/bookmarks">bookmarks</a></li>
    <li><a href="/branches">branches</a></li>
   </ul>
   <ul>
@@ -61,7 +62,7 @@
   <div class="main">
   
   <h2><a href="/">test</a></h2>
-  <h3>changeset 0:0cd96de13884  </h3>
+  <h3>changeset 0:0cd96de13884   </h3>
   
   <form class="search" action="/log">
   
@@ -167,6 +168,7 @@
   <li><a href="/shortlog/78e4ebad7cdf">log</a></li>
   <li><a href="/graph/78e4ebad7cdf">graph</a></li>
   <li><a href="/tags">tags</a></li>
+  <li><a href="/bookmarks">bookmarks</a></li>
   <li><a href="/branches">branches</a></li>
   </ul>
   <ul>
@@ -268,6 +270,7 @@
    <li><a href="/shortlog/0cd96de13884">log</a></li>
    <li><a href="/graph/0cd96de13884">graph</a></li>
    <li><a href="/tags">tags</a></li>
+   <li><a href="/bookmarks">bookmarks</a></li>
    <li><a href="/branches">branches</a></li>
   </ul>
   <ul>
@@ -286,7 +289,7 @@
   <div class="main">
   
   <h2><a href="/">test</a></h2>
-  <h3>changeset 0:0cd96de13884  </h3>
+  <h3>changeset 0:0cd96de13884   </h3>
   
   <form class="search" action="/log">
   
@@ -396,6 +399,7 @@
   <li><a href="/shortlog/78e4ebad7cdf">log</a></li>
   <li><a href="/graph/78e4ebad7cdf">graph</a></li>
   <li><a href="/tags">tags</a></li>
+  <li><a href="/bookmarks">bookmarks</a></li>
   <li><a href="/branches">branches</a></li>
   </ul>
   <ul>
--- a/tests/test-hgweb-empty.t	Sun Mar 13 12:24:17 2011 +0100
+++ b/tests/test-hgweb-empty.t	Sun Mar 13 13:05:16 2011 +0100
@@ -32,6 +32,7 @@
   <li class="active">log</li>
   <li><a href="/graph/000000000000">graph</a></li>
   <li><a href="/tags">tags</a></li>
+  <li><a href="/bookmarks">bookmarks</a></li>
   <li><a href="/branches">branches</a></li>
   </ul>
   <ul>
@@ -114,6 +115,7 @@
   <li class="active">log</li>
   <li><a href="/graph/000000000000">graph</a></li>
   <li><a href="/tags">tags</a></li>
+  <li><a href="/bookmarks">bookmarks</a></li>
   <li><a href="/branches">branches</a></li>
   </ul>
   <ul>
@@ -197,6 +199,7 @@
   <li><a href="/shortlog/000000000000">log</a></li>
   <li class="active">graph</li>
   <li><a href="/tags">tags</a></li>
+  <li><a href="/bookmarks">bookmarks</a></li>
   <li><a href="/branches">branches</a></li>
   </ul>
   <ul>
@@ -289,6 +292,12 @@
   				tagspan += '<span class="tag">' + tag + '</span> ';
   			}
   		}
+  		if (cur[8].length) {
+  			for (var b in cur[8]) {
+  				var bookmark = cur[8][b];
+  				tagspan += '<span class="tag">' + bookmark + '</span> ';
+  			}
+  		}
   		tagspan += '</span>';
   	}
   	
@@ -340,6 +349,7 @@
   <li><a href="/shortlog/000000000000">log</a></li>
   <li><a href="/graph/000000000000">graph</a></li>
   <li><a href="/tags">tags</a></li>
+  <li><a href="/bookmarks">bookmarks</a></li>
   <li><a href="/branches">branches</a></li>
   </ul>
   <ul>
--- a/tests/test-hgweb-filelog.t	Sun Mar 13 12:24:17 2011 +0100
+++ b/tests/test-hgweb-filelog.t	Sun Mar 13 13:05:16 2011 +0100
@@ -136,6 +136,7 @@
   <li><a href="/shortlog/01de2d66a28d">log</a></li>
   <li><a href="/graph/01de2d66a28d">graph</a></li>
   <li><a href="/tags">tags</a></li>
+  <li><a href="/bookmarks">bookmarks</a></li>
   <li><a href="/branches">branches</a></li>
   </ul>
   <ul>
@@ -234,6 +235,7 @@
   <li><a href="/shortlog/01de2d66a28d">log</a></li>
   <li><a href="/graph/01de2d66a28d">graph</a></li>
   <li><a href="/tags">tags</a></li>
+  <li><a href="/bookmarks">bookmarks</a></li>
   <li><a href="/branches">branches</a></li>
   </ul>
   <ul>
@@ -332,6 +334,7 @@
   <li><a href="/shortlog/5ed941583260">log</a></li>
   <li><a href="/graph/5ed941583260">graph</a></li>
   <li><a href="/tags">tags</a></li>
+  <li><a href="/bookmarks">bookmarks</a></li>
   <li><a href="/branches">branches</a></li>
   </ul>
   <ul>
@@ -425,6 +428,7 @@
   <li><a href="/shortlog/5ed941583260">log</a></li>
   <li><a href="/graph/5ed941583260">graph</a></li>
   <li><a href="/tags">tags</a></li>
+  <li><a href="/bookmarks">bookmarks</a></li>
   <li><a href="/branches">branches</a></li>
   </ul>
   <ul>
@@ -514,6 +518,7 @@
   <li><a href="/shortlog">log</a></li>
   <li><a href="/graph">graph</a></li>
   <li><a href="/tags">tags</a></li>
+  <li><a href="/bookmarks">bookmarks</a></li>
   <li><a href="/branches">branches</a></li>
   <li><a href="/help">help</a></li>
   </ul>
--- a/tests/test-hgweb-removed.t	Sun Mar 13 12:24:17 2011 +0100
+++ b/tests/test-hgweb-removed.t	Sun Mar 13 13:05:16 2011 +0100
@@ -38,6 +38,7 @@
    <li><a href="/shortlog/c78f6c5cbea9">log</a></li>
    <li><a href="/graph/c78f6c5cbea9">graph</a></li>
    <li><a href="/tags">tags</a></li>
+   <li><a href="/bookmarks">bookmarks</a></li>
    <li><a href="/branches">branches</a></li>
   </ul>
   <ul>
@@ -56,7 +57,7 @@
   <div class="main">
   
   <h2><a href="/">test</a></h2>
-  <h3>changeset 1:c78f6c5cbea9  <span class="tag">tip</span> </h3>
+  <h3>changeset 1:c78f6c5cbea9  <span class="tag">tip</span>  </h3>
   
   <form class="search" action="/log">
   
@@ -133,6 +134,7 @@
   <li><a href="/shortlog/c78f6c5cbea9">log</a></li>
   <li><a href="/graph/c78f6c5cbea9">graph</a></li>
   <li><a href="/tags">tags</a></li>
+  <li><a href="/bookmarks">bookmarks</a></li>
   <li><a href="/branches">branches</a></li>
   </ul>
   <ul>
--- a/tests/test-hgweb.t	Sun Mar 13 12:24:17 2011 +0100
+++ b/tests/test-hgweb.t	Sun Mar 13 13:05:16 2011 +0100
@@ -62,6 +62,7 @@
   <li><a href="/shortlog">log</a></li>
   <li><a href="/graph">graph</a></li>
   <li><a href="/tags">tags</a></li>
+  <li><a href="/bookmarks">bookmarks</a></li>
   <li><a href="/branches">branches</a></li>
   <li><a href="/help">help</a></li>
   </ul>
@@ -147,6 +148,7 @@
   <li><a href="/shortlog">log</a></li>
   <li><a href="/graph">graph</a></li>
   <li><a href="/tags">tags</a></li>
+  <li><a href="/bookmarks">bookmarks</a></li>
   <li><a href="/branches">branches</a></li>
   <li><a href="/help">help</a></li>
   </ul>
@@ -214,6 +216,7 @@
   <li><a href="/shortlog/2ef0ac749a14">log</a></li>
   <li><a href="/graph/2ef0ac749a14">graph</a></li>
   <li><a href="/tags">tags</a></li>
+  <li><a href="/bookmarks">bookmarks</a></li>
   <li><a href="/branches">branches</a></li>
   </ul>
   <ul>