##// END OF EJS Templates
web: add a help view for getting hg help output
Augie Fackler -
r12666:ead4e21f default
parent child Browse files
Show More
@@ -0,0 +1,43 b''
1 {header}
2 <title>Help: {topic}</title>
3 <link rel="alternate" type="application/atom+xml"
4 href="{url}atom-tags" title="Atom feed for {repo|escape}" />
5 <link rel="alternate" type="application/rss+xml"
6 href="{url}rss-tags" title="RSS feed for {repo|escape}" />
7 </head>
8 <body>
9
10 <div class="container">
11 <div class="menu">
12 <div class="logo">
13 <a href="http://mercurial.selenic.com/">
14 <img src="{staticurl}hglogo.png" alt="mercurial" /></a>
15 </div>
16 <ul>
17 <li><a href="{url}shortlog{sessionvars%urlparameter}">log</a></li>
18 <li><a href="{url}graph{sessionvars%urlparameter}">graph</a></li>
19 <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
20 <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
21 </ul>
22 <ul>
23 <li class="active">help</li>
24 </ul>
25 </div>
26
27 <div class="main">
28 <h2><a href="{url}{sessionvars%urlparameter}">{repo|escape}</a></h2>
29 <h3>Help: {topic}</h3>
30
31 <form class="search" action="{url}log">
32 {sessionvars%hiddenformentry}
33 <p><input name="rev" id="search1" type="text" size="30" /></p>
34 <div id="hint">find changesets by author, revision,
35 files, or words in the commit message</div>
36 </form>
37 <pre>
38 {doc|escape}
39 </pre>
40 </div>
41 </div>
42
43 {footer}
@@ -0,0 +1,48 b''
1 {header}
2 <title>Help: {title}</title>
3 <link rel="alternate" type="application/atom+xml"
4 href="{url}atom-tags" title="Atom feed for {repo|escape}" />
5 <link rel="alternate" type="application/rss+xml"
6 href="{url}rss-tags" title="RSS feed for {repo|escape}" />
7 </head>
8 <body>
9
10 <div class="container">
11 <div class="menu">
12 <div class="logo">
13 <a href="http://mercurial.selenic.com/">
14 <img src="{staticurl}hglogo.png" alt="mercurial" /></a>
15 </div>
16 <ul>
17 <li><a href="{url}shortlog{sessionvars%urlparameter}">log</a></li>
18 <li><a href="{url}graph{sessionvars%urlparameter}">graph</a></li>
19 <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
20 <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
21 </ul>
22 <ul>
23 <li class="active">help</li>
24 </ul>
25 </div>
26
27 <div class="main">
28 <h2><a href="{url}{sessionvars%urlparameter}">{repo|escape}</a></h2>
29 <form class="search" action="{url}log">
30 {sessionvars%hiddenformentry}
31 <p><input name="rev" id="search1" type="text" size="30" /></p>
32 <div id="hint">find changesets by author, revision,
33 files, or words in the commit message</div>
34 </form>
35 <table class="bigtable">
36 <tr><td colspan="2"><h2><a name="main" href="#topics">Topics</a></h2></td></tr>
37 {topics % helpentry}
38
39 <tr><td colspan="2"><h2><a name="main" href="#main">Main Commands</a></h2></td></tr>
40 {earlycommands % helpentry}
41
42 <tr><td colspan="2"><h2><a name="other" href="#other">Other Commands</a></h2></td></tr>
43 {othercommands % helpentry}
44 </table>
45 </div>
46 </div>
47
48 {footer}
@@ -1,726 +1,784 b''
1 #
1 #
2 # Copyright 21 May 2005 - (c) 2005 Jake Edge <jake@edge2.net>
2 # Copyright 21 May 2005 - (c) 2005 Jake Edge <jake@edge2.net>
3 # Copyright 2005-2007 Matt Mackall <mpm@selenic.com>
3 # Copyright 2005-2007 Matt Mackall <mpm@selenic.com>
4 #
4 #
5 # This software may be used and distributed according to the terms of the
5 # This software may be used and distributed according to the terms of the
6 # GNU General Public License version 2 or any later version.
6 # GNU General Public License version 2 or any later version.
7
7
8 import os, mimetypes, re, cgi, copy
8 import os, mimetypes, re, cgi, copy
9 import webutil
9 import webutil
10 from mercurial import error, encoding, archival, templater, templatefilters
10 from mercurial import error, encoding, archival, templater, templatefilters
11 from mercurial.node import short, hex
11 from mercurial.node import short, hex
12 from mercurial.util import binary
12 from mercurial.util import binary
13 from common import paritygen, staticfile, get_contact, ErrorResponse
13 from common import paritygen, staticfile, get_contact, ErrorResponse
14 from common import HTTP_OK, HTTP_FORBIDDEN, HTTP_NOT_FOUND
14 from common import HTTP_OK, HTTP_FORBIDDEN, HTTP_NOT_FOUND
15 from mercurial import graphmod
15 from mercurial import graphmod
16 from mercurial import help as helpmod
17 from mercurial import ui
18 from mercurial.i18n import _
16
19
17 # __all__ is populated with the allowed commands. Be sure to add to it if
20 # __all__ is populated with the allowed commands. Be sure to add to it if
18 # you're adding a new command, or the new command won't work.
21 # you're adding a new command, or the new command won't work.
19
22
20 __all__ = [
23 __all__ = [
21 'log', 'rawfile', 'file', 'changelog', 'shortlog', 'changeset', 'rev',
24 'log', 'rawfile', 'file', 'changelog', 'shortlog', 'changeset', 'rev',
22 'manifest', 'tags', 'branches', 'summary', 'filediff', 'diff', 'annotate',
25 'manifest', 'tags', 'branches', 'summary', 'filediff', 'diff', 'annotate',
23 'filelog', 'archive', 'static', 'graph',
26 'filelog', 'archive', 'static', 'graph', 'help',
24 ]
27 ]
25
28
26 def log(web, req, tmpl):
29 def log(web, req, tmpl):
27 if 'file' in req.form and req.form['file'][0]:
30 if 'file' in req.form and req.form['file'][0]:
28 return filelog(web, req, tmpl)
31 return filelog(web, req, tmpl)
29 else:
32 else:
30 return changelog(web, req, tmpl)
33 return changelog(web, req, tmpl)
31
34
32 def rawfile(web, req, tmpl):
35 def rawfile(web, req, tmpl):
33 path = webutil.cleanpath(web.repo, req.form.get('file', [''])[0])
36 path = webutil.cleanpath(web.repo, req.form.get('file', [''])[0])
34 if not path:
37 if not path:
35 content = manifest(web, req, tmpl)
38 content = manifest(web, req, tmpl)
36 req.respond(HTTP_OK, web.ctype)
39 req.respond(HTTP_OK, web.ctype)
37 return content
40 return content
38
41
39 try:
42 try:
40 fctx = webutil.filectx(web.repo, req)
43 fctx = webutil.filectx(web.repo, req)
41 except error.LookupError, inst:
44 except error.LookupError, inst:
42 try:
45 try:
43 content = manifest(web, req, tmpl)
46 content = manifest(web, req, tmpl)
44 req.respond(HTTP_OK, web.ctype)
47 req.respond(HTTP_OK, web.ctype)
45 return content
48 return content
46 except ErrorResponse:
49 except ErrorResponse:
47 raise inst
50 raise inst
48
51
49 path = fctx.path()
52 path = fctx.path()
50 text = fctx.data()
53 text = fctx.data()
51 mt = mimetypes.guess_type(path)[0]
54 mt = mimetypes.guess_type(path)[0]
52 if mt is None:
55 if mt is None:
53 mt = binary(text) and 'application/octet-stream' or 'text/plain'
56 mt = binary(text) and 'application/octet-stream' or 'text/plain'
54 if mt.startswith('text/'):
57 if mt.startswith('text/'):
55 mt += '; charset="%s"' % encoding.encoding
58 mt += '; charset="%s"' % encoding.encoding
56
59
57 req.respond(HTTP_OK, mt, path, len(text))
60 req.respond(HTTP_OK, mt, path, len(text))
58 return [text]
61 return [text]
59
62
60 def _filerevision(web, tmpl, fctx):
63 def _filerevision(web, tmpl, fctx):
61 f = fctx.path()
64 f = fctx.path()
62 text = fctx.data()
65 text = fctx.data()
63 parity = paritygen(web.stripecount)
66 parity = paritygen(web.stripecount)
64
67
65 if binary(text):
68 if binary(text):
66 mt = mimetypes.guess_type(f)[0] or 'application/octet-stream'
69 mt = mimetypes.guess_type(f)[0] or 'application/octet-stream'
67 text = '(binary:%s)' % mt
70 text = '(binary:%s)' % mt
68
71
69 def lines():
72 def lines():
70 for lineno, t in enumerate(text.splitlines(True)):
73 for lineno, t in enumerate(text.splitlines(True)):
71 yield {"line": t,
74 yield {"line": t,
72 "lineid": "l%d" % (lineno + 1),
75 "lineid": "l%d" % (lineno + 1),
73 "linenumber": "% 6d" % (lineno + 1),
76 "linenumber": "% 6d" % (lineno + 1),
74 "parity": parity.next()}
77 "parity": parity.next()}
75
78
76 return tmpl("filerevision",
79 return tmpl("filerevision",
77 file=f,
80 file=f,
78 path=webutil.up(f),
81 path=webutil.up(f),
79 text=lines(),
82 text=lines(),
80 rev=fctx.rev(),
83 rev=fctx.rev(),
81 node=hex(fctx.node()),
84 node=hex(fctx.node()),
82 author=fctx.user(),
85 author=fctx.user(),
83 date=fctx.date(),
86 date=fctx.date(),
84 desc=fctx.description(),
87 desc=fctx.description(),
85 branch=webutil.nodebranchnodefault(fctx),
88 branch=webutil.nodebranchnodefault(fctx),
86 parent=webutil.parents(fctx),
89 parent=webutil.parents(fctx),
87 child=webutil.children(fctx),
90 child=webutil.children(fctx),
88 rename=webutil.renamelink(fctx),
91 rename=webutil.renamelink(fctx),
89 permissions=fctx.manifest().flags(f))
92 permissions=fctx.manifest().flags(f))
90
93
91 def file(web, req, tmpl):
94 def file(web, req, tmpl):
92 path = webutil.cleanpath(web.repo, req.form.get('file', [''])[0])
95 path = webutil.cleanpath(web.repo, req.form.get('file', [''])[0])
93 if not path:
96 if not path:
94 return manifest(web, req, tmpl)
97 return manifest(web, req, tmpl)
95 try:
98 try:
96 return _filerevision(web, tmpl, webutil.filectx(web.repo, req))
99 return _filerevision(web, tmpl, webutil.filectx(web.repo, req))
97 except error.LookupError, inst:
100 except error.LookupError, inst:
98 try:
101 try:
99 return manifest(web, req, tmpl)
102 return manifest(web, req, tmpl)
100 except ErrorResponse:
103 except ErrorResponse:
101 raise inst
104 raise inst
102
105
103 def _search(web, req, tmpl):
106 def _search(web, req, tmpl):
104
107
105 query = req.form['rev'][0]
108 query = req.form['rev'][0]
106 revcount = web.maxchanges
109 revcount = web.maxchanges
107 if 'revcount' in req.form:
110 if 'revcount' in req.form:
108 revcount = int(req.form.get('revcount', [revcount])[0])
111 revcount = int(req.form.get('revcount', [revcount])[0])
109 tmpl.defaults['sessionvars']['revcount'] = revcount
112 tmpl.defaults['sessionvars']['revcount'] = revcount
110
113
111 lessvars = copy.copy(tmpl.defaults['sessionvars'])
114 lessvars = copy.copy(tmpl.defaults['sessionvars'])
112 lessvars['revcount'] = revcount / 2
115 lessvars['revcount'] = revcount / 2
113 lessvars['rev'] = query
116 lessvars['rev'] = query
114 morevars = copy.copy(tmpl.defaults['sessionvars'])
117 morevars = copy.copy(tmpl.defaults['sessionvars'])
115 morevars['revcount'] = revcount * 2
118 morevars['revcount'] = revcount * 2
116 morevars['rev'] = query
119 morevars['rev'] = query
117
120
118 def changelist(**map):
121 def changelist(**map):
119 count = 0
122 count = 0
120 qw = query.lower().split()
123 qw = query.lower().split()
121
124
122 def revgen():
125 def revgen():
123 for i in xrange(len(web.repo) - 1, 0, -100):
126 for i in xrange(len(web.repo) - 1, 0, -100):
124 l = []
127 l = []
125 for j in xrange(max(0, i - 100), i + 1):
128 for j in xrange(max(0, i - 100), i + 1):
126 ctx = web.repo[j]
129 ctx = web.repo[j]
127 l.append(ctx)
130 l.append(ctx)
128 l.reverse()
131 l.reverse()
129 for e in l:
132 for e in l:
130 yield e
133 yield e
131
134
132 for ctx in revgen():
135 for ctx in revgen():
133 miss = 0
136 miss = 0
134 for q in qw:
137 for q in qw:
135 if not (q in ctx.user().lower() or
138 if not (q in ctx.user().lower() or
136 q in ctx.description().lower() or
139 q in ctx.description().lower() or
137 q in " ".join(ctx.files()).lower()):
140 q in " ".join(ctx.files()).lower()):
138 miss = 1
141 miss = 1
139 break
142 break
140 if miss:
143 if miss:
141 continue
144 continue
142
145
143 count += 1
146 count += 1
144 n = ctx.node()
147 n = ctx.node()
145 showtags = webutil.showtag(web.repo, tmpl, 'changelogtag', n)
148 showtags = webutil.showtag(web.repo, tmpl, 'changelogtag', n)
146 files = webutil.listfilediffs(tmpl, ctx.files(), n, web.maxfiles)
149 files = webutil.listfilediffs(tmpl, ctx.files(), n, web.maxfiles)
147
150
148 yield tmpl('searchentry',
151 yield tmpl('searchentry',
149 parity=parity.next(),
152 parity=parity.next(),
150 author=ctx.user(),
153 author=ctx.user(),
151 parent=webutil.parents(ctx),
154 parent=webutil.parents(ctx),
152 child=webutil.children(ctx),
155 child=webutil.children(ctx),
153 changelogtag=showtags,
156 changelogtag=showtags,
154 desc=ctx.description(),
157 desc=ctx.description(),
155 date=ctx.date(),
158 date=ctx.date(),
156 files=files,
159 files=files,
157 rev=ctx.rev(),
160 rev=ctx.rev(),
158 node=hex(n),
161 node=hex(n),
159 tags=webutil.nodetagsdict(web.repo, n),
162 tags=webutil.nodetagsdict(web.repo, n),
160 inbranch=webutil.nodeinbranch(web.repo, ctx),
163 inbranch=webutil.nodeinbranch(web.repo, ctx),
161 branches=webutil.nodebranchdict(web.repo, ctx))
164 branches=webutil.nodebranchdict(web.repo, ctx))
162
165
163 if count >= revcount:
166 if count >= revcount:
164 break
167 break
165
168
166 tip = web.repo['tip']
169 tip = web.repo['tip']
167 parity = paritygen(web.stripecount)
170 parity = paritygen(web.stripecount)
168
171
169 return tmpl('search', query=query, node=tip.hex(),
172 return tmpl('search', query=query, node=tip.hex(),
170 entries=changelist, archives=web.archivelist("tip"),
173 entries=changelist, archives=web.archivelist("tip"),
171 morevars=morevars, lessvars=lessvars)
174 morevars=morevars, lessvars=lessvars)
172
175
173 def changelog(web, req, tmpl, shortlog=False):
176 def changelog(web, req, tmpl, shortlog=False):
174
177
175 if 'node' in req.form:
178 if 'node' in req.form:
176 ctx = webutil.changectx(web.repo, req)
179 ctx = webutil.changectx(web.repo, req)
177 else:
180 else:
178 if 'rev' in req.form:
181 if 'rev' in req.form:
179 hi = req.form['rev'][0]
182 hi = req.form['rev'][0]
180 else:
183 else:
181 hi = len(web.repo) - 1
184 hi = len(web.repo) - 1
182 try:
185 try:
183 ctx = web.repo[hi]
186 ctx = web.repo[hi]
184 except error.RepoError:
187 except error.RepoError:
185 return _search(web, req, tmpl) # XXX redirect to 404 page?
188 return _search(web, req, tmpl) # XXX redirect to 404 page?
186
189
187 def changelist(limit=0, **map):
190 def changelist(limit=0, **map):
188 l = [] # build a list in forward order for efficiency
191 l = [] # build a list in forward order for efficiency
189 for i in xrange(start, end):
192 for i in xrange(start, end):
190 ctx = web.repo[i]
193 ctx = web.repo[i]
191 n = ctx.node()
194 n = ctx.node()
192 showtags = webutil.showtag(web.repo, tmpl, 'changelogtag', n)
195 showtags = webutil.showtag(web.repo, tmpl, 'changelogtag', n)
193 files = webutil.listfilediffs(tmpl, ctx.files(), n, web.maxfiles)
196 files = webutil.listfilediffs(tmpl, ctx.files(), n, web.maxfiles)
194
197
195 l.insert(0, {"parity": parity.next(),
198 l.insert(0, {"parity": parity.next(),
196 "author": ctx.user(),
199 "author": ctx.user(),
197 "parent": webutil.parents(ctx, i - 1),
200 "parent": webutil.parents(ctx, i - 1),
198 "child": webutil.children(ctx, i + 1),
201 "child": webutil.children(ctx, i + 1),
199 "changelogtag": showtags,
202 "changelogtag": showtags,
200 "desc": ctx.description(),
203 "desc": ctx.description(),
201 "date": ctx.date(),
204 "date": ctx.date(),
202 "files": files,
205 "files": files,
203 "rev": i,
206 "rev": i,
204 "node": hex(n),
207 "node": hex(n),
205 "tags": webutil.nodetagsdict(web.repo, n),
208 "tags": webutil.nodetagsdict(web.repo, n),
206 "inbranch": webutil.nodeinbranch(web.repo, ctx),
209 "inbranch": webutil.nodeinbranch(web.repo, ctx),
207 "branches": webutil.nodebranchdict(web.repo, ctx)
210 "branches": webutil.nodebranchdict(web.repo, ctx)
208 })
211 })
209
212
210 if limit > 0:
213 if limit > 0:
211 l = l[:limit]
214 l = l[:limit]
212
215
213 for e in l:
216 for e in l:
214 yield e
217 yield e
215
218
216 revcount = shortlog and web.maxshortchanges or web.maxchanges
219 revcount = shortlog and web.maxshortchanges or web.maxchanges
217 if 'revcount' in req.form:
220 if 'revcount' in req.form:
218 revcount = int(req.form.get('revcount', [revcount])[0])
221 revcount = int(req.form.get('revcount', [revcount])[0])
219 tmpl.defaults['sessionvars']['revcount'] = revcount
222 tmpl.defaults['sessionvars']['revcount'] = revcount
220
223
221 lessvars = copy.copy(tmpl.defaults['sessionvars'])
224 lessvars = copy.copy(tmpl.defaults['sessionvars'])
222 lessvars['revcount'] = revcount / 2
225 lessvars['revcount'] = revcount / 2
223 morevars = copy.copy(tmpl.defaults['sessionvars'])
226 morevars = copy.copy(tmpl.defaults['sessionvars'])
224 morevars['revcount'] = revcount * 2
227 morevars['revcount'] = revcount * 2
225
228
226 count = len(web.repo)
229 count = len(web.repo)
227 pos = ctx.rev()
230 pos = ctx.rev()
228 start = max(0, pos - revcount + 1)
231 start = max(0, pos - revcount + 1)
229 end = min(count, start + revcount)
232 end = min(count, start + revcount)
230 pos = end - 1
233 pos = end - 1
231 parity = paritygen(web.stripecount, offset=start - end)
234 parity = paritygen(web.stripecount, offset=start - end)
232
235
233 changenav = webutil.revnavgen(pos, revcount, count, web.repo.changectx)
236 changenav = webutil.revnavgen(pos, revcount, count, web.repo.changectx)
234
237
235 return tmpl(shortlog and 'shortlog' or 'changelog', changenav=changenav,
238 return tmpl(shortlog and 'shortlog' or 'changelog', changenav=changenav,
236 node=hex(ctx.node()), rev=pos, changesets=count,
239 node=hex(ctx.node()), rev=pos, changesets=count,
237 entries=lambda **x: changelist(limit=0,**x),
240 entries=lambda **x: changelist(limit=0,**x),
238 latestentry=lambda **x: changelist(limit=1,**x),
241 latestentry=lambda **x: changelist(limit=1,**x),
239 archives=web.archivelist("tip"), revcount=revcount,
242 archives=web.archivelist("tip"), revcount=revcount,
240 morevars=morevars, lessvars=lessvars)
243 morevars=morevars, lessvars=lessvars)
241
244
242 def shortlog(web, req, tmpl):
245 def shortlog(web, req, tmpl):
243 return changelog(web, req, tmpl, shortlog = True)
246 return changelog(web, req, tmpl, shortlog = True)
244
247
245 def changeset(web, req, tmpl):
248 def changeset(web, req, tmpl):
246 ctx = webutil.changectx(web.repo, req)
249 ctx = webutil.changectx(web.repo, req)
247 showtags = webutil.showtag(web.repo, tmpl, 'changesettag', ctx.node())
250 showtags = webutil.showtag(web.repo, tmpl, 'changesettag', ctx.node())
248 showbranch = webutil.nodebranchnodefault(ctx)
251 showbranch = webutil.nodebranchnodefault(ctx)
249
252
250 files = []
253 files = []
251 parity = paritygen(web.stripecount)
254 parity = paritygen(web.stripecount)
252 for f in ctx.files():
255 for f in ctx.files():
253 template = f in ctx and 'filenodelink' or 'filenolink'
256 template = f in ctx and 'filenodelink' or 'filenolink'
254 files.append(tmpl(template,
257 files.append(tmpl(template,
255 node=ctx.hex(), file=f,
258 node=ctx.hex(), file=f,
256 parity=parity.next()))
259 parity=parity.next()))
257
260
258 parity = paritygen(web.stripecount)
261 parity = paritygen(web.stripecount)
259 style = web.config('web', 'style', 'paper')
262 style = web.config('web', 'style', 'paper')
260 if 'style' in req.form:
263 if 'style' in req.form:
261 style = req.form['style'][0]
264 style = req.form['style'][0]
262
265
263 diffs = webutil.diffs(web.repo, tmpl, ctx, None, parity, style)
266 diffs = webutil.diffs(web.repo, tmpl, ctx, None, parity, style)
264 return tmpl('changeset',
267 return tmpl('changeset',
265 diff=diffs,
268 diff=diffs,
266 rev=ctx.rev(),
269 rev=ctx.rev(),
267 node=ctx.hex(),
270 node=ctx.hex(),
268 parent=webutil.parents(ctx),
271 parent=webutil.parents(ctx),
269 child=webutil.children(ctx),
272 child=webutil.children(ctx),
270 changesettag=showtags,
273 changesettag=showtags,
271 changesetbranch=showbranch,
274 changesetbranch=showbranch,
272 author=ctx.user(),
275 author=ctx.user(),
273 desc=ctx.description(),
276 desc=ctx.description(),
274 date=ctx.date(),
277 date=ctx.date(),
275 files=files,
278 files=files,
276 archives=web.archivelist(ctx.hex()),
279 archives=web.archivelist(ctx.hex()),
277 tags=webutil.nodetagsdict(web.repo, ctx.node()),
280 tags=webutil.nodetagsdict(web.repo, ctx.node()),
278 branch=webutil.nodebranchnodefault(ctx),
281 branch=webutil.nodebranchnodefault(ctx),
279 inbranch=webutil.nodeinbranch(web.repo, ctx),
282 inbranch=webutil.nodeinbranch(web.repo, ctx),
280 branches=webutil.nodebranchdict(web.repo, ctx))
283 branches=webutil.nodebranchdict(web.repo, ctx))
281
284
282 rev = changeset
285 rev = changeset
283
286
284 def manifest(web, req, tmpl):
287 def manifest(web, req, tmpl):
285 ctx = webutil.changectx(web.repo, req)
288 ctx = webutil.changectx(web.repo, req)
286 path = webutil.cleanpath(web.repo, req.form.get('file', [''])[0])
289 path = webutil.cleanpath(web.repo, req.form.get('file', [''])[0])
287 mf = ctx.manifest()
290 mf = ctx.manifest()
288 node = ctx.node()
291 node = ctx.node()
289
292
290 files = {}
293 files = {}
291 dirs = {}
294 dirs = {}
292 parity = paritygen(web.stripecount)
295 parity = paritygen(web.stripecount)
293
296
294 if path and path[-1] != "/":
297 if path and path[-1] != "/":
295 path += "/"
298 path += "/"
296 l = len(path)
299 l = len(path)
297 abspath = "/" + path
300 abspath = "/" + path
298
301
299 for f, n in mf.iteritems():
302 for f, n in mf.iteritems():
300 if f[:l] != path:
303 if f[:l] != path:
301 continue
304 continue
302 remain = f[l:]
305 remain = f[l:]
303 elements = remain.split('/')
306 elements = remain.split('/')
304 if len(elements) == 1:
307 if len(elements) == 1:
305 files[remain] = f
308 files[remain] = f
306 else:
309 else:
307 h = dirs # need to retain ref to dirs (root)
310 h = dirs # need to retain ref to dirs (root)
308 for elem in elements[0:-1]:
311 for elem in elements[0:-1]:
309 if elem not in h:
312 if elem not in h:
310 h[elem] = {}
313 h[elem] = {}
311 h = h[elem]
314 h = h[elem]
312 if len(h) > 1:
315 if len(h) > 1:
313 break
316 break
314 h[None] = None # denotes files present
317 h[None] = None # denotes files present
315
318
316 if mf and not files and not dirs:
319 if mf and not files and not dirs:
317 raise ErrorResponse(HTTP_NOT_FOUND, 'path not found: ' + path)
320 raise ErrorResponse(HTTP_NOT_FOUND, 'path not found: ' + path)
318
321
319 def filelist(**map):
322 def filelist(**map):
320 for f in sorted(files):
323 for f in sorted(files):
321 full = files[f]
324 full = files[f]
322
325
323 fctx = ctx.filectx(full)
326 fctx = ctx.filectx(full)
324 yield {"file": full,
327 yield {"file": full,
325 "parity": parity.next(),
328 "parity": parity.next(),
326 "basename": f,
329 "basename": f,
327 "date": fctx.date(),
330 "date": fctx.date(),
328 "size": fctx.size(),
331 "size": fctx.size(),
329 "permissions": mf.flags(full)}
332 "permissions": mf.flags(full)}
330
333
331 def dirlist(**map):
334 def dirlist(**map):
332 for d in sorted(dirs):
335 for d in sorted(dirs):
333
336
334 emptydirs = []
337 emptydirs = []
335 h = dirs[d]
338 h = dirs[d]
336 while isinstance(h, dict) and len(h) == 1:
339 while isinstance(h, dict) and len(h) == 1:
337 k, v = h.items()[0]
340 k, v = h.items()[0]
338 if v:
341 if v:
339 emptydirs.append(k)
342 emptydirs.append(k)
340 h = v
343 h = v
341
344
342 path = "%s%s" % (abspath, d)
345 path = "%s%s" % (abspath, d)
343 yield {"parity": parity.next(),
346 yield {"parity": parity.next(),
344 "path": path,
347 "path": path,
345 "emptydirs": "/".join(emptydirs),
348 "emptydirs": "/".join(emptydirs),
346 "basename": d}
349 "basename": d}
347
350
348 return tmpl("manifest",
351 return tmpl("manifest",
349 rev=ctx.rev(),
352 rev=ctx.rev(),
350 node=hex(node),
353 node=hex(node),
351 path=abspath,
354 path=abspath,
352 up=webutil.up(abspath),
355 up=webutil.up(abspath),
353 upparity=parity.next(),
356 upparity=parity.next(),
354 fentries=filelist,
357 fentries=filelist,
355 dentries=dirlist,
358 dentries=dirlist,
356 archives=web.archivelist(hex(node)),
359 archives=web.archivelist(hex(node)),
357 tags=webutil.nodetagsdict(web.repo, node),
360 tags=webutil.nodetagsdict(web.repo, node),
358 inbranch=webutil.nodeinbranch(web.repo, ctx),
361 inbranch=webutil.nodeinbranch(web.repo, ctx),
359 branches=webutil.nodebranchdict(web.repo, ctx))
362 branches=webutil.nodebranchdict(web.repo, ctx))
360
363
361 def tags(web, req, tmpl):
364 def tags(web, req, tmpl):
362 i = web.repo.tagslist()
365 i = web.repo.tagslist()
363 i.reverse()
366 i.reverse()
364 parity = paritygen(web.stripecount)
367 parity = paritygen(web.stripecount)
365
368
366 def entries(notip=False, limit=0, **map):
369 def entries(notip=False, limit=0, **map):
367 count = 0
370 count = 0
368 for k, n in i:
371 for k, n in i:
369 if notip and k == "tip":
372 if notip and k == "tip":
370 continue
373 continue
371 if limit > 0 and count >= limit:
374 if limit > 0 and count >= limit:
372 continue
375 continue
373 count = count + 1
376 count = count + 1
374 yield {"parity": parity.next(),
377 yield {"parity": parity.next(),
375 "tag": k,
378 "tag": k,
376 "date": web.repo[n].date(),
379 "date": web.repo[n].date(),
377 "node": hex(n)}
380 "node": hex(n)}
378
381
379 return tmpl("tags",
382 return tmpl("tags",
380 node=hex(web.repo.changelog.tip()),
383 node=hex(web.repo.changelog.tip()),
381 entries=lambda **x: entries(False, 0, **x),
384 entries=lambda **x: entries(False, 0, **x),
382 entriesnotip=lambda **x: entries(True, 0, **x),
385 entriesnotip=lambda **x: entries(True, 0, **x),
383 latestentry=lambda **x: entries(True, 1, **x))
386 latestentry=lambda **x: entries(True, 1, **x))
384
387
385 def branches(web, req, tmpl):
388 def branches(web, req, tmpl):
386 tips = (web.repo[n] for t, n in web.repo.branchtags().iteritems())
389 tips = (web.repo[n] for t, n in web.repo.branchtags().iteritems())
387 heads = web.repo.heads()
390 heads = web.repo.heads()
388 parity = paritygen(web.stripecount)
391 parity = paritygen(web.stripecount)
389 sortkey = lambda ctx: ('close' not in ctx.extra(), ctx.rev())
392 sortkey = lambda ctx: ('close' not in ctx.extra(), ctx.rev())
390
393
391 def entries(limit, **map):
394 def entries(limit, **map):
392 count = 0
395 count = 0
393 for ctx in sorted(tips, key=sortkey, reverse=True):
396 for ctx in sorted(tips, key=sortkey, reverse=True):
394 if limit > 0 and count >= limit:
397 if limit > 0 and count >= limit:
395 return
398 return
396 count += 1
399 count += 1
397 if ctx.node() not in heads:
400 if ctx.node() not in heads:
398 status = 'inactive'
401 status = 'inactive'
399 elif not web.repo.branchheads(ctx.branch()):
402 elif not web.repo.branchheads(ctx.branch()):
400 status = 'closed'
403 status = 'closed'
401 else:
404 else:
402 status = 'open'
405 status = 'open'
403 yield {'parity': parity.next(),
406 yield {'parity': parity.next(),
404 'branch': ctx.branch(),
407 'branch': ctx.branch(),
405 'status': status,
408 'status': status,
406 'node': ctx.hex(),
409 'node': ctx.hex(),
407 'date': ctx.date()}
410 'date': ctx.date()}
408
411
409 return tmpl('branches', node=hex(web.repo.changelog.tip()),
412 return tmpl('branches', node=hex(web.repo.changelog.tip()),
410 entries=lambda **x: entries(0, **x),
413 entries=lambda **x: entries(0, **x),
411 latestentry=lambda **x: entries(1, **x))
414 latestentry=lambda **x: entries(1, **x))
412
415
413 def summary(web, req, tmpl):
416 def summary(web, req, tmpl):
414 i = web.repo.tagslist()
417 i = web.repo.tagslist()
415 i.reverse()
418 i.reverse()
416
419
417 def tagentries(**map):
420 def tagentries(**map):
418 parity = paritygen(web.stripecount)
421 parity = paritygen(web.stripecount)
419 count = 0
422 count = 0
420 for k, n in i:
423 for k, n in i:
421 if k == "tip": # skip tip
424 if k == "tip": # skip tip
422 continue
425 continue
423
426
424 count += 1
427 count += 1
425 if count > 10: # limit to 10 tags
428 if count > 10: # limit to 10 tags
426 break
429 break
427
430
428 yield tmpl("tagentry",
431 yield tmpl("tagentry",
429 parity=parity.next(),
432 parity=parity.next(),
430 tag=k,
433 tag=k,
431 node=hex(n),
434 node=hex(n),
432 date=web.repo[n].date())
435 date=web.repo[n].date())
433
436
434 def branches(**map):
437 def branches(**map):
435 parity = paritygen(web.stripecount)
438 parity = paritygen(web.stripecount)
436
439
437 b = web.repo.branchtags()
440 b = web.repo.branchtags()
438 l = [(-web.repo.changelog.rev(n), n, t) for t, n in b.iteritems()]
441 l = [(-web.repo.changelog.rev(n), n, t) for t, n in b.iteritems()]
439 for r, n, t in sorted(l):
442 for r, n, t in sorted(l):
440 yield {'parity': parity.next(),
443 yield {'parity': parity.next(),
441 'branch': t,
444 'branch': t,
442 'node': hex(n),
445 'node': hex(n),
443 'date': web.repo[n].date()}
446 'date': web.repo[n].date()}
444
447
445 def changelist(**map):
448 def changelist(**map):
446 parity = paritygen(web.stripecount, offset=start - end)
449 parity = paritygen(web.stripecount, offset=start - end)
447 l = [] # build a list in forward order for efficiency
450 l = [] # build a list in forward order for efficiency
448 for i in xrange(start, end):
451 for i in xrange(start, end):
449 ctx = web.repo[i]
452 ctx = web.repo[i]
450 n = ctx.node()
453 n = ctx.node()
451 hn = hex(n)
454 hn = hex(n)
452
455
453 l.insert(0, tmpl(
456 l.insert(0, tmpl(
454 'shortlogentry',
457 'shortlogentry',
455 parity=parity.next(),
458 parity=parity.next(),
456 author=ctx.user(),
459 author=ctx.user(),
457 desc=ctx.description(),
460 desc=ctx.description(),
458 date=ctx.date(),
461 date=ctx.date(),
459 rev=i,
462 rev=i,
460 node=hn,
463 node=hn,
461 tags=webutil.nodetagsdict(web.repo, n),
464 tags=webutil.nodetagsdict(web.repo, n),
462 inbranch=webutil.nodeinbranch(web.repo, ctx),
465 inbranch=webutil.nodeinbranch(web.repo, ctx),
463 branches=webutil.nodebranchdict(web.repo, ctx)))
466 branches=webutil.nodebranchdict(web.repo, ctx)))
464
467
465 yield l
468 yield l
466
469
467 tip = web.repo['tip']
470 tip = web.repo['tip']
468 count = len(web.repo)
471 count = len(web.repo)
469 start = max(0, count - web.maxchanges)
472 start = max(0, count - web.maxchanges)
470 end = min(count, start + web.maxchanges)
473 end = min(count, start + web.maxchanges)
471
474
472 return tmpl("summary",
475 return tmpl("summary",
473 desc=web.config("web", "description", "unknown"),
476 desc=web.config("web", "description", "unknown"),
474 owner=get_contact(web.config) or "unknown",
477 owner=get_contact(web.config) or "unknown",
475 lastchange=tip.date(),
478 lastchange=tip.date(),
476 tags=tagentries,
479 tags=tagentries,
477 branches=branches,
480 branches=branches,
478 shortlog=changelist,
481 shortlog=changelist,
479 node=tip.hex(),
482 node=tip.hex(),
480 archives=web.archivelist("tip"))
483 archives=web.archivelist("tip"))
481
484
482 def filediff(web, req, tmpl):
485 def filediff(web, req, tmpl):
483 fctx, ctx = None, None
486 fctx, ctx = None, None
484 try:
487 try:
485 fctx = webutil.filectx(web.repo, req)
488 fctx = webutil.filectx(web.repo, req)
486 except LookupError:
489 except LookupError:
487 ctx = webutil.changectx(web.repo, req)
490 ctx = webutil.changectx(web.repo, req)
488 path = webutil.cleanpath(web.repo, req.form['file'][0])
491 path = webutil.cleanpath(web.repo, req.form['file'][0])
489 if path not in ctx.files():
492 if path not in ctx.files():
490 raise
493 raise
491
494
492 if fctx is not None:
495 if fctx is not None:
493 n = fctx.node()
496 n = fctx.node()
494 path = fctx.path()
497 path = fctx.path()
495 else:
498 else:
496 n = ctx.node()
499 n = ctx.node()
497 # path already defined in except clause
500 # path already defined in except clause
498
501
499 parity = paritygen(web.stripecount)
502 parity = paritygen(web.stripecount)
500 style = web.config('web', 'style', 'paper')
503 style = web.config('web', 'style', 'paper')
501 if 'style' in req.form:
504 if 'style' in req.form:
502 style = req.form['style'][0]
505 style = req.form['style'][0]
503
506
504 diffs = webutil.diffs(web.repo, tmpl, fctx or ctx, [path], parity, style)
507 diffs = webutil.diffs(web.repo, tmpl, fctx or ctx, [path], parity, style)
505 rename = fctx and webutil.renamelink(fctx) or []
508 rename = fctx and webutil.renamelink(fctx) or []
506 ctx = fctx and fctx or ctx
509 ctx = fctx and fctx or ctx
507 return tmpl("filediff",
510 return tmpl("filediff",
508 file=path,
511 file=path,
509 node=hex(n),
512 node=hex(n),
510 rev=ctx.rev(),
513 rev=ctx.rev(),
511 date=ctx.date(),
514 date=ctx.date(),
512 desc=ctx.description(),
515 desc=ctx.description(),
513 author=ctx.user(),
516 author=ctx.user(),
514 rename=rename,
517 rename=rename,
515 branch=webutil.nodebranchnodefault(ctx),
518 branch=webutil.nodebranchnodefault(ctx),
516 parent=webutil.parents(ctx),
519 parent=webutil.parents(ctx),
517 child=webutil.children(ctx),
520 child=webutil.children(ctx),
518 diff=diffs)
521 diff=diffs)
519
522
520 diff = filediff
523 diff = filediff
521
524
522 def annotate(web, req, tmpl):
525 def annotate(web, req, tmpl):
523 fctx = webutil.filectx(web.repo, req)
526 fctx = webutil.filectx(web.repo, req)
524 f = fctx.path()
527 f = fctx.path()
525 parity = paritygen(web.stripecount)
528 parity = paritygen(web.stripecount)
526
529
527 def annotate(**map):
530 def annotate(**map):
528 last = None
531 last = None
529 if binary(fctx.data()):
532 if binary(fctx.data()):
530 mt = (mimetypes.guess_type(fctx.path())[0]
533 mt = (mimetypes.guess_type(fctx.path())[0]
531 or 'application/octet-stream')
534 or 'application/octet-stream')
532 lines = enumerate([((fctx.filectx(fctx.filerev()), 1),
535 lines = enumerate([((fctx.filectx(fctx.filerev()), 1),
533 '(binary:%s)' % mt)])
536 '(binary:%s)' % mt)])
534 else:
537 else:
535 lines = enumerate(fctx.annotate(follow=True, linenumber=True))
538 lines = enumerate(fctx.annotate(follow=True, linenumber=True))
536 for lineno, ((f, targetline), l) in lines:
539 for lineno, ((f, targetline), l) in lines:
537 fnode = f.filenode()
540 fnode = f.filenode()
538
541
539 if last != fnode:
542 if last != fnode:
540 last = fnode
543 last = fnode
541
544
542 yield {"parity": parity.next(),
545 yield {"parity": parity.next(),
543 "node": hex(f.node()),
546 "node": hex(f.node()),
544 "rev": f.rev(),
547 "rev": f.rev(),
545 "author": f.user(),
548 "author": f.user(),
546 "desc": f.description(),
549 "desc": f.description(),
547 "file": f.path(),
550 "file": f.path(),
548 "targetline": targetline,
551 "targetline": targetline,
549 "line": l,
552 "line": l,
550 "lineid": "l%d" % (lineno + 1),
553 "lineid": "l%d" % (lineno + 1),
551 "linenumber": "% 6d" % (lineno + 1)}
554 "linenumber": "% 6d" % (lineno + 1)}
552
555
553 return tmpl("fileannotate",
556 return tmpl("fileannotate",
554 file=f,
557 file=f,
555 annotate=annotate,
558 annotate=annotate,
556 path=webutil.up(f),
559 path=webutil.up(f),
557 rev=fctx.rev(),
560 rev=fctx.rev(),
558 node=hex(fctx.node()),
561 node=hex(fctx.node()),
559 author=fctx.user(),
562 author=fctx.user(),
560 date=fctx.date(),
563 date=fctx.date(),
561 desc=fctx.description(),
564 desc=fctx.description(),
562 rename=webutil.renamelink(fctx),
565 rename=webutil.renamelink(fctx),
563 branch=webutil.nodebranchnodefault(fctx),
566 branch=webutil.nodebranchnodefault(fctx),
564 parent=webutil.parents(fctx),
567 parent=webutil.parents(fctx),
565 child=webutil.children(fctx),
568 child=webutil.children(fctx),
566 permissions=fctx.manifest().flags(f))
569 permissions=fctx.manifest().flags(f))
567
570
568 def filelog(web, req, tmpl):
571 def filelog(web, req, tmpl):
569
572
570 try:
573 try:
571 fctx = webutil.filectx(web.repo, req)
574 fctx = webutil.filectx(web.repo, req)
572 f = fctx.path()
575 f = fctx.path()
573 fl = fctx.filelog()
576 fl = fctx.filelog()
574 except error.LookupError:
577 except error.LookupError:
575 f = webutil.cleanpath(web.repo, req.form['file'][0])
578 f = webutil.cleanpath(web.repo, req.form['file'][0])
576 fl = web.repo.file(f)
579 fl = web.repo.file(f)
577 numrevs = len(fl)
580 numrevs = len(fl)
578 if not numrevs: # file doesn't exist at all
581 if not numrevs: # file doesn't exist at all
579 raise
582 raise
580 rev = webutil.changectx(web.repo, req).rev()
583 rev = webutil.changectx(web.repo, req).rev()
581 first = fl.linkrev(0)
584 first = fl.linkrev(0)
582 if rev < first: # current rev is from before file existed
585 if rev < first: # current rev is from before file existed
583 raise
586 raise
584 frev = numrevs - 1
587 frev = numrevs - 1
585 while fl.linkrev(frev) > rev:
588 while fl.linkrev(frev) > rev:
586 frev -= 1
589 frev -= 1
587 fctx = web.repo.filectx(f, fl.linkrev(frev))
590 fctx = web.repo.filectx(f, fl.linkrev(frev))
588
591
589 revcount = web.maxshortchanges
592 revcount = web.maxshortchanges
590 if 'revcount' in req.form:
593 if 'revcount' in req.form:
591 revcount = int(req.form.get('revcount', [revcount])[0])
594 revcount = int(req.form.get('revcount', [revcount])[0])
592 tmpl.defaults['sessionvars']['revcount'] = revcount
595 tmpl.defaults['sessionvars']['revcount'] = revcount
593
596
594 lessvars = copy.copy(tmpl.defaults['sessionvars'])
597 lessvars = copy.copy(tmpl.defaults['sessionvars'])
595 lessvars['revcount'] = revcount / 2
598 lessvars['revcount'] = revcount / 2
596 morevars = copy.copy(tmpl.defaults['sessionvars'])
599 morevars = copy.copy(tmpl.defaults['sessionvars'])
597 morevars['revcount'] = revcount * 2
600 morevars['revcount'] = revcount * 2
598
601
599 count = fctx.filerev() + 1
602 count = fctx.filerev() + 1
600 start = max(0, fctx.filerev() - revcount + 1) # first rev on this page
603 start = max(0, fctx.filerev() - revcount + 1) # first rev on this page
601 end = min(count, start + revcount) # last rev on this page
604 end = min(count, start + revcount) # last rev on this page
602 parity = paritygen(web.stripecount, offset=start - end)
605 parity = paritygen(web.stripecount, offset=start - end)
603
606
604 def entries(limit=0, **map):
607 def entries(limit=0, **map):
605 l = []
608 l = []
606
609
607 repo = web.repo
610 repo = web.repo
608 for i in xrange(start, end):
611 for i in xrange(start, end):
609 iterfctx = fctx.filectx(i)
612 iterfctx = fctx.filectx(i)
610
613
611 l.insert(0, {"parity": parity.next(),
614 l.insert(0, {"parity": parity.next(),
612 "filerev": i,
615 "filerev": i,
613 "file": f,
616 "file": f,
614 "node": hex(iterfctx.node()),
617 "node": hex(iterfctx.node()),
615 "author": iterfctx.user(),
618 "author": iterfctx.user(),
616 "date": iterfctx.date(),
619 "date": iterfctx.date(),
617 "rename": webutil.renamelink(iterfctx),
620 "rename": webutil.renamelink(iterfctx),
618 "parent": webutil.parents(iterfctx),
621 "parent": webutil.parents(iterfctx),
619 "child": webutil.children(iterfctx),
622 "child": webutil.children(iterfctx),
620 "desc": iterfctx.description(),
623 "desc": iterfctx.description(),
621 "tags": webutil.nodetagsdict(repo, iterfctx.node()),
624 "tags": webutil.nodetagsdict(repo, iterfctx.node()),
622 "branch": webutil.nodebranchnodefault(iterfctx),
625 "branch": webutil.nodebranchnodefault(iterfctx),
623 "inbranch": webutil.nodeinbranch(repo, iterfctx),
626 "inbranch": webutil.nodeinbranch(repo, iterfctx),
624 "branches": webutil.nodebranchdict(repo, iterfctx)})
627 "branches": webutil.nodebranchdict(repo, iterfctx)})
625
628
626 if limit > 0:
629 if limit > 0:
627 l = l[:limit]
630 l = l[:limit]
628
631
629 for e in l:
632 for e in l:
630 yield e
633 yield e
631
634
632 nodefunc = lambda x: fctx.filectx(fileid=x)
635 nodefunc = lambda x: fctx.filectx(fileid=x)
633 nav = webutil.revnavgen(end - 1, revcount, count, nodefunc)
636 nav = webutil.revnavgen(end - 1, revcount, count, nodefunc)
634 return tmpl("filelog", file=f, node=hex(fctx.node()), nav=nav,
637 return tmpl("filelog", file=f, node=hex(fctx.node()), nav=nav,
635 entries=lambda **x: entries(limit=0, **x),
638 entries=lambda **x: entries(limit=0, **x),
636 latestentry=lambda **x: entries(limit=1, **x),
639 latestentry=lambda **x: entries(limit=1, **x),
637 revcount=revcount, morevars=morevars, lessvars=lessvars)
640 revcount=revcount, morevars=morevars, lessvars=lessvars)
638
641
639 def archive(web, req, tmpl):
642 def archive(web, req, tmpl):
640 type_ = req.form.get('type', [None])[0]
643 type_ = req.form.get('type', [None])[0]
641 allowed = web.configlist("web", "allow_archive")
644 allowed = web.configlist("web", "allow_archive")
642 key = req.form['node'][0]
645 key = req.form['node'][0]
643
646
644 if type_ not in web.archives:
647 if type_ not in web.archives:
645 msg = 'Unsupported archive type: %s' % type_
648 msg = 'Unsupported archive type: %s' % type_
646 raise ErrorResponse(HTTP_NOT_FOUND, msg)
649 raise ErrorResponse(HTTP_NOT_FOUND, msg)
647
650
648 if not ((type_ in allowed or
651 if not ((type_ in allowed or
649 web.configbool("web", "allow" + type_, False))):
652 web.configbool("web", "allow" + type_, False))):
650 msg = 'Archive type not allowed: %s' % type_
653 msg = 'Archive type not allowed: %s' % type_
651 raise ErrorResponse(HTTP_FORBIDDEN, msg)
654 raise ErrorResponse(HTTP_FORBIDDEN, msg)
652
655
653 reponame = re.sub(r"\W+", "-", os.path.basename(web.reponame))
656 reponame = re.sub(r"\W+", "-", os.path.basename(web.reponame))
654 cnode = web.repo.lookup(key)
657 cnode = web.repo.lookup(key)
655 arch_version = key
658 arch_version = key
656 if cnode == key or key == 'tip':
659 if cnode == key or key == 'tip':
657 arch_version = short(cnode)
660 arch_version = short(cnode)
658 name = "%s-%s" % (reponame, arch_version)
661 name = "%s-%s" % (reponame, arch_version)
659 mimetype, artype, extension, encoding = web.archive_specs[type_]
662 mimetype, artype, extension, encoding = web.archive_specs[type_]
660 headers = [
663 headers = [
661 ('Content-Type', mimetype),
664 ('Content-Type', mimetype),
662 ('Content-Disposition', 'attachment; filename=%s%s' % (name, extension))
665 ('Content-Disposition', 'attachment; filename=%s%s' % (name, extension))
663 ]
666 ]
664 if encoding:
667 if encoding:
665 headers.append(('Content-Encoding', encoding))
668 headers.append(('Content-Encoding', encoding))
666 req.header(headers)
669 req.header(headers)
667 req.respond(HTTP_OK)
670 req.respond(HTTP_OK)
668 archival.archive(web.repo, req, cnode, artype, prefix=name)
671 archival.archive(web.repo, req, cnode, artype, prefix=name)
669 return []
672 return []
670
673
671
674
672 def static(web, req, tmpl):
675 def static(web, req, tmpl):
673 fname = req.form['file'][0]
676 fname = req.form['file'][0]
674 # a repo owner may set web.static in .hg/hgrc to get any file
677 # a repo owner may set web.static in .hg/hgrc to get any file
675 # readable by the user running the CGI script
678 # readable by the user running the CGI script
676 static = web.config("web", "static", None, untrusted=False)
679 static = web.config("web", "static", None, untrusted=False)
677 if not static:
680 if not static:
678 tp = web.templatepath or templater.templatepath()
681 tp = web.templatepath or templater.templatepath()
679 if isinstance(tp, str):
682 if isinstance(tp, str):
680 tp = [tp]
683 tp = [tp]
681 static = [os.path.join(p, 'static') for p in tp]
684 static = [os.path.join(p, 'static') for p in tp]
682 return [staticfile(static, fname, req)]
685 return [staticfile(static, fname, req)]
683
686
684 def graph(web, req, tmpl):
687 def graph(web, req, tmpl):
685
688
686 rev = webutil.changectx(web.repo, req).rev()
689 rev = webutil.changectx(web.repo, req).rev()
687 bg_height = 39
690 bg_height = 39
688 revcount = web.maxshortchanges
691 revcount = web.maxshortchanges
689 if 'revcount' in req.form:
692 if 'revcount' in req.form:
690 revcount = int(req.form.get('revcount', [revcount])[0])
693 revcount = int(req.form.get('revcount', [revcount])[0])
691 tmpl.defaults['sessionvars']['revcount'] = revcount
694 tmpl.defaults['sessionvars']['revcount'] = revcount
692
695
693 lessvars = copy.copy(tmpl.defaults['sessionvars'])
696 lessvars = copy.copy(tmpl.defaults['sessionvars'])
694 lessvars['revcount'] = revcount / 2
697 lessvars['revcount'] = revcount / 2
695 morevars = copy.copy(tmpl.defaults['sessionvars'])
698 morevars = copy.copy(tmpl.defaults['sessionvars'])
696 morevars['revcount'] = revcount * 2
699 morevars['revcount'] = revcount * 2
697
700
698 max_rev = len(web.repo) - 1
701 max_rev = len(web.repo) - 1
699 revcount = min(max_rev, revcount)
702 revcount = min(max_rev, revcount)
700 revnode = web.repo.changelog.node(rev)
703 revnode = web.repo.changelog.node(rev)
701 revnode_hex = hex(revnode)
704 revnode_hex = hex(revnode)
702 uprev = min(max_rev, rev + revcount)
705 uprev = min(max_rev, rev + revcount)
703 downrev = max(0, rev - revcount)
706 downrev = max(0, rev - revcount)
704 count = len(web.repo)
707 count = len(web.repo)
705 changenav = webutil.revnavgen(rev, revcount, count, web.repo.changectx)
708 changenav = webutil.revnavgen(rev, revcount, count, web.repo.changectx)
706
709
707 dag = graphmod.revisions(web.repo, rev, downrev)
710 dag = graphmod.revisions(web.repo, rev, downrev)
708 tree = list(graphmod.colored(dag))
711 tree = list(graphmod.colored(dag))
709 canvasheight = (len(tree) + 1) * bg_height - 27
712 canvasheight = (len(tree) + 1) * bg_height - 27
710 data = []
713 data = []
711 for (id, type, ctx, vtx, edges) in tree:
714 for (id, type, ctx, vtx, edges) in tree:
712 if type != graphmod.CHANGESET:
715 if type != graphmod.CHANGESET:
713 continue
716 continue
714 node = short(ctx.node())
717 node = short(ctx.node())
715 age = templatefilters.age(ctx.date())
718 age = templatefilters.age(ctx.date())
716 desc = templatefilters.firstline(ctx.description())
719 desc = templatefilters.firstline(ctx.description())
717 desc = cgi.escape(templatefilters.nonempty(desc))
720 desc = cgi.escape(templatefilters.nonempty(desc))
718 user = cgi.escape(templatefilters.person(ctx.user()))
721 user = cgi.escape(templatefilters.person(ctx.user()))
719 branch = ctx.branch()
722 branch = ctx.branch()
720 branch = branch, web.repo.branchtags().get(branch) == ctx.node()
723 branch = branch, web.repo.branchtags().get(branch) == ctx.node()
721 data.append((node, vtx, edges, desc, user, age, branch, ctx.tags()))
724 data.append((node, vtx, edges, desc, user, age, branch, ctx.tags()))
722
725
723 return tmpl('graph', rev=rev, revcount=revcount, uprev=uprev,
726 return tmpl('graph', rev=rev, revcount=revcount, uprev=uprev,
724 lessvars=lessvars, morevars=morevars, downrev=downrev,
727 lessvars=lessvars, morevars=morevars, downrev=downrev,
725 canvasheight=canvasheight, jsdata=data, bg_height=bg_height,
728 canvasheight=canvasheight, jsdata=data, bg_height=bg_height,
726 node=revnode_hex, changenav=changenav)
729 node=revnode_hex, changenav=changenav)
730
731 def _getdoc(e):
732 doc = e[0].__doc__
733 if doc:
734 doc = doc.split('\n')[0]
735 else:
736 doc = _('(no help text available)')
737 return doc
738
739 def help(web, req, tmpl):
740 from mercurial import commands # avoid cycle
741
742 topicname = req.form.get('node', [None])[0]
743 if not topicname:
744 topic = []
745
746 def topics(**map):
747 for entries, summary, _ in helpmod.helptable:
748 entries = sorted(entries, key=len)
749 yield {'topic': entries[-1], 'summary': summary}
750
751 early, other = [], []
752 primary = lambda s: s.split('|')[0]
753 for c, e in commands.table.iteritems():
754 doc = _getdoc(e)
755 if 'DEPRECATED' in doc or c.startswith('debug'):
756 continue
757 cmd = primary(c)
758 if cmd.startswith('^'):
759 early.append((cmd[1:], doc))
760 else:
761 other.append((cmd, doc))
762
763 early.sort()
764 other.sort()
765
766 def earlycommands(**map):
767 for c, doc in early:
768 yield {'topic': c, 'summary': doc}
769
770 def othercommands(**map):
771 for c, doc in other:
772 yield {'topic': c, 'summary': doc}
773
774 return tmpl('helptopics', topics=topics, earlycommands=earlycommands,
775 othercommands=othercommands, title='Index')
776
777 u = ui.ui()
778 u.pushbuffer()
779 try:
780 commands.help_(u, topicname)
781 except error.UnknownCommand:
782 raise ErrorResponse(HTTP_NOT_FOUND)
783 doc = u.popbuffer()
784 return tmpl('help', topic=topicname, doc=doc)
@@ -1,196 +1,201 b''
1 default = 'shortlog'
1 default = 'shortlog'
2
2
3 mimetype = 'text/html; charset={encoding}'
3 mimetype = 'text/html; charset={encoding}'
4 header = header.tmpl
4 header = header.tmpl
5 footer = ../paper/footer.tmpl
5 footer = ../paper/footer.tmpl
6 search = ../paper/search.tmpl
6 search = ../paper/search.tmpl
7
7
8 changelog = ../paper/shortlog.tmpl
8 changelog = ../paper/shortlog.tmpl
9 shortlog = ../paper/shortlog.tmpl
9 shortlog = ../paper/shortlog.tmpl
10 shortlogentry = ../paper/shortlogentry.tmpl
10 shortlogentry = ../paper/shortlogentry.tmpl
11 graph = ../paper/graph.tmpl
11 graph = ../paper/graph.tmpl
12
12
13 help = ../paper/help.tmpl
14 helptopics = ../paper/helptopics.tmpl
15
16 helpentry = '<tr><td><a href="{url}help/{topic|escape}{sessionvars%urlparameter}">{topic|escape}</a></td><td>{summary|escape}</td></tr>'
17
13 naventry = '<a href="{url}log/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
18 naventry = '<a href="{url}log/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
14 navshortentry = '<a href="{url}shortlog/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
19 navshortentry = '<a href="{url}shortlog/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
15 navgraphentry = '<a href="{url}graph/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
20 navgraphentry = '<a href="{url}graph/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
16 filenaventry = '<a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{label|escape}</a> '
21 filenaventry = '<a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{label|escape}</a> '
17 filedifflink = '<a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a> '
22 filedifflink = '<a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a> '
18 filenodelink = '<a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a> '
23 filenodelink = '<a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a> '
19 filenolink = '{file|escape} '
24 filenolink = '{file|escape} '
20 fileellipses = '...'
25 fileellipses = '...'
21 changelogentry = ../paper/shortlogentry.tmpl
26 changelogentry = ../paper/shortlogentry.tmpl
22 searchentry = ../paper/shortlogentry.tmpl
27 searchentry = ../paper/shortlogentry.tmpl
23 changeset = ../paper/changeset.tmpl
28 changeset = ../paper/changeset.tmpl
24 manifest = ../paper/manifest.tmpl
29 manifest = ../paper/manifest.tmpl
25
30
26 nav = '{before%naventry} {after%naventry}'
31 nav = '{before%naventry} {after%naventry}'
27 navshort = '{before%navshortentry}{after%navshortentry}'
32 navshort = '{before%navshortentry}{after%navshortentry}'
28 navgraph = '{before%navgraphentry}{after%navgraphentry}'
33 navgraph = '{before%navgraphentry}{after%navgraphentry}'
29 filenav = '{before%filenaventry}{after%filenaventry}'
34 filenav = '{before%filenaventry}{after%filenaventry}'
30
35
31 direntry = '
36 direntry = '
32 <tr class="fileline parity{parity}">
37 <tr class="fileline parity{parity}">
33 <td class="name">
38 <td class="name">
34 <a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">
39 <a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">
35 <img src="{staticurl}coal-folder.png" alt="dir."/> {basename|escape}/
40 <img src="{staticurl}coal-folder.png" alt="dir."/> {basename|escape}/
36 </a>
41 </a>
37 <a href="{url}file/{node|short}{path|urlescape}/{emptydirs|urlescape}{sessionvars%urlparameter}">
42 <a href="{url}file/{node|short}{path|urlescape}/{emptydirs|urlescape}{sessionvars%urlparameter}">
38 {emptydirs|escape}
43 {emptydirs|escape}
39 </a>
44 </a>
40 </td>
45 </td>
41 <td class="size"></td>
46 <td class="size"></td>
42 <td class="permissions">drwxr-xr-x</td>
47 <td class="permissions">drwxr-xr-x</td>
43 </tr>'
48 </tr>'
44
49
45 fileentry = '
50 fileentry = '
46 <tr class="fileline parity{parity}">
51 <tr class="fileline parity{parity}">
47 <td class="filename">
52 <td class="filename">
48 <a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
53 <a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
49 <img src="{staticurl}coal-file.png" alt="file"/> {basename|escape}
54 <img src="{staticurl}coal-file.png" alt="file"/> {basename|escape}
50 </a>
55 </a>
51 </td>
56 </td>
52 <td class="size">{size}</td>
57 <td class="size">{size}</td>
53 <td class="permissions">{permissions|permissions}</td>
58 <td class="permissions">{permissions|permissions}</td>
54 </tr>'
59 </tr>'
55
60
56 filerevision = ../paper/filerevision.tmpl
61 filerevision = ../paper/filerevision.tmpl
57 fileannotate = ../paper/fileannotate.tmpl
62 fileannotate = ../paper/fileannotate.tmpl
58 filediff = ../paper/filediff.tmpl
63 filediff = ../paper/filediff.tmpl
59 filelog = ../paper/filelog.tmpl
64 filelog = ../paper/filelog.tmpl
60 fileline = '
65 fileline = '
61 <div class="parity{parity} source"><a href="#{lineid}" id="{lineid}">{linenumber}</a> {line|escape}</div>'
66 <div class="parity{parity} source"><a href="#{lineid}" id="{lineid}">{linenumber}</a> {line|escape}</div>'
62 filelogentry = ../paper/filelogentry.tmpl
67 filelogentry = ../paper/filelogentry.tmpl
63
68
64 annotateline = '
69 annotateline = '
65 <tr class="parity{parity}">
70 <tr class="parity{parity}">
66 <td class="annotate">
71 <td class="annotate">
67 <a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}#{targetline}"
72 <a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}#{targetline}"
68 title="{node|short}: {desc|escape|firstline}">{author|user}@{rev}</a>
73 title="{node|short}: {desc|escape|firstline}">{author|user}@{rev}</a>
69 </td>
74 </td>
70 <td class="source"><a href="#{lineid}" id="{lineid}">{linenumber}</a> {line|escape}</td>
75 <td class="source"><a href="#{lineid}" id="{lineid}">{linenumber}</a> {line|escape}</td>
71 </tr>'
76 </tr>'
72
77
73 diffblock = '<div class="source bottomline parity{parity}"><pre>{lines}</pre></div>'
78 diffblock = '<div class="source bottomline parity{parity}"><pre>{lines}</pre></div>'
74 difflineplus = '<a href="#{lineid}" id="{lineid}">{linenumber}</a> <span class="plusline">{line|escape}</span>'
79 difflineplus = '<a href="#{lineid}" id="{lineid}">{linenumber}</a> <span class="plusline">{line|escape}</span>'
75 difflineminus = '<a href="#{lineid}" id="{lineid}">{linenumber}</a> <span class="minusline">{line|escape}</span>'
80 difflineminus = '<a href="#{lineid}" id="{lineid}">{linenumber}</a> <span class="minusline">{line|escape}</span>'
76 difflineat = '<a href="#{lineid}" id="{lineid}">{linenumber}</a> <span class="atline">{line|escape}</span>'
81 difflineat = '<a href="#{lineid}" id="{lineid}">{linenumber}</a> <span class="atline">{line|escape}</span>'
77 diffline = '<a href="#{lineid}" id="{lineid}">{linenumber}</a> {line|escape}'
82 diffline = '<a href="#{lineid}" id="{lineid}">{linenumber}</a> {line|escape}'
78
83
79 changelogparent = '
84 changelogparent = '
80 <tr>
85 <tr>
81 <th class="parent">parent {rev}:</th>
86 <th class="parent">parent {rev}:</th>
82 <td class="parent"><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td>
87 <td class="parent"><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td>
83 </tr>'
88 </tr>'
84
89
85 changesetparent = '<a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a> '
90 changesetparent = '<a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a> '
86
91
87 filerevparent = '<a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{rename%filerename}{node|short}</a> '
92 filerevparent = '<a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{rename%filerename}{node|short}</a> '
88 filerevchild = '<a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a> '
93 filerevchild = '<a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a> '
89
94
90 filerename = '{file|escape}@'
95 filerename = '{file|escape}@'
91 filelogrename = '
96 filelogrename = '
92 <tr>
97 <tr>
93 <th>base:</th>
98 <th>base:</th>
94 <td>
99 <td>
95 <a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
100 <a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
96 {file|escape}@{node|short}
101 {file|escape}@{node|short}
97 </a>
102 </a>
98 </td>
103 </td>
99 </tr>'
104 </tr>'
100 fileannotateparent = '
105 fileannotateparent = '
101 <tr>
106 <tr>
102 <td class="metatag">parent:</td>
107 <td class="metatag">parent:</td>
103 <td>
108 <td>
104 <a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
109 <a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
105 {rename%filerename}{node|short}
110 {rename%filerename}{node|short}
106 </a>
111 </a>
107 </td>
112 </td>
108 </tr>'
113 </tr>'
109 changesetchild = ' <a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a>'
114 changesetchild = ' <a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a>'
110 changelogchild = '
115 changelogchild = '
111 <tr>
116 <tr>
112 <th class="child">child</th>
117 <th class="child">child</th>
113 <td class="child">
118 <td class="child">
114 <a href="{url}rev/{node|short}{sessionvars%urlparameter}">
119 <a href="{url}rev/{node|short}{sessionvars%urlparameter}">
115 {node|short}
120 {node|short}
116 </a>
121 </a>
117 </td>
122 </td>
118 </tr>'
123 </tr>'
119 fileannotatechild = '
124 fileannotatechild = '
120 <tr>
125 <tr>
121 <td class="metatag">child:</td>
126 <td class="metatag">child:</td>
122 <td>
127 <td>
123 <a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
128 <a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
124 {node|short}
129 {node|short}
125 </a>
130 </a>
126 </td>
131 </td>
127 </tr>'
132 </tr>'
128 tags = ../paper/tags.tmpl
133 tags = ../paper/tags.tmpl
129 tagentry = '
134 tagentry = '
130 <tr class="tagEntry parity{parity}">
135 <tr class="tagEntry parity{parity}">
131 <td>
136 <td>
132 <a href="{url}rev/{node|short}{sessionvars%urlparameter}">
137 <a href="{url}rev/{node|short}{sessionvars%urlparameter}">
133 {tag|escape}
138 {tag|escape}
134 </a>
139 </a>
135 </td>
140 </td>
136 <td class="node">
141 <td class="node">
137 {node|short}
142 {node|short}
138 </td>
143 </td>
139 </tr>'
144 </tr>'
140 branches = ../paper/branches.tmpl
145 branches = ../paper/branches.tmpl
141 branchentry = '
146 branchentry = '
142 <tr class="tagEntry parity{parity}">
147 <tr class="tagEntry parity{parity}">
143 <td>
148 <td>
144 <a href="{url}shortlog/{node|short}{sessionvars%urlparameter}" class="{status}">
149 <a href="{url}shortlog/{node|short}{sessionvars%urlparameter}" class="{status}">
145 {branch|escape}
150 {branch|escape}
146 </a>
151 </a>
147 </td>
152 </td>
148 <td class="node">
153 <td class="node">
149 {node|short}
154 {node|short}
150 </td>
155 </td>
151 </tr>'
156 </tr>'
152 changelogtag = '<span class="tag">{name|escape}</span> '
157 changelogtag = '<span class="tag">{name|escape}</span> '
153 changesettag = '<span class="tag">{tag|escape}</span> '
158 changesettag = '<span class="tag">{tag|escape}</span> '
154 changelogbranchhead = '<span class="branchhead">{name|escape}</span> '
159 changelogbranchhead = '<span class="branchhead">{name|escape}</span> '
155 changelogbranchname = '<span class="branchname">{name|escape}</span> '
160 changelogbranchname = '<span class="branchname">{name|escape}</span> '
156
161
157 filediffparent = '
162 filediffparent = '
158 <tr>
163 <tr>
159 <th class="parent">parent {rev}:</th>
164 <th class="parent">parent {rev}:</th>
160 <td class="parent"><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td>
165 <td class="parent"><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td>
161 </tr>'
166 </tr>'
162 filelogparent = '
167 filelogparent = '
163 <tr>
168 <tr>
164 <th>parent {rev}:</th>
169 <th>parent {rev}:</th>
165 <td><a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></td>
170 <td><a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></td>
166 </tr>'
171 </tr>'
167 filediffchild = '
172 filediffchild = '
168 <tr>
173 <tr>
169 <th class="child">child {rev}:</th>
174 <th class="child">child {rev}:</th>
170 <td class="child"><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a>
175 <td class="child"><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a>
171 </td>
176 </td>
172 </tr>'
177 </tr>'
173 filelogchild = '
178 filelogchild = '
174 <tr>
179 <tr>
175 <th>child {rev}:</th>
180 <th>child {rev}:</th>
176 <td><a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></td>
181 <td><a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></td>
177 </tr>'
182 </tr>'
178
183
179 indexentry = '
184 indexentry = '
180 <tr class="parity{parity}">
185 <tr class="parity{parity}">
181 <td><a href="{url}{sessionvars%urlparameter}">{name|escape}</a></td>
186 <td><a href="{url}{sessionvars%urlparameter}">{name|escape}</a></td>
182 <td>{description}</td>
187 <td>{description}</td>
183 <td>{contact|obfuscate}</td>
188 <td>{contact|obfuscate}</td>
184 <td class="age">{lastchange|age}</td>
189 <td class="age">{lastchange|age}</td>
185 <td class="indexlinks">{archives%indexarchiveentry}</td>
190 <td class="indexlinks">{archives%indexarchiveentry}</td>
186 </tr>\n'
191 </tr>\n'
187 indexarchiveentry = '<a href="{url}archive/{node|short}{extension|urlescape}">&nbsp;&darr;{type|escape}</a>'
192 indexarchiveentry = '<a href="{url}archive/{node|short}{extension|urlescape}">&nbsp;&darr;{type|escape}</a>'
188 index = ../paper/index.tmpl
193 index = ../paper/index.tmpl
189 archiveentry = '
194 archiveentry = '
190 <li>
195 <li>
191 <a href="{url}archive/{node|short}{extension|urlescape}">{type|escape}</a>
196 <a href="{url}archive/{node|short}{extension|urlescape}">{type|escape}</a>
192 </li>'
197 </li>'
193 notfound = ../paper/notfound.tmpl
198 notfound = ../paper/notfound.tmpl
194 error = ../paper/error.tmpl
199 error = ../paper/error.tmpl
195 urlparameter = '{separator}{name}={value|urlescape}'
200 urlparameter = '{separator}{name}={value|urlescape}'
196 hiddenformentry = '<input type="hidden" name="{name}" value="{value|escape}" />'
201 hiddenformentry = '<input type="hidden" name="{name}" value="{value|escape}" />'
@@ -1,30 +1,31 b''
1 {header}
1 {header}
2 <title>{repo|escape}: Branches</title>
2 <title>{repo|escape}: Branches</title>
3 <link rel="alternate" type="application/atom+xml"
3 <link rel="alternate" type="application/atom+xml"
4 href="{url}atom-tags" title="Atom feed for {repo|escape}"/>
4 href="{url}atom-tags" title="Atom feed for {repo|escape}"/>
5 <link rel="alternate" type="application/rss+xml"
5 <link rel="alternate" type="application/rss+xml"
6 href="{url}rss-tags" title="RSS feed for {repo|escape}"/>
6 href="{url}rss-tags" title="RSS feed for {repo|escape}"/>
7 </head>
7 </head>
8 <body>
8 <body>
9
9
10 <div class="page_header">
10 <div class="page_header">
11 <a href="http://mercurial.selenic.com/" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / branches
11 <a href="http://mercurial.selenic.com/" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / branches
12 </div>
12 </div>
13
13
14 <div class="page_nav">
14 <div class="page_nav">
15 <a href="{url}summary{sessionvars%urlparameter}">summary</a> |
15 <a href="{url}summary{sessionvars%urlparameter}">summary</a> |
16 <a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a> |
16 <a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a> |
17 <a href="{url}log{sessionvars%urlparameter}">changelog</a> |
17 <a href="{url}log{sessionvars%urlparameter}">changelog</a> |
18 <a href="{url}graph{sessionvars%urlparameter}">graph</a> |
18 <a href="{url}graph{sessionvars%urlparameter}">graph</a> |
19 <a href="{url}tags{sessionvars%urlparameter}">tags</a> |
19 <a href="{url}tags{sessionvars%urlparameter}">tags</a> |
20 branches |
20 branches |
21 <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>
21 <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a> |
22 <a href="{url}help{sessionvars%urlparameter}">help</a>
22 <br/>
23 <br/>
23 </div>
24 </div>
24
25
25 <div class="title">&nbsp;</div>
26 <div class="title">&nbsp;</div>
26 <table cellspacing="0">
27 <table cellspacing="0">
27 {entries%branchentry}
28 {entries%branchentry}
28 </table>
29 </table>
29
30
30 {footer}
31 {footer}
@@ -1,39 +1,40 b''
1 {header}
1 {header}
2 <title>{repo|escape}: Changelog</title>
2 <title>{repo|escape}: Changelog</title>
3 <link rel="alternate" type="application/atom+xml"
3 <link rel="alternate" type="application/atom+xml"
4 href="{url}atom-log" title="Atom feed for {repo|escape}"/>
4 href="{url}atom-log" title="Atom feed for {repo|escape}"/>
5 <link rel="alternate" type="application/rss+xml"
5 <link rel="alternate" type="application/rss+xml"
6 href="{url}rss-log" title="RSS feed for {repo|escape}"/>
6 href="{url}rss-log" title="RSS feed for {repo|escape}"/>
7 </head>
7 </head>
8 <body>
8 <body>
9
9
10 <div class="page_header">
10 <div class="page_header">
11 <a href="http://mercurial.selenic.com/" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / changelog
11 <a href="http://mercurial.selenic.com/" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / changelog
12 </div>
12 </div>
13
13
14 <form action="{url}log">
14 <form action="{url}log">
15 {sessionvars%hiddenformentry}
15 {sessionvars%hiddenformentry}
16 <div class="search">
16 <div class="search">
17 <input type="text" name="rev" />
17 <input type="text" name="rev" />
18 </div>
18 </div>
19 </form>
19 </form>
20
20
21 <div class="page_nav">
21 <div class="page_nav">
22 <a href="{url}summary{sessionvars%urlparameter}">summary</a> |
22 <a href="{url}summary{sessionvars%urlparameter}">summary</a> |
23 <a href="{url}shortlog/{rev}{sessionvars%urlparameter}">shortlog</a> |
23 <a href="{url}shortlog/{rev}{sessionvars%urlparameter}">shortlog</a> |
24 changelog |
24 changelog |
25 <a href="{url}graph{sessionvars%urlparameter}">graph</a> |
25 <a href="{url}graph{sessionvars%urlparameter}">graph</a> |
26 <a href="{url}tags{sessionvars%urlparameter}">tags</a> |
26 <a href="{url}tags{sessionvars%urlparameter}">tags</a> |
27 <a href="{url}branches{sessionvars%urlparameter}">branches</a> |
27 <a href="{url}branches{sessionvars%urlparameter}">branches</a> |
28 <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>{archives%archiveentry}
28 <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>{archives%archiveentry} |
29 <a href="{url}help{sessionvars%urlparameter}">help</a>
29 <br/>
30 <br/>
30 {changenav%nav}<br/>
31 {changenav%nav}<br/>
31 </div>
32 </div>
32
33
33 {entries%changelogentry}
34 {entries%changelogentry}
34
35
35 <div class="page_nav">
36 <div class="page_nav">
36 {changenav%nav}<br/>
37 {changenav%nav}<br/>
37 </div>
38 </div>
38
39
39 {footer}
40 {footer}
@@ -1,50 +1,52 b''
1 {header}
1 {header}
2 <title>{repo|escape}: changeset {rev}:{node|short}</title>
2 <title>{repo|escape}: changeset {rev}:{node|short}</title>
3 <link rel="alternate" type="application/atom+xml"
3 <link rel="alternate" type="application/atom+xml"
4 href="{url}atom-log" title="Atom feed for {repo|escape}"/>
4 href="{url}atom-log" title="Atom feed for {repo|escape}"/>
5 <link rel="alternate" type="application/rss+xml"
5 <link rel="alternate" type="application/rss+xml"
6 href="{url}rss-log" title="RSS feed for {repo|escape}"/>
6 href="{url}rss-log" title="RSS feed for {repo|escape}"/>
7 </head>
7 </head>
8 <body>
8 <body>
9
9
10 <div class="page_header">
10 <div class="page_header">
11 <a href="http://mercurial.selenic.com/" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / changeset
11 <a href="http://mercurial.selenic.com/" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / changeset
12 </div>
12 </div>
13
13
14 <div class="page_nav">
14 <div class="page_nav">
15 <a href="{url}summary{sessionvars%urlparameter}">summary</a> |
15 <a href="{url}summary{sessionvars%urlparameter}">summary</a> |
16 <a href="{url}shortlog/{rev}{sessionvars%urlparameter}">shortlog</a> |
16 <a href="{url}shortlog/{rev}{sessionvars%urlparameter}">shortlog</a> |
17 <a href="{url}log/{rev}{sessionvars%urlparameter}">changelog</a> |
17 <a href="{url}log/{rev}{sessionvars%urlparameter}">changelog</a> |
18 <a href="{url}graph{sessionvars%urlparameter}">graph</a> |
18 <a href="{url}graph{sessionvars%urlparameter}">graph</a> |
19 <a href="{url}tags{sessionvars%urlparameter}">tags</a> |
19 <a href="{url}tags{sessionvars%urlparameter}">tags</a> |
20 <a href="{url}branches{sessionvars%urlparameter}">branches</a> |
20 <a href="{url}branches{sessionvars%urlparameter}">branches</a> |
21 <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a> |
21 <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a> |
22 changeset |
22 changeset |
23 <a href="{url}raw-rev/{node|short}">raw</a> {archives%archiveentry}<br/>
23 <a href="{url}raw-rev/{node|short}">raw</a> {archives%archiveentry} |
24 <a href="{url}help{sessionvars%urlparameter}">help</a>
25 <br/>
24 </div>
26 </div>
25
27
26 <div>
28 <div>
27 <a class="title" href="{url}raw-rev/{node|short}">{desc|strip|escape|firstline|nonempty} <span class="logtags">{inbranch%inbranchtag}{branches%branchtag}{tags%tagtag}</span></a>
29 <a class="title" href="{url}raw-rev/{node|short}">{desc|strip|escape|firstline|nonempty} <span class="logtags">{inbranch%inbranchtag}{branches%branchtag}{tags%tagtag}</span></a>
28 </div>
30 </div>
29 <div class="title_text">
31 <div class="title_text">
30 <table cellspacing="0">
32 <table cellspacing="0">
31 <tr><td>author</td><td>{author|obfuscate}</td></tr>
33 <tr><td>author</td><td>{author|obfuscate}</td></tr>
32 <tr><td></td><td>{date|date} ({date|age})</td></tr>
34 <tr><td></td><td>{date|date} ({date|age})</td></tr>
33 {branch%changesetbranch}
35 {branch%changesetbranch}
34 <tr><td>changeset {rev}</td><td style="font-family:monospace">{node|short}</td></tr>
36 <tr><td>changeset {rev}</td><td style="font-family:monospace">{node|short}</td></tr>
35 {parent%changesetparent}
37 {parent%changesetparent}
36 {child%changesetchild}
38 {child%changesetchild}
37 </table></div>
39 </table></div>
38
40
39 <div class="page_body">
41 <div class="page_body">
40 {desc|strip|escape|addbreaks|nonempty}
42 {desc|strip|escape|addbreaks|nonempty}
41 </div>
43 </div>
42 <div class="list_head"></div>
44 <div class="list_head"></div>
43 <div class="title_text">
45 <div class="title_text">
44 <table cellspacing="0">
46 <table cellspacing="0">
45 {files}
47 {files}
46 </table></div>
48 </table></div>
47
49
48 <div class="page_body">{diff}</div>
50 <div class="page_body">{diff}</div>
49
51
50 {footer}
52 {footer}
@@ -1,48 +1,49 b''
1 {header}
1 {header}
2 <title>{repo|escape}: diff {file|escape}</title>
2 <title>{repo|escape}: diff {file|escape}</title>
3 <link rel="alternate" type="application/atom+xml"
3 <link rel="alternate" type="application/atom+xml"
4 href="{url}atom-log" title="Atom feed for {repo|escape}"/>
4 href="{url}atom-log" title="Atom feed for {repo|escape}"/>
5 <link rel="alternate" type="application/rss+xml"
5 <link rel="alternate" type="application/rss+xml"
6 href="{url}rss-log" title="RSS feed for {repo|escape}"/>
6 href="{url}rss-log" title="RSS feed for {repo|escape}"/>
7 </head>
7 </head>
8 <body>
8 <body>
9
9
10 <div class="page_header">
10 <div class="page_header">
11 <a href="http://mercurial.selenic.com/" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / diff
11 <a href="http://mercurial.selenic.com/" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / diff
12 </div>
12 </div>
13
13
14 <div class="page_nav">
14 <div class="page_nav">
15 <a href="{url}summary{sessionvars%urlparameter}">summary</a> |
15 <a href="{url}summary{sessionvars%urlparameter}">summary</a> |
16 <a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a> |
16 <a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a> |
17 <a href="{url}log{sessionvars%urlparameter}">changelog</a> |
17 <a href="{url}log{sessionvars%urlparameter}">changelog</a> |
18 <a href="{url}graph{sessionvars%urlparameter}">graph</a> |
18 <a href="{url}graph{sessionvars%urlparameter}">graph</a> |
19 <a href="{url}tags{sessionvars%urlparameter}">tags</a> |
19 <a href="{url}tags{sessionvars%urlparameter}">tags</a> |
20 <a href="{url}branches{sessionvars%urlparameter}">branches</a> |
20 <a href="{url}branches{sessionvars%urlparameter}">branches</a> |
21 <a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">files</a> |
21 <a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">files</a> |
22 <a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a> |
22 <a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a> |
23 <a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a> |
23 <a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a> |
24 <a href="{url}file/tip/{file|urlescape}{sessionvars%urlparameter}">latest</a> |
24 <a href="{url}file/tip/{file|urlescape}{sessionvars%urlparameter}">latest</a> |
25 <a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">revisions</a> |
25 <a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">revisions</a> |
26 <a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a> |
26 <a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a> |
27 diff |
27 diff |
28 <a href="{url}raw-diff/{node|short}/{file|urlescape}">raw</a><br/>
28 <a href="{url}raw-diff/{node|short}/{file|urlescape}">raw</a><br/> |
29 <a href="{url}help{sessionvars%urlparameter}">help</a>
29 </div>
30 </div>
30
31
31 <div class="title">{file|escape}</div>
32 <div class="title">{file|escape}</div>
32
33
33 <table>
34 <table>
34 {branch%filerevbranch}
35 {branch%filerevbranch}
35 <tr>
36 <tr>
36 <td>changeset {rev}</td>
37 <td>changeset {rev}</td>
37 <td style="font-family:monospace"><a class="list" href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td></tr>
38 <td style="font-family:monospace"><a class="list" href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td></tr>
38 {parent%filediffparent}
39 {parent%filediffparent}
39 {child%filediffchild}
40 {child%filediffchild}
40 </table>
41 </table>
41
42
42 <div class="list_head"></div>
43 <div class="list_head"></div>
43
44
44 <div class="page_body">
45 <div class="page_body">
45 {diff}
46 {diff}
46 </div>
47 </div>
47
48
48 {footer}
49 {footer}
@@ -1,121 +1,122 b''
1 {header}
1 {header}
2 <title>{repo|escape}: Graph</title>
2 <title>{repo|escape}: Graph</title>
3 <link rel="alternate" type="application/atom+xml"
3 <link rel="alternate" type="application/atom+xml"
4 href="{url}atom-log" title="Atom feed for {repo|escape}"/>
4 href="{url}atom-log" title="Atom feed for {repo|escape}"/>
5 <link rel="alternate" type="application/rss+xml"
5 <link rel="alternate" type="application/rss+xml"
6 href="{url}rss-log" title="RSS feed for {repo|escape}"/>
6 href="{url}rss-log" title="RSS feed for {repo|escape}"/>
7 <!--[if IE]><script type="text/javascript" src="{staticurl}excanvas.js"></script><![endif]-->
7 <!--[if IE]><script type="text/javascript" src="{staticurl}excanvas.js"></script><![endif]-->
8 </head>
8 </head>
9 <body>
9 <body>
10
10
11 <div class="page_header">
11 <div class="page_header">
12 <a href="http://mercurial.selenic.com/" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / graph
12 <a href="http://mercurial.selenic.com/" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / graph
13 </div>
13 </div>
14
14
15 <form action="{url}log">
15 <form action="{url}log">
16 {sessionvars%hiddenformentry}
16 {sessionvars%hiddenformentry}
17 <div class="search">
17 <div class="search">
18 <input type="text" name="rev" />
18 <input type="text" name="rev" />
19 </div>
19 </div>
20 </form>
20 </form>
21 <div class="page_nav">
21 <div class="page_nav">
22 <a href="{url}summary{sessionvars%urlparameter}">summary</a> |
22 <a href="{url}summary{sessionvars%urlparameter}">summary</a> |
23 <a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a> |
23 <a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a> |
24 <a href="{url}log/{rev}{sessionvars%urlparameter}">changelog</a> |
24 <a href="{url}log/{rev}{sessionvars%urlparameter}">changelog</a> |
25 graph |
25 graph |
26 <a href="{url}tags{sessionvars%urlparameter}">tags</a> |
26 <a href="{url}tags{sessionvars%urlparameter}">tags</a> |
27 <a href="{url}branches{sessionvars%urlparameter}">branches</a> |
27 <a href="{url}branches{sessionvars%urlparameter}">branches</a> |
28 <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>
28 <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a> |
29 <a href="{url}help{sessionvars%urlparameter}">help</a>
29 <br/>
30 <br/>
30 <a href="{url}graph/{rev}{lessvars%urlparameter}">less</a>
31 <a href="{url}graph/{rev}{lessvars%urlparameter}">less</a>
31 <a href="{url}graph/{rev}{morevars%urlparameter}">more</a>
32 <a href="{url}graph/{rev}{morevars%urlparameter}">more</a>
32 | {changenav%navgraph}<br/>
33 | {changenav%navgraph}<br/>
33 </div>
34 </div>
34
35
35 <div class="title">&nbsp;</div>
36 <div class="title">&nbsp;</div>
36
37
37 <noscript>The revision graph only works with JavaScript-enabled browsers.</noscript>
38 <noscript>The revision graph only works with JavaScript-enabled browsers.</noscript>
38
39
39 <div id="wrapper">
40 <div id="wrapper">
40 <ul id="nodebgs"></ul>
41 <ul id="nodebgs"></ul>
41 <canvas id="graph" width="224" height="{canvasheight}"></canvas>
42 <canvas id="graph" width="224" height="{canvasheight}"></canvas>
42 <ul id="graphnodes"></ul>
43 <ul id="graphnodes"></ul>
43 </div>
44 </div>
44
45
45 <script type="text/javascript" src="{staticurl}graph.js"></script>
46 <script type="text/javascript" src="{staticurl}graph.js"></script>
46 <script>
47 <script>
47 <!-- hide script content
48 <!-- hide script content
48
49
49 var data = {jsdata|json};
50 var data = {jsdata|json};
50 var graph = new Graph();
51 var graph = new Graph();
51 graph.scale({bg_height});
52 graph.scale({bg_height});
52
53
53 graph.edge = function(x0, y0, x1, y1, color) \{
54 graph.edge = function(x0, y0, x1, y1, color) \{
54
55
55 this.setColor(color, 0.0, 0.65);
56 this.setColor(color, 0.0, 0.65);
56 this.ctx.beginPath();
57 this.ctx.beginPath();
57 this.ctx.moveTo(x0, y0);
58 this.ctx.moveTo(x0, y0);
58 this.ctx.lineTo(x1, y1);
59 this.ctx.lineTo(x1, y1);
59 this.ctx.stroke();
60 this.ctx.stroke();
60
61
61 }
62 }
62
63
63 var revlink = '<li style="_STYLE"><span class="desc">';
64 var revlink = '<li style="_STYLE"><span class="desc">';
64 revlink += '<a class="list" href="{url}rev/_NODEID{sessionvars%urlparameter}" title="_NODEID"><b>_DESC</b></a>';
65 revlink += '<a class="list" href="{url}rev/_NODEID{sessionvars%urlparameter}" title="_NODEID"><b>_DESC</b></a>';
65 revlink += '</span> _TAGS';
66 revlink += '</span> _TAGS';
66 revlink += '<span class="info">_DATE, by _USER</span></li>';
67 revlink += '<span class="info">_DATE, by _USER</span></li>';
67
68
68 graph.vertex = function(x, y, color, parity, cur) \{
69 graph.vertex = function(x, y, color, parity, cur) \{
69
70
70 this.ctx.beginPath();
71 this.ctx.beginPath();
71 color = this.setColor(color, 0.25, 0.75);
72 color = this.setColor(color, 0.25, 0.75);
72 this.ctx.arc(x, y, radius, 0, Math.PI * 2, true);
73 this.ctx.arc(x, y, radius, 0, Math.PI * 2, true);
73 this.ctx.fill();
74 this.ctx.fill();
74
75
75 var bg = '<li class="bg parity' + parity + '"></li>';
76 var bg = '<li class="bg parity' + parity + '"></li>';
76 var left = (this.columns + 1) * this.bg_height;
77 var left = (this.columns + 1) * this.bg_height;
77 var nstyle = 'padding-left: ' + left + 'px;';
78 var nstyle = 'padding-left: ' + left + 'px;';
78 var item = revlink.replace(/_STYLE/, nstyle);
79 var item = revlink.replace(/_STYLE/, nstyle);
79 item = item.replace(/_PARITY/, 'parity' + parity);
80 item = item.replace(/_PARITY/, 'parity' + parity);
80 item = item.replace(/_NODEID/, cur[0]);
81 item = item.replace(/_NODEID/, cur[0]);
81 item = item.replace(/_NODEID/, cur[0]);
82 item = item.replace(/_NODEID/, cur[0]);
82 item = item.replace(/_DESC/, cur[3]);
83 item = item.replace(/_DESC/, cur[3]);
83 item = item.replace(/_USER/, cur[4]);
84 item = item.replace(/_USER/, cur[4]);
84 item = item.replace(/_DATE/, cur[5]);
85 item = item.replace(/_DATE/, cur[5]);
85
86
86 var tagspan = '';
87 var tagspan = '';
87 if (cur[7].length || (cur[6][0] != 'default' || cur[6][1])) \{
88 if (cur[7].length || (cur[6][0] != 'default' || cur[6][1])) \{
88 tagspan = '<span class="logtags">';
89 tagspan = '<span class="logtags">';
89 if (cur[6][1]) \{
90 if (cur[6][1]) \{
90 tagspan += '<span class="branchtag" title="' + cur[6][0] + '">';
91 tagspan += '<span class="branchtag" title="' + cur[6][0] + '">';
91 tagspan += cur[6][0] + '</span> ';
92 tagspan += cur[6][0] + '</span> ';
92 } else if (!cur[6][1] && cur[6][0] != 'default') \{
93 } else if (!cur[6][1] && cur[6][0] != 'default') \{
93 tagspan += '<span class="inbranchtag" title="' + cur[6][0] + '">';
94 tagspan += '<span class="inbranchtag" title="' + cur[6][0] + '">';
94 tagspan += cur[6][0] + '</span> ';
95 tagspan += cur[6][0] + '</span> ';
95 }
96 }
96 if (cur[7].length) \{
97 if (cur[7].length) \{
97 for (var t in cur[7]) \{
98 for (var t in cur[7]) \{
98 var tag = cur[7][t];
99 var tag = cur[7][t];
99 tagspan += '<span class="tagtag">' + tag + '</span> ';
100 tagspan += '<span class="tagtag">' + tag + '</span> ';
100 }
101 }
101 }
102 }
102 tagspan += '</span>';
103 tagspan += '</span>';
103 }
104 }
104
105
105 item = item.replace(/_TAGS/, tagspan);
106 item = item.replace(/_TAGS/, tagspan);
106 return [bg, item];
107 return [bg, item];
107
108
108 }
109 }
109
110
110 graph.render(data);
111 graph.render(data);
111
112
112 // stop hiding script -->
113 // stop hiding script -->
113 </script>
114 </script>
114
115
115 <div class="page_nav">
116 <div class="page_nav">
116 <a href="{url}graph/{rev}{lessvars%urlparameter}">less</a>
117 <a href="{url}graph/{rev}{lessvars%urlparameter}">less</a>
117 <a href="{url}graph/{rev}{morevars%urlparameter}">more</a>
118 <a href="{url}graph/{rev}{morevars%urlparameter}">more</a>
118 | {changenav%navgraph}
119 | {changenav%navgraph}
119 </div>
120 </div>
120
121
121 {footer}
122 {footer}
@@ -1,30 +1,31 b''
1 {header}
1 {header}
2 <title>{repo|escape}: Branches</title>
2 <title>{repo|escape}: Branches</title>
3 <link rel="alternate" type="application/atom+xml"
3 <link rel="alternate" type="application/atom+xml"
4 href="{url}atom-tags" title="Atom feed for {repo|escape}"/>
4 href="{url}atom-tags" title="Atom feed for {repo|escape}"/>
5 <link rel="alternate" type="application/rss+xml"
5 <link rel="alternate" type="application/rss+xml"
6 href="{url}rss-tags" title="RSS feed for {repo|escape}"/>
6 href="{url}rss-tags" title="RSS feed for {repo|escape}"/>
7 </head>
7 </head>
8 <body>
8 <body>
9
9
10 <div class="page_header">
10 <div class="page_header">
11 <a href="http://mercurial.selenic.com/" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / branches
11 <a href="http://mercurial.selenic.com/" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / branches
12 </div>
12 </div>
13
13
14 <div class="page_nav">
14 <div class="page_nav">
15 <a href="{url}summary{sessionvars%urlparameter}">summary</a> |
15 <a href="{url}summary{sessionvars%urlparameter}">summary</a> |
16 <a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a> |
16 <a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a> |
17 <a href="{url}log{sessionvars%urlparameter}">changelog</a> |
17 <a href="{url}log{sessionvars%urlparameter}">changelog</a> |
18 <a href="{url}graph{sessionvars%urlparameter}">graph</a> |
18 <a href="{url}graph{sessionvars%urlparameter}">graph</a> |
19 <a href="{url}tags{sessionvars%urlparameter}">tags</a> |
19 <a href="{url}tags{sessionvars%urlparameter}">tags</a> |
20 branches |
20 branches |
21 <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>
21 <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>
22 <br/>
22 <br/>
23 </div>
23 </div>
24
24
25 <div class="title">&nbsp;</div>
25 <div class="title">&nbsp;</div>
26 <table cellspacing="0">
26
27 {entries%branchentry}
27 <pre>
28 </table>
28 {doc|escape}
29 </pre>
29
30
30 {footer}
31 {footer}
@@ -1,30 +1,38 b''
1 {header}
1 {header}
2 <title>{repo|escape}: Branches</title>
2 <title>{repo|escape}: Branches</title>
3 <link rel="alternate" type="application/atom+xml"
3 <link rel="alternate" type="application/atom+xml"
4 href="{url}atom-tags" title="Atom feed for {repo|escape}"/>
4 href="{url}atom-tags" title="Atom feed for {repo|escape}"/>
5 <link rel="alternate" type="application/rss+xml"
5 <link rel="alternate" type="application/rss+xml"
6 href="{url}rss-tags" title="RSS feed for {repo|escape}"/>
6 href="{url}rss-tags" title="RSS feed for {repo|escape}"/>
7 </head>
7 </head>
8 <body>
8 <body>
9
9
10 <div class="page_header">
10 <div class="page_header">
11 <a href="http://mercurial.selenic.com/" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / branches
11 <a href="http://mercurial.selenic.com/" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / branches
12 </div>
12 </div>
13
13
14 <div class="page_nav">
14 <div class="page_nav">
15 <a href="{url}summary{sessionvars%urlparameter}">summary</a> |
15 <a href="{url}summary{sessionvars%urlparameter}">summary</a> |
16 <a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a> |
16 <a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a> |
17 <a href="{url}log{sessionvars%urlparameter}">changelog</a> |
17 <a href="{url}log{sessionvars%urlparameter}">changelog</a> |
18 <a href="{url}graph{sessionvars%urlparameter}">graph</a> |
18 <a href="{url}graph{sessionvars%urlparameter}">graph</a> |
19 <a href="{url}tags{sessionvars%urlparameter}">tags</a> |
19 <a href="{url}tags{sessionvars%urlparameter}">tags</a> |
20 branches |
20 <a href="{url}branches{sessionvars%urlparameter}">branches</a> |
21 <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>
21 <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a> |
22 help
22 <br/>
23 <br/>
23 </div>
24 </div>
24
25
25 <div class="title">&nbsp;</div>
26 <div class="title">&nbsp;</div>
26 <table cellspacing="0">
27 <table cellspacing="0">
27 {entries%branchentry}
28 <tr><td colspan="2"><h2><a name="main" href="#topics">Topics</a></h2></td></tr>
29 {topics % helpentry}
30
31 <tr><td colspan="2"><h2><a name="main" href="#main">Main Commands</a></h2></td></tr>
32 {earlycommands % helpentry}
33
34 <tr><td colspan="2"><h2><a name="other" href="#other">Other Commands</a></h2></td></tr>
35 {othercommands % helpentry}
28 </table>
36 </table>
29
37
30 {footer}
38 {footer}
@@ -1,38 +1,40 b''
1 {header}
1 {header}
2 <title>{repo|escape}: files</title>
2 <title>{repo|escape}: files</title>
3 <link rel="alternate" type="application/atom+xml"
3 <link rel="alternate" type="application/atom+xml"
4 href="{url}atom-log" title="Atom feed for {repo|escape}"/>
4 href="{url}atom-log" title="Atom feed for {repo|escape}"/>
5 <link rel="alternate" type="application/rss+xml"
5 <link rel="alternate" type="application/rss+xml"
6 href="{url}rss-log" title="RSS feed for {repo|escape}"/>
6 href="{url}rss-log" title="RSS feed for {repo|escape}"/>
7 </head>
7 </head>
8 <body>
8 <body>
9
9
10 <div class="page_header">
10 <div class="page_header">
11 <a href="http://mercurial.selenic.com/" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / files
11 <a href="http://mercurial.selenic.com/" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / files
12 </div>
12 </div>
13
13
14 <div class="page_nav">
14 <div class="page_nav">
15 <a href="{url}summary{sessionvars%urlparameter}">summary</a> |
15 <a href="{url}summary{sessionvars%urlparameter}">summary</a> |
16 <a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a> |
16 <a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a> |
17 <a href="{url}log{sessionvars%urlparameter}">changelog</a> |
17 <a href="{url}log{sessionvars%urlparameter}">changelog</a> |
18 <a href="{url}graph{sessionvars%urlparameter}">graph</a> |
18 <a href="{url}graph{sessionvars%urlparameter}">graph</a> |
19 <a href="{url}tags{sessionvars%urlparameter}">tags</a> |
19 <a href="{url}tags{sessionvars%urlparameter}">tags</a> |
20 <a href="{url}branches{sessionvars%urlparameter}">branches</a> |
20 <a href="{url}branches{sessionvars%urlparameter}">branches</a> |
21 files |
21 files |
22 <a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a> {archives%archiveentry}<br/>
22 <a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a> {archives%archiveentry} |
23 <a href="{url}help{sessionvars%urlparameter}">help</a>
24 <br/>
23 </div>
25 </div>
24
26
25 <div class="title">{path|escape} <span class="logtags">{inbranch%inbranchtag}{branches%branchtag}{tags%tagtag}</span></div>
27 <div class="title">{path|escape} <span class="logtags">{inbranch%inbranchtag}{branches%branchtag}{tags%tagtag}</span></div>
26 <table cellspacing="0">
28 <table cellspacing="0">
27 <tr class="parity{upparity}">
29 <tr class="parity{upparity}">
28 <td style="font-family:monospace">drwxr-xr-x</td>
30 <td style="font-family:monospace">drwxr-xr-x</td>
29 <td style="font-family:monospace"></td>
31 <td style="font-family:monospace"></td>
30 <td style="font-family:monospace"></td>
32 <td style="font-family:monospace"></td>
31 <td><a href="{url}file/{node|short}{up|urlescape}{sessionvars%urlparameter}">[up]</a></td>
33 <td><a href="{url}file/{node|short}{up|urlescape}{sessionvars%urlparameter}">[up]</a></td>
32 <td class="link">&nbsp;</td>
34 <td class="link">&nbsp;</td>
33 </tr>
35 </tr>
34 {dentries%direntry}
36 {dentries%direntry}
35 {fentries%fileentry}
37 {fentries%fileentry}
36 </table>
38 </table>
37
39
38 {footer}
40 {footer}
@@ -1,254 +1,260 b''
1 default = 'summary'
1 default = 'summary'
2 mimetype = 'text/html; charset={encoding}'
2 mimetype = 'text/html; charset={encoding}'
3 header = header.tmpl
3 header = header.tmpl
4 footer = footer.tmpl
4 footer = footer.tmpl
5 search = search.tmpl
5 search = search.tmpl
6 changelog = changelog.tmpl
6 changelog = changelog.tmpl
7 summary = summary.tmpl
7 summary = summary.tmpl
8 error = error.tmpl
8 error = error.tmpl
9 notfound = notfound.tmpl
9 notfound = notfound.tmpl
10
11 help = help.tmpl
12 helptopics = helptopics.tmpl
13
14 helpentry = '<tr><td><a href="{url}help/{topic|escape}{sessionvars%urlparameter}">{topic|escape}</a></td><td>{summary|escape}</td></tr>'
15
10 naventry = '<a href="{url}log/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
16 naventry = '<a href="{url}log/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
11 navshortentry = '<a href="{url}shortlog/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
17 navshortentry = '<a href="{url}shortlog/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
12 navgraphentry = '<a href="{url}graph/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
18 navgraphentry = '<a href="{url}graph/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
13 filenaventry = '<a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{label|escape}</a> '
19 filenaventry = '<a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{label|escape}</a> '
14 filedifflink = '<a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a> '
20 filedifflink = '<a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a> '
15 filenodelink = '
21 filenodelink = '
16 <tr class="parity{parity}">
22 <tr class="parity{parity}">
17 <td><a class="list" href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a></td>
23 <td><a class="list" href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a></td>
18 <td></td>
24 <td></td>
19 <td class="link">
25 <td class="link">
20 <a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a> |
26 <a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a> |
21 <a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a> |
27 <a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a> |
22 <a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a> |
28 <a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a> |
23 <a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">revisions</a>
29 <a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">revisions</a>
24 </td>
30 </td>
25 </tr>'
31 </tr>'
26 filenolink = '
32 filenolink = '
27 <tr class="parity{parity}">
33 <tr class="parity{parity}">
28 <td><a class="list" href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a></td>
34 <td><a class="list" href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a></td>
29 <td></td>
35 <td></td>
30 <td class="link">
36 <td class="link">
31 file |
37 file |
32 annotate |
38 annotate |
33 <a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a> |
39 <a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a> |
34 <a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">revisions</a>
40 <a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">revisions</a>
35 </td>
41 </td>
36 </tr>'
42 </tr>'
37
43
38 nav = '{before%naventry} {after%naventry}'
44 nav = '{before%naventry} {after%naventry}'
39 navshort = '{before%navshortentry}{after%navshortentry}'
45 navshort = '{before%navshortentry}{after%navshortentry}'
40 navgraph = '{before%navgraphentry}{after%navgraphentry}'
46 navgraph = '{before%navgraphentry}{after%navgraphentry}'
41 filenav = '{before%filenaventry}{after%filenaventry}'
47 filenav = '{before%filenaventry}{after%filenaventry}'
42
48
43 fileellipses = '...'
49 fileellipses = '...'
44 changelogentry = changelogentry.tmpl
50 changelogentry = changelogentry.tmpl
45 searchentry = changelogentry.tmpl
51 searchentry = changelogentry.tmpl
46 changeset = changeset.tmpl
52 changeset = changeset.tmpl
47 manifest = manifest.tmpl
53 manifest = manifest.tmpl
48 direntry = '
54 direntry = '
49 <tr class="parity{parity}">
55 <tr class="parity{parity}">
50 <td style="font-family:monospace">drwxr-xr-x</td>
56 <td style="font-family:monospace">drwxr-xr-x</td>
51 <td style="font-family:monospace"></td>
57 <td style="font-family:monospace"></td>
52 <td style="font-family:monospace"></td>
58 <td style="font-family:monospace"></td>
53 <td>
59 <td>
54 <a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">{basename|escape}</a>
60 <a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">{basename|escape}</a>
55 <a href="{url}file/{node|short}{path|urlescape}/{emptydirs|urlescape}{sessionvars%urlparameter}">{emptydirs|escape}</a>
61 <a href="{url}file/{node|short}{path|urlescape}/{emptydirs|urlescape}{sessionvars%urlparameter}">{emptydirs|escape}</a>
56 </td>
62 </td>
57 <td class="link">
63 <td class="link">
58 <a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">files</a>
64 <a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">files</a>
59 </td>
65 </td>
60 </tr>'
66 </tr>'
61 fileentry = '
67 fileentry = '
62 <tr class="parity{parity}">
68 <tr class="parity{parity}">
63 <td style="font-family:monospace">{permissions|permissions}</td>
69 <td style="font-family:monospace">{permissions|permissions}</td>
64 <td style="font-family:monospace" align=right>{date|isodate}</td>
70 <td style="font-family:monospace" align=right>{date|isodate}</td>
65 <td style="font-family:monospace" align=right>{size}</td>
71 <td style="font-family:monospace" align=right>{size}</td>
66 <td class="list">
72 <td class="list">
67 <a class="list" href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{basename|escape}</a>
73 <a class="list" href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{basename|escape}</a>
68 </td>
74 </td>
69 <td class="link">
75 <td class="link">
70 <a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a> |
76 <a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a> |
71 <a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">revisions</a> |
77 <a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">revisions</a> |
72 <a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a>
78 <a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a>
73 </td>
79 </td>
74 </tr>'
80 </tr>'
75 filerevision = filerevision.tmpl
81 filerevision = filerevision.tmpl
76 fileannotate = fileannotate.tmpl
82 fileannotate = fileannotate.tmpl
77 filediff = filediff.tmpl
83 filediff = filediff.tmpl
78 filelog = filelog.tmpl
84 filelog = filelog.tmpl
79 fileline = '
85 fileline = '
80 <div style="font-family:monospace" class="parity{parity}">
86 <div style="font-family:monospace" class="parity{parity}">
81 <pre><a class="linenr" href="#{lineid}" id="{lineid}">{linenumber}</a> {line|escape}</pre>
87 <pre><a class="linenr" href="#{lineid}" id="{lineid}">{linenumber}</a> {line|escape}</pre>
82 </div>'
88 </div>'
83 annotateline = '
89 annotateline = '
84 <tr style="font-family:monospace" class="parity{parity}">
90 <tr style="font-family:monospace" class="parity{parity}">
85 <td class="linenr" style="text-align: right;">
91 <td class="linenr" style="text-align: right;">
86 <a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}#l{targetline}"
92 <a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}#l{targetline}"
87 title="{node|short}: {desc|escape|firstline}">{author|user}@{rev}</a>
93 title="{node|short}: {desc|escape|firstline}">{author|user}@{rev}</a>
88 </td>
94 </td>
89 <td><pre><a class="linenr" href="#{lineid}" id="{lineid}">{linenumber}</a></pre></td>
95 <td><pre><a class="linenr" href="#{lineid}" id="{lineid}">{linenumber}</a></pre></td>
90 <td><pre>{line|escape}</pre></td>
96 <td><pre>{line|escape}</pre></td>
91 </tr>'
97 </tr>'
92 difflineplus = '<span style="color:#008800;"><a class="linenr" href="#{lineid}" id="{lineid}">{linenumber}</a> {line|escape}</span>'
98 difflineplus = '<span style="color:#008800;"><a class="linenr" href="#{lineid}" id="{lineid}">{linenumber}</a> {line|escape}</span>'
93 difflineminus = '<span style="color:#cc0000;"><a class="linenr" href="#{lineid}" id="{lineid}">{linenumber}</a> {line|escape}</span>'
99 difflineminus = '<span style="color:#cc0000;"><a class="linenr" href="#{lineid}" id="{lineid}">{linenumber}</a> {line|escape}</span>'
94 difflineat = '<span style="color:#990099;"><a class="linenr" href="#{lineid}" id="{lineid}">{linenumber}</a> {line|escape}</span>'
100 difflineat = '<span style="color:#990099;"><a class="linenr" href="#{lineid}" id="{lineid}">{linenumber}</a> {line|escape}</span>'
95 diffline = '<span><a class="linenr" href="#{lineid}" id="{lineid}">{linenumber}</a> {line|escape}</span>'
101 diffline = '<span><a class="linenr" href="#{lineid}" id="{lineid}">{linenumber}</a> {line|escape}</span>'
96 changelogparent = '
102 changelogparent = '
97 <tr>
103 <tr>
98 <th class="parent">parent {rev}:</th>
104 <th class="parent">parent {rev}:</th>
99 <td class="parent">
105 <td class="parent">
100 <a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a>
106 <a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a>
101 </td>
107 </td>
102 </tr>'
108 </tr>'
103 changesetbranch = '<tr><td>branch</td><td>{name}</td></tr>'
109 changesetbranch = '<tr><td>branch</td><td>{name}</td></tr>'
104 changesetparent = '
110 changesetparent = '
105 <tr>
111 <tr>
106 <td>parent {rev}</td>
112 <td>parent {rev}</td>
107 <td style="font-family:monospace">
113 <td style="font-family:monospace">
108 <a class="list" href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a>
114 <a class="list" href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a>
109 </td>
115 </td>
110 </tr>'
116 </tr>'
111 filerevbranch = '<tr><td>branch</td><td>{name}</td></tr>'
117 filerevbranch = '<tr><td>branch</td><td>{name}</td></tr>'
112 filerevparent = '
118 filerevparent = '
113 <tr>
119 <tr>
114 <td>parent {rev}</td>
120 <td>parent {rev}</td>
115 <td style="font-family:monospace">
121 <td style="font-family:monospace">
116 <a class="list" href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
122 <a class="list" href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
117 {rename%filerename}{node|short}
123 {rename%filerename}{node|short}
118 </a>
124 </a>
119 </td>
125 </td>
120 </tr>'
126 </tr>'
121 filerename = '{file|escape}@'
127 filerename = '{file|escape}@'
122 filelogrename = '| <a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">base</a>'
128 filelogrename = '| <a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">base</a>'
123 fileannotateparent = '
129 fileannotateparent = '
124 <tr>
130 <tr>
125 <td>parent {rev}</td>
131 <td>parent {rev}</td>
126 <td style="font-family:monospace">
132 <td style="font-family:monospace">
127 <a class="list" href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
133 <a class="list" href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
128 {rename%filerename}{node|short}
134 {rename%filerename}{node|short}
129 </a>
135 </a>
130 </td>
136 </td>
131 </tr>'
137 </tr>'
132 changelogchild = '
138 changelogchild = '
133 <tr>
139 <tr>
134 <th class="child">child {rev}:</th>
140 <th class="child">child {rev}:</th>
135 <td class="child"><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td>
141 <td class="child"><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td>
136 </tr>'
142 </tr>'
137 changesetchild = '
143 changesetchild = '
138 <tr>
144 <tr>
139 <td>child {rev}</td>
145 <td>child {rev}</td>
140 <td style="font-family:monospace">
146 <td style="font-family:monospace">
141 <a class="list" href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a>
147 <a class="list" href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a>
142 </td>
148 </td>
143 </tr>'
149 </tr>'
144 filerevchild = '
150 filerevchild = '
145 <tr>
151 <tr>
146 <td>child {rev}</td>
152 <td>child {rev}</td>
147 <td style="font-family:monospace">
153 <td style="font-family:monospace">
148 <a class="list" href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></td>
154 <a class="list" href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></td>
149 </tr>'
155 </tr>'
150 fileannotatechild = '
156 fileannotatechild = '
151 <tr>
157 <tr>
152 <td>child {rev}</td>
158 <td>child {rev}</td>
153 <td style="font-family:monospace">
159 <td style="font-family:monospace">
154 <a class="list" href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></td>
160 <a class="list" href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></td>
155 </tr>'
161 </tr>'
156 tags = tags.tmpl
162 tags = tags.tmpl
157 tagentry = '
163 tagentry = '
158 <tr class="parity{parity}">
164 <tr class="parity{parity}">
159 <td class="age"><i>{date|age}</i></td>
165 <td class="age"><i>{date|age}</i></td>
160 <td><a class="list" href="{url}rev/{node|short}{sessionvars%urlparameter}"><b>{tag|escape}</b></a></td>
166 <td><a class="list" href="{url}rev/{node|short}{sessionvars%urlparameter}"><b>{tag|escape}</b></a></td>
161 <td class="link">
167 <td class="link">
162 <a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a> |
168 <a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a> |
163 <a href="{url}log/{node|short}{sessionvars%urlparameter}">changelog</a> |
169 <a href="{url}log/{node|short}{sessionvars%urlparameter}">changelog</a> |
164 <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>
170 <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>
165 </td>
171 </td>
166 </tr>'
172 </tr>'
167 branches = branches.tmpl
173 branches = branches.tmpl
168 branchentry = '
174 branchentry = '
169 <tr class="parity{parity}">
175 <tr class="parity{parity}">
170 <td class="age"><i>{date|age}</i></td>
176 <td class="age"><i>{date|age}</i></td>
171 <td><a class="list" href="{url}shortlog/{node|short}{sessionvars%urlparameter}"><b>{node|short}</b></a></td>
177 <td><a class="list" href="{url}shortlog/{node|short}{sessionvars%urlparameter}"><b>{node|short}</b></a></td>
172 <td class="{status}">{branch|escape}</td>
178 <td class="{status}">{branch|escape}</td>
173 <td class="link">
179 <td class="link">
174 <a href="{url}changeset/{node|short}{sessionvars%urlparameter}">changeset</a> |
180 <a href="{url}changeset/{node|short}{sessionvars%urlparameter}">changeset</a> |
175 <a href="{url}log/{node|short}{sessionvars%urlparameter}">changelog</a> |
181 <a href="{url}log/{node|short}{sessionvars%urlparameter}">changelog</a> |
176 <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>
182 <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>
177 </td>
183 </td>
178 </tr>'
184 </tr>'
179 diffblock = '<pre>{lines}</pre>'
185 diffblock = '<pre>{lines}</pre>'
180 filediffparent = '
186 filediffparent = '
181 <tr>
187 <tr>
182 <td>parent {rev}</td>
188 <td>parent {rev}</td>
183 <td style="font-family:monospace">
189 <td style="font-family:monospace">
184 <a class="list" href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
190 <a class="list" href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
185 {node|short}
191 {node|short}
186 </a>
192 </a>
187 </td>
193 </td>
188 </tr>'
194 </tr>'
189 filelogparent = '
195 filelogparent = '
190 <tr>
196 <tr>
191 <td align="right">parent {rev}:&nbsp;</td>
197 <td align="right">parent {rev}:&nbsp;</td>
192 <td><a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></td>
198 <td><a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></td>
193 </tr>'
199 </tr>'
194 filediffchild = '
200 filediffchild = '
195 <tr>
201 <tr>
196 <td>child {rev}</td>
202 <td>child {rev}</td>
197 <td style="font-family:monospace">
203 <td style="font-family:monospace">
198 <a class="list" href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a>
204 <a class="list" href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a>
199 </td>
205 </td>
200 </tr>'
206 </tr>'
201 filelogchild = '
207 filelogchild = '
202 <tr>
208 <tr>
203 <td align="right">child {rev}:&nbsp;</td>
209 <td align="right">child {rev}:&nbsp;</td>
204 <td><a href="{url}file{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></td>
210 <td><a href="{url}file{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></td>
205 </tr>'
211 </tr>'
206 shortlog = shortlog.tmpl
212 shortlog = shortlog.tmpl
207 graph = graph.tmpl
213 graph = graph.tmpl
208 tagtag = '<span class="tagtag" title="{name}">{name}</span> '
214 tagtag = '<span class="tagtag" title="{name}">{name}</span> '
209 branchtag = '<span class="branchtag" title="{name}">{name}</span> '
215 branchtag = '<span class="branchtag" title="{name}">{name}</span> '
210 inbranchtag = '<span class="inbranchtag" title="{name}">{name}</span> '
216 inbranchtag = '<span class="inbranchtag" title="{name}">{name}</span> '
211 shortlogentry = '
217 shortlogentry = '
212 <tr class="parity{parity}">
218 <tr class="parity{parity}">
213 <td class="age"><i>{date|age}</i></td>
219 <td class="age"><i>{date|age}</i></td>
214 <td><i>{author|person}</i></td>
220 <td><i>{author|person}</i></td>
215 <td>
221 <td>
216 <a class="list" href="{url}rev/{node|short}{sessionvars%urlparameter}">
222 <a class="list" href="{url}rev/{node|short}{sessionvars%urlparameter}">
217 <b>{desc|strip|firstline|escape|nonempty}</b>
223 <b>{desc|strip|firstline|escape|nonempty}</b>
218 <span class="logtags">{inbranch%inbranchtag}{branches%branchtag}{tags%tagtag}</span>
224 <span class="logtags">{inbranch%inbranchtag}{branches%branchtag}{tags%tagtag}</span>
219 </a>
225 </a>
220 </td>
226 </td>
221 <td class="link" nowrap>
227 <td class="link" nowrap>
222 <a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a> |
228 <a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a> |
223 <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>
229 <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>
224 </td>
230 </td>
225 </tr>'
231 </tr>'
226 filelogentry = '
232 filelogentry = '
227 <tr class="parity{parity}">
233 <tr class="parity{parity}">
228 <td class="age"><i>{date|age}</i></td>
234 <td class="age"><i>{date|age}</i></td>
229 <td>
235 <td>
230 <a class="list" href="{url}rev/{node|short}{sessionvars%urlparameter}">
236 <a class="list" href="{url}rev/{node|short}{sessionvars%urlparameter}">
231 <b>{desc|strip|firstline|escape|nonempty}</b>
237 <b>{desc|strip|firstline|escape|nonempty}</b>
232 </a>
238 </a>
233 </td>
239 </td>
234 <td class="link">
240 <td class="link">
235 <a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a>&nbsp;|&nbsp;<a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a>&nbsp;|&nbsp;<a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a> {rename%filelogrename}</td>
241 <a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a>&nbsp;|&nbsp;<a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a>&nbsp;|&nbsp;<a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a> {rename%filelogrename}</td>
236 </tr>'
242 </tr>'
237 archiveentry = ' | <a href="{url}archive/{node|short}{extension}">{type|escape}</a> '
243 archiveentry = ' | <a href="{url}archive/{node|short}{extension}">{type|escape}</a> '
238 indexentry = '
244 indexentry = '
239 <tr class="parity{parity}">
245 <tr class="parity{parity}">
240 <td>
246 <td>
241 <a class="list" href="{url}{sessionvars%urlparameter}">
247 <a class="list" href="{url}{sessionvars%urlparameter}">
242 <b>{name|escape}</b>
248 <b>{name|escape}</b>
243 </a>
249 </a>
244 </td>
250 </td>
245 <td>{description}</td>
251 <td>{description}</td>
246 <td>{contact|obfuscate}</td>
252 <td>{contact|obfuscate}</td>
247 <td class="age">{lastchange|age}</td>
253 <td class="age">{lastchange|age}</td>
248 <td class="indexlinks">{archives%indexarchiveentry}</td>
254 <td class="indexlinks">{archives%indexarchiveentry}</td>
249 <td><div class="rss_logo"><a href="{url}rss-log">RSS</a> <a href="{url}atom-log">Atom</a></div></td>
255 <td><div class="rss_logo"><a href="{url}rss-log">RSS</a> <a href="{url}atom-log">Atom</a></div></td>
250 </tr>\n'
256 </tr>\n'
251 indexarchiveentry = ' <a href="{url}archive/{node|short}{extension}">{type|escape}</a> '
257 indexarchiveentry = ' <a href="{url}archive/{node|short}{extension}">{type|escape}</a> '
252 index = index.tmpl
258 index = index.tmpl
253 urlparameter = '{separator}{name}={value|urlescape}'
259 urlparameter = '{separator}{name}={value|urlescape}'
254 hiddenformentry = '<input type="hidden" name="{name}" value="{value|escape}" />'
260 hiddenformentry = '<input type="hidden" name="{name}" value="{value|escape}" />'
@@ -1,40 +1,41 b''
1 {header}
1 {header}
2 <title>{repo|escape}: Shortlog</title>
2 <title>{repo|escape}: Shortlog</title>
3 <link rel="alternate" type="application/atom+xml"
3 <link rel="alternate" type="application/atom+xml"
4 href="{url}atom-log" title="Atom feed for {repo|escape}"/>
4 href="{url}atom-log" title="Atom feed for {repo|escape}"/>
5 <link rel="alternate" type="application/rss+xml"
5 <link rel="alternate" type="application/rss+xml"
6 href="{url}rss-log" title="RSS feed for {repo|escape}"/>
6 href="{url}rss-log" title="RSS feed for {repo|escape}"/>
7 </head>
7 </head>
8 <body>
8 <body>
9
9
10 <div class="page_header">
10 <div class="page_header">
11 <a href="http://mercurial.selenic.com/" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / shortlog
11 <a href="http://mercurial.selenic.com/" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / shortlog
12 </div>
12 </div>
13
13
14 <form action="{url}log">
14 <form action="{url}log">
15 {sessionvars%hiddenformentry}
15 {sessionvars%hiddenformentry}
16 <div class="search">
16 <div class="search">
17 <input type="text" name="rev" />
17 <input type="text" name="rev" />
18 </div>
18 </div>
19 </form>
19 </form>
20 <div class="page_nav">
20 <div class="page_nav">
21 <a href="{url}summary{sessionvars%urlparameter}">summary</a> |
21 <a href="{url}summary{sessionvars%urlparameter}">summary</a> |
22 shortlog |
22 shortlog |
23 <a href="{url}log/{rev}{sessionvars%urlparameter}">changelog</a> |
23 <a href="{url}log/{rev}{sessionvars%urlparameter}">changelog</a> |
24 <a href="{url}graph{sessionvars%urlparameter}">graph</a> |
24 <a href="{url}graph{sessionvars%urlparameter}">graph</a> |
25 <a href="{url}tags{sessionvars%urlparameter}">tags</a> |
25 <a href="{url}tags{sessionvars%urlparameter}">tags</a> |
26 <a href="{url}branches{sessionvars%urlparameter}">branches</a> |
26 <a href="{url}branches{sessionvars%urlparameter}">branches</a> |
27 <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>{archives%archiveentry}
27 <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>{archives%archiveentry} |
28 <a href="{url}help{sessionvars%urlparameter}">help</a>
28 <br/>{changenav%navshort}<br/>
29 <br/>{changenav%navshort}<br/>
29 </div>
30 </div>
30
31
31 <div class="title">&nbsp;</div>
32 <div class="title">&nbsp;</div>
32 <table cellspacing="0">
33 <table cellspacing="0">
33 {entries%shortlogentry}
34 {entries%shortlogentry}
34 </table>
35 </table>
35
36
36 <div class="page_nav">
37 <div class="page_nav">
37 {changenav%navshort}
38 {changenav%navshort}
38 </div>
39 </div>
39
40
40 {footer}
41 {footer}
@@ -1,58 +1,59 b''
1 {header}
1 {header}
2 <title>{repo|escape}: Summary</title>
2 <title>{repo|escape}: Summary</title>
3 <link rel="alternate" type="application/atom+xml"
3 <link rel="alternate" type="application/atom+xml"
4 href="{url}atom-log" title="Atom feed for {repo|escape}"/>
4 href="{url}atom-log" title="Atom feed for {repo|escape}"/>
5 <link rel="alternate" type="application/rss+xml"
5 <link rel="alternate" type="application/rss+xml"
6 href="{url}rss-log" title="RSS feed for {repo|escape}"/>
6 href="{url}rss-log" title="RSS feed for {repo|escape}"/>
7 </head>
7 </head>
8 <body>
8 <body>
9
9
10 <div class="page_header">
10 <div class="page_header">
11 <a href="http://mercurial.selenic.com/" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / summary
11 <a href="http://mercurial.selenic.com/" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / summary
12
12
13 <form action="{url}log">
13 <form action="{url}log">
14 {sessionvars%hiddenformentry}
14 {sessionvars%hiddenformentry}
15 <div class="search">
15 <div class="search">
16 <input type="text" name="rev" />
16 <input type="text" name="rev" />
17 </div>
17 </div>
18 </form>
18 </form>
19 </div>
19 </div>
20
20
21 <div class="page_nav">
21 <div class="page_nav">
22 summary |
22 summary |
23 <a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a> |
23 <a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a> |
24 <a href="{url}log{sessionvars%urlparameter}">changelog</a> |
24 <a href="{url}log{sessionvars%urlparameter}">changelog</a> |
25 <a href="{url}graph{sessionvars%urlparameter}">graph</a> |
25 <a href="{url}graph{sessionvars%urlparameter}">graph</a> |
26 <a href="{url}tags{sessionvars%urlparameter}">tags</a> |
26 <a href="{url}tags{sessionvars%urlparameter}">tags</a> |
27 <a href="{url}branches{sessionvars%urlparameter}">branches</a> |
27 <a href="{url}branches{sessionvars%urlparameter}">branches</a> |
28 <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>{archives%archiveentry}
28 <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>{archives%archiveentry} |
29 <a href="{url}help{sessionvars%urlparameter}">help</a>
29 <br/>
30 <br/>
30 </div>
31 </div>
31
32
32 <div class="title">&nbsp;</div>
33 <div class="title">&nbsp;</div>
33 <table cellspacing="0">
34 <table cellspacing="0">
34 <tr><td>description</td><td>{desc}</td></tr>
35 <tr><td>description</td><td>{desc}</td></tr>
35 <tr><td>owner</td><td>{owner|obfuscate}</td></tr>
36 <tr><td>owner</td><td>{owner|obfuscate}</td></tr>
36 <tr><td>last change</td><td>{lastchange|rfc822date}</td></tr>
37 <tr><td>last change</td><td>{lastchange|rfc822date}</td></tr>
37 </table>
38 </table>
38
39
39 <div><a class="title" href="{url}shortlog{sessionvars%urlparameter}">changes</a></div>
40 <div><a class="title" href="{url}shortlog{sessionvars%urlparameter}">changes</a></div>
40 <table cellspacing="0">
41 <table cellspacing="0">
41 {shortlog}
42 {shortlog}
42 <tr class="light"><td colspan="4"><a class="list" href="{url}shortlog{sessionvars%urlparameter}">...</a></td></tr>
43 <tr class="light"><td colspan="4"><a class="list" href="{url}shortlog{sessionvars%urlparameter}">...</a></td></tr>
43 </table>
44 </table>
44
45
45 <div><a class="title" href="{url}tags{sessionvars%urlparameter}">tags</a></div>
46 <div><a class="title" href="{url}tags{sessionvars%urlparameter}">tags</a></div>
46 <table cellspacing="0">
47 <table cellspacing="0">
47 {tags}
48 {tags}
48 <tr class="light"><td colspan="3"><a class="list" href="{url}tags{sessionvars%urlparameter}">...</a></td></tr>
49 <tr class="light"><td colspan="3"><a class="list" href="{url}tags{sessionvars%urlparameter}">...</a></td></tr>
49 </table>
50 </table>
50
51
51 <div><a class="title" href="#">branches</a></div>
52 <div><a class="title" href="#">branches</a></div>
52 <table cellspacing="0">
53 <table cellspacing="0">
53 {branches%branchentry}
54 {branches%branchentry}
54 <tr class="light">
55 <tr class="light">
55 <td colspan="4"><a class="list" href="#">...</a></td>
56 <td colspan="4"><a class="list" href="#">...</a></td>
56 </tr>
57 </tr>
57 </table>
58 </table>
58 {footer}
59 {footer}
@@ -1,30 +1,31 b''
1 {header}
1 {header}
2 <title>{repo|escape}: Tags</title>
2 <title>{repo|escape}: Tags</title>
3 <link rel="alternate" type="application/atom+xml"
3 <link rel="alternate" type="application/atom+xml"
4 href="{url}atom-tags" title="Atom feed for {repo|escape}"/>
4 href="{url}atom-tags" title="Atom feed for {repo|escape}"/>
5 <link rel="alternate" type="application/rss+xml"
5 <link rel="alternate" type="application/rss+xml"
6 href="{url}rss-tags" title="RSS feed for {repo|escape}"/>
6 href="{url}rss-tags" title="RSS feed for {repo|escape}"/>
7 </head>
7 </head>
8 <body>
8 <body>
9
9
10 <div class="page_header">
10 <div class="page_header">
11 <a href="http://mercurial.selenic.com/" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / tags
11 <a href="http://mercurial.selenic.com/" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / tags
12 </div>
12 </div>
13
13
14 <div class="page_nav">
14 <div class="page_nav">
15 <a href="{url}summary{sessionvars%urlparameter}">summary</a> |
15 <a href="{url}summary{sessionvars%urlparameter}">summary</a> |
16 <a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a> |
16 <a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a> |
17 <a href="{url}log{sessionvars%urlparameter}">changelog</a> |
17 <a href="{url}log{sessionvars%urlparameter}">changelog</a> |
18 <a href="{url}graph{sessionvars%urlparameter}">graph</a> |
18 <a href="{url}graph{sessionvars%urlparameter}">graph</a> |
19 tags |
19 tags |
20 <a href="{url}branches{sessionvars%urlparameter}">branches</a> |
20 <a href="{url}branches{sessionvars%urlparameter}">branches</a> |
21 <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>
21 <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a> |
22 <a href="{url}help{sessionvars%urlparameter}">help</a>
22 <br/>
23 <br/>
23 </div>
24 </div>
24
25
25 <div class="title">&nbsp;</div>
26 <div class="title">&nbsp;</div>
26 <table cellspacing="0">
27 <table cellspacing="0">
27 {entries%tagentry}
28 {entries%tagentry}
28 </table>
29 </table>
29
30
30 {footer}
31 {footer}
@@ -1,36 +1,37 b''
1 {header}
1 {header}
2 <title>{repo|escape}: Branches</title>
2 <title>{repo|escape}: Branches</title>
3 <link rel="alternate" type="application/atom+xml" href="{url}atom-log" title="Atom feed for {repo|escape}"/>
3 <link rel="alternate" type="application/atom+xml" href="{url}atom-log" title="Atom feed for {repo|escape}"/>
4 <link rel="alternate" type="application/rss+xml" href="{url}rss-log" title="RSS feed for {repo|escape}"/>
4 <link rel="alternate" type="application/rss+xml" href="{url}rss-log" title="RSS feed for {repo|escape}"/>
5 </head>
5 </head>
6
6
7 <body>
7 <body>
8 <div id="container">
8 <div id="container">
9 <div class="page-header">
9 <div class="page-header">
10 <h1><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / Branches</h1>
10 <h1><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / Branches</h1>
11
11
12 <form action="{url}log">
12 <form action="{url}log">
13 {sessionvars%hiddenformentry}
13 {sessionvars%hiddenformentry}
14 <dl class="search">
14 <dl class="search">
15 <dt><label>Search: </label></dt>
15 <dt><label>Search: </label></dt>
16 <dd><input type="text" name="rev" /></dd>
16 <dd><input type="text" name="rev" /></dd>
17 </dl>
17 </dl>
18 </form>
18 </form>
19
19
20 <ul class="page-nav">
20 <ul class="page-nav">
21 <li><a href="{url}summary{sessionvars%urlparameter}">summary</a></li>
21 <li><a href="{url}summary{sessionvars%urlparameter}">summary</a></li>
22 <li><a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a></li>
22 <li><a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a></li>
23 <li><a href="{url}changelog{sessionvars%urlparameter}">changelog</a></li>
23 <li><a href="{url}changelog{sessionvars%urlparameter}">changelog</a></li>
24 <li><a href="{url}graph/{node|short}{sessionvars%urlparameter}">graph</a></li>
24 <li><a href="{url}graph/{node|short}{sessionvars%urlparameter}">graph</a></li>
25 <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
25 <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
26 <li class="current">branches</li>
26 <li class="current">branches</li>
27 <li><a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a></li>
27 <li><a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a></li>
28 <li><a href="{url}help{sessionvars%urlparameter}">help</a></li>
28 </ul>
29 </ul>
29 </div>
30 </div>
30
31
31 <h2 class="no-link no-border">branches</h2>
32 <h2 class="no-link no-border">branches</h2>
32 <table cellspacing="0">
33 <table cellspacing="0">
33 {entries%branchentry}
34 {entries%branchentry}
34 </table>
35 </table>
35
36
36 {footer}
37 {footer}
@@ -1,40 +1,41 b''
1 {header}
1 {header}
2 <title>{repo|escape}: changelog</title>
2 <title>{repo|escape}: changelog</title>
3 <link rel="alternate" type="application/atom+xml" href="{url}atom-log" title="Atom feed for {repo|escape}"/>
3 <link rel="alternate" type="application/atom+xml" href="{url}atom-log" title="Atom feed for {repo|escape}"/>
4 <link rel="alternate" type="application/rss+xml" href="{url}rss-log" title="RSS feed for {repo|escape}"/>
4 <link rel="alternate" type="application/rss+xml" href="{url}rss-log" title="RSS feed for {repo|escape}"/>
5 </head>
5 </head>
6
6
7 <body>
7 <body>
8 <div id="container">
8 <div id="container">
9 <div class="page-header">
9 <div class="page-header">
10 <h1><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / changelog</h1>
10 <h1><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / changelog</h1>
11
11
12 <form action="{url}log">
12 <form action="{url}log">
13 {sessionvars%hiddenformentry}
13 {sessionvars%hiddenformentry}
14 <dl class="search">
14 <dl class="search">
15 <dt><label>Search: </label></dt>
15 <dt><label>Search: </label></dt>
16 <dd><input type="text" name="rev" /></dd>
16 <dd><input type="text" name="rev" /></dd>
17 </dl>
17 </dl>
18 </form>
18 </form>
19
19
20 <ul class="page-nav">
20 <ul class="page-nav">
21 <li><a href="{url}summary{sessionvars%urlparameter}">summary</a></li>
21 <li><a href="{url}summary{sessionvars%urlparameter}">summary</a></li>
22 <li><a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a></li>
22 <li><a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a></li>
23 <li class="current">changelog</li>
23 <li class="current">changelog</li>
24 <li><a href="{url}graph/{node|short}{sessionvars%urlparameter}">graph</a></li>
24 <li><a href="{url}graph/{node|short}{sessionvars%urlparameter}">graph</a></li>
25 <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
25 <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
26 <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
26 <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
27 <li><a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>{archives%archiveentry}</li>
27 <li><a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>{archives%archiveentry}</li>
28 <li><a href="{url}help{sessionvars%urlparameter}">help</a></li>
28 </ul>
29 </ul>
29 </div>
30 </div>
30
31
31 <h2 class="no-link no-border">changelog</h2>
32 <h2 class="no-link no-border">changelog</h2>
32 <div>
33 <div>
33 {entries%changelogentry}
34 {entries%changelogentry}
34 </div>
35 </div>
35
36
36 <div class="page-path">
37 <div class="page-path">
37 {changenav%nav}
38 {changenav%nav}
38 </div>
39 </div>
39
40
40 {footer}
41 {footer}
@@ -1,118 +1,119 b''
1 {header}
1 {header}
2 <title>{repo|escape}: graph</title>
2 <title>{repo|escape}: graph</title>
3 <link rel="alternate" type="application/atom+xml" href="{url}atom-log" title="Atom feed for {repo|escape}"/>
3 <link rel="alternate" type="application/atom+xml" href="{url}atom-log" title="Atom feed for {repo|escape}"/>
4 <link rel="alternate" type="application/rss+xml" href="{url}rss-log" title="RSS feed for {repo|escape}"/>
4 <link rel="alternate" type="application/rss+xml" href="{url}rss-log" title="RSS feed for {repo|escape}"/>
5 <!--[if IE]><script type="text/javascript" src="{staticurl}excanvas.js"></script><![endif]-->
5 <!--[if IE]><script type="text/javascript" src="{staticurl}excanvas.js"></script><![endif]-->
6 </head>
6 </head>
7
7
8 <body>
8 <body>
9 <div id="container">
9 <div id="container">
10 <div class="page-header">
10 <div class="page-header">
11 <h1><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / graph</h1>
11 <h1><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / graph</h1>
12
12
13 <form action="{url}log">
13 <form action="{url}log">
14 {sessionvars%hiddenformentry}
14 {sessionvars%hiddenformentry}
15 <dl class="search">
15 <dl class="search">
16 <dt><label>Search: </label></dt>
16 <dt><label>Search: </label></dt>
17 <dd><input type="text" name="rev" /></dd>
17 <dd><input type="text" name="rev" /></dd>
18 </dl>
18 </dl>
19 </form>
19 </form>
20
20
21 <ul class="page-nav">
21 <ul class="page-nav">
22 <li><a href="{url}summary{sessionvars%urlparameter}">summary</a></li>
22 <li><a href="{url}summary{sessionvars%urlparameter}">summary</a></li>
23 <li><a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a></li>
23 <li><a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a></li>
24 <li><a href="{url}changelog{sessionvars%urlparameter}">changelog</a></li>
24 <li><a href="{url}changelog{sessionvars%urlparameter}">changelog</a></li>
25 <li class="current">graph</li>
25 <li class="current">graph</li>
26 <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
26 <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
27 <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
27 <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
28 <li><a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a></li>
28 <li><a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a></li>
29 <li><a href="{url}help{sessionvars%urlparameter}">help</a></li>
29 </ul>
30 </ul>
30 </div>
31 </div>
31
32
32 <h2 class="no-link no-border">graph</h2>
33 <h2 class="no-link no-border">graph</h2>
33
34
34 <div id="noscript">The revision graph only works with JavaScript-enabled browsers.</div>
35 <div id="noscript">The revision graph only works with JavaScript-enabled browsers.</div>
35 <div id="wrapper">
36 <div id="wrapper">
36 <ul id="nodebgs"></ul>
37 <ul id="nodebgs"></ul>
37 <canvas id="graph" width="224" height="{canvasheight}"></canvas>
38 <canvas id="graph" width="224" height="{canvasheight}"></canvas>
38 <ul id="graphnodes"></ul>
39 <ul id="graphnodes"></ul>
39 </div>
40 </div>
40
41
41 <script type="text/javascript" src="{staticurl}graph.js"></script>
42 <script type="text/javascript" src="{staticurl}graph.js"></script>
42 <script>
43 <script>
43 <!-- hide script content
44 <!-- hide script content
44
45
45 document.getElementById('noscript').style.display = 'none';
46 document.getElementById('noscript').style.display = 'none';
46
47
47 var data = {jsdata|json};
48 var data = {jsdata|json};
48 var graph = new Graph();
49 var graph = new Graph();
49 graph.scale({bg_height});
50 graph.scale({bg_height});
50
51
51 graph.edge = function(x0, y0, x1, y1, color) \{
52 graph.edge = function(x0, y0, x1, y1, color) \{
52
53
53 this.setColor(color, 0.0, 0.65);
54 this.setColor(color, 0.0, 0.65);
54 this.ctx.beginPath();
55 this.ctx.beginPath();
55 this.ctx.moveTo(x0, y0);
56 this.ctx.moveTo(x0, y0);
56 this.ctx.lineTo(x1, y1);
57 this.ctx.lineTo(x1, y1);
57 this.ctx.stroke();
58 this.ctx.stroke();
58
59
59 }
60 }
60
61
61 var revlink = '<li style="_STYLE"><span class="desc">';
62 var revlink = '<li style="_STYLE"><span class="desc">';
62 revlink += '<a href="{url}rev/_NODEID{sessionvars%urlparameter}" title="_NODEID">_DESC</a>';
63 revlink += '<a href="{url}rev/_NODEID{sessionvars%urlparameter}" title="_NODEID">_DESC</a>';
63 revlink += '</span>_TAGS<span class="info">_DATE, by _USER</span></li>';
64 revlink += '</span>_TAGS<span class="info">_DATE, by _USER</span></li>';
64
65
65 graph.vertex = function(x, y, color, parity, cur) \{
66 graph.vertex = function(x, y, color, parity, cur) \{
66
67
67 this.ctx.beginPath();
68 this.ctx.beginPath();
68 color = this.setColor(color, 0.25, 0.75);
69 color = this.setColor(color, 0.25, 0.75);
69 this.ctx.arc(x, y, radius, 0, Math.PI * 2, true);
70 this.ctx.arc(x, y, radius, 0, Math.PI * 2, true);
70 this.ctx.fill();
71 this.ctx.fill();
71
72
72 var bg = '<li class="bg parity' + parity + '"></li>';
73 var bg = '<li class="bg parity' + parity + '"></li>';
73 var left = (this.columns + 1) * this.bg_height;
74 var left = (this.columns + 1) * this.bg_height;
74 var nstyle = 'padding-left: ' + left + 'px;';
75 var nstyle = 'padding-left: ' + left + 'px;';
75 var item = revlink.replace(/_STYLE/, nstyle);
76 var item = revlink.replace(/_STYLE/, nstyle);
76 item = item.replace(/_PARITY/, 'parity' + parity);
77 item = item.replace(/_PARITY/, 'parity' + parity);
77 item = item.replace(/_NODEID/, cur[0]);
78 item = item.replace(/_NODEID/, cur[0]);
78 item = item.replace(/_NODEID/, cur[0]);
79 item = item.replace(/_NODEID/, cur[0]);
79 item = item.replace(/_DESC/, cur[3]);
80 item = item.replace(/_DESC/, cur[3]);
80 item = item.replace(/_USER/, cur[4]);
81 item = item.replace(/_USER/, cur[4]);
81 item = item.replace(/_DATE/, cur[5]);
82 item = item.replace(/_DATE/, cur[5]);
82
83
83 var tagspan = '';
84 var tagspan = '';
84 if (cur[7].length || (cur[6][0] != 'default' || cur[6][1])) \{
85 if (cur[7].length || (cur[6][0] != 'default' || cur[6][1])) \{
85 tagspan = '<span class="logtags">';
86 tagspan = '<span class="logtags">';
86 if (cur[6][1]) \{
87 if (cur[6][1]) \{
87 tagspan += '<span class="branchtag" title="' + cur[6][0] + '">';
88 tagspan += '<span class="branchtag" title="' + cur[6][0] + '">';
88 tagspan += cur[6][0] + '</span> ';
89 tagspan += cur[6][0] + '</span> ';
89 } else if (!cur[6][1] && cur[6][0] != 'default') \{
90 } else if (!cur[6][1] && cur[6][0] != 'default') \{
90 tagspan += '<span class="inbranchtag" title="' + cur[6][0] + '">';
91 tagspan += '<span class="inbranchtag" title="' + cur[6][0] + '">';
91 tagspan += cur[6][0] + '</span> ';
92 tagspan += cur[6][0] + '</span> ';
92 }
93 }
93 if (cur[7].length) \{
94 if (cur[7].length) \{
94 for (var t in cur[7]) \{
95 for (var t in cur[7]) \{
95 var tag = cur[7][t];
96 var tag = cur[7][t];
96 tagspan += '<span class="tagtag">' + tag + '</span> ';
97 tagspan += '<span class="tagtag">' + tag + '</span> ';
97 }
98 }
98 }
99 }
99 tagspan += '</span>';
100 tagspan += '</span>';
100 }
101 }
101
102
102 item = item.replace(/_TAGS/, tagspan);
103 item = item.replace(/_TAGS/, tagspan);
103 return [bg, item];
104 return [bg, item];
104
105
105 }
106 }
106
107
107 graph.render(data);
108 graph.render(data);
108
109
109 // stop hiding script -->
110 // stop hiding script -->
110 </script>
111 </script>
111
112
112 <div class="page-path">
113 <div class="page-path">
113 <a href="{url}graph/{rev}{lessvars%urlparameter}">less</a>
114 <a href="{url}graph/{rev}{lessvars%urlparameter}">less</a>
114 <a href="{url}graph/{rev}{morevars%urlparameter}">more</a>
115 <a href="{url}graph/{rev}{morevars%urlparameter}">more</a>
115 | {changenav%navgraph}
116 | {changenav%navgraph}
116 </div>
117 </div>
117
118
118 {footer}
119 {footer}
@@ -1,36 +1,37 b''
1 {header}
1 {header}
2 <title>{repo|escape}: Branches</title>
2 <title>{repo|escape}: Branches</title>
3 <link rel="alternate" type="application/atom+xml" href="{url}atom-log" title="Atom feed for {repo|escape}"/>
3 <link rel="alternate" type="application/atom+xml" href="{url}atom-log" title="Atom feed for {repo|escape}"/>
4 <link rel="alternate" type="application/rss+xml" href="{url}rss-log" title="RSS feed for {repo|escape}"/>
4 <link rel="alternate" type="application/rss+xml" href="{url}rss-log" title="RSS feed for {repo|escape}"/>
5 </head>
5 </head>
6
6
7 <body>
7 <body>
8 <div id="container">
8 <div id="container">
9 <div class="page-header">
9 <div class="page-header">
10 <h1><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / Branches</h1>
10 <h1><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / Branches</h1>
11
11
12 <form action="{url}log">
12 <form action="{url}log">
13 {sessionvars%hiddenformentry}
13 {sessionvars%hiddenformentry}
14 <dl class="search">
14 <dl class="search">
15 <dt><label>Search: </label></dt>
15 <dt><label>Search: </label></dt>
16 <dd><input type="text" name="rev" /></dd>
16 <dd><input type="text" name="rev" /></dd>
17 </dl>
17 </dl>
18 </form>
18 </form>
19
19
20 <ul class="page-nav">
20 <ul class="page-nav">
21 <li><a href="{url}summary{sessionvars%urlparameter}">summary</a></li>
21 <li><a href="{url}summary{sessionvars%urlparameter}">summary</a></li>
22 <li><a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a></li>
22 <li><a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a></li>
23 <li><a href="{url}changelog{sessionvars%urlparameter}">changelog</a></li>
23 <li><a href="{url}changelog{sessionvars%urlparameter}">changelog</a></li>
24 <li><a href="{url}graph/{node|short}{sessionvars%urlparameter}">graph</a></li>
24 <li><a href="{url}graph/{node|short}{sessionvars%urlparameter}">graph</a></li>
25 <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
25 <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
26 <li class="current">branches</li>
26 <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
27 <li><a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a></li>
27 <li><a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a></li>
28 <li class="current">help</li>
28 </ul>
29 </ul>
29 </div>
30 </div>
30
31
31 <h2 class="no-link no-border">branches</h2>
32 <h2 class="no-link no-border">branches</h2>
32 <table cellspacing="0">
33 <pre>
33 {entries%branchentry}
34 {doc|escape}
34 </table>
35 </pre>
35
36
36 {footer}
37 {footer}
@@ -1,36 +1,44 b''
1 {header}
1 {header}
2 <title>{repo|escape}: Branches</title>
2 <title>{repo|escape}: Branches</title>
3 <link rel="alternate" type="application/atom+xml" href="{url}atom-log" title="Atom feed for {repo|escape}"/>
3 <link rel="alternate" type="application/atom+xml" href="{url}atom-log" title="Atom feed for {repo|escape}"/>
4 <link rel="alternate" type="application/rss+xml" href="{url}rss-log" title="RSS feed for {repo|escape}"/>
4 <link rel="alternate" type="application/rss+xml" href="{url}rss-log" title="RSS feed for {repo|escape}"/>
5 </head>
5 </head>
6
6
7 <body>
7 <body>
8 <div id="container">
8 <div id="container">
9 <div class="page-header">
9 <div class="page-header">
10 <h1><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / Branches</h1>
10 <h1><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / Branches</h1>
11
11
12 <form action="{url}log">
12 <form action="{url}log">
13 {sessionvars%hiddenformentry}
13 {sessionvars%hiddenformentry}
14 <dl class="search">
14 <dl class="search">
15 <dt><label>Search: </label></dt>
15 <dt><label>Search: </label></dt>
16 <dd><input type="text" name="rev" /></dd>
16 <dd><input type="text" name="rev" /></dd>
17 </dl>
17 </dl>
18 </form>
18 </form>
19
19
20 <ul class="page-nav">
20 <ul class="page-nav">
21 <li><a href="{url}summary{sessionvars%urlparameter}">summary</a></li>
21 <li><a href="{url}summary{sessionvars%urlparameter}">summary</a></li>
22 <li><a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a></li>
22 <li><a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a></li>
23 <li><a href="{url}changelog{sessionvars%urlparameter}">changelog</a></li>
23 <li><a href="{url}changelog{sessionvars%urlparameter}">changelog</a></li>
24 <li><a href="{url}graph/{node|short}{sessionvars%urlparameter}">graph</a></li>
24 <li><a href="{url}graph/{node|short}{sessionvars%urlparameter}">graph</a></li>
25 <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
25 <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
26 <li class="current">branches</li>
26 <li><a href="{url}help{sessionvars%urlparameter}">branches</a></li>
27 <li><a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a></li>
27 <li><a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a></li>
28 <li class="current">help</li>
28 </ul>
29 </ul>
29 </div>
30 </div>
30
31
31 <h2 class="no-link no-border">branches</h2>
32 <h2 class="no-link no-border">branches</h2>
32 <table cellspacing="0">
33 <table cellspacing="0">
33 {entries%branchentry}
34 <tr><td colspan="2"><h2><a name="main" href="#topics">Topics</a></h2></td></tr>
35 {topics % helpentry}
36
37 <tr><td colspan="2"><h2><a name="main" href="#main">Main Commands</a></h2></td></tr>
38 {earlycommands % helpentry}
39
40 <tr><td colspan="2"><h2><a name="other" href="#other">Other Commands</a></h2></td></tr>
41 {othercommands % helpentry}
34 </table>
42 </table>
35
43
36 {footer}
44 {footer}
@@ -1,51 +1,52 b''
1 {header}
1 {header}
2 <title>{repo|escape}: files</title>
2 <title>{repo|escape}: files</title>
3 <link rel="alternate" type="application/atom+xml" href="{url}atom-log" title="Atom feed for {repo|escape}"/>
3 <link rel="alternate" type="application/atom+xml" href="{url}atom-log" title="Atom feed for {repo|escape}"/>
4 <link rel="alternate" type="application/rss+xml" href="{url}rss-log" title="RSS feed for {repo|escape}"/>
4 <link rel="alternate" type="application/rss+xml" href="{url}rss-log" title="RSS feed for {repo|escape}"/>
5 </head>
5 </head>
6
6
7 <body>
7 <body>
8 <div id="container">
8 <div id="container">
9 <div class="page-header">
9 <div class="page-header">
10 <h1><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / files</h1>
10 <h1><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / files</h1>
11
11
12 <form action="{url}log">
12 <form action="{url}log">
13 {sessionvars%hiddenformentry}
13 {sessionvars%hiddenformentry}
14 <dl class="search">
14 <dl class="search">
15 <dt><label>Search: </label></dt>
15 <dt><label>Search: </label></dt>
16 <dd><input type="text" name="rev" /></dd>
16 <dd><input type="text" name="rev" /></dd>
17 </dl>
17 </dl>
18 </form>
18 </form>
19
19
20 <ul class="page-nav">
20 <ul class="page-nav">
21 <li><a href="{url}summary{sessionvars%urlparameter}">summary</a></li>
21 <li><a href="{url}summary{sessionvars%urlparameter}">summary</a></li>
22 <li><a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a></li>
22 <li><a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a></li>
23 <li><a href="{url}changelog{sessionvars%urlparameter}">changelog</a></li>
23 <li><a href="{url}changelog{sessionvars%urlparameter}">changelog</a></li>
24 <li><a href="{url}graph/{node|short}{sessionvars%urlparameter}">graph</a></li>
24 <li><a href="{url}graph/{node|short}{sessionvars%urlparameter}">graph</a></li>
25 <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
25 <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
26 <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
26 <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
27 <li class="current">files</li>
27 <li class="current">files</li>
28 <li><a href="{url}help{sessionvars%urlparameter}">help</a></li>
28 </ul>
29 </ul>
29 </div>
30 </div>
30
31
31 <ul class="submenu">
32 <ul class="submenu">
32 <li><a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a> {archives%archiveentry}</li>
33 <li><a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a> {archives%archiveentry}</li>
33 {archives%archiveentry}
34 {archives%archiveentry}
34 </ul>
35 </ul>
35
36
36 <h2 class="no-link no-border">files</h2>
37 <h2 class="no-link no-border">files</h2>
37 <p class="files">{path|escape} <span class="logtags">{inbranch%inbranchtag}{branches%branchtag}{tags%tagtag}</span></p>
38 <p class="files">{path|escape} <span class="logtags">{inbranch%inbranchtag}{branches%branchtag}{tags%tagtag}</span></p>
38
39
39 <table>
40 <table>
40 <tr class="parity{upparity}">
41 <tr class="parity{upparity}">
41 <td>drwxr-xr-x</td>
42 <td>drwxr-xr-x</td>
42 <td></td>
43 <td></td>
43 <td></td>
44 <td></td>
44 <td><a href="{url}file/{node|short}{up|urlescape}{sessionvars%urlparameter}">[up]</a></td>
45 <td><a href="{url}file/{node|short}{up|urlescape}{sessionvars%urlparameter}">[up]</a></td>
45 <td class="link">&nbsp;</td>
46 <td class="link">&nbsp;</td>
46 </tr>
47 </tr>
47 {dentries%direntry}
48 {dentries%direntry}
48 {fentries%fileentry}
49 {fentries%fileentry}
49 </table>
50 </table>
50
51
51 {footer}
52 {footer}
@@ -1,220 +1,226 b''
1 default = 'summary'
1 default = 'summary'
2 mimetype = 'text/html; charset={encoding}'
2 mimetype = 'text/html; charset={encoding}'
3 header = header.tmpl
3 header = header.tmpl
4 footer = footer.tmpl
4 footer = footer.tmpl
5 search = search.tmpl
5 search = search.tmpl
6 changelog = changelog.tmpl
6 changelog = changelog.tmpl
7 summary = summary.tmpl
7 summary = summary.tmpl
8 error = error.tmpl
8 error = error.tmpl
9 notfound = notfound.tmpl
9 notfound = notfound.tmpl
10
11 help = help.tmpl
12 helptopics = helptopics.tmpl
13
14 helpentry = '<tr><td><a href="{url}help/{topic|escape}{sessionvars%urlparameter}">{topic|escape}</a></td><td>{summary|escape}</td></tr>'
15
10 naventry = '<a href="{url}log/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
16 naventry = '<a href="{url}log/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
11 navshortentry = '<a href="{url}shortlog/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
17 navshortentry = '<a href="{url}shortlog/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
12 navgraphentry = '<a href="{url}graph/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
18 navgraphentry = '<a href="{url}graph/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
13 filenaventry = '<a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{label|escape}</a>'
19 filenaventry = '<a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{label|escape}</a>'
14 filedifflink = '<a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a> '
20 filedifflink = '<a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a> '
15 filenodelink = '
21 filenodelink = '
16 <tr class="parity{parity}">
22 <tr class="parity{parity}">
17 <td><a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a></td>
23 <td><a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a></td>
18 <td></td>
24 <td></td>
19 <td>
25 <td>
20 <a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a> |
26 <a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a> |
21 <a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a> |
27 <a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a> |
22 <a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a> |
28 <a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a> |
23 <a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">revisions</a>
29 <a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">revisions</a>
24 </td>
30 </td>
25 </tr>'
31 </tr>'
26 filenolink = '
32 filenolink = '
27 <tr class="parity{parity}">
33 <tr class="parity{parity}">
28 <td>
34 <td>
29 <a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a></td><td></td><td>file |
35 <a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a></td><td></td><td>file |
30 annotate |
36 annotate |
31 <a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a> |
37 <a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a> |
32 <a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">revisions</a>
38 <a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">revisions</a>
33 </td>
39 </td>
34 </tr>'
40 </tr>'
35
41
36 nav = '{before%naventry} {after%naventry}'
42 nav = '{before%naventry} {after%naventry}'
37 navshort = '{before%navshortentry}{after%navshortentry}'
43 navshort = '{before%navshortentry}{after%navshortentry}'
38 navgraph = '{before%navgraphentry}{after%navgraphentry}'
44 navgraph = '{before%navgraphentry}{after%navgraphentry}'
39 filenav = '{before%filenaventry}{after%filenaventry}'
45 filenav = '{before%filenaventry}{after%filenaventry}'
40
46
41 fileellipses = '...'
47 fileellipses = '...'
42 changelogentry = changelogentry.tmpl
48 changelogentry = changelogentry.tmpl
43 searchentry = changelogentry.tmpl
49 searchentry = changelogentry.tmpl
44 changeset = changeset.tmpl
50 changeset = changeset.tmpl
45 manifest = manifest.tmpl
51 manifest = manifest.tmpl
46 direntry = '
52 direntry = '
47 <tr class="parity{parity}">
53 <tr class="parity{parity}">
48 <td>drwxr-xr-x</td>
54 <td>drwxr-xr-x</td>
49 <td></td>
55 <td></td>
50 <td></td>
56 <td></td>
51 <td><a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">{basename|escape}</a></td>
57 <td><a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">{basename|escape}</a></td>
52 <td><a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">files</a></td>
58 <td><a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">files</a></td>
53 </tr>'
59 </tr>'
54 fileentry = '
60 fileentry = '
55 <tr class="parity{parity}">
61 <tr class="parity{parity}">
56 <td>{permissions|permissions}</td>
62 <td>{permissions|permissions}</td>
57 <td>{date|isodate}</td>
63 <td>{date|isodate}</td>
58 <td>{size}</td>
64 <td>{size}</td>
59 <td><a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{basename|escape}</a></td>
65 <td><a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{basename|escape}</a></td>
60 <td>
66 <td>
61 <a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a> |
67 <a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a> |
62 <a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">revisions</a> |
68 <a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">revisions</a> |
63 <a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a>
69 <a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a>
64 </td>
70 </td>
65 </tr>'
71 </tr>'
66 filerevision = filerevision.tmpl
72 filerevision = filerevision.tmpl
67 fileannotate = fileannotate.tmpl
73 fileannotate = fileannotate.tmpl
68 filediff = filediff.tmpl
74 filediff = filediff.tmpl
69 filelog = filelog.tmpl
75 filelog = filelog.tmpl
70 fileline = '
76 fileline = '
71 <div style="font-family:monospace" class="parity{parity}">
77 <div style="font-family:monospace" class="parity{parity}">
72 <pre><a class="linenr" href="#{lineid}" id="{lineid}">{linenumber}</a> {line|escape}</pre>
78 <pre><a class="linenr" href="#{lineid}" id="{lineid}">{linenumber}</a> {line|escape}</pre>
73 </div>'
79 </div>'
74 annotateline = '
80 annotateline = '
75 <tr class="parity{parity}">
81 <tr class="parity{parity}">
76 <td class="linenr">
82 <td class="linenr">
77 <a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}#{targetline}"
83 <a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}#{targetline}"
78 title="{node|short}: {desc|escape|firstline}">{author|user}@{rev}</a>
84 title="{node|short}: {desc|escape|firstline}">{author|user}@{rev}</a>
79 </td>
85 </td>
80 <td class="lineno">
86 <td class="lineno">
81 <a href="#{lineid}" id="{lineid}">{linenumber}</a>
87 <a href="#{lineid}" id="{lineid}">{linenumber}</a>
82 </td>
88 </td>
83 <td class="source">{line|escape}</td>
89 <td class="source">{line|escape}</td>
84 </tr>'
90 </tr>'
85 difflineplus = '<span style="color:#008800;"><a class="linenr" href="#{lineid}" id="{lineid}">{linenumber}</a> {line|escape}</span>'
91 difflineplus = '<span style="color:#008800;"><a class="linenr" href="#{lineid}" id="{lineid}">{linenumber}</a> {line|escape}</span>'
86 difflineminus = '<span style="color:#cc0000;"><a class="linenr" href="#{lineid}" id="{lineid}">{linenumber}</a> {line|escape}</span>'
92 difflineminus = '<span style="color:#cc0000;"><a class="linenr" href="#{lineid}" id="{lineid}">{linenumber}</a> {line|escape}</span>'
87 difflineat = '<span style="color:#990099;"><a class="linenr" href="#{lineid}" id="{lineid}">{linenumber}</a> {line|escape}</span>'
93 difflineat = '<span style="color:#990099;"><a class="linenr" href="#{lineid}" id="{lineid}">{linenumber}</a> {line|escape}</span>'
88 diffline = '<span><a class="linenr" href="#{lineid}" id="{lineid}">{linenumber}</a> {line|escape}</span>'
94 diffline = '<span><a class="linenr" href="#{lineid}" id="{lineid}">{linenumber}</a> {line|escape}</span>'
89 changelogparent = '
95 changelogparent = '
90 <tr>
96 <tr>
91 <th class="parent">parent {rev}:</th>
97 <th class="parent">parent {rev}:</th>
92 <td class="parent">
98 <td class="parent">
93 <a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a>
99 <a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a>
94 </td>
100 </td>
95 </tr>'
101 </tr>'
96 changesetbranch = '<dt>branch</dt><dd>{name}</dd>'
102 changesetbranch = '<dt>branch</dt><dd>{name}</dd>'
97 changesetparent = '
103 changesetparent = '
98 <dt>parent {rev}</dt>
104 <dt>parent {rev}</dt>
99 <dd><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></dd>'
105 <dd><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></dd>'
100 filerevbranch = '<dt>branch</dt><dd>{name}</dd>'
106 filerevbranch = '<dt>branch</dt><dd>{name}</dd>'
101 filerevparent = '
107 filerevparent = '
102 <dt>parent {rev}</dt>
108 <dt>parent {rev}</dt>
103 <dd>
109 <dd>
104 <a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
110 <a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
105 {rename%filerename}{node|short}
111 {rename%filerename}{node|short}
106 </a>
112 </a>
107 </dd>'
113 </dd>'
108 filerename = '{file|escape}@'
114 filerename = '{file|escape}@'
109 filelogrename = '| <a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">base</a>'
115 filelogrename = '| <a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">base</a>'
110 fileannotateparent = '
116 fileannotateparent = '
111 <dt>parent {rev}</dt>
117 <dt>parent {rev}</dt>
112 <dd>
118 <dd>
113 <a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
119 <a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
114 {rename%filerename}{node|short}
120 {rename%filerename}{node|short}
115 </a>
121 </a>
116 </dd>'
122 </dd>'
117 changelogchild = '
123 changelogchild = '
118 <dt>child {rev}:</dt>
124 <dt>child {rev}:</dt>
119 <dd><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></dd>'
125 <dd><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></dd>'
120 changesetchild = '
126 changesetchild = '
121 <dt>child {rev}</dt>
127 <dt>child {rev}</dt>
122 <dd><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></dd>'
128 <dd><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></dd>'
123 filerevchild = '
129 filerevchild = '
124 <dt>child {rev}</dt>
130 <dt>child {rev}</dt>
125 <dd>
131 <dd>
126 <a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a>
132 <a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a>
127 </dd>'
133 </dd>'
128 fileannotatechild = '
134 fileannotatechild = '
129 <dt>child {rev}</dt>
135 <dt>child {rev}</dt>
130 <dd>
136 <dd>
131 <a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a>
137 <a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a>
132 </dd>'
138 </dd>'
133 tags = tags.tmpl
139 tags = tags.tmpl
134 tagentry = '
140 tagentry = '
135 <tr class="parity{parity}">
141 <tr class="parity{parity}">
136 <td class="nowrap">{date|age}</td>
142 <td class="nowrap">{date|age}</td>
137 <td><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{tag|escape}</a></td>
143 <td><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{tag|escape}</a></td>
138 <td class="nowrap">
144 <td class="nowrap">
139 <a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a> |
145 <a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a> |
140 <a href="{url}log/{node|short}{sessionvars%urlparameter}">changelog</a> |
146 <a href="{url}log/{node|short}{sessionvars%urlparameter}">changelog</a> |
141 <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>
147 <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>
142 </td>
148 </td>
143 </tr>'
149 </tr>'
144 branches = branches.tmpl
150 branches = branches.tmpl
145 branchentry = '
151 branchentry = '
146 <tr class="parity{parity}">
152 <tr class="parity{parity}">
147 <td class="nowrap">{date|age}</td>
153 <td class="nowrap">{date|age}</td>
148 <td><a href="{url}shortlog/{node|short}{sessionvars%urlparameter}">{node|short}</a></td>
154 <td><a href="{url}shortlog/{node|short}{sessionvars%urlparameter}">{node|short}</a></td>
149 <td class="{status}">{branch|escape}</td>
155 <td class="{status}">{branch|escape}</td>
150 <td class="nowrap">
156 <td class="nowrap">
151 <a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a> |
157 <a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a> |
152 <a href="{url}log/{node|short}{sessionvars%urlparameter}">changelog</a> |
158 <a href="{url}log/{node|short}{sessionvars%urlparameter}">changelog</a> |
153 <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>
159 <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>
154 </td>
160 </td>
155 </tr>'
161 </tr>'
156 diffblock = '<pre>{lines}</pre>'
162 diffblock = '<pre>{lines}</pre>'
157 filediffparent = '
163 filediffparent = '
158 <dt>parent {rev}</dt>
164 <dt>parent {rev}</dt>
159 <dd><a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></dd>'
165 <dd><a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></dd>'
160 filelogparent = '
166 filelogparent = '
161 <tr>
167 <tr>
162 <td align="right">parent {rev}:&nbsp;</td>
168 <td align="right">parent {rev}:&nbsp;</td>
163 <td><a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></td>
169 <td><a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></td>
164 </tr>'
170 </tr>'
165 filediffchild = '
171 filediffchild = '
166 <dt>child {rev}</dt>
172 <dt>child {rev}</dt>
167 <dd><a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></dd>'
173 <dd><a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></dd>'
168 filelogchild = '
174 filelogchild = '
169 <tr>
175 <tr>
170 <td align="right">child {rev}:&nbsp;</td>
176 <td align="right">child {rev}:&nbsp;</td>
171 <td><a href="{url}file{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></td>
177 <td><a href="{url}file{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></td>
172 </tr>'
178 </tr>'
173 shortlog = shortlog.tmpl
179 shortlog = shortlog.tmpl
174 tagtag = '<span class="tagtag" title="{name}">{name}</span> '
180 tagtag = '<span class="tagtag" title="{name}">{name}</span> '
175 branchtag = '<span class="branchtag" title="{name}">{name}</span> '
181 branchtag = '<span class="branchtag" title="{name}">{name}</span> '
176 inbranchtag = '<span class="inbranchtag" title="{name}">{name}</span> '
182 inbranchtag = '<span class="inbranchtag" title="{name}">{name}</span> '
177 shortlogentry = '
183 shortlogentry = '
178 <tr class="parity{parity}">
184 <tr class="parity{parity}">
179 <td class="nowrap">{date|age}</td>
185 <td class="nowrap">{date|age}</td>
180 <td>{author|person}</td>
186 <td>{author|person}</td>
181 <td>
187 <td>
182 <a href="{url}rev/{node|short}{sessionvars%urlparameter}">
188 <a href="{url}rev/{node|short}{sessionvars%urlparameter}">
183 {desc|strip|firstline|escape|nonempty}
189 {desc|strip|firstline|escape|nonempty}
184 <span class="logtags">{inbranch%inbranchtag}{branches%branchtag}{tags%tagtag}</span>
190 <span class="logtags">{inbranch%inbranchtag}{branches%branchtag}{tags%tagtag}</span>
185 </a>
191 </a>
186 </td>
192 </td>
187 <td class="nowrap">
193 <td class="nowrap">
188 <a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a> |
194 <a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a> |
189 <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>
195 <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>
190 </td>
196 </td>
191 </tr>'
197 </tr>'
192 filelogentry = '
198 filelogentry = '
193 <tr class="parity{parity}">
199 <tr class="parity{parity}">
194 <td class="nowrap">{date|age}</td>
200 <td class="nowrap">{date|age}</td>
195 <td><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{desc|strip|firstline|escape|nonempty}</a></td>
201 <td><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{desc|strip|firstline|escape|nonempty}</a></td>
196 <td class="nowrap">
202 <td class="nowrap">
197 <a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a>&nbsp;|&nbsp;<a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a>&nbsp;|&nbsp;<a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a>
203 <a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a>&nbsp;|&nbsp;<a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a>&nbsp;|&nbsp;<a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a>
198 {rename%filelogrename}
204 {rename%filelogrename}
199 </td>
205 </td>
200 </tr>'
206 </tr>'
201 archiveentry = '<li><a href="{url}archive/{node|short}{extension}">{type|escape}</a></li>'
207 archiveentry = '<li><a href="{url}archive/{node|short}{extension}">{type|escape}</a></li>'
202 indexentry = '
208 indexentry = '
203 <tr class="parity{parity}">
209 <tr class="parity{parity}">
204 <td><a href="{url}{sessionvars%urlparameter}">{name|escape}</a></td>
210 <td><a href="{url}{sessionvars%urlparameter}">{name|escape}</a></td>
205 <td>{description}</td>
211 <td>{description}</td>
206 <td>{contact|obfuscate}</td>
212 <td>{contact|obfuscate}</td>
207 <td>{lastchange|age}</td>
213 <td>{lastchange|age}</td>
208 <td class="indexlinks">{archives%indexarchiveentry}</td>
214 <td class="indexlinks">{archives%indexarchiveentry}</td>
209 <td>
215 <td>
210 <div class="rss_logo">
216 <div class="rss_logo">
211 <a href="{url}rss-log">RSS</a>
217 <a href="{url}rss-log">RSS</a>
212 <a href="{url}atom-log">Atom</a>
218 <a href="{url}atom-log">Atom</a>
213 </div>
219 </div>
214 </td>
220 </td>
215 </tr>\n'
221 </tr>\n'
216 indexarchiveentry = '<a href="{url}archive/{node|short}{extension}">{type|escape}</a> '
222 indexarchiveentry = '<a href="{url}archive/{node|short}{extension}">{type|escape}</a> '
217 index = index.tmpl
223 index = index.tmpl
218 urlparameter = '{separator}{name}={value|urlescape}'
224 urlparameter = '{separator}{name}={value|urlescape}'
219 hiddenformentry = '<input type="hidden" name="{name}" value="{value|escape}" />'
225 hiddenformentry = '<input type="hidden" name="{name}" value="{value|escape}" />'
220 graph = graph.tmpl
226 graph = graph.tmpl
@@ -1,41 +1,43 b''
1 {header}
1 {header}
2 <title>{repo|escape}: shortlog</title>
2 <title>{repo|escape}: shortlog</title>
3 <link rel="alternate" type="application/atom+xml" href="{url}atom-log" title="Atom feed for {repo|escape}"/>
3 <link rel="alternate" type="application/atom+xml" href="{url}atom-log" title="Atom feed for {repo|escape}"/>
4 <link rel="alternate" type="application/rss+xml" href="{url}rss-log" title="RSS feed for {repo|escape}"/>
4 <link rel="alternate" type="application/rss+xml" href="{url}rss-log" title="RSS feed for {repo|escape}"/>
5 </head>
5 </head>
6
6
7 <body>
7 <body>
8 <div id="container">
8 <div id="container">
9 <div class="page-header">
9 <div class="page-header">
10 <h1><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / shortlog</h1>
10 <h1><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / shortlog</h1>
11
11
12 <form action="{url}log">
12 <form action="{url}log">
13 {sessionvars%hiddenformentry}
13 {sessionvars%hiddenformentry}
14 <dl class="search">
14 <dl class="search">
15 <dt><label>Search: </label></dt>
15 <dt><label>Search: </label></dt>
16 <dd><input type="text" name="rev" /></dd>
16 <dd><input type="text" name="rev" /></dd>
17 </dl>
17 </dl>
18 </form>
18 </form>
19
19
20 <ul class="page-nav">
20 <ul class="page-nav">
21 <li><a href="{url}summary{sessionvars%urlparameter}">summary</a></li>
21 <li><a href="{url}summary{sessionvars%urlparameter}">summary</a></li>
22 <li class="current">shortlog</li>
22 <li class="current">shortlog</li>
23 <li><a href="{url}log{sessionvars%urlparameter}">changelog</a></li>
23 <li><a href="{url}log{sessionvars%urlparameter}">changelog</a></li>
24 <li><a href="{url}graph/{node|short}{sessionvars%urlparameter}">graph</a></li>
24 <li><a href="{url}graph/{node|short}{sessionvars%urlparameter}">graph</a></li>
25 <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
25 <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
26 <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
26 <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
27 <li><a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>{archives%archiveentry}</li>
27 <li><a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a></li>
28 {archives%archiveentry}
29 <li><a href="{url}help{sessionvars%urlparameter}">help</a></li>
28 </ul>
30 </ul>
29 </div>
31 </div>
30
32
31 <h2 class="no-link no-border">shortlog</h2>
33 <h2 class="no-link no-border">shortlog</h2>
32
34
33 <table>
35 <table>
34 {entries%shortlogentry}
36 {entries%shortlogentry}
35 </table>
37 </table>
36
38
37 <div class="page-path">
39 <div class="page-path">
38 {changenav%navshort}
40 {changenav%navshort}
39 </div>
41 </div>
40
42
41 {footer}
43 {footer}
@@ -1,66 +1,67 b''
1 {header}
1 {header}
2 <title>{repo|escape}: Summary</title>
2 <title>{repo|escape}: Summary</title>
3 <link rel="alternate" type="application/atom+xml" href="{url}atom-log" title="Atom feed for {repo|escape}"/>
3 <link rel="alternate" type="application/atom+xml" href="{url}atom-log" title="Atom feed for {repo|escape}"/>
4 <link rel="alternate" type="application/rss+xml" href="{url}rss-log" title="RSS feed for {repo|escape}"/>
4 <link rel="alternate" type="application/rss+xml" href="{url}rss-log" title="RSS feed for {repo|escape}"/>
5 </head>
5 </head>
6
6
7 <body>
7 <body>
8 <div id="container">
8 <div id="container">
9 <div class="page-header">
9 <div class="page-header">
10 <h1><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / summary</h1>
10 <h1><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / summary</h1>
11
11
12 <form action="{url}log">
12 <form action="{url}log">
13 {sessionvars%hiddenformentry}
13 {sessionvars%hiddenformentry}
14 <dl class="search">
14 <dl class="search">
15 <dt><label>Search: </label></dt>
15 <dt><label>Search: </label></dt>
16 <dd><input type="text" name="rev" /></dd>
16 <dd><input type="text" name="rev" /></dd>
17 </dl>
17 </dl>
18 </form>
18 </form>
19
19
20 <ul class="page-nav">
20 <ul class="page-nav">
21 <li class="current">summary</li>
21 <li class="current">summary</li>
22 <li><a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a></li>
22 <li><a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a></li>
23 <li><a href="{url}log{sessionvars%urlparameter}">changelog</a></li>
23 <li><a href="{url}log{sessionvars%urlparameter}">changelog</a></li>
24 <li><a href="{url}graph/{node|short}{sessionvars%urlparameter}">graph</a></li>
24 <li><a href="{url}graph/{node|short}{sessionvars%urlparameter}">graph</a></li>
25 <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
25 <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
26 <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
26 <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
27 <li><a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a></li>
27 <li><a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a></li>
28 <li><a href="{url}help{sessionvars%urlparameter}">help</a></li>
28 </ul>
29 </ul>
29 </div>
30 </div>
30
31
31 <h2 class="no-link no-border">Mercurial Repository Overview</h2>
32 <h2 class="no-link no-border">Mercurial Repository Overview</h2>
32 <dl class="overview">
33 <dl class="overview">
33 <dt>name</dt>
34 <dt>name</dt>
34 <dd>{repo|escape}</dd>
35 <dd>{repo|escape}</dd>
35 <dt>description</dt>
36 <dt>description</dt>
36 <dd>{desc}</dd>
37 <dd>{desc}</dd>
37 <dt>owner</dt>
38 <dt>owner</dt>
38 <dd>{owner|obfuscate}</dd>
39 <dd>{owner|obfuscate}</dd>
39 <dt>last change</dt>
40 <dt>last change</dt>
40 <dd>{lastchange|rfc822date}</dd>
41 <dd>{lastchange|rfc822date}</dd>
41 </dl>
42 </dl>
42
43
43 <h2><a href="{url}shortlog{sessionvars%urlparameter}">Changes</a></h2>
44 <h2><a href="{url}shortlog{sessionvars%urlparameter}">Changes</a></h2>
44 <table>
45 <table>
45 {shortlog}
46 {shortlog}
46 <tr class="light">
47 <tr class="light">
47 <td colspan="4"><a class="list" href="{url}shortlog{sessionvars%urlparameter}">...</a></td>
48 <td colspan="4"><a class="list" href="{url}shortlog{sessionvars%urlparameter}">...</a></td>
48 </tr>
49 </tr>
49 </table>
50 </table>
50
51
51 <h2><a href="{url}tags{sessionvars%urlparameter}">Tags</a></h2>
52 <h2><a href="{url}tags{sessionvars%urlparameter}">Tags</a></h2>
52 <table>
53 <table>
53 {tags}
54 {tags}
54 <tr class="light">
55 <tr class="light">
55 <td colspan="3"><a class="list" href="{url}tags{sessionvars%urlparameter}">...</a></td>
56 <td colspan="3"><a class="list" href="{url}tags{sessionvars%urlparameter}">...</a></td>
56 </tr>
57 </tr>
57 </table>
58 </table>
58
59
59 <h2 class="no-link">Branches</h2>
60 <h2 class="no-link">Branches</h2>
60 <table>
61 <table>
61 {branches%branchentry}
62 {branches%branchentry}
62 <tr class="light">
63 <tr class="light">
63 <td colspan="4"><a class="list" href="#">...</a></td>
64 <td colspan="4"><a class="list" href="#">...</a></td>
64 </tr>
65 </tr>
65 </table>
66 </table>
66 {footer}
67 {footer}
@@ -1,36 +1,37 b''
1 {header}
1 {header}
2 <title>{repo|escape}: Tags</title>
2 <title>{repo|escape}: Tags</title>
3 <link rel="alternate" type="application/atom+xml" href="{url}atom-log" title="Atom feed for {repo|escape}"/>
3 <link rel="alternate" type="application/atom+xml" href="{url}atom-log" title="Atom feed for {repo|escape}"/>
4 <link rel="alternate" type="application/rss+xml" href="{url}rss-log" title="RSS feed for {repo|escape}"/>
4 <link rel="alternate" type="application/rss+xml" href="{url}rss-log" title="RSS feed for {repo|escape}"/>
5 </head>
5 </head>
6
6
7 <body>
7 <body>
8 <div id="container">
8 <div id="container">
9 <div class="page-header">
9 <div class="page-header">
10 <h1><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / Tags</h1>
10 <h1><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / Tags</h1>
11
11
12 <form action="{url}log">
12 <form action="{url}log">
13 {sessionvars%hiddenformentry}
13 {sessionvars%hiddenformentry}
14 <dl class="search">
14 <dl class="search">
15 <dt><label>Search: </label></dt>
15 <dt><label>Search: </label></dt>
16 <dd><input type="text" name="rev" /></dd>
16 <dd><input type="text" name="rev" /></dd>
17 </dl>
17 </dl>
18 </form>
18 </form>
19
19
20 <ul class="page-nav">
20 <ul class="page-nav">
21 <li><a href="{url}summary{sessionvars%urlparameter}">summary</a></li>
21 <li><a href="{url}summary{sessionvars%urlparameter}">summary</a></li>
22 <li><a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a></li>
22 <li><a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a></li>
23 <li><a href="{url}changelog{sessionvars%urlparameter}">changelog</a></li>
23 <li><a href="{url}changelog{sessionvars%urlparameter}">changelog</a></li>
24 <li><a href="{url}graph/{node|short}{sessionvars%urlparameter}">graph</a></li>
24 <li><a href="{url}graph/{node|short}{sessionvars%urlparameter}">graph</a></li>
25 <li class="current">tags</li>
25 <li class="current">tags</li>
26 <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
26 <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
27 <li><a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a></li>
27 <li><a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a></li>
28 <li><a href="{url}help{sessionvars%urlparameter}">help</a></li>
28 </ul>
29 </ul>
29 </div>
30 </div>
30
31
31 <h2 class="no-link no-border">tags</h2>
32 <h2 class="no-link no-border">tags</h2>
32 <table cellspacing="0">
33 <table cellspacing="0">
33 {entries%tagentry}
34 {entries%tagentry}
34 </table>
35 </table>
35
36
36 {footer}
37 {footer}
@@ -1,71 +1,74 b''
1 {header}
1 {header}
2 <title>{repo|escape}: {node|short}</title>
2 <title>{repo|escape}: {node|short}</title>
3 </head>
3 </head>
4 <body>
4 <body>
5 <div class="container">
5 <div class="container">
6 <div class="menu">
6 <div class="menu">
7 <div class="logo">
7 <div class="logo">
8 <a href="http://mercurial.selenic.com/">
8 <a href="http://mercurial.selenic.com/">
9 <img src="{staticurl}hglogo.png" alt="mercurial" /></a>
9 <img src="{staticurl}hglogo.png" alt="mercurial" /></a>
10 </div>
10 </div>
11 <ul>
11 <ul>
12 <li><a href="{url}shortlog/{node|short}{sessionvars%urlparameter}">log</a></li>
12 <li><a href="{url}shortlog/{node|short}{sessionvars%urlparameter}">log</a></li>
13 <li><a href="{url}graph/{node|short}{sessionvars%urlparameter}">graph</a></li>
13 <li><a href="{url}graph/{node|short}{sessionvars%urlparameter}">graph</a></li>
14 <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
14 <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
15 <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
15 <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
16 </ul>
16 </ul>
17 <ul>
17 <ul>
18 <li class="active">changeset</li>
18 <li class="active">changeset</li>
19 <li><a href="{url}raw-rev/{node|short}{sessionvars%urlparameter}">raw</a></li>
19 <li><a href="{url}raw-rev/{node|short}{sessionvars%urlparameter}">raw</a></li>
20 <li><a href="{url}file/{node|short}{sessionvars%urlparameter}">browse</a></li>
20 <li><a href="{url}file/{node|short}{sessionvars%urlparameter}">browse</a></li>
21 </ul>
21 </ul>
22 <ul>
22 <ul>
23 {archives%archiveentry}
23 {archives%archiveentry}
24 </ul>
24 </ul>
25 <ul>
26 <li><a href="{url}help{sessionvars%urlparameter}">help</a></li>
27 </ul>
25 </div>
28 </div>
26
29
27 <div class="main">
30 <div class="main">
28
31
29 <h2><a href="{url}{sessionvars%urlparameter}">{repo|escape}</a></h2>
32 <h2><a href="{url}{sessionvars%urlparameter}">{repo|escape}</a></h2>
30 <h3>changeset {rev}:{node|short} {changesetbranch%changelogbranchname} {changesettag}</h3>
33 <h3>changeset {rev}:{node|short} {changesetbranch%changelogbranchname} {changesettag}</h3>
31
34
32 <form class="search" action="{url}log">
35 <form class="search" action="{url}log">
33 {sessionvars%hiddenformentry}
36 {sessionvars%hiddenformentry}
34 <p><input name="rev" id="search1" type="text" size="30" /></p>
37 <p><input name="rev" id="search1" type="text" size="30" /></p>
35 <div id="hint">find changesets by author, revision,
38 <div id="hint">find changesets by author, revision,
36 files, or words in the commit message</div>
39 files, or words in the commit message</div>
37 </form>
40 </form>
38
41
39 <div class="description">{desc|strip|escape|addbreaks|nonempty}</div>
42 <div class="description">{desc|strip|escape|addbreaks|nonempty}</div>
40
43
41 <table id="changesetEntry">
44 <table id="changesetEntry">
42 <tr>
45 <tr>
43 <th class="author">author</th>
46 <th class="author">author</th>
44 <td class="author">{author|obfuscate}</td>
47 <td class="author">{author|obfuscate}</td>
45 </tr>
48 </tr>
46 <tr>
49 <tr>
47 <th class="date">date</th>
50 <th class="date">date</th>
48 <td class="date">{date|date} ({date|age})</td></tr>
51 <td class="date">{date|date} ({date|age})</td></tr>
49 <tr>
52 <tr>
50 <th class="author">parents</th>
53 <th class="author">parents</th>
51 <td class="author">{parent%changesetparent}</td>
54 <td class="author">{parent%changesetparent}</td>
52 </tr>
55 </tr>
53 <tr>
56 <tr>
54 <th class="author">children</th>
57 <th class="author">children</th>
55 <td class="author">{child%changesetchild}</td>
58 <td class="author">{child%changesetchild}</td>
56 </tr>
59 </tr>
57 <tr>
60 <tr>
58 <th class="files">files</th>
61 <th class="files">files</th>
59 <td class="files">{files}</td>
62 <td class="files">{files}</td>
60 </tr>
63 </tr>
61 </table>
64 </table>
62
65
63 <div class="overflow">
66 <div class="overflow">
64 <div class="sourcefirst"> line diff</div>
67 <div class="sourcefirst"> line diff</div>
65
68
66 {diff}
69 {diff}
67 </div>
70 </div>
68
71
69 </div>
72 </div>
70 </div>
73 </div>
71 {footer}
74 {footer}
@@ -1,132 +1,135 b''
1 {header}
1 {header}
2 <title>{repo|escape}: revision graph</title>
2 <title>{repo|escape}: revision graph</title>
3 <link rel="alternate" type="application/atom+xml"
3 <link rel="alternate" type="application/atom+xml"
4 href="{url}atom-log" title="Atom feed for {repo|escape}: log" />
4 href="{url}atom-log" title="Atom feed for {repo|escape}: log" />
5 <link rel="alternate" type="application/rss+xml"
5 <link rel="alternate" type="application/rss+xml"
6 href="{url}rss-log" title="RSS feed for {repo|escape}: log" />
6 href="{url}rss-log" title="RSS feed for {repo|escape}: log" />
7 <!--[if IE]><script type="text/javascript" src="{staticurl}excanvas.js"></script><![endif]-->
7 <!--[if IE]><script type="text/javascript" src="{staticurl}excanvas.js"></script><![endif]-->
8 </head>
8 </head>
9 <body>
9 <body>
10
10
11 <div class="container">
11 <div class="container">
12 <div class="menu">
12 <div class="menu">
13 <div class="logo">
13 <div class="logo">
14 <a href="http://mercurial.selenic.com/">
14 <a href="http://mercurial.selenic.com/">
15 <img src="{staticurl}hglogo.png" alt="mercurial" /></a>
15 <img src="{staticurl}hglogo.png" alt="mercurial" /></a>
16 </div>
16 </div>
17 <ul>
17 <ul>
18 <li><a href="{url}shortlog/{node|short}{sessionvars%urlparameter}">log</a></li>
18 <li><a href="{url}shortlog/{node|short}{sessionvars%urlparameter}">log</a></li>
19 <li class="active">graph</li>
19 <li class="active">graph</li>
20 <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
20 <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
21 <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
21 <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
22 </ul>
22 </ul>
23 <ul>
23 <ul>
24 <li><a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a></li>
24 <li><a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a></li>
25 <li><a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">browse</a></li>
25 <li><a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">browse</a></li>
26 </ul>
26 </ul>
27 <ul>
28 <li><a href="{url}help{sessionvars%urlparameter}">help</a></li>
29 </ul>
27 </div>
30 </div>
28
31
29 <div class="main">
32 <div class="main">
30 <h2><a href="{url}{sessionvars%urlparameter}">{repo|escape}</a></h2>
33 <h2><a href="{url}{sessionvars%urlparameter}">{repo|escape}</a></h2>
31 <h3>graph</h3>
34 <h3>graph</h3>
32
35
33 <form class="search" action="{url}log">
36 <form class="search" action="{url}log">
34 {sessionvars%hiddenformentry}
37 {sessionvars%hiddenformentry}
35 <p><input name="rev" id="search1" type="text" size="30" /></p>
38 <p><input name="rev" id="search1" type="text" size="30" /></p>
36 <div id="hint">find changesets by author, revision,
39 <div id="hint">find changesets by author, revision,
37 files, or words in the commit message</div>
40 files, or words in the commit message</div>
38 </form>
41 </form>
39
42
40 <div class="navigate">
43 <div class="navigate">
41 <a href="{url}graph/{rev}{lessvars%urlparameter}">less</a>
44 <a href="{url}graph/{rev}{lessvars%urlparameter}">less</a>
42 <a href="{url}graph/{rev}{morevars%urlparameter}">more</a>
45 <a href="{url}graph/{rev}{morevars%urlparameter}">more</a>
43 | rev {rev}: {changenav%navgraph}
46 | rev {rev}: {changenav%navgraph}
44 </div>
47 </div>
45
48
46 <noscript><p>The revision graph only works with JavaScript-enabled browsers.</p></noscript>
49 <noscript><p>The revision graph only works with JavaScript-enabled browsers.</p></noscript>
47
50
48 <div id="wrapper">
51 <div id="wrapper">
49 <ul id="nodebgs"></ul>
52 <ul id="nodebgs"></ul>
50 <canvas id="graph" width="224" height="{canvasheight}"></canvas>
53 <canvas id="graph" width="224" height="{canvasheight}"></canvas>
51 <ul id="graphnodes"></ul>
54 <ul id="graphnodes"></ul>
52 </div>
55 </div>
53
56
54 <script type="text/javascript" src="{staticurl}graph.js"></script>
57 <script type="text/javascript" src="{staticurl}graph.js"></script>
55 <script type="text/javascript">
58 <script type="text/javascript">
56 <!-- hide script content
59 <!-- hide script content
57
60
58 var data = {jsdata|json};
61 var data = {jsdata|json};
59 var graph = new Graph();
62 var graph = new Graph();
60 graph.scale({bg_height});
63 graph.scale({bg_height});
61
64
62 graph.edge = function(x0, y0, x1, y1, color) \{
65 graph.edge = function(x0, y0, x1, y1, color) \{
63
66
64 this.setColor(color, 0.0, 0.65);
67 this.setColor(color, 0.0, 0.65);
65 this.ctx.beginPath();
68 this.ctx.beginPath();
66 this.ctx.moveTo(x0, y0);
69 this.ctx.moveTo(x0, y0);
67 this.ctx.lineTo(x1, y1);
70 this.ctx.lineTo(x1, y1);
68 this.ctx.stroke();
71 this.ctx.stroke();
69
72
70 }
73 }
71
74
72 var revlink = '<li style="_STYLE"><span class="desc">';
75 var revlink = '<li style="_STYLE"><span class="desc">';
73 revlink += '<a href="{url}rev/_NODEID{sessionvars%urlparameter}" title="_NODEID">_DESC</a>';
76 revlink += '<a href="{url}rev/_NODEID{sessionvars%urlparameter}" title="_NODEID">_DESC</a>';
74 revlink += '</span>_TAGS<span class="info">_DATE, by _USER</span></li>';
77 revlink += '</span>_TAGS<span class="info">_DATE, by _USER</span></li>';
75
78
76 graph.vertex = function(x, y, color, parity, cur) \{
79 graph.vertex = function(x, y, color, parity, cur) \{
77
80
78 this.ctx.beginPath();
81 this.ctx.beginPath();
79 color = this.setColor(color, 0.25, 0.75);
82 color = this.setColor(color, 0.25, 0.75);
80 this.ctx.arc(x, y, radius, 0, Math.PI * 2, true);
83 this.ctx.arc(x, y, radius, 0, Math.PI * 2, true);
81 this.ctx.fill();
84 this.ctx.fill();
82
85
83 var bg = '<li class="bg parity' + parity + '"></li>';
86 var bg = '<li class="bg parity' + parity + '"></li>';
84 var left = (this.columns + 1) * this.bg_height;
87 var left = (this.columns + 1) * this.bg_height;
85 var nstyle = 'padding-left: ' + left + 'px;';
88 var nstyle = 'padding-left: ' + left + 'px;';
86 var item = revlink.replace(/_STYLE/, nstyle);
89 var item = revlink.replace(/_STYLE/, nstyle);
87 item = item.replace(/_PARITY/, 'parity' + parity);
90 item = item.replace(/_PARITY/, 'parity' + parity);
88 item = item.replace(/_NODEID/, cur[0]);
91 item = item.replace(/_NODEID/, cur[0]);
89 item = item.replace(/_NODEID/, cur[0]);
92 item = item.replace(/_NODEID/, cur[0]);
90 item = item.replace(/_DESC/, cur[3]);
93 item = item.replace(/_DESC/, cur[3]);
91 item = item.replace(/_USER/, cur[4]);
94 item = item.replace(/_USER/, cur[4]);
92 item = item.replace(/_DATE/, cur[5]);
95 item = item.replace(/_DATE/, cur[5]);
93
96
94 var tagspan = '';
97 var tagspan = '';
95 if (cur[7].length || (cur[6][0] != 'default' || cur[6][1])) \{
98 if (cur[7].length || (cur[6][0] != 'default' || cur[6][1])) \{
96 tagspan = '<span class="logtags">';
99 tagspan = '<span class="logtags">';
97 if (cur[6][1]) \{
100 if (cur[6][1]) \{
98 tagspan += '<span class="branchhead" title="' + cur[6][0] + '">';
101 tagspan += '<span class="branchhead" title="' + cur[6][0] + '">';
99 tagspan += cur[6][0] + '</span> ';
102 tagspan += cur[6][0] + '</span> ';
100 } else if (!cur[6][1] && cur[6][0] != 'default') \{
103 } else if (!cur[6][1] && cur[6][0] != 'default') \{
101 tagspan += '<span class="branchname" title="' + cur[6][0] + '">';
104 tagspan += '<span class="branchname" title="' + cur[6][0] + '">';
102 tagspan += cur[6][0] + '</span> ';
105 tagspan += cur[6][0] + '</span> ';
103 }
106 }
104 if (cur[7].length) \{
107 if (cur[7].length) \{
105 for (var t in cur[7]) \{
108 for (var t in cur[7]) \{
106 var tag = cur[7][t];
109 var tag = cur[7][t];
107 tagspan += '<span class="tag">' + tag + '</span> ';
110 tagspan += '<span class="tag">' + tag + '</span> ';
108 }
111 }
109 }
112 }
110 tagspan += '</span>';
113 tagspan += '</span>';
111 }
114 }
112
115
113 item = item.replace(/_TAGS/, tagspan);
116 item = item.replace(/_TAGS/, tagspan);
114 return [bg, item];
117 return [bg, item];
115
118
116 }
119 }
117
120
118 graph.render(data);
121 graph.render(data);
119
122
120 // stop hiding script -->
123 // stop hiding script -->
121 </script>
124 </script>
122
125
123 <div class="navigate">
126 <div class="navigate">
124 <a href="{url}graph/{rev}{lessvars%urlparameter}">less</a>
127 <a href="{url}graph/{rev}{lessvars%urlparameter}">less</a>
125 <a href="{url}graph/{rev}{morevars%urlparameter}">more</a>
128 <a href="{url}graph/{rev}{morevars%urlparameter}">more</a>
126 | rev {rev}: {changenav%navgraph}
129 | rev {rev}: {changenav%navgraph}
127 </div>
130 </div>
128
131
129 </div>
132 </div>
130 </div>
133 </div>
131
134
132 {footer}
135 {footer}
@@ -1,54 +1,57 b''
1 {header}
1 {header}
2 <title>{repo|escape}: {node|short} {path|escape}</title>
2 <title>{repo|escape}: {node|short} {path|escape}</title>
3 </head>
3 </head>
4 <body>
4 <body>
5
5
6 <div class="container">
6 <div class="container">
7 <div class="menu">
7 <div class="menu">
8 <div class="logo">
8 <div class="logo">
9 <a href="http://mercurial.selenic.com/">
9 <a href="http://mercurial.selenic.com/">
10 <img src="{staticurl}hglogo.png" alt="mercurial" /></a>
10 <img src="{staticurl}hglogo.png" alt="mercurial" /></a>
11 </div>
11 </div>
12 <ul>
12 <ul>
13 <li><a href="{url}shortlog/{node|short}{sessionvars%urlparameter}">log</a></li>
13 <li><a href="{url}shortlog/{node|short}{sessionvars%urlparameter}">log</a></li>
14 <li><a href="{url}graph/{node|short}{sessionvars%urlparameter}">graph</a></li>
14 <li><a href="{url}graph/{node|short}{sessionvars%urlparameter}">graph</a></li>
15 <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
15 <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
16 <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
16 <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
17 </ul>
17 </ul>
18 <ul>
18 <ul>
19 <li><a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a></li>
19 <li><a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a></li>
20 <li class="active">browse</li>
20 <li class="active">browse</li>
21 </ul>
21 </ul>
22 <ul>
22 <ul>
23 {archives%archiveentry}
23 {archives%archiveentry}
24 </ul>
24 </ul>
25 <ul>
26 <li><a href="{url}help{sessionvars%urlparameter}">help</a></li>
27 </ul>
25 </div>
28 </div>
26
29
27 <div class="main">
30 <div class="main">
28 <h2><a href="{url}{sessionvars%urlparameter}">{repo|escape}</a></h2>
31 <h2><a href="{url}{sessionvars%urlparameter}">{repo|escape}</a></h2>
29 <h3>directory {path|escape} @ {rev}:{node|short} {tags%changelogtag}</h3>
32 <h3>directory {path|escape} @ {rev}:{node|short} {tags%changelogtag}</h3>
30
33
31 <form class="search" action="{url}log">
34 <form class="search" action="{url}log">
32 {sessionvars%hiddenformentry}
35 {sessionvars%hiddenformentry}
33 <p><input name="rev" id="search1" type="text" size="30" /></p>
36 <p><input name="rev" id="search1" type="text" size="30" /></p>
34 <div id="hint">find changesets by author, revision,
37 <div id="hint">find changesets by author, revision,
35 files, or words in the commit message</div>
38 files, or words in the commit message</div>
36 </form>
39 </form>
37
40
38 <table class="bigtable">
41 <table class="bigtable">
39 <tr>
42 <tr>
40 <th class="name">name</th>
43 <th class="name">name</th>
41 <th class="size">size</th>
44 <th class="size">size</th>
42 <th class="permissions">permissions</th>
45 <th class="permissions">permissions</th>
43 </tr>
46 </tr>
44 <tr class="fileline parity{upparity}">
47 <tr class="fileline parity{upparity}">
45 <td class="name"><a href="{url}file/{node|short}{up|urlescape}{sessionvars%urlparameter}">[up]</a></td>
48 <td class="name"><a href="{url}file/{node|short}{up|urlescape}{sessionvars%urlparameter}">[up]</a></td>
46 <td class="size"></td>
49 <td class="size"></td>
47 <td class="permissions">drwxr-xr-x</td>
50 <td class="permissions">drwxr-xr-x</td>
48 </tr>
51 </tr>
49 {dentries%direntry}
52 {dentries%direntry}
50 {fentries%fileentry}
53 {fentries%fileentry}
51 </table>
54 </table>
52 </div>
55 </div>
53 </div>
56 </div>
54 {footer}
57 {footer}
@@ -1,196 +1,200 b''
1 default = 'shortlog'
1 default = 'shortlog'
2
2
3 mimetype = 'text/html; charset={encoding}'
3 mimetype = 'text/html; charset={encoding}'
4 header = header.tmpl
4 header = header.tmpl
5 footer = footer.tmpl
5 footer = footer.tmpl
6 search = search.tmpl
6 search = search.tmpl
7
7
8 changelog = shortlog.tmpl
8 changelog = shortlog.tmpl
9 shortlog = shortlog.tmpl
9 shortlog = shortlog.tmpl
10 shortlogentry = shortlogentry.tmpl
10 shortlogentry = shortlogentry.tmpl
11 graph = graph.tmpl
11 graph = graph.tmpl
12 help = help.tmpl
13 helptopics = helptopics.tmpl
14
15 helpentry = '<tr><td><a href="{url}help/{topic|escape}{sessionvars%urlparameter}">{topic|escape}</a></td><td>{summary|escape}</td></tr>'
12
16
13 naventry = '<a href="{url}log/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
17 naventry = '<a href="{url}log/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
14 navshortentry = '<a href="{url}shortlog/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
18 navshortentry = '<a href="{url}shortlog/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
15 navgraphentry = '<a href="{url}graph/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
19 navgraphentry = '<a href="{url}graph/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
16 filenaventry = '<a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{label|escape}</a> '
20 filenaventry = '<a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{label|escape}</a> '
17 filedifflink = '<a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a> '
21 filedifflink = '<a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a> '
18 filenodelink = '<a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a> '
22 filenodelink = '<a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a> '
19 filenolink = '{file|escape} '
23 filenolink = '{file|escape} '
20 fileellipses = '...'
24 fileellipses = '...'
21 changelogentry = shortlogentry.tmpl
25 changelogentry = shortlogentry.tmpl
22 searchentry = shortlogentry.tmpl
26 searchentry = shortlogentry.tmpl
23 changeset = changeset.tmpl
27 changeset = changeset.tmpl
24 manifest = manifest.tmpl
28 manifest = manifest.tmpl
25
29
26 nav = '{before%naventry} {after%naventry}'
30 nav = '{before%naventry} {after%naventry}'
27 navshort = '{before%navshortentry}{after%navshortentry}'
31 navshort = '{before%navshortentry}{after%navshortentry}'
28 navgraph = '{before%navgraphentry}{after%navgraphentry}'
32 navgraph = '{before%navgraphentry}{after%navgraphentry}'
29 filenav = '{before%filenaventry}{after%filenaventry}'
33 filenav = '{before%filenaventry}{after%filenaventry}'
30
34
31 direntry = '
35 direntry = '
32 <tr class="fileline parity{parity}">
36 <tr class="fileline parity{parity}">
33 <td class="name">
37 <td class="name">
34 <a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">
38 <a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">
35 <img src="{staticurl}coal-folder.png" alt="dir."/> {basename|escape}/
39 <img src="{staticurl}coal-folder.png" alt="dir."/> {basename|escape}/
36 </a>
40 </a>
37 <a href="{url}file/{node|short}{path|urlescape}/{emptydirs|urlescape}{sessionvars%urlparameter}">
41 <a href="{url}file/{node|short}{path|urlescape}/{emptydirs|urlescape}{sessionvars%urlparameter}">
38 {emptydirs|escape}
42 {emptydirs|escape}
39 </a>
43 </a>
40 </td>
44 </td>
41 <td class="size"></td>
45 <td class="size"></td>
42 <td class="permissions">drwxr-xr-x</td>
46 <td class="permissions">drwxr-xr-x</td>
43 </tr>'
47 </tr>'
44
48
45 fileentry = '
49 fileentry = '
46 <tr class="fileline parity{parity}">
50 <tr class="fileline parity{parity}">
47 <td class="filename">
51 <td class="filename">
48 <a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
52 <a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
49 <img src="{staticurl}coal-file.png" alt="file"/> {basename|escape}
53 <img src="{staticurl}coal-file.png" alt="file"/> {basename|escape}
50 </a>
54 </a>
51 </td>
55 </td>
52 <td class="size">{size}</td>
56 <td class="size">{size}</td>
53 <td class="permissions">{permissions|permissions}</td>
57 <td class="permissions">{permissions|permissions}</td>
54 </tr>'
58 </tr>'
55
59
56 filerevision = filerevision.tmpl
60 filerevision = filerevision.tmpl
57 fileannotate = fileannotate.tmpl
61 fileannotate = fileannotate.tmpl
58 filediff = filediff.tmpl
62 filediff = filediff.tmpl
59 filelog = filelog.tmpl
63 filelog = filelog.tmpl
60 fileline = '
64 fileline = '
61 <div class="parity{parity} source"><a href="#{lineid}" id="{lineid}">{linenumber}</a> {line|escape}</div>'
65 <div class="parity{parity} source"><a href="#{lineid}" id="{lineid}">{linenumber}</a> {line|escape}</div>'
62 filelogentry = filelogentry.tmpl
66 filelogentry = filelogentry.tmpl
63
67
64 annotateline = '
68 annotateline = '
65 <tr class="parity{parity}">
69 <tr class="parity{parity}">
66 <td class="annotate">
70 <td class="annotate">
67 <a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}#{targetline}"
71 <a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}#{targetline}"
68 title="{node|short}: {desc|escape|firstline}">{author|user}@{rev}</a>
72 title="{node|short}: {desc|escape|firstline}">{author|user}@{rev}</a>
69 </td>
73 </td>
70 <td class="source"><a href="#{lineid}" id="{lineid}">{linenumber}</a> {line|escape}</td>
74 <td class="source"><a href="#{lineid}" id="{lineid}">{linenumber}</a> {line|escape}</td>
71 </tr>'
75 </tr>'
72
76
73 diffblock = '<div class="source bottomline parity{parity}"><pre>{lines}</pre></div>'
77 diffblock = '<div class="source bottomline parity{parity}"><pre>{lines}</pre></div>'
74 difflineplus = '<a href="#{lineid}" id="{lineid}">{linenumber}</a> <span class="plusline">{line|escape}</span>'
78 difflineplus = '<a href="#{lineid}" id="{lineid}">{linenumber}</a> <span class="plusline">{line|escape}</span>'
75 difflineminus = '<a href="#{lineid}" id="{lineid}">{linenumber}</a> <span class="minusline">{line|escape}</span>'
79 difflineminus = '<a href="#{lineid}" id="{lineid}">{linenumber}</a> <span class="minusline">{line|escape}</span>'
76 difflineat = '<a href="#{lineid}" id="{lineid}">{linenumber}</a> <span class="atline">{line|escape}</span>'
80 difflineat = '<a href="#{lineid}" id="{lineid}">{linenumber}</a> <span class="atline">{line|escape}</span>'
77 diffline = '<a href="#{lineid}" id="{lineid}">{linenumber}</a> {line|escape}'
81 diffline = '<a href="#{lineid}" id="{lineid}">{linenumber}</a> {line|escape}'
78
82
79 changelogparent = '
83 changelogparent = '
80 <tr>
84 <tr>
81 <th class="parent">parent {rev}:</th>
85 <th class="parent">parent {rev}:</th>
82 <td class="parent"><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td>
86 <td class="parent"><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td>
83 </tr>'
87 </tr>'
84
88
85 changesetparent = '<a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a> '
89 changesetparent = '<a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a> '
86
90
87 filerevparent = '<a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{rename%filerename}{node|short}</a> '
91 filerevparent = '<a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{rename%filerename}{node|short}</a> '
88 filerevchild = '<a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a> '
92 filerevchild = '<a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a> '
89
93
90 filerename = '{file|escape}@'
94 filerename = '{file|escape}@'
91 filelogrename = '
95 filelogrename = '
92 <tr>
96 <tr>
93 <th>base:</th>
97 <th>base:</th>
94 <td>
98 <td>
95 <a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
99 <a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
96 {file|escape}@{node|short}
100 {file|escape}@{node|short}
97 </a>
101 </a>
98 </td>
102 </td>
99 </tr>'
103 </tr>'
100 fileannotateparent = '
104 fileannotateparent = '
101 <tr>
105 <tr>
102 <td class="metatag">parent:</td>
106 <td class="metatag">parent:</td>
103 <td>
107 <td>
104 <a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
108 <a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
105 {rename%filerename}{node|short}
109 {rename%filerename}{node|short}
106 </a>
110 </a>
107 </td>
111 </td>
108 </tr>'
112 </tr>'
109 changesetchild = ' <a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a>'
113 changesetchild = ' <a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a>'
110 changelogchild = '
114 changelogchild = '
111 <tr>
115 <tr>
112 <th class="child">child</th>
116 <th class="child">child</th>
113 <td class="child">
117 <td class="child">
114 <a href="{url}rev/{node|short}{sessionvars%urlparameter}">
118 <a href="{url}rev/{node|short}{sessionvars%urlparameter}">
115 {node|short}
119 {node|short}
116 </a>
120 </a>
117 </td>
121 </td>
118 </tr>'
122 </tr>'
119 fileannotatechild = '
123 fileannotatechild = '
120 <tr>
124 <tr>
121 <td class="metatag">child:</td>
125 <td class="metatag">child:</td>
122 <td>
126 <td>
123 <a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
127 <a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
124 {node|short}
128 {node|short}
125 </a>
129 </a>
126 </td>
130 </td>
127 </tr>'
131 </tr>'
128 tags = tags.tmpl
132 tags = tags.tmpl
129 tagentry = '
133 tagentry = '
130 <tr class="tagEntry parity{parity}">
134 <tr class="tagEntry parity{parity}">
131 <td>
135 <td>
132 <a href="{url}rev/{node|short}{sessionvars%urlparameter}">
136 <a href="{url}rev/{node|short}{sessionvars%urlparameter}">
133 {tag|escape}
137 {tag|escape}
134 </a>
138 </a>
135 </td>
139 </td>
136 <td class="node">
140 <td class="node">
137 {node|short}
141 {node|short}
138 </td>
142 </td>
139 </tr>'
143 </tr>'
140 branches = branches.tmpl
144 branches = branches.tmpl
141 branchentry = '
145 branchentry = '
142 <tr class="tagEntry parity{parity}">
146 <tr class="tagEntry parity{parity}">
143 <td>
147 <td>
144 <a href="{url}shortlog/{node|short}{sessionvars%urlparameter}" class="{status}">
148 <a href="{url}shortlog/{node|short}{sessionvars%urlparameter}" class="{status}">
145 {branch|escape}
149 {branch|escape}
146 </a>
150 </a>
147 </td>
151 </td>
148 <td class="node">
152 <td class="node">
149 {node|short}
153 {node|short}
150 </td>
154 </td>
151 </tr>'
155 </tr>'
152 changelogtag = '<span class="tag">{name|escape}</span> '
156 changelogtag = '<span class="tag">{name|escape}</span> '
153 changesettag = '<span class="tag">{tag|escape}</span> '
157 changesettag = '<span class="tag">{tag|escape}</span> '
154 changelogbranchhead = '<span class="branchhead">{name|escape}</span> '
158 changelogbranchhead = '<span class="branchhead">{name|escape}</span> '
155 changelogbranchname = '<span class="branchname">{name|escape}</span> '
159 changelogbranchname = '<span class="branchname">{name|escape}</span> '
156
160
157 filediffparent = '
161 filediffparent = '
158 <tr>
162 <tr>
159 <th class="parent">parent {rev}:</th>
163 <th class="parent">parent {rev}:</th>
160 <td class="parent"><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td>
164 <td class="parent"><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td>
161 </tr>'
165 </tr>'
162 filelogparent = '
166 filelogparent = '
163 <tr>
167 <tr>
164 <th>parent {rev}:</th>
168 <th>parent {rev}:</th>
165 <td><a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></td>
169 <td><a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></td>
166 </tr>'
170 </tr>'
167 filediffchild = '
171 filediffchild = '
168 <tr>
172 <tr>
169 <th class="child">child {rev}:</th>
173 <th class="child">child {rev}:</th>
170 <td class="child"><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a>
174 <td class="child"><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a>
171 </td>
175 </td>
172 </tr>'
176 </tr>'
173 filelogchild = '
177 filelogchild = '
174 <tr>
178 <tr>
175 <th>child {rev}:</th>
179 <th>child {rev}:</th>
176 <td><a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></td>
180 <td><a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></td>
177 </tr>'
181 </tr>'
178
182
179 indexentry = '
183 indexentry = '
180 <tr class="parity{parity}">
184 <tr class="parity{parity}">
181 <td><a href="{url}{sessionvars%urlparameter}">{name|escape}</a></td>
185 <td><a href="{url}{sessionvars%urlparameter}">{name|escape}</a></td>
182 <td>{description}</td>
186 <td>{description}</td>
183 <td>{contact|obfuscate}</td>
187 <td>{contact|obfuscate}</td>
184 <td class="age">{lastchange|age}</td>
188 <td class="age">{lastchange|age}</td>
185 <td class="indexlinks">{archives%indexarchiveentry}</td>
189 <td class="indexlinks">{archives%indexarchiveentry}</td>
186 </tr>\n'
190 </tr>\n'
187 indexarchiveentry = '<a href="{url}archive/{node|short}{extension|urlescape}">&nbsp;&darr;{type|escape}</a>'
191 indexarchiveentry = '<a href="{url}archive/{node|short}{extension|urlescape}">&nbsp;&darr;{type|escape}</a>'
188 index = index.tmpl
192 index = index.tmpl
189 archiveentry = '
193 archiveentry = '
190 <li>
194 <li>
191 <a href="{url}archive/{node|short}{extension|urlescape}">{type|escape}</a>
195 <a href="{url}archive/{node|short}{extension|urlescape}">{type|escape}</a>
192 </li>'
196 </li>'
193 notfound = notfound.tmpl
197 notfound = notfound.tmpl
194 error = error.tmpl
198 error = error.tmpl
195 urlparameter = '{separator}{name}={value|urlescape}'
199 urlparameter = '{separator}{name}={value|urlescape}'
196 hiddenformentry = '<input type="hidden" name="{name}" value="{value|escape}" />'
200 hiddenformentry = '<input type="hidden" name="{name}" value="{value|escape}" />'
@@ -1,66 +1,69 b''
1 {header}
1 {header}
2 <title>{repo|escape}: log</title>
2 <title>{repo|escape}: log</title>
3 <link rel="alternate" type="application/atom+xml"
3 <link rel="alternate" type="application/atom+xml"
4 href="{url}atom-log" title="Atom feed for {repo|escape}" />
4 href="{url}atom-log" title="Atom feed for {repo|escape}" />
5 <link rel="alternate" type="application/rss+xml"
5 <link rel="alternate" type="application/rss+xml"
6 href="{url}rss-log" title="RSS feed for {repo|escape}" />
6 href="{url}rss-log" title="RSS feed for {repo|escape}" />
7 </head>
7 </head>
8 <body>
8 <body>
9
9
10 <div class="container">
10 <div class="container">
11 <div class="menu">
11 <div class="menu">
12 <div class="logo">
12 <div class="logo">
13 <a href="http://mercurial.selenic.com/">
13 <a href="http://mercurial.selenic.com/">
14 <img src="{staticurl}hglogo.png" alt="mercurial" /></a>
14 <img src="{staticurl}hglogo.png" alt="mercurial" /></a>
15 </div>
15 </div>
16 <ul>
16 <ul>
17 <li class="active">log</li>
17 <li class="active">log</li>
18 <li><a href="{url}graph/{node|short}{sessionvars%urlparameter}">graph</a></li>
18 <li><a href="{url}graph/{node|short}{sessionvars%urlparameter}">graph</a></li>
19 <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
19 <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
20 <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
20 <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
21 </ul>
21 </ul>
22 <ul>
22 <ul>
23 <li><a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a></li>
23 <li><a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a></li>
24 <li><a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">browse</a></li>
24 <li><a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">browse</a></li>
25 </ul>
25 </ul>
26 <ul>
26 <ul>
27 {archives%archiveentry}
27 {archives%archiveentry}
28 </ul>
28 </ul>
29 <ul>
30 <li><a href="{url}help{sessionvars%urlparameter}">help</a></li>
31 </ul>
29 </div>
32 </div>
30
33
31 <div class="main">
34 <div class="main">
32 <h2><a href="{url}{sessionvars%urlparameter}">{repo|escape}</a></h2>
35 <h2><a href="{url}{sessionvars%urlparameter}">{repo|escape}</a></h2>
33 <h3>log</h3>
36 <h3>log</h3>
34
37
35 <form class="search" action="{url}log">
38 <form class="search" action="{url}log">
36 {sessionvars%hiddenformentry}
39 {sessionvars%hiddenformentry}
37 <p><input name="rev" id="search1" type="text" size="30" /></p>
40 <p><input name="rev" id="search1" type="text" size="30" /></p>
38 <div id="hint">find changesets by author, revision,
41 <div id="hint">find changesets by author, revision,
39 files, or words in the commit message</div>
42 files, or words in the commit message</div>
40 </form>
43 </form>
41
44
42 <div class="navigate">
45 <div class="navigate">
43 <a href="{url}shortlog/{rev}{lessvars%urlparameter}">less</a>
46 <a href="{url}shortlog/{rev}{lessvars%urlparameter}">less</a>
44 <a href="{url}shortlog/{rev}{morevars%urlparameter}">more</a>
47 <a href="{url}shortlog/{rev}{morevars%urlparameter}">more</a>
45 | rev {rev}: {changenav%navshort}
48 | rev {rev}: {changenav%navshort}
46 </div>
49 </div>
47
50
48 <table class="bigtable">
51 <table class="bigtable">
49 <tr>
52 <tr>
50 <th class="age">age</th>
53 <th class="age">age</th>
51 <th class="author">author</th>
54 <th class="author">author</th>
52 <th class="description">description</th>
55 <th class="description">description</th>
53 </tr>
56 </tr>
54 {entries%shortlogentry}
57 {entries%shortlogentry}
55 </table>
58 </table>
56
59
57 <div class="navigate">
60 <div class="navigate">
58 <a href="{url}shortlog/{rev}{lessvars%urlparameter}">less</a>
61 <a href="{url}shortlog/{rev}{lessvars%urlparameter}">less</a>
59 <a href="{url}shortlog/{rev}{morevars%urlparameter}">more</a>
62 <a href="{url}shortlog/{rev}{morevars%urlparameter}">more</a>
60 | rev {rev}: {changenav%navshort}
63 | rev {rev}: {changenav%navshort}
61 </div>
64 </div>
62
65
63 </div>
66 </div>
64 </div>
67 </div>
65
68
66 {footer}
69 {footer}
@@ -1,45 +1,48 b''
1 {header}
1 {header}
2 <title>{repo|escape}: tags</title>
2 <title>{repo|escape}: tags</title>
3 <link rel="alternate" type="application/atom+xml"
3 <link rel="alternate" type="application/atom+xml"
4 href="{url}atom-tags" title="Atom feed for {repo|escape}: tags" />
4 href="{url}atom-tags" title="Atom feed for {repo|escape}: tags" />
5 <link rel="alternate" type="application/rss+xml"
5 <link rel="alternate" type="application/rss+xml"
6 href="{url}rss-tags" title="RSS feed for {repo|escape}: tags" />
6 href="{url}rss-tags" title="RSS feed for {repo|escape}: tags" />
7 </head>
7 </head>
8 <body>
8 <body>
9
9
10 <div class="container">
10 <div class="container">
11 <div class="menu">
11 <div class="menu">
12 <div class="logo">
12 <div class="logo">
13 <a href="http://mercurial.selenic.com/">
13 <a href="http://mercurial.selenic.com/">
14 <img src="{staticurl}hglogo.png" alt="mercurial" /></a>
14 <img src="{staticurl}hglogo.png" alt="mercurial" /></a>
15 </div>
15 </div>
16 <ul>
16 <ul>
17 <li><a href="{url}shortlog{sessionvars%urlparameter}">log</a></li>
17 <li><a href="{url}shortlog{sessionvars%urlparameter}">log</a></li>
18 <li><a href="{url}graph{sessionvars%urlparameter}">graph</a></li>
18 <li><a href="{url}graph{sessionvars%urlparameter}">graph</a></li>
19 <li class="active">tags</li>
19 <li class="active">tags</li>
20 <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
20 <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
21 </ul>
21 </ul>
22 <ul>
23 <li><a href="{url}help{sessionvars%urlparameter}">help</a></li>
24 </ul>
22 </div>
25 </div>
23
26
24 <div class="main">
27 <div class="main">
25 <h2><a href="{url}{sessionvars%urlparameter}">{repo|escape}</a></h2>
28 <h2><a href="{url}{sessionvars%urlparameter}">{repo|escape}</a></h2>
26 <h3>tags</h3>
29 <h3>tags</h3>
27
30
28 <form class="search" action="{url}log">
31 <form class="search" action="{url}log">
29 {sessionvars%hiddenformentry}
32 {sessionvars%hiddenformentry}
30 <p><input name="rev" id="search1" type="text" size="30" /></p>
33 <p><input name="rev" id="search1" type="text" size="30" /></p>
31 <div id="hint">find changesets by author, revision,
34 <div id="hint">find changesets by author, revision,
32 files, or words in the commit message</div>
35 files, or words in the commit message</div>
33 </form>
36 </form>
34
37
35 <table class="bigtable">
38 <table class="bigtable">
36 <tr>
39 <tr>
37 <th>tag</th>
40 <th>tag</th>
38 <th>node</th>
41 <th>node</th>
39 </tr>
42 </tr>
40 {entries%tagentry}
43 {entries%tagentry}
41 </table>
44 </table>
42 </div>
45 </div>
43 </div>
46 </div>
44
47
45 {footer}
48 {footer}
@@ -1,475 +1,475 b''
1 /*** Initial Settings ***/
1 /*** Initial Settings ***/
2 * {
2 * {
3 margin: 0;
3 margin: 0;
4 padding: 0;
4 padding: 0;
5 font-weight: normal;
5 font-weight: normal;
6 font-style: normal;
6 font-style: normal;
7 }
7 }
8
8
9 html {
9 html {
10 font-size: 100%;
10 font-size: 100%;
11 font-family: sans-serif;
11 font-family: sans-serif;
12 }
12 }
13
13
14 body {
14 body {
15 font-size: 77%;
15 font-size: 77%;
16 margin: 15px 50px;
16 margin: 15px 50px;
17 background: #4B4B4C;
17 background: #4B4B4C;
18 }
18 }
19
19
20 a {
20 a {
21 color:#0000cc;
21 color:#0000cc;
22 text-decoration: none;
22 text-decoration: none;
23 }
23 }
24 /*** end of Initial Settings ***/
24 /*** end of Initial Settings ***/
25
25
26
26
27 /** common settings **/
27 /** common settings **/
28 div#container {
28 div#container {
29 background: #FFFFFF;
29 background: #FFFFFF;
30 position: relative;
30 position: relative;
31 color: #666;
31 color: #666;
32 }
32 }
33
33
34 div.page-header {
34 div.page-header {
35 padding: 50px 20px 0;
35 padding: 50px 20px 0;
36 background: #006699 top left repeat-x;
36 background: #006699 top left repeat-x;
37 position: relative;
37 position: relative;
38 }
38 }
39 div.page-header h1 {
39 div.page-header h1 {
40 margin: 10px 0 30px;
40 margin: 10px 0 30px;
41 font-size: 1.8em;
41 font-size: 1.8em;
42 font-weight: bold;
42 font-weight: bold;
43 font-family: osaka,'MS P Gothic', Georgia, serif;
43 font-family: osaka,'MS P Gothic', Georgia, serif;
44 letter-spacing: 1px;
44 letter-spacing: 1px;
45 color: #DDD;
45 color: #DDD;
46 }
46 }
47 div.page-header h1 a {
47 div.page-header h1 a {
48 font-weight: bold;
48 font-weight: bold;
49 color: #FFF;
49 color: #FFF;
50 }
50 }
51 div.page-header a {
51 div.page-header a {
52 text-decoration: none;
52 text-decoration: none;
53 }
53 }
54
54
55 div.page-header form {
55 div.page-header form {
56 position: absolute;
56 position: absolute;
57 margin-bottom: 2px;
57 margin-bottom: 2px;
58 bottom: 0;
58 bottom: 0;
59 right: 20px;
59 right: 20px;
60 }
60 }
61 div.page-header form label {
61 div.page-header form label {
62 color: #DDD;
62 color: #DDD;
63 }
63 }
64 div.page-header form input {
64 div.page-header form input {
65 padding: 2px;
65 padding: 2px;
66 border: solid 1px #DDD;
66 border: solid 1px #DDD;
67 }
67 }
68 div.page-header form dl {
68 div.page-header form dl {
69 overflow: hidden;
69 overflow: hidden;
70 }
70 }
71 div.page-header form dl dt {
71 div.page-header form dl dt {
72 font-size: 1.2em;
72 font-size: 1.2em;
73 }
73 }
74 div.page-header form dl dt,
74 div.page-header form dl dt,
75 div.page-header form dl dd {
75 div.page-header form dl dd {
76 margin: 0 0 0 5px;
76 margin: 0 0 0 5px;
77 float: left;
77 float: left;
78 height: 24px;
78 height: 24px;
79 line-height: 20px;
79 line-height: 20px;
80 }
80 }
81
81
82 ul.page-nav {
82 ul.page-nav {
83 margin: 10px 0 0 0;
83 margin: 10px 0 0 0;
84 list-style-type: none;
84 list-style-type: none;
85 overflow: hidden;
85 overflow: hidden;
86 width: 800px;
86 width: 900px;
87 }
87 }
88 ul.page-nav li {
88 ul.page-nav li {
89 margin: 0 2px 0 0;
89 margin: 0 2px 0 0;
90 float: left;
90 float: left;
91 width: 80px;
91 width: 80px;
92 height: 24px;
92 height: 24px;
93 font-size: 1.1em;
93 font-size: 1.1em;
94 line-height: 24px;
94 line-height: 24px;
95 text-align: center;
95 text-align: center;
96 }
96 }
97 ul.page-nav li.current {
97 ul.page-nav li.current {
98 background: #FFF;
98 background: #FFF;
99 }
99 }
100 ul.page-nav li a {
100 ul.page-nav li a {
101 height: 24px;
101 height: 24px;
102 color: #666;
102 color: #666;
103 background: #DDD;
103 background: #DDD;
104 display: block;
104 display: block;
105 text-decoration: none;
105 text-decoration: none;
106 }
106 }
107 ul.page-nav li a:hover {
107 ul.page-nav li a:hover {
108 color:#333;
108 color:#333;
109 background: #FFF;
109 background: #FFF;
110 }
110 }
111
111
112 ul.submenu {
112 ul.submenu {
113 margin: 10px 0 -10px 20px;
113 margin: 10px 0 -10px 20px;
114 list-style-type: none;
114 list-style-type: none;
115 }
115 }
116 ul.submenu li {
116 ul.submenu li {
117 margin: 0 10px 0 0;
117 margin: 0 10px 0 0;
118 font-size: 1.2em;
118 font-size: 1.2em;
119 display: inline;
119 display: inline;
120 }
120 }
121
121
122 h2 {
122 h2 {
123 margin: 20px 0 10px;
123 margin: 20px 0 10px;
124 height: 30px;
124 height: 30px;
125 line-height: 30px;
125 line-height: 30px;
126 text-indent: 20px;
126 text-indent: 20px;
127 background: #FFF;
127 background: #FFF;
128 font-size: 1.2em;
128 font-size: 1.2em;
129 border-top: dotted 1px #D5E1E6;
129 border-top: dotted 1px #D5E1E6;
130 font-weight: bold;
130 font-weight: bold;
131 }
131 }
132 h2.no-link {
132 h2.no-link {
133 color:#006699;
133 color:#006699;
134 }
134 }
135 h2.no-border {
135 h2.no-border {
136 color: #FFF;
136 color: #FFF;
137 background: #006699;
137 background: #006699;
138 border: 0;
138 border: 0;
139 }
139 }
140 h2 a {
140 h2 a {
141 font-weight:bold;
141 font-weight:bold;
142 color:#006699;
142 color:#006699;
143 }
143 }
144
144
145 div.page-path {
145 div.page-path {
146 text-align: right;
146 text-align: right;
147 padding: 20px 30px 10px 0;
147 padding: 20px 30px 10px 0;
148 border:solid #d9d8d1;
148 border:solid #d9d8d1;
149 border-width:0px 0px 1px;
149 border-width:0px 0px 1px;
150 font-size: 1.2em;
150 font-size: 1.2em;
151 }
151 }
152
152
153 div.page-footer {
153 div.page-footer {
154 margin: 50px 0 0;
154 margin: 50px 0 0;
155 position: relative;
155 position: relative;
156 }
156 }
157 div.page-footer p {
157 div.page-footer p {
158 position: relative;
158 position: relative;
159 left: 20px;
159 left: 20px;
160 bottom: 5px;
160 bottom: 5px;
161 font-size: 1.2em;
161 font-size: 1.2em;
162 }
162 }
163
163
164 ul.rss-logo {
164 ul.rss-logo {
165 position: absolute;
165 position: absolute;
166 top: -10px;
166 top: -10px;
167 right: 20px;
167 right: 20px;
168 height: 20px;
168 height: 20px;
169 list-style-type: none;
169 list-style-type: none;
170 }
170 }
171 ul.rss-logo li {
171 ul.rss-logo li {
172 display: inline;
172 display: inline;
173 }
173 }
174 ul.rss-logo li a {
174 ul.rss-logo li a {
175 padding: 3px 6px;
175 padding: 3px 6px;
176 line-height: 10px;
176 line-height: 10px;
177 border:1px solid;
177 border:1px solid;
178 border-color:#fcc7a5 #7d3302 #3e1a01 #ff954e;
178 border-color:#fcc7a5 #7d3302 #3e1a01 #ff954e;
179 color:#ffffff;
179 color:#ffffff;
180 background-color:#ff6600;
180 background-color:#ff6600;
181 font-weight:bold;
181 font-weight:bold;
182 font-family:sans-serif;
182 font-family:sans-serif;
183 font-size:10px;
183 font-size:10px;
184 text-align:center;
184 text-align:center;
185 text-decoration:none;
185 text-decoration:none;
186 }
186 }
187 div.rss-logo li a:hover {
187 div.rss-logo li a:hover {
188 background-color:#ee5500;
188 background-color:#ee5500;
189 }
189 }
190
190
191 p.normal {
191 p.normal {
192 margin: 20px 0 20px 30px;
192 margin: 20px 0 20px 30px;
193 font-size: 1.2em;
193 font-size: 1.2em;
194 }
194 }
195
195
196 table {
196 table {
197 margin: 10px 0 0 20px;
197 margin: 10px 0 0 20px;
198 width: 95%;
198 width: 95%;
199 border-collapse: collapse;
199 border-collapse: collapse;
200 }
200 }
201 table tr td {
201 table tr td {
202 font-size: 1.1em;
202 font-size: 1.1em;
203 }
203 }
204 table tr td.nowrap {
204 table tr td.nowrap {
205 white-space: nowrap;
205 white-space: nowrap;
206 }
206 }
207 table tr td.closed {
207 table tr td.closed {
208 background-color: #99f;
208 background-color: #99f;
209 }
209 }
210 /*
210 /*
211 table tr.parity0:hover,
211 table tr.parity0:hover,
212 table tr.parity1:hover {
212 table tr.parity1:hover {
213 background: #D5E1E6;
213 background: #D5E1E6;
214 }
214 }
215 */
215 */
216 table tr.parity0 {
216 table tr.parity0 {
217 background: #F1F6F7;
217 background: #F1F6F7;
218 }
218 }
219 table tr.parity1 {
219 table tr.parity1 {
220 background: #FFFFFF;
220 background: #FFFFFF;
221 }
221 }
222 table tr td {
222 table tr td {
223 padding: 5px 5px;
223 padding: 5px 5px;
224 }
224 }
225 table.annotated tr td {
225 table.annotated tr td {
226 padding: 0px 5px;
226 padding: 0px 5px;
227 }
227 }
228
228
229 span.logtags span {
229 span.logtags span {
230 padding: 2px 6px;
230 padding: 2px 6px;
231 font-weight: normal;
231 font-weight: normal;
232 font-size: 11px;
232 font-size: 11px;
233 border: 1px solid;
233 border: 1px solid;
234 background-color: #ffaaff;
234 background-color: #ffaaff;
235 border-color: #ffccff #ff00ee #ff00ee #ffccff;
235 border-color: #ffccff #ff00ee #ff00ee #ffccff;
236 }
236 }
237 span.logtags span.tagtag {
237 span.logtags span.tagtag {
238 background-color: #ffffaa;
238 background-color: #ffffaa;
239 border-color: #ffffcc #ffee00 #ffee00 #ffffcc;
239 border-color: #ffffcc #ffee00 #ffee00 #ffffcc;
240 }
240 }
241 span.logtags span.branchtag {
241 span.logtags span.branchtag {
242 background-color: #aaffaa;
242 background-color: #aaffaa;
243 border-color: #ccffcc #00cc33 #00cc33 #ccffcc;
243 border-color: #ccffcc #00cc33 #00cc33 #ccffcc;
244 }
244 }
245 span.logtags span.inbranchtag {
245 span.logtags span.inbranchtag {
246 background-color: #d5dde6;
246 background-color: #d5dde6;
247 border-color: #e3ecf4 #9398f4 #9398f4 #e3ecf4;
247 border-color: #e3ecf4 #9398f4 #9398f4 #e3ecf4;
248 }
248 }
249
249
250 div.diff pre {
250 div.diff pre {
251 margin: 10px 0 0 0;
251 margin: 10px 0 0 0;
252 }
252 }
253 div.diff pre span {
253 div.diff pre span {
254 font-family: monospace;
254 font-family: monospace;
255 white-space: pre;
255 white-space: pre;
256 font-size: 1.2em;
256 font-size: 1.2em;
257 padding: 3px 0;
257 padding: 3px 0;
258 }
258 }
259 td.source {
259 td.source {
260 white-space: pre;
260 white-space: pre;
261 font-family: monospace;
261 font-family: monospace;
262 margin: 10px 30px 0;
262 margin: 10px 30px 0;
263 font-size: 1.2em;
263 font-size: 1.2em;
264 font-family: monospace;
264 font-family: monospace;
265 }
265 }
266 div.source div.parity0,
266 div.source div.parity0,
267 div.source div.parity1 {
267 div.source div.parity1 {
268 padding: 1px;
268 padding: 1px;
269 font-size: 1.2em;
269 font-size: 1.2em;
270 }
270 }
271 div.source div.parity0 {
271 div.source div.parity0 {
272 background: #F1F6F7;
272 background: #F1F6F7;
273 }
273 }
274 div.source div.parity1 {
274 div.source div.parity1 {
275 background: #FFFFFF;
275 background: #FFFFFF;
276 }
276 }
277 div.parity0:hover,
277 div.parity0:hover,
278 div.parity1:hover {
278 div.parity1:hover {
279 background: #D5E1E6;
279 background: #D5E1E6;
280 }
280 }
281 .linenr {
281 .linenr {
282 color: #999;
282 color: #999;
283 text-align: right;
283 text-align: right;
284 }
284 }
285 .lineno {
285 .lineno {
286 text-align: right;
286 text-align: right;
287 }
287 }
288 .lineno a {
288 .lineno a {
289 color: #999;
289 color: #999;
290 }
290 }
291 td.linenr {
291 td.linenr {
292 width: 60px;
292 width: 60px;
293 }
293 }
294
294
295 div#powered-by {
295 div#powered-by {
296 position: absolute;
296 position: absolute;
297 width: 75px;
297 width: 75px;
298 top: 15px;
298 top: 15px;
299 right: 20px;
299 right: 20px;
300 font-size: 1.2em;
300 font-size: 1.2em;
301 }
301 }
302 div#powered-by a {
302 div#powered-by a {
303 color: #EEE;
303 color: #EEE;
304 text-decoration: none;
304 text-decoration: none;
305 }
305 }
306 div#powered-by a:hover {
306 div#powered-by a:hover {
307 text-decoration: underline;
307 text-decoration: underline;
308 }
308 }
309 /*
309 /*
310 div#monoblue-corner-top-left {
310 div#monoblue-corner-top-left {
311 position: absolute;
311 position: absolute;
312 top: 0;
312 top: 0;
313 left: 0;
313 left: 0;
314 width: 10px;
314 width: 10px;
315 height: 10px;
315 height: 10px;
316 background: url(./monoblue-corner.png) top left no-repeat !important;
316 background: url(./monoblue-corner.png) top left no-repeat !important;
317 background: none;
317 background: none;
318 }
318 }
319 div#monoblue-corner-top-right {
319 div#monoblue-corner-top-right {
320 position: absolute;
320 position: absolute;
321 top: 0;
321 top: 0;
322 right: 0;
322 right: 0;
323 width: 10px;
323 width: 10px;
324 height: 10px;
324 height: 10px;
325 background: url(./monoblue-corner.png) top right no-repeat !important;
325 background: url(./monoblue-corner.png) top right no-repeat !important;
326 background: none;
326 background: none;
327 }
327 }
328 div#monoblue-corner-bottom-left {
328 div#monoblue-corner-bottom-left {
329 position: absolute;
329 position: absolute;
330 bottom: 0;
330 bottom: 0;
331 left: 0;
331 left: 0;
332 width: 10px;
332 width: 10px;
333 height: 10px;
333 height: 10px;
334 background: url(./monoblue-corner.png) bottom left no-repeat !important;
334 background: url(./monoblue-corner.png) bottom left no-repeat !important;
335 background: none;
335 background: none;
336 }
336 }
337 div#monoblue-corner-bottom-right {
337 div#monoblue-corner-bottom-right {
338 position: absolute;
338 position: absolute;
339 bottom: 0;
339 bottom: 0;
340 right: 0;
340 right: 0;
341 width: 10px;
341 width: 10px;
342 height: 10px;
342 height: 10px;
343 background: url(./monoblue-corner.png) bottom right no-repeat !important;
343 background: url(./monoblue-corner.png) bottom right no-repeat !important;
344 background: none;
344 background: none;
345 }
345 }
346 */
346 */
347 /** end of common settings **/
347 /** end of common settings **/
348
348
349 /** summary **/
349 /** summary **/
350 dl.overview {
350 dl.overview {
351 margin: 0 0 0 30px;
351 margin: 0 0 0 30px;
352 font-size: 1.1em;
352 font-size: 1.1em;
353 overflow: hidden;
353 overflow: hidden;
354 }
354 }
355 dl.overview dt,
355 dl.overview dt,
356 dl.overview dd {
356 dl.overview dd {
357 margin: 5px 0;
357 margin: 5px 0;
358 float: left;
358 float: left;
359 }
359 }
360 dl.overview dt {
360 dl.overview dt {
361 clear: left;
361 clear: left;
362 font-weight: bold;
362 font-weight: bold;
363 width: 150px;
363 width: 150px;
364 }
364 }
365 /** end of summary **/
365 /** end of summary **/
366
366
367 /** chagelog **/
367 /** chagelog **/
368 h3.changelog {
368 h3.changelog {
369 margin: 20px 0 5px 30px;
369 margin: 20px 0 5px 30px;
370 padding: 0 0 2px;
370 padding: 0 0 2px;
371 font-size: 1.4em;
371 font-size: 1.4em;
372 border-bottom: dotted 1px #D5E1E6;
372 border-bottom: dotted 1px #D5E1E6;
373 }
373 }
374 ul.changelog-entry {
374 ul.changelog-entry {
375 margin: 0 0 10px 30px;
375 margin: 0 0 10px 30px;
376 list-style-type: none;
376 list-style-type: none;
377 position: relative;
377 position: relative;
378 }
378 }
379 ul.changelog-entry li span.revdate {
379 ul.changelog-entry li span.revdate {
380 font-size: 1.1em;
380 font-size: 1.1em;
381 }
381 }
382 ul.changelog-entry li.age {
382 ul.changelog-entry li.age {
383 position: absolute;
383 position: absolute;
384 top: -25px;
384 top: -25px;
385 right: 10px;
385 right: 10px;
386 font-size: 1.4em;
386 font-size: 1.4em;
387 color: #CCC;
387 color: #CCC;
388 font-weight: bold;
388 font-weight: bold;
389 font-style: italic;
389 font-style: italic;
390 }
390 }
391 ul.changelog-entry li span.name {
391 ul.changelog-entry li span.name {
392 font-size: 1.2em;
392 font-size: 1.2em;
393 font-weight: bold;
393 font-weight: bold;
394 }
394 }
395 ul.changelog-entry li.description {
395 ul.changelog-entry li.description {
396 margin: 10px 0 0;
396 margin: 10px 0 0;
397 font-size: 1.1em;
397 font-size: 1.1em;
398 }
398 }
399 /** end of changelog **/
399 /** end of changelog **/
400
400
401 /** file **/
401 /** file **/
402 p.files {
402 p.files {
403 margin: 0 0 0 20px;
403 margin: 0 0 0 20px;
404 font-size: 2.0em;
404 font-size: 2.0em;
405 font-weight: bold;
405 font-weight: bold;
406 }
406 }
407 /** end of file **/
407 /** end of file **/
408
408
409 /** changeset **/
409 /** changeset **/
410 h3.changeset {
410 h3.changeset {
411 margin: 20px 0 5px 20px;
411 margin: 20px 0 5px 20px;
412 padding: 0 0 2px;
412 padding: 0 0 2px;
413 font-size: 1.6em;
413 font-size: 1.6em;
414 border-bottom: dotted 1px #D5E1E6;
414 border-bottom: dotted 1px #D5E1E6;
415 }
415 }
416 p.changeset-age {
416 p.changeset-age {
417 position: relative;
417 position: relative;
418 }
418 }
419 p.changeset-age span {
419 p.changeset-age span {
420 position: absolute;
420 position: absolute;
421 top: -25px;
421 top: -25px;
422 right: 10px;
422 right: 10px;
423 font-size: 1.4em;
423 font-size: 1.4em;
424 color: #CCC;
424 color: #CCC;
425 font-weight: bold;
425 font-weight: bold;
426 font-style: italic;
426 font-style: italic;
427 }
427 }
428 p.description {
428 p.description {
429 margin: 10px 30px 0 30px;
429 margin: 10px 30px 0 30px;
430 padding: 10px;
430 padding: 10px;
431 border: solid 1px #CCC;
431 border: solid 1px #CCC;
432 font-size: 1.2em;
432 font-size: 1.2em;
433 }
433 }
434 /** end of changeset **/
434 /** end of changeset **/
435
435
436 /** canvas **/
436 /** canvas **/
437 div#wrapper {
437 div#wrapper {
438 position: relative;
438 position: relative;
439 font-size: 1.2em;
439 font-size: 1.2em;
440 }
440 }
441
441
442 canvas {
442 canvas {
443 position: absolute;
443 position: absolute;
444 z-index: 5;
444 z-index: 5;
445 top: -0.7em;
445 top: -0.7em;
446 }
446 }
447
447
448 ul#nodebgs li.parity0 {
448 ul#nodebgs li.parity0 {
449 background: #F1F6F7;
449 background: #F1F6F7;
450 }
450 }
451
451
452 ul#nodebgs li.parity1 {
452 ul#nodebgs li.parity1 {
453 background: #FFFFFF;
453 background: #FFFFFF;
454 }
454 }
455
455
456 ul#graphnodes {
456 ul#graphnodes {
457 position: absolute;
457 position: absolute;
458 z-index: 10;
458 z-index: 10;
459 top: 7px;
459 top: 7px;
460 list-style: none inside none;
460 list-style: none inside none;
461 }
461 }
462
462
463 ul#nodebgs {
463 ul#nodebgs {
464 list-style: none inside none;
464 list-style: none inside none;
465 }
465 }
466
466
467 ul#graphnodes li, ul#nodebgs li {
467 ul#graphnodes li, ul#nodebgs li {
468 height: 39px;
468 height: 39px;
469 }
469 }
470
470
471 ul#graphnodes li .info {
471 ul#graphnodes li .info {
472 display: block;
472 display: block;
473 position: relative;
473 position: relative;
474 }
474 }
475 /** end of canvas **/
475 /** end of canvas **/
@@ -1,1067 +1,1077 b''
1 An attempt at more fully testing the hgweb web interface.
1 An attempt at more fully testing the hgweb web interface.
2 The following things are tested elsewhere and are therefore omitted:
2 The following things are tested elsewhere and are therefore omitted:
3 - archive, tested in test-archive
3 - archive, tested in test-archive
4 - unbundle, tested in test-push-http
4 - unbundle, tested in test-push-http
5 - changegroupsubset, tested in test-pull
5 - changegroupsubset, tested in test-pull
6
6
7 Set up the repo
7 Set up the repo
8
8
9 $ hg init test
9 $ hg init test
10 $ cd test
10 $ cd test
11 $ mkdir da
11 $ mkdir da
12 $ echo foo > da/foo
12 $ echo foo > da/foo
13 $ echo foo > foo
13 $ echo foo > foo
14 $ hg ci -Ambase
14 $ hg ci -Ambase
15 adding da/foo
15 adding da/foo
16 adding foo
16 adding foo
17 $ hg tag 1.0
17 $ hg tag 1.0
18 $ echo another > foo
18 $ echo another > foo
19 $ hg branch stable
19 $ hg branch stable
20 marked working directory as branch stable
20 marked working directory as branch stable
21 $ hg ci -Ambranch
21 $ hg ci -Ambranch
22 $ hg serve --config server.uncompressed=False -n test -p $HGPORT -d --pid-file=hg.pid -E errors.log
22 $ hg serve --config server.uncompressed=False -n test -p $HGPORT -d --pid-file=hg.pid -E errors.log
23 $ cat hg.pid >> $DAEMON_PIDS
23 $ cat hg.pid >> $DAEMON_PIDS
24
24
25 Logs and changes
25 Logs and changes
26
26
27 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '/log/?style=atom'
27 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '/log/?style=atom'
28 200 Script output follows
28 200 Script output follows
29
29
30 <?xml version="1.0" encoding="ascii"?>
30 <?xml version="1.0" encoding="ascii"?>
31 <feed xmlns="http://www.w3.org/2005/Atom">
31 <feed xmlns="http://www.w3.org/2005/Atom">
32 <!-- Changelog -->
32 <!-- Changelog -->
33 <id>http://*:$HGPORT/</id> (glob)
33 <id>http://*:$HGPORT/</id> (glob)
34 <link rel="self" href="http://*:$HGPORT/atom-log"/> (glob)
34 <link rel="self" href="http://*:$HGPORT/atom-log"/> (glob)
35 <link rel="alternate" href="http://*:$HGPORT/"/> (glob)
35 <link rel="alternate" href="http://*:$HGPORT/"/> (glob)
36 <title>test Changelog</title>
36 <title>test Changelog</title>
37 <updated>1970-01-01T00:00:00+00:00</updated>
37 <updated>1970-01-01T00:00:00+00:00</updated>
38
38
39 <entry>
39 <entry>
40 <title>branch</title>
40 <title>branch</title>
41 <id>http://*:$HGPORT/#changeset-1d22e65f027e5a0609357e7d8e7508cd2ba5d2fe</id> (glob)
41 <id>http://*:$HGPORT/#changeset-1d22e65f027e5a0609357e7d8e7508cd2ba5d2fe</id> (glob)
42 <link href="http://*:$HGPORT/rev/1d22e65f027e"/> (glob)
42 <link href="http://*:$HGPORT/rev/1d22e65f027e"/> (glob)
43 <author>
43 <author>
44 <name>test</name>
44 <name>test</name>
45 <email>&#116;&#101;&#115;&#116;</email>
45 <email>&#116;&#101;&#115;&#116;</email>
46 </author>
46 </author>
47 <updated>1970-01-01T00:00:00+00:00</updated>
47 <updated>1970-01-01T00:00:00+00:00</updated>
48 <published>1970-01-01T00:00:00+00:00</published>
48 <published>1970-01-01T00:00:00+00:00</published>
49 <content type="xhtml">
49 <content type="xhtml">
50 <div xmlns="http://www.w3.org/1999/xhtml">
50 <div xmlns="http://www.w3.org/1999/xhtml">
51 <pre xml:space="preserve">branch</pre>
51 <pre xml:space="preserve">branch</pre>
52 </div>
52 </div>
53 </content>
53 </content>
54 </entry>
54 </entry>
55 <entry>
55 <entry>
56 <title>Added tag 1.0 for changeset 2ef0ac749a14</title>
56 <title>Added tag 1.0 for changeset 2ef0ac749a14</title>
57 <id>http://*:$HGPORT/#changeset-a4f92ed23982be056b9852de5dfe873eaac7f0de</id> (glob)
57 <id>http://*:$HGPORT/#changeset-a4f92ed23982be056b9852de5dfe873eaac7f0de</id> (glob)
58 <link href="http://*:$HGPORT/rev/a4f92ed23982"/> (glob)
58 <link href="http://*:$HGPORT/rev/a4f92ed23982"/> (glob)
59 <author>
59 <author>
60 <name>test</name>
60 <name>test</name>
61 <email>&#116;&#101;&#115;&#116;</email>
61 <email>&#116;&#101;&#115;&#116;</email>
62 </author>
62 </author>
63 <updated>1970-01-01T00:00:00+00:00</updated>
63 <updated>1970-01-01T00:00:00+00:00</updated>
64 <published>1970-01-01T00:00:00+00:00</published>
64 <published>1970-01-01T00:00:00+00:00</published>
65 <content type="xhtml">
65 <content type="xhtml">
66 <div xmlns="http://www.w3.org/1999/xhtml">
66 <div xmlns="http://www.w3.org/1999/xhtml">
67 <pre xml:space="preserve">Added tag 1.0 for changeset 2ef0ac749a14</pre>
67 <pre xml:space="preserve">Added tag 1.0 for changeset 2ef0ac749a14</pre>
68 </div>
68 </div>
69 </content>
69 </content>
70 </entry>
70 </entry>
71 <entry>
71 <entry>
72 <title>base</title>
72 <title>base</title>
73 <id>http://*:$HGPORT/#changeset-2ef0ac749a14e4f57a5a822464a0902c6f7f448f</id> (glob)
73 <id>http://*:$HGPORT/#changeset-2ef0ac749a14e4f57a5a822464a0902c6f7f448f</id> (glob)
74 <link href="http://*:$HGPORT/rev/2ef0ac749a14"/> (glob)
74 <link href="http://*:$HGPORT/rev/2ef0ac749a14"/> (glob)
75 <author>
75 <author>
76 <name>test</name>
76 <name>test</name>
77 <email>&#116;&#101;&#115;&#116;</email>
77 <email>&#116;&#101;&#115;&#116;</email>
78 </author>
78 </author>
79 <updated>1970-01-01T00:00:00+00:00</updated>
79 <updated>1970-01-01T00:00:00+00:00</updated>
80 <published>1970-01-01T00:00:00+00:00</published>
80 <published>1970-01-01T00:00:00+00:00</published>
81 <content type="xhtml">
81 <content type="xhtml">
82 <div xmlns="http://www.w3.org/1999/xhtml">
82 <div xmlns="http://www.w3.org/1999/xhtml">
83 <pre xml:space="preserve">base</pre>
83 <pre xml:space="preserve">base</pre>
84 </div>
84 </div>
85 </content>
85 </content>
86 </entry>
86 </entry>
87
87
88 </feed>
88 </feed>
89 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '/log/1/?style=atom'
89 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '/log/1/?style=atom'
90 200 Script output follows
90 200 Script output follows
91
91
92 <?xml version="1.0" encoding="ascii"?>
92 <?xml version="1.0" encoding="ascii"?>
93 <feed xmlns="http://www.w3.org/2005/Atom">
93 <feed xmlns="http://www.w3.org/2005/Atom">
94 <!-- Changelog -->
94 <!-- Changelog -->
95 <id>http://*:$HGPORT/</id> (glob)
95 <id>http://*:$HGPORT/</id> (glob)
96 <link rel="self" href="http://*:$HGPORT/atom-log"/> (glob)
96 <link rel="self" href="http://*:$HGPORT/atom-log"/> (glob)
97 <link rel="alternate" href="http://*:$HGPORT/"/> (glob)
97 <link rel="alternate" href="http://*:$HGPORT/"/> (glob)
98 <title>test Changelog</title>
98 <title>test Changelog</title>
99 <updated>1970-01-01T00:00:00+00:00</updated>
99 <updated>1970-01-01T00:00:00+00:00</updated>
100
100
101 <entry>
101 <entry>
102 <title>branch</title>
102 <title>branch</title>
103 <id>http://*:$HGPORT/#changeset-1d22e65f027e5a0609357e7d8e7508cd2ba5d2fe</id> (glob)
103 <id>http://*:$HGPORT/#changeset-1d22e65f027e5a0609357e7d8e7508cd2ba5d2fe</id> (glob)
104 <link href="http://*:$HGPORT/rev/1d22e65f027e"/> (glob)
104 <link href="http://*:$HGPORT/rev/1d22e65f027e"/> (glob)
105 <author>
105 <author>
106 <name>test</name>
106 <name>test</name>
107 <email>&#116;&#101;&#115;&#116;</email>
107 <email>&#116;&#101;&#115;&#116;</email>
108 </author>
108 </author>
109 <updated>1970-01-01T00:00:00+00:00</updated>
109 <updated>1970-01-01T00:00:00+00:00</updated>
110 <published>1970-01-01T00:00:00+00:00</published>
110 <published>1970-01-01T00:00:00+00:00</published>
111 <content type="xhtml">
111 <content type="xhtml">
112 <div xmlns="http://www.w3.org/1999/xhtml">
112 <div xmlns="http://www.w3.org/1999/xhtml">
113 <pre xml:space="preserve">branch</pre>
113 <pre xml:space="preserve">branch</pre>
114 </div>
114 </div>
115 </content>
115 </content>
116 </entry>
116 </entry>
117 <entry>
117 <entry>
118 <title>Added tag 1.0 for changeset 2ef0ac749a14</title>
118 <title>Added tag 1.0 for changeset 2ef0ac749a14</title>
119 <id>http://*:$HGPORT/#changeset-a4f92ed23982be056b9852de5dfe873eaac7f0de</id> (glob)
119 <id>http://*:$HGPORT/#changeset-a4f92ed23982be056b9852de5dfe873eaac7f0de</id> (glob)
120 <link href="http://*:$HGPORT/rev/a4f92ed23982"/> (glob)
120 <link href="http://*:$HGPORT/rev/a4f92ed23982"/> (glob)
121 <author>
121 <author>
122 <name>test</name>
122 <name>test</name>
123 <email>&#116;&#101;&#115;&#116;</email>
123 <email>&#116;&#101;&#115;&#116;</email>
124 </author>
124 </author>
125 <updated>1970-01-01T00:00:00+00:00</updated>
125 <updated>1970-01-01T00:00:00+00:00</updated>
126 <published>1970-01-01T00:00:00+00:00</published>
126 <published>1970-01-01T00:00:00+00:00</published>
127 <content type="xhtml">
127 <content type="xhtml">
128 <div xmlns="http://www.w3.org/1999/xhtml">
128 <div xmlns="http://www.w3.org/1999/xhtml">
129 <pre xml:space="preserve">Added tag 1.0 for changeset 2ef0ac749a14</pre>
129 <pre xml:space="preserve">Added tag 1.0 for changeset 2ef0ac749a14</pre>
130 </div>
130 </div>
131 </content>
131 </content>
132 </entry>
132 </entry>
133 <entry>
133 <entry>
134 <title>base</title>
134 <title>base</title>
135 <id>http://*:$HGPORT/#changeset-2ef0ac749a14e4f57a5a822464a0902c6f7f448f</id> (glob)
135 <id>http://*:$HGPORT/#changeset-2ef0ac749a14e4f57a5a822464a0902c6f7f448f</id> (glob)
136 <link href="http://*:$HGPORT/rev/2ef0ac749a14"/> (glob)
136 <link href="http://*:$HGPORT/rev/2ef0ac749a14"/> (glob)
137 <author>
137 <author>
138 <name>test</name>
138 <name>test</name>
139 <email>&#116;&#101;&#115;&#116;</email>
139 <email>&#116;&#101;&#115;&#116;</email>
140 </author>
140 </author>
141 <updated>1970-01-01T00:00:00+00:00</updated>
141 <updated>1970-01-01T00:00:00+00:00</updated>
142 <published>1970-01-01T00:00:00+00:00</published>
142 <published>1970-01-01T00:00:00+00:00</published>
143 <content type="xhtml">
143 <content type="xhtml">
144 <div xmlns="http://www.w3.org/1999/xhtml">
144 <div xmlns="http://www.w3.org/1999/xhtml">
145 <pre xml:space="preserve">base</pre>
145 <pre xml:space="preserve">base</pre>
146 </div>
146 </div>
147 </content>
147 </content>
148 </entry>
148 </entry>
149
149
150 </feed>
150 </feed>
151 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '/log/1/foo/?style=atom'
151 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '/log/1/foo/?style=atom'
152 200 Script output follows
152 200 Script output follows
153
153
154 <?xml version="1.0" encoding="ascii"?>
154 <?xml version="1.0" encoding="ascii"?>
155 <feed xmlns="http://www.w3.org/2005/Atom">
155 <feed xmlns="http://www.w3.org/2005/Atom">
156 <id>http://*:$HGPORT/atom-log/tip/foo</id> (glob)
156 <id>http://*:$HGPORT/atom-log/tip/foo</id> (glob)
157 <link rel="self" href="http://*:$HGPORT/atom-log/tip/foo"/> (glob)
157 <link rel="self" href="http://*:$HGPORT/atom-log/tip/foo"/> (glob)
158 <title>test: foo history</title>
158 <title>test: foo history</title>
159 <updated>1970-01-01T00:00:00+00:00</updated>
159 <updated>1970-01-01T00:00:00+00:00</updated>
160
160
161 <entry>
161 <entry>
162 <title>base</title>
162 <title>base</title>
163 <id>http://*:$HGPORT/#changeset-2ef0ac749a14e4f57a5a822464a0902c6f7f448f</id> (glob)
163 <id>http://*:$HGPORT/#changeset-2ef0ac749a14e4f57a5a822464a0902c6f7f448f</id> (glob)
164 <link href="http://*:$HGPORT/rev/2ef0ac749a14"/> (glob)
164 <link href="http://*:$HGPORT/rev/2ef0ac749a14"/> (glob)
165 <author>
165 <author>
166 <name>test</name>
166 <name>test</name>
167 <email>&#116;&#101;&#115;&#116;</email>
167 <email>&#116;&#101;&#115;&#116;</email>
168 </author>
168 </author>
169 <updated>1970-01-01T00:00:00+00:00</updated>
169 <updated>1970-01-01T00:00:00+00:00</updated>
170 <published>1970-01-01T00:00:00+00:00</published>
170 <published>1970-01-01T00:00:00+00:00</published>
171 <content type="xhtml">
171 <content type="xhtml">
172 <div xmlns="http://www.w3.org/1999/xhtml">
172 <div xmlns="http://www.w3.org/1999/xhtml">
173 <pre xml:space="preserve">base</pre>
173 <pre xml:space="preserve">base</pre>
174 </div>
174 </div>
175 </content>
175 </content>
176 </entry>
176 </entry>
177
177
178 </feed>
178 </feed>
179 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '/shortlog/'
179 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '/shortlog/'
180 200 Script output follows
180 200 Script output follows
181
181
182 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
182 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
183 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
183 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
184 <head>
184 <head>
185 <link rel="icon" href="/static/hgicon.png" type="image/png" />
185 <link rel="icon" href="/static/hgicon.png" type="image/png" />
186 <meta name="robots" content="index, nofollow" />
186 <meta name="robots" content="index, nofollow" />
187 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
187 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
188
188
189 <title>test: log</title>
189 <title>test: log</title>
190 <link rel="alternate" type="application/atom+xml"
190 <link rel="alternate" type="application/atom+xml"
191 href="/atom-log" title="Atom feed for test" />
191 href="/atom-log" title="Atom feed for test" />
192 <link rel="alternate" type="application/rss+xml"
192 <link rel="alternate" type="application/rss+xml"
193 href="/rss-log" title="RSS feed for test" />
193 href="/rss-log" title="RSS feed for test" />
194 </head>
194 </head>
195 <body>
195 <body>
196
196
197 <div class="container">
197 <div class="container">
198 <div class="menu">
198 <div class="menu">
199 <div class="logo">
199 <div class="logo">
200 <a href="http://mercurial.selenic.com/">
200 <a href="http://mercurial.selenic.com/">
201 <img src="/static/hglogo.png" alt="mercurial" /></a>
201 <img src="/static/hglogo.png" alt="mercurial" /></a>
202 </div>
202 </div>
203 <ul>
203 <ul>
204 <li class="active">log</li>
204 <li class="active">log</li>
205 <li><a href="/graph/1d22e65f027e">graph</a></li>
205 <li><a href="/graph/1d22e65f027e">graph</a></li>
206 <li><a href="/tags">tags</a></li>
206 <li><a href="/tags">tags</a></li>
207 <li><a href="/branches">branches</a></li>
207 <li><a href="/branches">branches</a></li>
208 <li><a href="/help">help</a></li>
208 </ul>
209 </ul>
209 <ul>
210 <ul>
210 <li><a href="/rev/1d22e65f027e">changeset</a></li>
211 <li><a href="/rev/1d22e65f027e">changeset</a></li>
211 <li><a href="/file/1d22e65f027e">browse</a></li>
212 <li><a href="/file/1d22e65f027e">browse</a></li>
212 </ul>
213 </ul>
213 <ul>
214 <ul>
214
215
215 </ul>
216 </ul>
217 <ul>
218 <li><a href="/help">help</a></li>
219 </ul>
216 </div>
220 </div>
217
221
218 <div class="main">
222 <div class="main">
219 <h2><a href="/">test</a></h2>
223 <h2><a href="/">test</a></h2>
220 <h3>log</h3>
224 <h3>log</h3>
221
225
222 <form class="search" action="/log">
226 <form class="search" action="/log">
223
227
224 <p><input name="rev" id="search1" type="text" size="30" /></p>
228 <p><input name="rev" id="search1" type="text" size="30" /></p>
225 <div id="hint">find changesets by author, revision,
229 <div id="hint">find changesets by author, revision,
226 files, or words in the commit message</div>
230 files, or words in the commit message</div>
227 </form>
231 </form>
228
232
229 <div class="navigate">
233 <div class="navigate">
230 <a href="/shortlog/2?revcount=30">less</a>
234 <a href="/shortlog/2?revcount=30">less</a>
231 <a href="/shortlog/2?revcount=120">more</a>
235 <a href="/shortlog/2?revcount=120">more</a>
232 | rev 2: <a href="/shortlog/2ef0ac749a14">(0)</a> <a href="/shortlog/tip">tip</a>
236 | rev 2: <a href="/shortlog/2ef0ac749a14">(0)</a> <a href="/shortlog/tip">tip</a>
233 </div>
237 </div>
234
238
235 <table class="bigtable">
239 <table class="bigtable">
236 <tr>
240 <tr>
237 <th class="age">age</th>
241 <th class="age">age</th>
238 <th class="author">author</th>
242 <th class="author">author</th>
239 <th class="description">description</th>
243 <th class="description">description</th>
240 </tr>
244 </tr>
241 <tr class="parity0">
245 <tr class="parity0">
242 <td class="age">1970-01-01</td>
246 <td class="age">1970-01-01</td>
243 <td class="author">test</td>
247 <td class="author">test</td>
244 <td class="description"><a href="/rev/1d22e65f027e">branch</a><span class="branchhead">stable</span> <span class="tag">tip</span> </td>
248 <td class="description"><a href="/rev/1d22e65f027e">branch</a><span class="branchhead">stable</span> <span class="tag">tip</span> </td>
245 </tr>
249 </tr>
246 <tr class="parity1">
250 <tr class="parity1">
247 <td class="age">1970-01-01</td>
251 <td class="age">1970-01-01</td>
248 <td class="author">test</td>
252 <td class="author">test</td>
249 <td class="description"><a href="/rev/a4f92ed23982">Added tag 1.0 for changeset 2ef0ac749a14</a><span class="branchhead">default</span> </td>
253 <td class="description"><a href="/rev/a4f92ed23982">Added tag 1.0 for changeset 2ef0ac749a14</a><span class="branchhead">default</span> </td>
250 </tr>
254 </tr>
251 <tr class="parity0">
255 <tr class="parity0">
252 <td class="age">1970-01-01</td>
256 <td class="age">1970-01-01</td>
253 <td class="author">test</td>
257 <td class="author">test</td>
254 <td class="description"><a href="/rev/2ef0ac749a14">base</a><span class="tag">1.0</span> </td>
258 <td class="description"><a href="/rev/2ef0ac749a14">base</a><span class="tag">1.0</span> </td>
255 </tr>
259 </tr>
256
260
257 </table>
261 </table>
258
262
259 <div class="navigate">
263 <div class="navigate">
260 <a href="/shortlog/2?revcount=30">less</a>
264 <a href="/shortlog/2?revcount=30">less</a>
261 <a href="/shortlog/2?revcount=120">more</a>
265 <a href="/shortlog/2?revcount=120">more</a>
262 | rev 2: <a href="/shortlog/2ef0ac749a14">(0)</a> <a href="/shortlog/tip">tip</a>
266 | rev 2: <a href="/shortlog/2ef0ac749a14">(0)</a> <a href="/shortlog/tip">tip</a>
263 </div>
267 </div>
264
268
265 </div>
269 </div>
266 </div>
270 </div>
267
271
268
272
269
273
270 </body>
274 </body>
271 </html>
275 </html>
272
276
273 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '/rev/0/'
277 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '/rev/0/'
274 200 Script output follows
278 200 Script output follows
275
279
276 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
280 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
277 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
281 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
278 <head>
282 <head>
279 <link rel="icon" href="/static/hgicon.png" type="image/png" />
283 <link rel="icon" href="/static/hgicon.png" type="image/png" />
280 <meta name="robots" content="index, nofollow" />
284 <meta name="robots" content="index, nofollow" />
281 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
285 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
282
286
283 <title>test: 2ef0ac749a14</title>
287 <title>test: 2ef0ac749a14</title>
284 </head>
288 </head>
285 <body>
289 <body>
286 <div class="container">
290 <div class="container">
287 <div class="menu">
291 <div class="menu">
288 <div class="logo">
292 <div class="logo">
289 <a href="http://mercurial.selenic.com/">
293 <a href="http://mercurial.selenic.com/">
290 <img src="/static/hglogo.png" alt="mercurial" /></a>
294 <img src="/static/hglogo.png" alt="mercurial" /></a>
291 </div>
295 </div>
292 <ul>
296 <ul>
293 <li><a href="/shortlog/2ef0ac749a14">log</a></li>
297 <li><a href="/shortlog/2ef0ac749a14">log</a></li>
294 <li><a href="/graph/2ef0ac749a14">graph</a></li>
298 <li><a href="/graph/2ef0ac749a14">graph</a></li>
295 <li><a href="/tags">tags</a></li>
299 <li><a href="/tags">tags</a></li>
296 <li><a href="/branches">branches</a></li>
300 <li><a href="/branches">branches</a></li>
301 <li><a href="/help">help</a></li>
297 </ul>
302 </ul>
298 <ul>
303 <ul>
299 <li class="active">changeset</li>
304 <li class="active">changeset</li>
300 <li><a href="/raw-rev/2ef0ac749a14">raw</a></li>
305 <li><a href="/raw-rev/2ef0ac749a14">raw</a></li>
301 <li><a href="/file/2ef0ac749a14">browse</a></li>
306 <li><a href="/file/2ef0ac749a14">browse</a></li>
302 </ul>
307 </ul>
303 <ul>
308 <ul>
304
309
305 </ul>
310 </ul>
311 <ul>
312 <li><a href="/help">help</a></li>
313 </ul>
306 </div>
314 </div>
307
315
308 <div class="main">
316 <div class="main">
309
317
310 <h2><a href="/">test</a></h2>
318 <h2><a href="/">test</a></h2>
311 <h3>changeset 0:2ef0ac749a14 <span class="tag">1.0</span> </h3>
319 <h3>changeset 0:2ef0ac749a14 <span class="tag">1.0</span> </h3>
312
320
313 <form class="search" action="/log">
321 <form class="search" action="/log">
314
322
315 <p><input name="rev" id="search1" type="text" size="30" /></p>
323 <p><input name="rev" id="search1" type="text" size="30" /></p>
316 <div id="hint">find changesets by author, revision,
324 <div id="hint">find changesets by author, revision,
317 files, or words in the commit message</div>
325 files, or words in the commit message</div>
318 </form>
326 </form>
319
327
320 <div class="description">base</div>
328 <div class="description">base</div>
321
329
322 <table id="changesetEntry">
330 <table id="changesetEntry">
323 <tr>
331 <tr>
324 <th class="author">author</th>
332 <th class="author">author</th>
325 <td class="author">&#116;&#101;&#115;&#116;</td>
333 <td class="author">&#116;&#101;&#115;&#116;</td>
326 </tr>
334 </tr>
327 <tr>
335 <tr>
328 <th class="date">date</th>
336 <th class="date">date</th>
329 <td class="date">Thu Jan 01 00:00:00 1970 +0000 (1970-01-01)</td></tr>
337 <td class="date">Thu Jan 01 00:00:00 1970 +0000 (1970-01-01)</td></tr>
330 <tr>
338 <tr>
331 <th class="author">parents</th>
339 <th class="author">parents</th>
332 <td class="author"></td>
340 <td class="author"></td>
333 </tr>
341 </tr>
334 <tr>
342 <tr>
335 <th class="author">children</th>
343 <th class="author">children</th>
336 <td class="author"> <a href="/rev/a4f92ed23982">a4f92ed23982</a></td>
344 <td class="author"> <a href="/rev/a4f92ed23982">a4f92ed23982</a></td>
337 </tr>
345 </tr>
338 <tr>
346 <tr>
339 <th class="files">files</th>
347 <th class="files">files</th>
340 <td class="files"><a href="/file/2ef0ac749a14/da/foo">da/foo</a> <a href="/file/2ef0ac749a14/foo">foo</a> </td>
348 <td class="files"><a href="/file/2ef0ac749a14/da/foo">da/foo</a> <a href="/file/2ef0ac749a14/foo">foo</a> </td>
341 </tr>
349 </tr>
342 </table>
350 </table>
343
351
344 <div class="overflow">
352 <div class="overflow">
345 <div class="sourcefirst"> line diff</div>
353 <div class="sourcefirst"> line diff</div>
346
354
347 <div class="source bottomline parity0"><pre><a href="#l1.1" id="l1.1"> 1.1</a> <span class="minusline">--- /dev/null Thu Jan 01 00:00:00 1970 +0000
355 <div class="source bottomline parity0"><pre><a href="#l1.1" id="l1.1"> 1.1</a> <span class="minusline">--- /dev/null Thu Jan 01 00:00:00 1970 +0000
348 </span><a href="#l1.2" id="l1.2"> 1.2</a> <span class="plusline">+++ b/da/foo Thu Jan 01 00:00:00 1970 +0000
356 </span><a href="#l1.2" id="l1.2"> 1.2</a> <span class="plusline">+++ b/da/foo Thu Jan 01 00:00:00 1970 +0000
349 </span><a href="#l1.3" id="l1.3"> 1.3</a> <span class="atline">@@ -0,0 +1,1 @@
357 </span><a href="#l1.3" id="l1.3"> 1.3</a> <span class="atline">@@ -0,0 +1,1 @@
350 </span><a href="#l1.4" id="l1.4"> 1.4</a> <span class="plusline">+foo
358 </span><a href="#l1.4" id="l1.4"> 1.4</a> <span class="plusline">+foo
351 </span></pre></div><div class="source bottomline parity1"><pre><a href="#l2.1" id="l2.1"> 2.1</a> <span class="minusline">--- /dev/null Thu Jan 01 00:00:00 1970 +0000
359 </span></pre></div><div class="source bottomline parity1"><pre><a href="#l2.1" id="l2.1"> 2.1</a> <span class="minusline">--- /dev/null Thu Jan 01 00:00:00 1970 +0000
352 </span><a href="#l2.2" id="l2.2"> 2.2</a> <span class="plusline">+++ b/foo Thu Jan 01 00:00:00 1970 +0000
360 </span><a href="#l2.2" id="l2.2"> 2.2</a> <span class="plusline">+++ b/foo Thu Jan 01 00:00:00 1970 +0000
353 </span><a href="#l2.3" id="l2.3"> 2.3</a> <span class="atline">@@ -0,0 +1,1 @@
361 </span><a href="#l2.3" id="l2.3"> 2.3</a> <span class="atline">@@ -0,0 +1,1 @@
354 </span><a href="#l2.4" id="l2.4"> 2.4</a> <span class="plusline">+foo
362 </span><a href="#l2.4" id="l2.4"> 2.4</a> <span class="plusline">+foo
355 </span></pre></div>
363 </span></pre></div>
356 </div>
364 </div>
357
365
358 </div>
366 </div>
359 </div>
367 </div>
360
368
361
369
362 </body>
370 </body>
363 </html>
371 </html>
364
372
365 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '/rev/1/?style=raw'
373 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '/rev/1/?style=raw'
366 200 Script output follows
374 200 Script output follows
367
375
368
376
369 # HG changeset patch
377 # HG changeset patch
370 # User test
378 # User test
371 # Date 0 0
379 # Date 0 0
372 # Node ID a4f92ed23982be056b9852de5dfe873eaac7f0de
380 # Node ID a4f92ed23982be056b9852de5dfe873eaac7f0de
373 # Parent 2ef0ac749a14e4f57a5a822464a0902c6f7f448f
381 # Parent 2ef0ac749a14e4f57a5a822464a0902c6f7f448f
374 Added tag 1.0 for changeset 2ef0ac749a14
382 Added tag 1.0 for changeset 2ef0ac749a14
375
383
376 diff -r 2ef0ac749a14 -r a4f92ed23982 .hgtags
384 diff -r 2ef0ac749a14 -r a4f92ed23982 .hgtags
377 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
385 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
378 +++ b/.hgtags Thu Jan 01 00:00:00 1970 +0000
386 +++ b/.hgtags Thu Jan 01 00:00:00 1970 +0000
379 @@ -0,0 +1,1 @@
387 @@ -0,0 +1,1 @@
380 +2ef0ac749a14e4f57a5a822464a0902c6f7f448f 1.0
388 +2ef0ac749a14e4f57a5a822464a0902c6f7f448f 1.0
381
389
382 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '/log?rev=base'
390 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '/log?rev=base'
383 200 Script output follows
391 200 Script output follows
384
392
385 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
393 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
386 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
394 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
387 <head>
395 <head>
388 <link rel="icon" href="/static/hgicon.png" type="image/png" />
396 <link rel="icon" href="/static/hgicon.png" type="image/png" />
389 <meta name="robots" content="index, nofollow" />
397 <meta name="robots" content="index, nofollow" />
390 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
398 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
391
399
392 <title>test: searching for base</title>
400 <title>test: searching for base</title>
393 </head>
401 </head>
394 <body>
402 <body>
395
403
396 <div class="container">
404 <div class="container">
397 <div class="menu">
405 <div class="menu">
398 <div class="logo">
406 <div class="logo">
399 <a href="http://mercurial.selenic.com/">
407 <a href="http://mercurial.selenic.com/">
400 <img src="/static/hglogo.png" width=75 height=90 border=0 alt="mercurial"></a>
408 <img src="/static/hglogo.png" width=75 height=90 border=0 alt="mercurial"></a>
401 </div>
409 </div>
402 <ul>
410 <ul>
403 <li><a href="/shortlog">log</a></li>
411 <li><a href="/shortlog">log</a></li>
404 <li><a href="/graph">graph</a></li>
412 <li><a href="/graph">graph</a></li>
405 <li><a href="/tags">tags</a></li>
413 <li><a href="/tags">tags</a></li>
406 <li><a href="/branches">branches</a></li>
414 <li><a href="/branches">branches</a></li>
407 </ul>
415 </ul>
408 </div>
416 </div>
409
417
410 <div class="main">
418 <div class="main">
411 <h2><a href="/">test</a></h2>
419 <h2><a href="/">test</a></h2>
412 <h3>searching for 'base'</h3>
420 <h3>searching for 'base'</h3>
413
421
414 <form class="search" action="/log">
422 <form class="search" action="/log">
415
423
416 <p><input name="rev" id="search1" type="text" size="30"></p>
424 <p><input name="rev" id="search1" type="text" size="30"></p>
417 <div id="hint">find changesets by author, revision,
425 <div id="hint">find changesets by author, revision,
418 files, or words in the commit message</div>
426 files, or words in the commit message</div>
419 </form>
427 </form>
420
428
421 <div class="navigate">
429 <div class="navigate">
422 <a href="/search/?rev=base&revcount=5">less</a>
430 <a href="/search/?rev=base&revcount=5">less</a>
423 <a href="/search/?rev=base&revcount=20">more</a>
431 <a href="/search/?rev=base&revcount=20">more</a>
424 </div>
432 </div>
425
433
426 <table class="bigtable">
434 <table class="bigtable">
427 <tr>
435 <tr>
428 <th class="age">age</th>
436 <th class="age">age</th>
429 <th class="author">author</th>
437 <th class="author">author</th>
430 <th class="description">description</th>
438 <th class="description">description</th>
431 </tr>
439 </tr>
432 <tr class="parity0">
440 <tr class="parity0">
433 <td class="age">1970-01-01</td>
441 <td class="age">1970-01-01</td>
434 <td class="author">test</td>
442 <td class="author">test</td>
435 <td class="description"><a href="/rev/2ef0ac749a14">base</a><span class="tag">1.0</span> </td>
443 <td class="description"><a href="/rev/2ef0ac749a14">base</a><span class="tag">1.0</span> </td>
436 </tr>
444 </tr>
437
445
438 </table>
446 </table>
439
447
440 <div class="navigate">
448 <div class="navigate">
441 <a href="/search/?rev=base&revcount=5">less</a>
449 <a href="/search/?rev=base&revcount=5">less</a>
442 <a href="/search/?rev=base&revcount=20">more</a>
450 <a href="/search/?rev=base&revcount=20">more</a>
443 </div>
451 </div>
444
452
445 </div>
453 </div>
446 </div>
454 </div>
447
455
448
456
449
457
450 </body>
458 </body>
451 </html>
459 </html>
452
460
453
461
454 File-related
462 File-related
455
463
456 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '/file/1/foo/?style=raw'
464 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '/file/1/foo/?style=raw'
457 200 Script output follows
465 200 Script output follows
458
466
459 foo
467 foo
460 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '/annotate/1/foo/?style=raw'
468 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '/annotate/1/foo/?style=raw'
461 200 Script output follows
469 200 Script output follows
462
470
463
471
464 test@0: foo
472 test@0: foo
465
473
466
474
467
475
468
476
469 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '/file/1/?style=raw'
477 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '/file/1/?style=raw'
470 200 Script output follows
478 200 Script output follows
471
479
472
480
473 drwxr-xr-x da
481 drwxr-xr-x da
474 -rw-r--r-- 45 .hgtags
482 -rw-r--r-- 45 .hgtags
475 -rw-r--r-- 4 foo
483 -rw-r--r-- 4 foo
476
484
477
485
478 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '/file/1/foo'
486 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '/file/1/foo'
479 200 Script output follows
487 200 Script output follows
480
488
481 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
489 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
482 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
490 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
483 <head>
491 <head>
484 <link rel="icon" href="/static/hgicon.png" type="image/png" />
492 <link rel="icon" href="/static/hgicon.png" type="image/png" />
485 <meta name="robots" content="index, nofollow" />
493 <meta name="robots" content="index, nofollow" />
486 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
494 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
487
495
488 <title>test: a4f92ed23982 foo</title>
496 <title>test: a4f92ed23982 foo</title>
489 </head>
497 </head>
490 <body>
498 <body>
491
499
492 <div class="container">
500 <div class="container">
493 <div class="menu">
501 <div class="menu">
494 <div class="logo">
502 <div class="logo">
495 <a href="http://mercurial.selenic.com/">
503 <a href="http://mercurial.selenic.com/">
496 <img src="/static/hglogo.png" alt="mercurial" /></a>
504 <img src="/static/hglogo.png" alt="mercurial" /></a>
497 </div>
505 </div>
498 <ul>
506 <ul>
499 <li><a href="/shortlog/a4f92ed23982">log</a></li>
507 <li><a href="/shortlog/a4f92ed23982">log</a></li>
500 <li><a href="/graph/a4f92ed23982">graph</a></li>
508 <li><a href="/graph/a4f92ed23982">graph</a></li>
501 <li><a href="/tags">tags</a></li>
509 <li><a href="/tags">tags</a></li>
502 <li><a href="/branches">branches</a></li>
510 <li><a href="/branches">branches</a></li>
503 </ul>
511 </ul>
504 <ul>
512 <ul>
505 <li><a href="/rev/a4f92ed23982">changeset</a></li>
513 <li><a href="/rev/a4f92ed23982">changeset</a></li>
506 <li><a href="/file/a4f92ed23982/">browse</a></li>
514 <li><a href="/file/a4f92ed23982/">browse</a></li>
507 </ul>
515 </ul>
508 <ul>
516 <ul>
509 <li class="active">file</li>
517 <li class="active">file</li>
510 <li><a href="/file/tip/foo">latest</a></li>
518 <li><a href="/file/tip/foo">latest</a></li>
511 <li><a href="/diff/a4f92ed23982/foo">diff</a></li>
519 <li><a href="/diff/a4f92ed23982/foo">diff</a></li>
512 <li><a href="/annotate/a4f92ed23982/foo">annotate</a></li>
520 <li><a href="/annotate/a4f92ed23982/foo">annotate</a></li>
513 <li><a href="/log/a4f92ed23982/foo">file log</a></li>
521 <li><a href="/log/a4f92ed23982/foo">file log</a></li>
514 <li><a href="/raw-file/a4f92ed23982/foo">raw</a></li>
522 <li><a href="/raw-file/a4f92ed23982/foo">raw</a></li>
515 </ul>
523 </ul>
516 </div>
524 </div>
517
525
518 <div class="main">
526 <div class="main">
519 <h2><a href="/">test</a></h2>
527 <h2><a href="/">test</a></h2>
520 <h3>view foo @ 1:a4f92ed23982</h3>
528 <h3>view foo @ 1:a4f92ed23982</h3>
521
529
522 <form class="search" action="/log">
530 <form class="search" action="/log">
523
531
524 <p><input name="rev" id="search1" type="text" size="30" /></p>
532 <p><input name="rev" id="search1" type="text" size="30" /></p>
525 <div id="hint">find changesets by author, revision,
533 <div id="hint">find changesets by author, revision,
526 files, or words in the commit message</div>
534 files, or words in the commit message</div>
527 </form>
535 </form>
528
536
529 <div class="description">Added tag 1.0 for changeset 2ef0ac749a14</div>
537 <div class="description">Added tag 1.0 for changeset 2ef0ac749a14</div>
530
538
531 <table id="changesetEntry">
539 <table id="changesetEntry">
532 <tr>
540 <tr>
533 <th class="author">author</th>
541 <th class="author">author</th>
534 <td class="author">&#116;&#101;&#115;&#116;</td>
542 <td class="author">&#116;&#101;&#115;&#116;</td>
535 </tr>
543 </tr>
536 <tr>
544 <tr>
537 <th class="date">date</th>
545 <th class="date">date</th>
538 <td class="date">Thu Jan 01 00:00:00 1970 +0000 (1970-01-01)</td>
546 <td class="date">Thu Jan 01 00:00:00 1970 +0000 (1970-01-01)</td>
539 </tr>
547 </tr>
540 <tr>
548 <tr>
541 <th class="author">parents</th>
549 <th class="author">parents</th>
542 <td class="author"></td>
550 <td class="author"></td>
543 </tr>
551 </tr>
544 <tr>
552 <tr>
545 <th class="author">children</th>
553 <th class="author">children</th>
546 <td class="author"><a href="/file/1d22e65f027e/foo">1d22e65f027e</a> </td>
554 <td class="author"><a href="/file/1d22e65f027e/foo">1d22e65f027e</a> </td>
547 </tr>
555 </tr>
548
556
549 </table>
557 </table>
550
558
551 <div class="overflow">
559 <div class="overflow">
552 <div class="sourcefirst"> line source</div>
560 <div class="sourcefirst"> line source</div>
553
561
554 <div class="parity0 source"><a href="#l1" id="l1"> 1</a> foo
562 <div class="parity0 source"><a href="#l1" id="l1"> 1</a> foo
555 </div>
563 </div>
556 <div class="sourcelast"></div>
564 <div class="sourcelast"></div>
557 </div>
565 </div>
558 </div>
566 </div>
559 </div>
567 </div>
560
568
561
569
562
570
563 </body>
571 </body>
564 </html>
572 </html>
565
573
566 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '/filediff/1/foo/?style=raw'
574 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '/filediff/1/foo/?style=raw'
567 200 Script output follows
575 200 Script output follows
568
576
569
577
570 diff -r 000000000000 -r a4f92ed23982 foo
578 diff -r 000000000000 -r a4f92ed23982 foo
571 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
579 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
572 +++ b/foo Thu Jan 01 00:00:00 1970 +0000
580 +++ b/foo Thu Jan 01 00:00:00 1970 +0000
573 @@ -0,0 +1,1 @@
581 @@ -0,0 +1,1 @@
574 +foo
582 +foo
575
583
576
584
577
585
578
586
579
587
580 Overviews
588 Overviews
581
589
582 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '/raw-tags'
590 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '/raw-tags'
583 200 Script output follows
591 200 Script output follows
584
592
585 tip 1d22e65f027e5a0609357e7d8e7508cd2ba5d2fe
593 tip 1d22e65f027e5a0609357e7d8e7508cd2ba5d2fe
586 1.0 2ef0ac749a14e4f57a5a822464a0902c6f7f448f
594 1.0 2ef0ac749a14e4f57a5a822464a0902c6f7f448f
587 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '/raw-branches'
595 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '/raw-branches'
588 200 Script output follows
596 200 Script output follows
589
597
590 stable 1d22e65f027e5a0609357e7d8e7508cd2ba5d2fe open
598 stable 1d22e65f027e5a0609357e7d8e7508cd2ba5d2fe open
591 default a4f92ed23982be056b9852de5dfe873eaac7f0de inactive
599 default a4f92ed23982be056b9852de5dfe873eaac7f0de inactive
592 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '/summary/?style=gitweb'
600 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '/summary/?style=gitweb'
593 200 Script output follows
601 200 Script output follows
594
602
595 <?xml version="1.0" encoding="ascii"?>
603 <?xml version="1.0" encoding="ascii"?>
596 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
604 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
597 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US" lang="en-US">
605 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US" lang="en-US">
598 <head>
606 <head>
599 <link rel="icon" href="/static/hgicon.png" type="image/png" />
607 <link rel="icon" href="/static/hgicon.png" type="image/png" />
600 <meta name="robots" content="index, nofollow"/>
608 <meta name="robots" content="index, nofollow"/>
601 <link rel="stylesheet" href="/static/style-gitweb.css" type="text/css" />
609 <link rel="stylesheet" href="/static/style-gitweb.css" type="text/css" />
602
610
603
611
604 <title>test: Summary</title>
612 <title>test: Summary</title>
605 <link rel="alternate" type="application/atom+xml"
613 <link rel="alternate" type="application/atom+xml"
606 href="/atom-log" title="Atom feed for test"/>
614 href="/atom-log" title="Atom feed for test"/>
607 <link rel="alternate" type="application/rss+xml"
615 <link rel="alternate" type="application/rss+xml"
608 href="/rss-log" title="RSS feed for test"/>
616 href="/rss-log" title="RSS feed for test"/>
609 </head>
617 </head>
610 <body>
618 <body>
611
619
612 <div class="page_header">
620 <div class="page_header">
613 <a href="http://mercurial.selenic.com/" title="Mercurial" style="float: right;">Mercurial</a><a href="/summary?style=gitweb">test</a> / summary
621 <a href="http://mercurial.selenic.com/" title="Mercurial" style="float: right;">Mercurial</a><a href="/summary?style=gitweb">test</a> / summary
614
622
615 <form action="/log">
623 <form action="/log">
616 <input type="hidden" name="style" value="gitweb" />
624 <input type="hidden" name="style" value="gitweb" />
617 <div class="search">
625 <div class="search">
618 <input type="text" name="rev" />
626 <input type="text" name="rev" />
619 </div>
627 </div>
620 </form>
628 </form>
621 </div>
629 </div>
622
630
623 <div class="page_nav">
631 <div class="page_nav">
624 summary |
632 summary |
625 <a href="/shortlog?style=gitweb">shortlog</a> |
633 <a href="/shortlog?style=gitweb">shortlog</a> |
626 <a href="/log?style=gitweb">changelog</a> |
634 <a href="/log?style=gitweb">changelog</a> |
627 <a href="/graph?style=gitweb">graph</a> |
635 <a href="/graph?style=gitweb">graph</a> |
628 <a href="/tags?style=gitweb">tags</a> |
636 <a href="/tags?style=gitweb">tags</a> |
629 <a href="/branches?style=gitweb">branches</a> |
637 <a href="/branches?style=gitweb">branches</a> |
630 <a href="/file/1d22e65f027e?style=gitweb">files</a>
638 <a href="/file/1d22e65f027e?style=gitweb">files</a> |
639 <a href="/help?style=gitweb">help</a>
631 <br/>
640 <br/>
632 </div>
641 </div>
633
642
634 <div class="title">&nbsp;</div>
643 <div class="title">&nbsp;</div>
635 <table cellspacing="0">
644 <table cellspacing="0">
636 <tr><td>description</td><td>unknown</td></tr>
645 <tr><td>description</td><td>unknown</td></tr>
637 <tr><td>owner</td><td>&#70;&#111;&#111;&#32;&#66;&#97;&#114;&#32;&#60;&#102;&#111;&#111;&#46;&#98;&#97;&#114;&#64;&#101;&#120;&#97;&#109;&#112;&#108;&#101;&#46;&#99;&#111;&#109;&#62;</td></tr>
646 <tr><td>owner</td><td>&#70;&#111;&#111;&#32;&#66;&#97;&#114;&#32;&#60;&#102;&#111;&#111;&#46;&#98;&#97;&#114;&#64;&#101;&#120;&#97;&#109;&#112;&#108;&#101;&#46;&#99;&#111;&#109;&#62;</td></tr>
638 <tr><td>last change</td><td>Thu, 01 Jan 1970 00:00:00 +0000</td></tr>
647 <tr><td>last change</td><td>Thu, 01 Jan 1970 00:00:00 +0000</td></tr>
639 </table>
648 </table>
640
649
641 <div><a class="title" href="/shortlog?style=gitweb">changes</a></div>
650 <div><a class="title" href="/shortlog?style=gitweb">changes</a></div>
642 <table cellspacing="0">
651 <table cellspacing="0">
643
652
644 <tr class="parity0">
653 <tr class="parity0">
645 <td class="age"><i>1970-01-01</i></td>
654 <td class="age"><i>1970-01-01</i></td>
646 <td><i>test</i></td>
655 <td><i>test</i></td>
647 <td>
656 <td>
648 <a class="list" href="/rev/1d22e65f027e?style=gitweb">
657 <a class="list" href="/rev/1d22e65f027e?style=gitweb">
649 <b>branch</b>
658 <b>branch</b>
650 <span class="logtags"><span class="branchtag" title="stable">stable</span> <span class="tagtag" title="tip">tip</span> </span>
659 <span class="logtags"><span class="branchtag" title="stable">stable</span> <span class="tagtag" title="tip">tip</span> </span>
651 </a>
660 </a>
652 </td>
661 </td>
653 <td class="link" nowrap>
662 <td class="link" nowrap>
654 <a href="/rev/1d22e65f027e?style=gitweb">changeset</a> |
663 <a href="/rev/1d22e65f027e?style=gitweb">changeset</a> |
655 <a href="/file/1d22e65f027e?style=gitweb">files</a>
664 <a href="/file/1d22e65f027e?style=gitweb">files</a>
656 </td>
665 </td>
657 </tr>
666 </tr>
658 <tr class="parity1">
667 <tr class="parity1">
659 <td class="age"><i>1970-01-01</i></td>
668 <td class="age"><i>1970-01-01</i></td>
660 <td><i>test</i></td>
669 <td><i>test</i></td>
661 <td>
670 <td>
662 <a class="list" href="/rev/a4f92ed23982?style=gitweb">
671 <a class="list" href="/rev/a4f92ed23982?style=gitweb">
663 <b>Added tag 1.0 for changeset 2ef0ac749a14</b>
672 <b>Added tag 1.0 for changeset 2ef0ac749a14</b>
664 <span class="logtags"><span class="branchtag" title="default">default</span> </span>
673 <span class="logtags"><span class="branchtag" title="default">default</span> </span>
665 </a>
674 </a>
666 </td>
675 </td>
667 <td class="link" nowrap>
676 <td class="link" nowrap>
668 <a href="/rev/a4f92ed23982?style=gitweb">changeset</a> |
677 <a href="/rev/a4f92ed23982?style=gitweb">changeset</a> |
669 <a href="/file/a4f92ed23982?style=gitweb">files</a>
678 <a href="/file/a4f92ed23982?style=gitweb">files</a>
670 </td>
679 </td>
671 </tr>
680 </tr>
672 <tr class="parity0">
681 <tr class="parity0">
673 <td class="age"><i>1970-01-01</i></td>
682 <td class="age"><i>1970-01-01</i></td>
674 <td><i>test</i></td>
683 <td><i>test</i></td>
675 <td>
684 <td>
676 <a class="list" href="/rev/2ef0ac749a14?style=gitweb">
685 <a class="list" href="/rev/2ef0ac749a14?style=gitweb">
677 <b>base</b>
686 <b>base</b>
678 <span class="logtags"><span class="tagtag" title="1.0">1.0</span> </span>
687 <span class="logtags"><span class="tagtag" title="1.0">1.0</span> </span>
679 </a>
688 </a>
680 </td>
689 </td>
681 <td class="link" nowrap>
690 <td class="link" nowrap>
682 <a href="/rev/2ef0ac749a14?style=gitweb">changeset</a> |
691 <a href="/rev/2ef0ac749a14?style=gitweb">changeset</a> |
683 <a href="/file/2ef0ac749a14?style=gitweb">files</a>
692 <a href="/file/2ef0ac749a14?style=gitweb">files</a>
684 </td>
693 </td>
685 </tr>
694 </tr>
686 <tr class="light"><td colspan="4"><a class="list" href="/shortlog?style=gitweb">...</a></td></tr>
695 <tr class="light"><td colspan="4"><a class="list" href="/shortlog?style=gitweb">...</a></td></tr>
687 </table>
696 </table>
688
697
689 <div><a class="title" href="/tags?style=gitweb">tags</a></div>
698 <div><a class="title" href="/tags?style=gitweb">tags</a></div>
690 <table cellspacing="0">
699 <table cellspacing="0">
691
700
692 <tr class="parity0">
701 <tr class="parity0">
693 <td class="age"><i>1970-01-01</i></td>
702 <td class="age"><i>1970-01-01</i></td>
694 <td><a class="list" href="/rev/2ef0ac749a14?style=gitweb"><b>1.0</b></a></td>
703 <td><a class="list" href="/rev/2ef0ac749a14?style=gitweb"><b>1.0</b></a></td>
695 <td class="link">
704 <td class="link">
696 <a href="/rev/2ef0ac749a14?style=gitweb">changeset</a> |
705 <a href="/rev/2ef0ac749a14?style=gitweb">changeset</a> |
697 <a href="/log/2ef0ac749a14?style=gitweb">changelog</a> |
706 <a href="/log/2ef0ac749a14?style=gitweb">changelog</a> |
698 <a href="/file/2ef0ac749a14?style=gitweb">files</a>
707 <a href="/file/2ef0ac749a14?style=gitweb">files</a>
699 </td>
708 </td>
700 </tr>
709 </tr>
701 <tr class="light"><td colspan="3"><a class="list" href="/tags?style=gitweb">...</a></td></tr>
710 <tr class="light"><td colspan="3"><a class="list" href="/tags?style=gitweb">...</a></td></tr>
702 </table>
711 </table>
703
712
704 <div><a class="title" href="#">branches</a></div>
713 <div><a class="title" href="#">branches</a></div>
705 <table cellspacing="0">
714 <table cellspacing="0">
706
715
707 <tr class="parity0">
716 <tr class="parity0">
708 <td class="age"><i>1970-01-01</i></td>
717 <td class="age"><i>1970-01-01</i></td>
709 <td><a class="list" href="/shortlog/1d22e65f027e?style=gitweb"><b>1d22e65f027e</b></a></td>
718 <td><a class="list" href="/shortlog/1d22e65f027e?style=gitweb"><b>1d22e65f027e</b></a></td>
710 <td class="">stable</td>
719 <td class="">stable</td>
711 <td class="link">
720 <td class="link">
712 <a href="/changeset/1d22e65f027e?style=gitweb">changeset</a> |
721 <a href="/changeset/1d22e65f027e?style=gitweb">changeset</a> |
713 <a href="/log/1d22e65f027e?style=gitweb">changelog</a> |
722 <a href="/log/1d22e65f027e?style=gitweb">changelog</a> |
714 <a href="/file/1d22e65f027e?style=gitweb">files</a>
723 <a href="/file/1d22e65f027e?style=gitweb">files</a>
715 </td>
724 </td>
716 </tr>
725 </tr>
717 <tr class="parity1">
726 <tr class="parity1">
718 <td class="age"><i>1970-01-01</i></td>
727 <td class="age"><i>1970-01-01</i></td>
719 <td><a class="list" href="/shortlog/a4f92ed23982?style=gitweb"><b>a4f92ed23982</b></a></td>
728 <td><a class="list" href="/shortlog/a4f92ed23982?style=gitweb"><b>a4f92ed23982</b></a></td>
720 <td class="">default</td>
729 <td class="">default</td>
721 <td class="link">
730 <td class="link">
722 <a href="/changeset/a4f92ed23982?style=gitweb">changeset</a> |
731 <a href="/changeset/a4f92ed23982?style=gitweb">changeset</a> |
723 <a href="/log/a4f92ed23982?style=gitweb">changelog</a> |
732 <a href="/log/a4f92ed23982?style=gitweb">changelog</a> |
724 <a href="/file/a4f92ed23982?style=gitweb">files</a>
733 <a href="/file/a4f92ed23982?style=gitweb">files</a>
725 </td>
734 </td>
726 </tr>
735 </tr>
727 <tr class="light">
736 <tr class="light">
728 <td colspan="4"><a class="list" href="#">...</a></td>
737 <td colspan="4"><a class="list" href="#">...</a></td>
729 </tr>
738 </tr>
730 </table>
739 </table>
731 <div class="page_footer">
740 <div class="page_footer">
732 <div class="page_footer_text">test</div>
741 <div class="page_footer_text">test</div>
733 <div class="rss_logo">
742 <div class="rss_logo">
734 <a href="/rss-log">RSS</a>
743 <a href="/rss-log">RSS</a>
735 <a href="/atom-log">Atom</a>
744 <a href="/atom-log">Atom</a>
736 </div>
745 </div>
737 <br />
746 <br />
738
747
739 </div>
748 </div>
740 </body>
749 </body>
741 </html>
750 </html>
742
751
743 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '/graph/?style=gitweb'
752 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '/graph/?style=gitweb'
744 200 Script output follows
753 200 Script output follows
745
754
746 <?xml version="1.0" encoding="ascii"?>
755 <?xml version="1.0" encoding="ascii"?>
747 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
756 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
748 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US" lang="en-US">
757 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US" lang="en-US">
749 <head>
758 <head>
750 <link rel="icon" href="/static/hgicon.png" type="image/png" />
759 <link rel="icon" href="/static/hgicon.png" type="image/png" />
751 <meta name="robots" content="index, nofollow"/>
760 <meta name="robots" content="index, nofollow"/>
752 <link rel="stylesheet" href="/static/style-gitweb.css" type="text/css" />
761 <link rel="stylesheet" href="/static/style-gitweb.css" type="text/css" />
753
762
754
763
755 <title>test: Graph</title>
764 <title>test: Graph</title>
756 <link rel="alternate" type="application/atom+xml"
765 <link rel="alternate" type="application/atom+xml"
757 href="/atom-log" title="Atom feed for test"/>
766 href="/atom-log" title="Atom feed for test"/>
758 <link rel="alternate" type="application/rss+xml"
767 <link rel="alternate" type="application/rss+xml"
759 href="/rss-log" title="RSS feed for test"/>
768 href="/rss-log" title="RSS feed for test"/>
760 <!--[if IE]><script type="text/javascript" src="/static/excanvas.js"></script><![endif]-->
769 <!--[if IE]><script type="text/javascript" src="/static/excanvas.js"></script><![endif]-->
761 </head>
770 </head>
762 <body>
771 <body>
763
772
764 <div class="page_header">
773 <div class="page_header">
765 <a href="http://mercurial.selenic.com/" title="Mercurial" style="float: right;">Mercurial</a><a href="/summary?style=gitweb">test</a> / graph
774 <a href="http://mercurial.selenic.com/" title="Mercurial" style="float: right;">Mercurial</a><a href="/summary?style=gitweb">test</a> / graph
766 </div>
775 </div>
767
776
768 <form action="/log">
777 <form action="/log">
769 <input type="hidden" name="style" value="gitweb" />
778 <input type="hidden" name="style" value="gitweb" />
770 <div class="search">
779 <div class="search">
771 <input type="text" name="rev" />
780 <input type="text" name="rev" />
772 </div>
781 </div>
773 </form>
782 </form>
774 <div class="page_nav">
783 <div class="page_nav">
775 <a href="/summary?style=gitweb">summary</a> |
784 <a href="/summary?style=gitweb">summary</a> |
776 <a href="/shortlog?style=gitweb">shortlog</a> |
785 <a href="/shortlog?style=gitweb">shortlog</a> |
777 <a href="/log/2?style=gitweb">changelog</a> |
786 <a href="/log/2?style=gitweb">changelog</a> |
778 graph |
787 graph |
779 <a href="/tags?style=gitweb">tags</a> |
788 <a href="/tags?style=gitweb">tags</a> |
780 <a href="/branches?style=gitweb">branches</a> |
789 <a href="/branches?style=gitweb">branches</a> |
781 <a href="/file/1d22e65f027e?style=gitweb">files</a>
790 <a href="/file/1d22e65f027e?style=gitweb">files</a> |
791 <a href="/help?style=gitweb">help</a>
782 <br/>
792 <br/>
783 <a href="/graph/2?style=gitweb&revcount=30">less</a>
793 <a href="/graph/2?style=gitweb&revcount=30">less</a>
784 <a href="/graph/2?style=gitweb&revcount=120">more</a>
794 <a href="/graph/2?style=gitweb&revcount=120">more</a>
785 | <a href="/graph/2ef0ac749a14?style=gitweb">(0)</a> <a href="/graph/2ef0ac749a14?style=gitweb">-2</a> <a href="/graph/tip?style=gitweb">tip</a> <br/>
795 | <a href="/graph/2ef0ac749a14?style=gitweb">(0)</a> <a href="/graph/2ef0ac749a14?style=gitweb">-2</a> <a href="/graph/tip?style=gitweb">tip</a> <br/>
786 </div>
796 </div>
787
797
788 <div class="title">&nbsp;</div>
798 <div class="title">&nbsp;</div>
789
799
790 <noscript>The revision graph only works with JavaScript-enabled browsers.</noscript>
800 <noscript>The revision graph only works with JavaScript-enabled browsers.</noscript>
791
801
792 <div id="wrapper">
802 <div id="wrapper">
793 <ul id="nodebgs"></ul>
803 <ul id="nodebgs"></ul>
794 <canvas id="graph" width="224" height="129"></canvas>
804 <canvas id="graph" width="224" height="129"></canvas>
795 <ul id="graphnodes"></ul>
805 <ul id="graphnodes"></ul>
796 </div>
806 </div>
797
807
798 <script type="text/javascript" src="/static/graph.js"></script>
808 <script type="text/javascript" src="/static/graph.js"></script>
799 <script>
809 <script>
800 <!-- hide script content
810 <!-- hide script content
801
811
802 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"]]];
812 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"]]];
803 var graph = new Graph();
813 var graph = new Graph();
804 graph.scale(39);
814 graph.scale(39);
805
815
806 graph.edge = function(x0, y0, x1, y1, color) {
816 graph.edge = function(x0, y0, x1, y1, color) {
807
817
808 this.setColor(color, 0.0, 0.65);
818 this.setColor(color, 0.0, 0.65);
809 this.ctx.beginPath();
819 this.ctx.beginPath();
810 this.ctx.moveTo(x0, y0);
820 this.ctx.moveTo(x0, y0);
811 this.ctx.lineTo(x1, y1);
821 this.ctx.lineTo(x1, y1);
812 this.ctx.stroke();
822 this.ctx.stroke();
813
823
814 }
824 }
815
825
816 var revlink = '<li style="_STYLE"><span class="desc">';
826 var revlink = '<li style="_STYLE"><span class="desc">';
817 revlink += '<a class="list" href="/rev/_NODEID?style=gitweb" title="_NODEID"><b>_DESC</b></a>';
827 revlink += '<a class="list" href="/rev/_NODEID?style=gitweb" title="_NODEID"><b>_DESC</b></a>';
818 revlink += '</span> _TAGS';
828 revlink += '</span> _TAGS';
819 revlink += '<span class="info">_DATE, by _USER</span></li>';
829 revlink += '<span class="info">_DATE, by _USER</span></li>';
820
830
821 graph.vertex = function(x, y, color, parity, cur) {
831 graph.vertex = function(x, y, color, parity, cur) {
822
832
823 this.ctx.beginPath();
833 this.ctx.beginPath();
824 color = this.setColor(color, 0.25, 0.75);
834 color = this.setColor(color, 0.25, 0.75);
825 this.ctx.arc(x, y, radius, 0, Math.PI * 2, true);
835 this.ctx.arc(x, y, radius, 0, Math.PI * 2, true);
826 this.ctx.fill();
836 this.ctx.fill();
827
837
828 var bg = '<li class="bg parity' + parity + '"></li>';
838 var bg = '<li class="bg parity' + parity + '"></li>';
829 var left = (this.columns + 1) * this.bg_height;
839 var left = (this.columns + 1) * this.bg_height;
830 var nstyle = 'padding-left: ' + left + 'px;';
840 var nstyle = 'padding-left: ' + left + 'px;';
831 var item = revlink.replace(/_STYLE/, nstyle);
841 var item = revlink.replace(/_STYLE/, nstyle);
832 item = item.replace(/_PARITY/, 'parity' + parity);
842 item = item.replace(/_PARITY/, 'parity' + parity);
833 item = item.replace(/_NODEID/, cur[0]);
843 item = item.replace(/_NODEID/, cur[0]);
834 item = item.replace(/_NODEID/, cur[0]);
844 item = item.replace(/_NODEID/, cur[0]);
835 item = item.replace(/_DESC/, cur[3]);
845 item = item.replace(/_DESC/, cur[3]);
836 item = item.replace(/_USER/, cur[4]);
846 item = item.replace(/_USER/, cur[4]);
837 item = item.replace(/_DATE/, cur[5]);
847 item = item.replace(/_DATE/, cur[5]);
838
848
839 var tagspan = '';
849 var tagspan = '';
840 if (cur[7].length || (cur[6][0] != 'default' || cur[6][1])) {
850 if (cur[7].length || (cur[6][0] != 'default' || cur[6][1])) {
841 tagspan = '<span class="logtags">';
851 tagspan = '<span class="logtags">';
842 if (cur[6][1]) {
852 if (cur[6][1]) {
843 tagspan += '<span class="branchtag" title="' + cur[6][0] + '">';
853 tagspan += '<span class="branchtag" title="' + cur[6][0] + '">';
844 tagspan += cur[6][0] + '</span> ';
854 tagspan += cur[6][0] + '</span> ';
845 } else if (!cur[6][1] && cur[6][0] != 'default') {
855 } else if (!cur[6][1] && cur[6][0] != 'default') {
846 tagspan += '<span class="inbranchtag" title="' + cur[6][0] + '">';
856 tagspan += '<span class="inbranchtag" title="' + cur[6][0] + '">';
847 tagspan += cur[6][0] + '</span> ';
857 tagspan += cur[6][0] + '</span> ';
848 }
858 }
849 if (cur[7].length) {
859 if (cur[7].length) {
850 for (var t in cur[7]) {
860 for (var t in cur[7]) {
851 var tag = cur[7][t];
861 var tag = cur[7][t];
852 tagspan += '<span class="tagtag">' + tag + '</span> ';
862 tagspan += '<span class="tagtag">' + tag + '</span> ';
853 }
863 }
854 }
864 }
855 tagspan += '</span>';
865 tagspan += '</span>';
856 }
866 }
857
867
858 item = item.replace(/_TAGS/, tagspan);
868 item = item.replace(/_TAGS/, tagspan);
859 return [bg, item];
869 return [bg, item];
860
870
861 }
871 }
862
872
863 graph.render(data);
873 graph.render(data);
864
874
865 // stop hiding script -->
875 // stop hiding script -->
866 </script>
876 </script>
867
877
868 <div class="page_nav">
878 <div class="page_nav">
869 <a href="/graph/2?style=gitweb&revcount=30">less</a>
879 <a href="/graph/2?style=gitweb&revcount=30">less</a>
870 <a href="/graph/2?style=gitweb&revcount=120">more</a>
880 <a href="/graph/2?style=gitweb&revcount=120">more</a>
871 | <a href="/graph/2ef0ac749a14?style=gitweb">(0)</a> <a href="/graph/2ef0ac749a14?style=gitweb">-2</a> <a href="/graph/tip?style=gitweb">tip</a>
881 | <a href="/graph/2ef0ac749a14?style=gitweb">(0)</a> <a href="/graph/2ef0ac749a14?style=gitweb">-2</a> <a href="/graph/tip?style=gitweb">tip</a>
872 </div>
882 </div>
873
883
874 <div class="page_footer">
884 <div class="page_footer">
875 <div class="page_footer_text">test</div>
885 <div class="page_footer_text">test</div>
876 <div class="rss_logo">
886 <div class="rss_logo">
877 <a href="/rss-log">RSS</a>
887 <a href="/rss-log">RSS</a>
878 <a href="/atom-log">Atom</a>
888 <a href="/atom-log">Atom</a>
879 </div>
889 </div>
880 <br />
890 <br />
881
891
882 </div>
892 </div>
883 </body>
893 </body>
884 </html>
894 </html>
885
895
886
896
887 capabilities
897 capabilities
888
898
889 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '?cmd=capabilities'; echo
899 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '?cmd=capabilities'; echo
890 200 Script output follows
900 200 Script output follows
891
901
892 lookup changegroupsubset branchmap pushkey unbundle=HG10GZ,HG10BZ,HG10UN
902 lookup changegroupsubset branchmap pushkey unbundle=HG10GZ,HG10BZ,HG10UN
893
903
894 heads
904 heads
895
905
896 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '?cmd=heads'
906 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '?cmd=heads'
897 200 Script output follows
907 200 Script output follows
898
908
899 1d22e65f027e5a0609357e7d8e7508cd2ba5d2fe
909 1d22e65f027e5a0609357e7d8e7508cd2ba5d2fe
900
910
901 branches
911 branches
902
912
903 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '?cmd=branches&nodes=0000000000000000000000000000000000000000'
913 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '?cmd=branches&nodes=0000000000000000000000000000000000000000'
904 200 Script output follows
914 200 Script output follows
905
915
906 0000000000000000000000000000000000000000 0000000000000000000000000000000000000000 0000000000000000000000000000000000000000 0000000000000000000000000000000000000000
916 0000000000000000000000000000000000000000 0000000000000000000000000000000000000000 0000000000000000000000000000000000000000 0000000000000000000000000000000000000000
907
917
908 changegroup
918 changegroup
909
919
910 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '?cmd=changegroup&roots=0000000000000000000000000000000000000000' \
920 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '?cmd=changegroup&roots=0000000000000000000000000000000000000000' \
911 > | $TESTDIR/printrepr.py
921 > | $TESTDIR/printrepr.py
912 200 Script output follows
922 200 Script output follows
913
923
914 x\x9c\xbdTMHUA\x14\xbe\xa8\xf9\xec\xda&\x10\x11*\xb8\x88\x81\x99\xbef\xe6\xce\xbdw\xc6\xf2a\x16E\x1b\x11[%\x98\xcc\xaf\x8f\x8c\xf7\xc0\xf7\x82
924 x\x9c\xbdTMHUA\x14\xbe\xa8\xf9\xec\xda&\x10\x11*\xb8\x88\x81\x99\xbef\xe6\xce\xbdw\xc6\xf2a\x16E\x1b\x11[%\x98\xcc\xaf\x8f\x8c\xf7\xc0\xf7\x82
915 4\x11KP2m\x95\xad*\xabE\x05AP\xd0\xc22Z\x14\xf9\x03\xb9j\xa3\x9b$\xa4MJ\xb4\x90\xc0\x9a\x9bO0\x10\xdf\x13\xa2\x81\x0f\x869g\xe6|\xe7\x9c\xef\x8ceY\xf7\xa2KO\xd2\xb7K\x16~\
925 4\x11KP2m\x95\xad*\xabE\x05AP\xd0\xc22Z\x14\xf9\x03\xb9j\xa3\x9b$\xa4MJ\xb4\x90\xc0\x9a\x9bO0\x10\xdf\x13\xa2\x81\x0f\x869g\xe6|\xe7\x9c\xef\x8ceY\xf7\xa2KO\xd2\xb7K\x16~\
916 \xe9\xad\x90w\x86\xab\x93W\x8e\xdf\xb0r\\Y\xee6(\xa2)\xf6\x95\xc6\x01\xe4\x1az\x80R\xe8kN\x98\xe7R\xa4\xa9K@\xe0!A\xb4k\xa7U*m\x03\x07\xd8\x92\x1d\xd2\xc9\xa4\x1d\xc2\xe6,\xa5\xcc+\x1f\xef\xafDgi\xef\xab\x1d\x1d\xb7\x9a\xe7[W\xfbc\x8f\xde-\xcd\xe7\xcaz\xb3\xbb\x19\xd3\x81\x10>c>\x08\x00"X\x11\xc2\x84@\xd2\xe7B*L\x00\x01P\x04R\xc3@\xbaB0\xdb8#\x83:\x83\xa2h\xbc=\xcd\xdaS\xe1Y,L\xd3\xa0\xf2\xa8\x94J:\xe6\xd8\x81Q\xe0\xe8d\xa7#\xe2,\xd1\xaeR*\xed \xa5\x01\x13\x01\xa6\x0cb\xe3;\xbe\xaf\xfcK[^wK\xe1N\xaf\xbbk\xe8B\xd1\xf4\xc1\x07\xb3\xab[\x10\xfdkmvwcB\xa6\xa4\xd4G\xc4D\xc2\x141\xad\x91\x10\x00\x08J\x81\xcb}\xee\t\xee+W\xba\x8a\x80\x90|\xd4\xa0\xd6\xa0\xd4T\xde\xe1\x9d,!\xe2\xb5\xa94\xe3\xe7\xd5\x9f\x06\x18\xcba\x03aP\xb8f\xcd\x04\x1a_\\9\xf1\xed\xe4\x9e\xe5\xa6\xd1\xd2\x9f\x03\xa7o\xae\x90H\xf3\xfb\xef\xffH3\xadk
926 \xe9\xad\x90w\x86\xab\x93W\x8e\xdf\xb0r\\Y\xee6(\xa2)\xf6\x95\xc6\x01\xe4\x1az\x80R\xe8kN\x98\xe7R\xa4\xa9K@\xe0!A\xb4k\xa7U*m\x03\x07\xd8\x92\x1d\xd2\xc9\xa4\x1d\xc2\xe6,\xa5\xcc+\x1f\xef\xafDgi\xef\xab\x1d\x1d\xb7\x9a\xe7[W\xfbc\x8f\xde-\xcd\xe7\xcaz\xb3\xbb\x19\xd3\x81\x10>c>\x08\x00"X\x11\xc2\x84@\xd2\xe7B*L\x00\x01P\x04R\xc3@\xbaB0\xdb8#\x83:\x83\xa2h\xbc=\xcd\xdaS\xe1Y,L\xd3\xa0\xf2\xa8\x94J:\xe6\xd8\x81Q\xe0\xe8d\xa7#\xe2,\xd1\xaeR*\xed \xa5\x01\x13\x01\xa6\x0cb\xe3;\xbe\xaf\xfcK[^wK\xe1N\xaf\xbbk\xe8B\xd1\xf4\xc1\x07\xb3\xab[\x10\xfdkmvwcB\xa6\xa4\xd4G\xc4D\xc2\x141\xad\x91\x10\x00\x08J\x81\xcb}\xee\t\xee+W\xba\x8a\x80\x90|\xd4\xa0\xd6\xa0\xd4T\xde\xe1\x9d,!\xe2\xb5\xa94\xe3\xe7\xd5\x9f\x06\x18\xcba\x03aP\xb8f\xcd\x04\x1a_\\9\xf1\xed\xe4\x9e\xe5\xa6\xd1\xd2\x9f\x03\xa7o\xae\x90H\xf3\xfb\xef\xffH3\xadk
917 \xb0\x90\x92\x88\xb9\x14"\x068\xc2\x1e@\x00\xbb\x8a)\xd3\'\x859
927 \xb0\x90\x92\x88\xb9\x14"\x068\xc2\x1e@\x00\xbb\x8a)\xd3\'\x859
918 \xa8\x80\x84S \xa5\xbd-g\x13`\xe4\xdc\xc3H^\xdf\xe2\xc0TM\xc7\xf4BO\xcf\xde\xae\xe5\xae#\x1frM(K\x97`F\x19\x16s\x05GD\xb9\x01\xc1\x00+\x8c|\x9fp\xc11\xf0\x14\x00\x9cJ\x82<\xe0\x12\x9f\xc1\x90\xd0\xf5\xc8\x19>Pr\xaa\xeaW\xf5\xc4\xae\xd1\xfc\x17\xcf\'\x13u\xb1\x9e\xcdHnC\x0e\xcc`\xc8\xa0&\xac\x0e\xf1|\x8c\x10$\xc4\x8c\xa2p\x05`\xdc\x08 \x80\xc4\xd7Rr-\x94\x10\x102\xedi;\xf3f\xf1z\x16\x86\xdb\xd8d\xe5\xe7\x8b\xf5\x8d\rzp\xb2\xfe\xac\xf5\xf2\xd3\xfe\xfckws\xedt\x96b\xd5l\x1c\x0b\x85\xb5\x170\x8f\x11\x84\xb0\x8f\x19\xa0\x00\t_\x07\x1ac\xa2\xc3\x89Z\xe7\x96\xf9 \xccNFg\xc7F\xaa\x8a+\x9a\x9cc_\x17\x1b\x17\x9e]z38<\x97+\xb5,",\xc8\xc8?\\\x91\xff\x17.~U\x96\x97\xf5%\xdeN<\x8e\xf5\x97%\xe7^\xcfL\xed~\xda\x96k\xdc->\x86\x02\x83"\x96H\xa6\xe3\xaas=-\xeb7\xe5\xda\x8f\xbc
928 \xa8\x80\x84S \xa5\xbd-g\x13`\xe4\xdc\xc3H^\xdf\xe2\xc0TM\xc7\xf4BO\xcf\xde\xae\xe5\xae#\x1frM(K\x97`F\x19\x16s\x05GD\xb9\x01\xc1\x00+\x8c|\x9fp\xc11\xf0\x14\x00\x9cJ\x82<\xe0\x12\x9f\xc1\x90\xd0\xf5\xc8\x19>Pr\xaa\xeaW\xf5\xc4\xae\xd1\xfc\x17\xcf\'\x13u\xb1\x9e\xcdHnC\x0e\xcc`\xc8\xa0&\xac\x0e\xf1|\x8c\x10$\xc4\x8c\xa2p\x05`\xdc\x08 \x80\xc4\xd7Rr-\x94\x10\x102\xedi;\xf3f\xf1z\x16\x86\xdb\xd8d\xe5\xe7\x8b\xf5\x8d\rzp\xb2\xfe\xac\xf5\xf2\xd3\xfe\xfckws\xedt\x96b\xd5l\x1c\x0b\x85\xb5\x170\x8f\x11\x84\xb0\x8f\x19\xa0\x00\t_\x07\x1ac\xa2\xc3\x89Z\xe7\x96\xf9 \xccNFg\xc7F\xaa\x8a+\x9a\x9cc_\x17\x1b\x17\x9e]z38<\x97+\xb5,",\xc8\xc8?\\\x91\xff\x17.~U\x96\x97\xf5%\xdeN<\x8e\xf5\x97%\xe7^\xcfL\xed~\xda\x96k\xdc->\x86\x02\x83"\x96H\xa6\xe3\xaas=-\xeb7\xe5\xda\x8f\xbc
919
929
920 stream_out
930 stream_out
921
931
922 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '?cmd=stream_out'
932 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '?cmd=stream_out'
923 200 Script output follows
933 200 Script output follows
924
934
925 1
935 1
926
936
927 failing unbundle, requires POST request
937 failing unbundle, requires POST request
928
938
929 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '?cmd=unbundle'
939 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '?cmd=unbundle'
930 405 push requires POST request
940 405 push requires POST request
931
941
932 0
942 0
933 push requires POST request
943 push requires POST request
934 [1]
944 [1]
935
945
936 Static files
946 Static files
937
947
938 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '/static/style.css'
948 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '/static/style.css'
939 200 Script output follows
949 200 Script output follows
940
950
941 a { text-decoration:none; }
951 a { text-decoration:none; }
942 .age { white-space:nowrap; }
952 .age { white-space:nowrap; }
943 .date { white-space:nowrap; }
953 .date { white-space:nowrap; }
944 .indexlinks { white-space:nowrap; }
954 .indexlinks { white-space:nowrap; }
945 .parity0 { background-color: #ddd; }
955 .parity0 { background-color: #ddd; }
946 .parity1 { background-color: #eee; }
956 .parity1 { background-color: #eee; }
947 .lineno { width: 60px; color: #aaa; font-size: smaller;
957 .lineno { width: 60px; color: #aaa; font-size: smaller;
948 text-align: right; }
958 text-align: right; }
949 .plusline { color: green; }
959 .plusline { color: green; }
950 .minusline { color: red; }
960 .minusline { color: red; }
951 .atline { color: purple; }
961 .atline { color: purple; }
952 .annotate { font-size: smaller; text-align: right; padding-right: 1em; }
962 .annotate { font-size: smaller; text-align: right; padding-right: 1em; }
953 .buttons a {
963 .buttons a {
954 background-color: #666;
964 background-color: #666;
955 padding: 2pt;
965 padding: 2pt;
956 color: white;
966 color: white;
957 font-family: sans;
967 font-family: sans;
958 font-weight: bold;
968 font-weight: bold;
959 }
969 }
960 .navigate a {
970 .navigate a {
961 background-color: #ccc;
971 background-color: #ccc;
962 padding: 2pt;
972 padding: 2pt;
963 font-family: sans;
973 font-family: sans;
964 color: black;
974 color: black;
965 }
975 }
966
976
967 .metatag {
977 .metatag {
968 background-color: #888;
978 background-color: #888;
969 color: white;
979 color: white;
970 text-align: right;
980 text-align: right;
971 }
981 }
972
982
973 /* Common */
983 /* Common */
974 pre { margin: 0; }
984 pre { margin: 0; }
975
985
976 .logo {
986 .logo {
977 float: right;
987 float: right;
978 clear: right;
988 clear: right;
979 }
989 }
980
990
981 /* Changelog/Filelog entries */
991 /* Changelog/Filelog entries */
982 .logEntry { width: 100%; }
992 .logEntry { width: 100%; }
983 .logEntry .age { width: 15%; }
993 .logEntry .age { width: 15%; }
984 .logEntry th { font-weight: normal; text-align: right; vertical-align: top; }
994 .logEntry th { font-weight: normal; text-align: right; vertical-align: top; }
985 .logEntry th.age, .logEntry th.firstline { font-weight: bold; }
995 .logEntry th.age, .logEntry th.firstline { font-weight: bold; }
986 .logEntry th.firstline { text-align: left; width: inherit; }
996 .logEntry th.firstline { text-align: left; width: inherit; }
987
997
988 /* Shortlog entries */
998 /* Shortlog entries */
989 .slogEntry { width: 100%; }
999 .slogEntry { width: 100%; }
990 .slogEntry .age { width: 8em; }
1000 .slogEntry .age { width: 8em; }
991 .slogEntry td { font-weight: normal; text-align: left; vertical-align: top; }
1001 .slogEntry td { font-weight: normal; text-align: left; vertical-align: top; }
992 .slogEntry td.author { width: 15em; }
1002 .slogEntry td.author { width: 15em; }
993
1003
994 /* Tag entries */
1004 /* Tag entries */
995 #tagEntries { list-style: none; margin: 0; padding: 0; }
1005 #tagEntries { list-style: none; margin: 0; padding: 0; }
996 #tagEntries .tagEntry { list-style: none; margin: 0; padding: 0; }
1006 #tagEntries .tagEntry { list-style: none; margin: 0; padding: 0; }
997
1007
998 /* Changeset entry */
1008 /* Changeset entry */
999 #changesetEntry { }
1009 #changesetEntry { }
1000 #changesetEntry th { font-weight: normal; background-color: #888; color: #fff; text-align: right; }
1010 #changesetEntry th { font-weight: normal; background-color: #888; color: #fff; text-align: right; }
1001 #changesetEntry th.files, #changesetEntry th.description { vertical-align: top; }
1011 #changesetEntry th.files, #changesetEntry th.description { vertical-align: top; }
1002
1012
1003 /* File diff view */
1013 /* File diff view */
1004 #filediffEntry { }
1014 #filediffEntry { }
1005 #filediffEntry th { font-weight: normal; background-color: #888; color: #fff; text-align: right; }
1015 #filediffEntry th { font-weight: normal; background-color: #888; color: #fff; text-align: right; }
1006
1016
1007 /* Graph */
1017 /* Graph */
1008 div#wrapper {
1018 div#wrapper {
1009 position: relative;
1019 position: relative;
1010 margin: 0;
1020 margin: 0;
1011 padding: 0;
1021 padding: 0;
1012 }
1022 }
1013
1023
1014 canvas {
1024 canvas {
1015 position: absolute;
1025 position: absolute;
1016 z-index: 5;
1026 z-index: 5;
1017 top: -0.6em;
1027 top: -0.6em;
1018 margin: 0;
1028 margin: 0;
1019 }
1029 }
1020
1030
1021 ul#nodebgs {
1031 ul#nodebgs {
1022 list-style: none inside none;
1032 list-style: none inside none;
1023 padding: 0;
1033 padding: 0;
1024 margin: 0;
1034 margin: 0;
1025 top: -0.7em;
1035 top: -0.7em;
1026 }
1036 }
1027
1037
1028 ul#graphnodes li, ul#nodebgs li {
1038 ul#graphnodes li, ul#nodebgs li {
1029 height: 39px;
1039 height: 39px;
1030 }
1040 }
1031
1041
1032 ul#graphnodes {
1042 ul#graphnodes {
1033 position: absolute;
1043 position: absolute;
1034 z-index: 10;
1044 z-index: 10;
1035 top: -0.85em;
1045 top: -0.85em;
1036 list-style: none inside none;
1046 list-style: none inside none;
1037 padding: 0;
1047 padding: 0;
1038 }
1048 }
1039
1049
1040 ul#graphnodes li .info {
1050 ul#graphnodes li .info {
1041 display: block;
1051 display: block;
1042 font-size: 70%;
1052 font-size: 70%;
1043 position: relative;
1053 position: relative;
1044 top: -1px;
1054 top: -1px;
1045 }
1055 }
1046
1056
1047 Stop and restart with HGENCODING=cp932
1057 Stop and restart with HGENCODING=cp932
1048
1058
1049 $ "$TESTDIR/killdaemons.py"
1059 $ "$TESTDIR/killdaemons.py"
1050 $ HGENCODING=cp932 hg serve --config server.uncompressed=False -n test \
1060 $ HGENCODING=cp932 hg serve --config server.uncompressed=False -n test \
1051 > -p $HGPORT -d --pid-file=hg.pid -E errors.log
1061 > -p $HGPORT -d --pid-file=hg.pid -E errors.log
1052 $ cat hg.pid >> $DAEMON_PIDS
1062 $ cat hg.pid >> $DAEMON_PIDS
1053
1063
1054 commit message with Japanese Kanji 'Noh', which ends with '\x5c'
1064 commit message with Japanese Kanji 'Noh', which ends with '\x5c'
1055
1065
1056 $ echo foo >> foo
1066 $ echo foo >> foo
1057 $ HGENCODING=cp932 hg ci -m `python -c 'print("\x94\x5c")'`
1067 $ HGENCODING=cp932 hg ci -m `python -c 'print("\x94\x5c")'`
1058
1068
1059 Graph json escape of multibyte character
1069 Graph json escape of multibyte character
1060
1070
1061 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '/graph/' \
1071 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '/graph/' \
1062 > | grep '^var data ='
1072 > | grep '^var data ='
1063 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"]]];
1073 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"]]];
1064
1074
1065 ERRORS ENCOUNTERED
1075 ERRORS ENCOUNTERED
1066
1076
1067 $ cat errors.log
1077 $ cat errors.log
@@ -1,134 +1,138 b''
1 Test chains of near empty directories, terminating 3 different ways:
1 Test chains of near empty directories, terminating 3 different ways:
2 - a1: file at level 4 (deepest)
2 - a1: file at level 4 (deepest)
3 - b1: two dirs at level 3
3 - b1: two dirs at level 3
4 - e1: file at level 2
4 - e1: file at level 2
5
5
6 Set up the repo
6 Set up the repo
7
7
8 $ hg init test
8 $ hg init test
9 $ cd test
9 $ cd test
10 $ mkdir -p a1/a2/a3/a4
10 $ mkdir -p a1/a2/a3/a4
11 $ mkdir -p b1/b2/b3/b4
11 $ mkdir -p b1/b2/b3/b4
12 $ mkdir -p b1/b2/c3/c4
12 $ mkdir -p b1/b2/c3/c4
13 $ mkdir -p d1/d2/d3/d4
13 $ mkdir -p d1/d2/d3/d4
14 $ echo foo > a1/a2/a3/a4/foo
14 $ echo foo > a1/a2/a3/a4/foo
15 $ echo foo > b1/b2/b3/b4/foo
15 $ echo foo > b1/b2/b3/b4/foo
16 $ echo foo > b1/b2/c3/c4/foo
16 $ echo foo > b1/b2/c3/c4/foo
17 $ echo foo > d1/d2/d3/d4/foo
17 $ echo foo > d1/d2/d3/d4/foo
18 $ echo foo > d1/d2/foo
18 $ echo foo > d1/d2/foo
19 $ hg ci -Ama
19 $ hg ci -Ama
20 adding a1/a2/a3/a4/foo
20 adding a1/a2/a3/a4/foo
21 adding b1/b2/b3/b4/foo
21 adding b1/b2/b3/b4/foo
22 adding b1/b2/c3/c4/foo
22 adding b1/b2/c3/c4/foo
23 adding d1/d2/d3/d4/foo
23 adding d1/d2/d3/d4/foo
24 adding d1/d2/foo
24 adding d1/d2/foo
25 $ hg serve -n test -p $HGPORT -d --pid-file=hg.pid -E errors.log
25 $ hg serve -n test -p $HGPORT -d --pid-file=hg.pid -E errors.log
26 $ cat hg.pid >> $DAEMON_PIDS
26 $ cat hg.pid >> $DAEMON_PIDS
27
27
28 manifest with descending
28 manifest with descending
29
29
30 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '/file'
30 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '/file'
31 200 Script output follows
31 200 Script output follows
32
32
33 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
33 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
34 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
34 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
35 <head>
35 <head>
36 <link rel="icon" href="/static/hgicon.png" type="image/png" />
36 <link rel="icon" href="/static/hgicon.png" type="image/png" />
37 <meta name="robots" content="index, nofollow" />
37 <meta name="robots" content="index, nofollow" />
38 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
38 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
39
39
40 <title>test: 9087c84a0f5d /</title>
40 <title>test: 9087c84a0f5d /</title>
41 </head>
41 </head>
42 <body>
42 <body>
43
43
44 <div class="container">
44 <div class="container">
45 <div class="menu">
45 <div class="menu">
46 <div class="logo">
46 <div class="logo">
47 <a href="http://mercurial.selenic.com/">
47 <a href="http://mercurial.selenic.com/">
48 <img src="/static/hglogo.png" alt="mercurial" /></a>
48 <img src="/static/hglogo.png" alt="mercurial" /></a>
49 </div>
49 </div>
50 <ul>
50 <ul>
51 <li><a href="/shortlog/9087c84a0f5d">log</a></li>
51 <li><a href="/shortlog/9087c84a0f5d">log</a></li>
52 <li><a href="/graph/9087c84a0f5d">graph</a></li>
52 <li><a href="/graph/9087c84a0f5d">graph</a></li>
53 <li><a href="/tags">tags</a></li>
53 <li><a href="/tags">tags</a></li>
54 <li><a href="/branches">branches</a></li>
54 <li><a href="/branches">branches</a></li>
55 <li><a href="/help">help</a></li>
55 </ul>
56 </ul>
56 <ul>
57 <ul>
57 <li><a href="/rev/9087c84a0f5d">changeset</a></li>
58 <li><a href="/rev/9087c84a0f5d">changeset</a></li>
58 <li class="active">browse</li>
59 <li class="active">browse</li>
59 </ul>
60 </ul>
60 <ul>
61 <ul>
61
62
62 </ul>
63 </ul>
64 <ul>
65 <li><a href="/help">help</a></li>
66 </ul>
63 </div>
67 </div>
64
68
65 <div class="main">
69 <div class="main">
66 <h2><a href="/">test</a></h2>
70 <h2><a href="/">test</a></h2>
67 <h3>directory / @ 0:9087c84a0f5d <span class="tag">tip</span> </h3>
71 <h3>directory / @ 0:9087c84a0f5d <span class="tag">tip</span> </h3>
68
72
69 <form class="search" action="/log">
73 <form class="search" action="/log">
70
74
71 <p><input name="rev" id="search1" type="text" size="30" /></p>
75 <p><input name="rev" id="search1" type="text" size="30" /></p>
72 <div id="hint">find changesets by author, revision,
76 <div id="hint">find changesets by author, revision,
73 files, or words in the commit message</div>
77 files, or words in the commit message</div>
74 </form>
78 </form>
75
79
76 <table class="bigtable">
80 <table class="bigtable">
77 <tr>
81 <tr>
78 <th class="name">name</th>
82 <th class="name">name</th>
79 <th class="size">size</th>
83 <th class="size">size</th>
80 <th class="permissions">permissions</th>
84 <th class="permissions">permissions</th>
81 </tr>
85 </tr>
82 <tr class="fileline parity0">
86 <tr class="fileline parity0">
83 <td class="name"><a href="/file/9087c84a0f5d/">[up]</a></td>
87 <td class="name"><a href="/file/9087c84a0f5d/">[up]</a></td>
84 <td class="size"></td>
88 <td class="size"></td>
85 <td class="permissions">drwxr-xr-x</td>
89 <td class="permissions">drwxr-xr-x</td>
86 </tr>
90 </tr>
87
91
88 <tr class="fileline parity1">
92 <tr class="fileline parity1">
89 <td class="name">
93 <td class="name">
90 <a href="/file/9087c84a0f5d/a1">
94 <a href="/file/9087c84a0f5d/a1">
91 <img src="/static/coal-folder.png" alt="dir."/> a1/
95 <img src="/static/coal-folder.png" alt="dir."/> a1/
92 </a>
96 </a>
93 <a href="/file/9087c84a0f5d/a1/a2/a3/a4">
97 <a href="/file/9087c84a0f5d/a1/a2/a3/a4">
94 a2/a3/a4
98 a2/a3/a4
95 </a>
99 </a>
96 </td>
100 </td>
97 <td class="size"></td>
101 <td class="size"></td>
98 <td class="permissions">drwxr-xr-x</td>
102 <td class="permissions">drwxr-xr-x</td>
99 </tr>
103 </tr>
100 <tr class="fileline parity0">
104 <tr class="fileline parity0">
101 <td class="name">
105 <td class="name">
102 <a href="/file/9087c84a0f5d/b1">
106 <a href="/file/9087c84a0f5d/b1">
103 <img src="/static/coal-folder.png" alt="dir."/> b1/
107 <img src="/static/coal-folder.png" alt="dir."/> b1/
104 </a>
108 </a>
105 <a href="/file/9087c84a0f5d/b1/b2">
109 <a href="/file/9087c84a0f5d/b1/b2">
106 b2
110 b2
107 </a>
111 </a>
108 </td>
112 </td>
109 <td class="size"></td>
113 <td class="size"></td>
110 <td class="permissions">drwxr-xr-x</td>
114 <td class="permissions">drwxr-xr-x</td>
111 </tr>
115 </tr>
112 <tr class="fileline parity1">
116 <tr class="fileline parity1">
113 <td class="name">
117 <td class="name">
114 <a href="/file/9087c84a0f5d/d1">
118 <a href="/file/9087c84a0f5d/d1">
115 <img src="/static/coal-folder.png" alt="dir."/> d1/
119 <img src="/static/coal-folder.png" alt="dir."/> d1/
116 </a>
120 </a>
117 <a href="/file/9087c84a0f5d/d1/d2">
121 <a href="/file/9087c84a0f5d/d1/d2">
118 d2
122 d2
119 </a>
123 </a>
120 </td>
124 </td>
121 <td class="size"></td>
125 <td class="size"></td>
122 <td class="permissions">drwxr-xr-x</td>
126 <td class="permissions">drwxr-xr-x</td>
123 </tr>
127 </tr>
124
128
125 </table>
129 </table>
126 </div>
130 </div>
127 </div>
131 </div>
128
132
129
133
130 </body>
134 </body>
131 </html>
135 </html>
132
136
133
137
134 $ cat errors.log
138 $ cat errors.log
@@ -1,474 +1,482 b''
1 setting up repo
1 setting up repo
2
2
3 $ hg init test
3 $ hg init test
4 $ cd test
4 $ cd test
5 $ echo a > a
5 $ echo a > a
6 $ echo b > b
6 $ echo b > b
7 $ hg ci -Ama
7 $ hg ci -Ama
8 adding a
8 adding a
9 adding b
9 adding b
10
10
11 change permissions for git diffs
11 change permissions for git diffs
12
12
13 $ chmod 755 a
13 $ chmod 755 a
14 $ hg ci -Amb
14 $ hg ci -Amb
15
15
16 set up hgweb
16 set up hgweb
17
17
18 $ hg serve -n test -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
18 $ hg serve -n test -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
19 $ cat hg.pid >> $DAEMON_PIDS
19 $ cat hg.pid >> $DAEMON_PIDS
20
20
21 revision
21 revision
22
22
23 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT '/rev/0'
23 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT '/rev/0'
24 200 Script output follows
24 200 Script output follows
25
25
26 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
26 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
27 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
27 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
28 <head>
28 <head>
29 <link rel="icon" href="/static/hgicon.png" type="image/png" />
29 <link rel="icon" href="/static/hgicon.png" type="image/png" />
30 <meta name="robots" content="index, nofollow" />
30 <meta name="robots" content="index, nofollow" />
31 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
31 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
32
32
33 <title>test: 0cd96de13884</title>
33 <title>test: 0cd96de13884</title>
34 </head>
34 </head>
35 <body>
35 <body>
36 <div class="container">
36 <div class="container">
37 <div class="menu">
37 <div class="menu">
38 <div class="logo">
38 <div class="logo">
39 <a href="http://mercurial.selenic.com/">
39 <a href="http://mercurial.selenic.com/">
40 <img src="/static/hglogo.png" alt="mercurial" /></a>
40 <img src="/static/hglogo.png" alt="mercurial" /></a>
41 </div>
41 </div>
42 <ul>
42 <ul>
43 <li><a href="/shortlog/0cd96de13884">log</a></li>
43 <li><a href="/shortlog/0cd96de13884">log</a></li>
44 <li><a href="/graph/0cd96de13884">graph</a></li>
44 <li><a href="/graph/0cd96de13884">graph</a></li>
45 <li><a href="/tags">tags</a></li>
45 <li><a href="/tags">tags</a></li>
46 <li><a href="/branches">branches</a></li>
46 <li><a href="/branches">branches</a></li>
47 <li><a href="/help">help</a></li>
47 </ul>
48 </ul>
48 <ul>
49 <ul>
49 <li class="active">changeset</li>
50 <li class="active">changeset</li>
50 <li><a href="/raw-rev/0cd96de13884">raw</a></li>
51 <li><a href="/raw-rev/0cd96de13884">raw</a></li>
51 <li><a href="/file/0cd96de13884">browse</a></li>
52 <li><a href="/file/0cd96de13884">browse</a></li>
52 </ul>
53 </ul>
53 <ul>
54 <ul>
54
55
55 </ul>
56 </ul>
57 <ul>
58 <li><a href="/help">help</a></li>
59 </ul>
56 </div>
60 </div>
57
61
58 <div class="main">
62 <div class="main">
59
63
60 <h2><a href="/">test</a></h2>
64 <h2><a href="/">test</a></h2>
61 <h3>changeset 0:0cd96de13884 </h3>
65 <h3>changeset 0:0cd96de13884 </h3>
62
66
63 <form class="search" action="/log">
67 <form class="search" action="/log">
64
68
65 <p><input name="rev" id="search1" type="text" size="30" /></p>
69 <p><input name="rev" id="search1" type="text" size="30" /></p>
66 <div id="hint">find changesets by author, revision,
70 <div id="hint">find changesets by author, revision,
67 files, or words in the commit message</div>
71 files, or words in the commit message</div>
68 </form>
72 </form>
69
73
70 <div class="description">a</div>
74 <div class="description">a</div>
71
75
72 <table id="changesetEntry">
76 <table id="changesetEntry">
73 <tr>
77 <tr>
74 <th class="author">author</th>
78 <th class="author">author</th>
75 <td class="author">&#116;&#101;&#115;&#116;</td>
79 <td class="author">&#116;&#101;&#115;&#116;</td>
76 </tr>
80 </tr>
77 <tr>
81 <tr>
78 <th class="date">date</th>
82 <th class="date">date</th>
79 <td class="date">Thu Jan 01 00:00:00 1970 +0000 (1970-01-01)</td></tr>
83 <td class="date">Thu Jan 01 00:00:00 1970 +0000 (1970-01-01)</td></tr>
80 <tr>
84 <tr>
81 <th class="author">parents</th>
85 <th class="author">parents</th>
82 <td class="author"></td>
86 <td class="author"></td>
83 </tr>
87 </tr>
84 <tr>
88 <tr>
85 <th class="author">children</th>
89 <th class="author">children</th>
86 <td class="author"> <a href="/rev/78e4ebad7cdf">78e4ebad7cdf</a></td>
90 <td class="author"> <a href="/rev/78e4ebad7cdf">78e4ebad7cdf</a></td>
87 </tr>
91 </tr>
88 <tr>
92 <tr>
89 <th class="files">files</th>
93 <th class="files">files</th>
90 <td class="files"><a href="/file/0cd96de13884/a">a</a> <a href="/file/0cd96de13884/b">b</a> </td>
94 <td class="files"><a href="/file/0cd96de13884/a">a</a> <a href="/file/0cd96de13884/b">b</a> </td>
91 </tr>
95 </tr>
92 </table>
96 </table>
93
97
94 <div class="overflow">
98 <div class="overflow">
95 <div class="sourcefirst"> line diff</div>
99 <div class="sourcefirst"> line diff</div>
96
100
97 <div class="source bottomline parity0"><pre><a href="#l1.1" id="l1.1"> 1.1</a> <span class="minusline">--- /dev/null Thu Jan 01 00:00:00 1970 +0000
101 <div class="source bottomline parity0"><pre><a href="#l1.1" id="l1.1"> 1.1</a> <span class="minusline">--- /dev/null Thu Jan 01 00:00:00 1970 +0000
98 </span><a href="#l1.2" id="l1.2"> 1.2</a> <span class="plusline">+++ b/a Thu Jan 01 00:00:00 1970 +0000
102 </span><a href="#l1.2" id="l1.2"> 1.2</a> <span class="plusline">+++ b/a Thu Jan 01 00:00:00 1970 +0000
99 </span><a href="#l1.3" id="l1.3"> 1.3</a> <span class="atline">@@ -0,0 +1,1 @@
103 </span><a href="#l1.3" id="l1.3"> 1.3</a> <span class="atline">@@ -0,0 +1,1 @@
100 </span><a href="#l1.4" id="l1.4"> 1.4</a> <span class="plusline">+a
104 </span><a href="#l1.4" id="l1.4"> 1.4</a> <span class="plusline">+a
101 </span></pre></div><div class="source bottomline parity1"><pre><a href="#l2.1" id="l2.1"> 2.1</a> <span class="minusline">--- /dev/null Thu Jan 01 00:00:00 1970 +0000
105 </span></pre></div><div class="source bottomline parity1"><pre><a href="#l2.1" id="l2.1"> 2.1</a> <span class="minusline">--- /dev/null Thu Jan 01 00:00:00 1970 +0000
102 </span><a href="#l2.2" id="l2.2"> 2.2</a> <span class="plusline">+++ b/b Thu Jan 01 00:00:00 1970 +0000
106 </span><a href="#l2.2" id="l2.2"> 2.2</a> <span class="plusline">+++ b/b Thu Jan 01 00:00:00 1970 +0000
103 </span><a href="#l2.3" id="l2.3"> 2.3</a> <span class="atline">@@ -0,0 +1,1 @@
107 </span><a href="#l2.3" id="l2.3"> 2.3</a> <span class="atline">@@ -0,0 +1,1 @@
104 </span><a href="#l2.4" id="l2.4"> 2.4</a> <span class="plusline">+b
108 </span><a href="#l2.4" id="l2.4"> 2.4</a> <span class="plusline">+b
105 </span></pre></div>
109 </span></pre></div>
106 </div>
110 </div>
107
111
108 </div>
112 </div>
109 </div>
113 </div>
110
114
111
115
112 </body>
116 </body>
113 </html>
117 </html>
114
118
115
119
116 raw revision
120 raw revision
117
121
118 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT '/raw-rev/0'
122 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT '/raw-rev/0'
119 200 Script output follows
123 200 Script output follows
120
124
121
125
122 # HG changeset patch
126 # HG changeset patch
123 # User test
127 # User test
124 # Date 0 0
128 # Date 0 0
125 # Node ID 0cd96de13884b090099512d4794ae87ad067ea8e
129 # Node ID 0cd96de13884b090099512d4794ae87ad067ea8e
126
130
127 a
131 a
128
132
129 diff -r 000000000000 -r 0cd96de13884 a
133 diff -r 000000000000 -r 0cd96de13884 a
130 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
134 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
131 +++ b/a Thu Jan 01 00:00:00 1970 +0000
135 +++ b/a Thu Jan 01 00:00:00 1970 +0000
132 @@ -0,0 +1,1 @@
136 @@ -0,0 +1,1 @@
133 +a
137 +a
134 diff -r 000000000000 -r 0cd96de13884 b
138 diff -r 000000000000 -r 0cd96de13884 b
135 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
139 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
136 +++ b/b Thu Jan 01 00:00:00 1970 +0000
140 +++ b/b Thu Jan 01 00:00:00 1970 +0000
137 @@ -0,0 +1,1 @@
141 @@ -0,0 +1,1 @@
138 +b
142 +b
139
143
140
144
141 diff removed file
145 diff removed file
142
146
143 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT '/diff/tip/a'
147 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT '/diff/tip/a'
144 200 Script output follows
148 200 Script output follows
145
149
146 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
150 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
147 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
151 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
148 <head>
152 <head>
149 <link rel="icon" href="/static/hgicon.png" type="image/png" />
153 <link rel="icon" href="/static/hgicon.png" type="image/png" />
150 <meta name="robots" content="index, nofollow" />
154 <meta name="robots" content="index, nofollow" />
151 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
155 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
152
156
153 <title>test: a diff</title>
157 <title>test: a diff</title>
154 </head>
158 </head>
155 <body>
159 <body>
156
160
157 <div class="container">
161 <div class="container">
158 <div class="menu">
162 <div class="menu">
159 <div class="logo">
163 <div class="logo">
160 <a href="http://mercurial.selenic.com/">
164 <a href="http://mercurial.selenic.com/">
161 <img src="/static/hglogo.png" alt="mercurial" /></a>
165 <img src="/static/hglogo.png" alt="mercurial" /></a>
162 </div>
166 </div>
163 <ul>
167 <ul>
164 <li><a href="/shortlog/78e4ebad7cdf">log</a></li>
168 <li><a href="/shortlog/78e4ebad7cdf">log</a></li>
165 <li><a href="/graph/78e4ebad7cdf">graph</a></li>
169 <li><a href="/graph/78e4ebad7cdf">graph</a></li>
166 <li><a href="/tags">tags</a></li>
170 <li><a href="/tags">tags</a></li>
167 <li><a href="/branches">branches</a></li>
171 <li><a href="/branches">branches</a></li>
168 </ul>
172 </ul>
169 <ul>
173 <ul>
170 <li><a href="/rev/78e4ebad7cdf">changeset</a></li>
174 <li><a href="/rev/78e4ebad7cdf">changeset</a></li>
171 <li><a href="/file/78e4ebad7cdf">browse</a></li>
175 <li><a href="/file/78e4ebad7cdf">browse</a></li>
172 </ul>
176 </ul>
173 <ul>
177 <ul>
174 <li><a href="/file/78e4ebad7cdf/a">file</a></li>
178 <li><a href="/file/78e4ebad7cdf/a">file</a></li>
175 <li><a href="/file/tip/a">latest</a></li>
179 <li><a href="/file/tip/a">latest</a></li>
176 <li class="active">diff</li>
180 <li class="active">diff</li>
177 <li><a href="/annotate/78e4ebad7cdf/a">annotate</a></li>
181 <li><a href="/annotate/78e4ebad7cdf/a">annotate</a></li>
178 <li><a href="/log/78e4ebad7cdf/a">file log</a></li>
182 <li><a href="/log/78e4ebad7cdf/a">file log</a></li>
179 <li><a href="/raw-file/78e4ebad7cdf/a">raw</a></li>
183 <li><a href="/raw-file/78e4ebad7cdf/a">raw</a></li>
180 </ul>
184 </ul>
181 </div>
185 </div>
182
186
183 <div class="main">
187 <div class="main">
184 <h2><a href="/">test</a></h2>
188 <h2><a href="/">test</a></h2>
185 <h3>diff a @ 1:78e4ebad7cdf</h3>
189 <h3>diff a @ 1:78e4ebad7cdf</h3>
186
190
187 <form class="search" action="/log">
191 <form class="search" action="/log">
188 <p></p>
192 <p></p>
189 <p><input name="rev" id="search1" type="text" size="30" /></p>
193 <p><input name="rev" id="search1" type="text" size="30" /></p>
190 <div id="hint">find changesets by author, revision,
194 <div id="hint">find changesets by author, revision,
191 files, or words in the commit message</div>
195 files, or words in the commit message</div>
192 </form>
196 </form>
193
197
194 <div class="description">b</div>
198 <div class="description">b</div>
195
199
196 <table id="changesetEntry">
200 <table id="changesetEntry">
197 <tr>
201 <tr>
198 <th>author</th>
202 <th>author</th>
199 <td>&#116;&#101;&#115;&#116;</td>
203 <td>&#116;&#101;&#115;&#116;</td>
200 </tr>
204 </tr>
201 <tr>
205 <tr>
202 <th>date</th>
206 <th>date</th>
203 <td>Thu Jan 01 00:00:00 1970 +0000 (1970-01-01)</td>
207 <td>Thu Jan 01 00:00:00 1970 +0000 (1970-01-01)</td>
204 </tr>
208 </tr>
205 <tr>
209 <tr>
206 <th>parents</th>
210 <th>parents</th>
207 <td></td>
211 <td></td>
208 </tr>
212 </tr>
209 <tr>
213 <tr>
210 <th>children</th>
214 <th>children</th>
211 <td></td>
215 <td></td>
212 </tr>
216 </tr>
213
217
214 </table>
218 </table>
215
219
216 <div class="overflow">
220 <div class="overflow">
217 <div class="sourcefirst"> line diff</div>
221 <div class="sourcefirst"> line diff</div>
218
222
219 <div class="source bottomline parity0"><pre><a href="#l1.1" id="l1.1"> 1.1</a> <span class="minusline">--- /dev/null Thu Jan 01 00:00:00 1970 +0000
223 <div class="source bottomline parity0"><pre><a href="#l1.1" id="l1.1"> 1.1</a> <span class="minusline">--- /dev/null Thu Jan 01 00:00:00 1970 +0000
220 </span><a href="#l1.2" id="l1.2"> 1.2</a> <span class="plusline">+++ b/a Thu Jan 01 00:00:00 1970 +0000
224 </span><a href="#l1.2" id="l1.2"> 1.2</a> <span class="plusline">+++ b/a Thu Jan 01 00:00:00 1970 +0000
221 </span><a href="#l1.3" id="l1.3"> 1.3</a> <span class="atline">@@ -0,0 +1,1 @@
225 </span><a href="#l1.3" id="l1.3"> 1.3</a> <span class="atline">@@ -0,0 +1,1 @@
222 </span><a href="#l1.4" id="l1.4"> 1.4</a> <span class="plusline">+a
226 </span><a href="#l1.4" id="l1.4"> 1.4</a> <span class="plusline">+a
223 </span></pre></div>
227 </span></pre></div>
224 </div>
228 </div>
225 </div>
229 </div>
226 </div>
230 </div>
227
231
228
232
229
233
230 </body>
234 </body>
231 </html>
235 </html>
232
236
233
237
234 set up hgweb with git diffs
238 set up hgweb with git diffs
235
239
236 $ "$TESTDIR/killdaemons.py"
240 $ "$TESTDIR/killdaemons.py"
237 $ hg serve --config 'diff.git=1' -n test -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
241 $ hg serve --config 'diff.git=1' -n test -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
238 $ cat hg.pid >> $DAEMON_PIDS
242 $ cat hg.pid >> $DAEMON_PIDS
239
243
240 revision
244 revision
241
245
242 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT '/rev/0'
246 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT '/rev/0'
243 200 Script output follows
247 200 Script output follows
244
248
245 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
249 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
246 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
250 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
247 <head>
251 <head>
248 <link rel="icon" href="/static/hgicon.png" type="image/png" />
252 <link rel="icon" href="/static/hgicon.png" type="image/png" />
249 <meta name="robots" content="index, nofollow" />
253 <meta name="robots" content="index, nofollow" />
250 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
254 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
251
255
252 <title>test: 0cd96de13884</title>
256 <title>test: 0cd96de13884</title>
253 </head>
257 </head>
254 <body>
258 <body>
255 <div class="container">
259 <div class="container">
256 <div class="menu">
260 <div class="menu">
257 <div class="logo">
261 <div class="logo">
258 <a href="http://mercurial.selenic.com/">
262 <a href="http://mercurial.selenic.com/">
259 <img src="/static/hglogo.png" alt="mercurial" /></a>
263 <img src="/static/hglogo.png" alt="mercurial" /></a>
260 </div>
264 </div>
261 <ul>
265 <ul>
262 <li><a href="/shortlog/0cd96de13884">log</a></li>
266 <li><a href="/shortlog/0cd96de13884">log</a></li>
263 <li><a href="/graph/0cd96de13884">graph</a></li>
267 <li><a href="/graph/0cd96de13884">graph</a></li>
264 <li><a href="/tags">tags</a></li>
268 <li><a href="/tags">tags</a></li>
265 <li><a href="/branches">branches</a></li>
269 <li><a href="/branches">branches</a></li>
270 <li><a href="/help">help</a></li>
266 </ul>
271 </ul>
267 <ul>
272 <ul>
268 <li class="active">changeset</li>
273 <li class="active">changeset</li>
269 <li><a href="/raw-rev/0cd96de13884">raw</a></li>
274 <li><a href="/raw-rev/0cd96de13884">raw</a></li>
270 <li><a href="/file/0cd96de13884">browse</a></li>
275 <li><a href="/file/0cd96de13884">browse</a></li>
271 </ul>
276 </ul>
272 <ul>
277 <ul>
273
278
274 </ul>
279 </ul>
280 <ul>
281 <li><a href="/help">help</a></li>
282 </ul>
275 </div>
283 </div>
276
284
277 <div class="main">
285 <div class="main">
278
286
279 <h2><a href="/">test</a></h2>
287 <h2><a href="/">test</a></h2>
280 <h3>changeset 0:0cd96de13884 </h3>
288 <h3>changeset 0:0cd96de13884 </h3>
281
289
282 <form class="search" action="/log">
290 <form class="search" action="/log">
283
291
284 <p><input name="rev" id="search1" type="text" size="30" /></p>
292 <p><input name="rev" id="search1" type="text" size="30" /></p>
285 <div id="hint">find changesets by author, revision,
293 <div id="hint">find changesets by author, revision,
286 files, or words in the commit message</div>
294 files, or words in the commit message</div>
287 </form>
295 </form>
288
296
289 <div class="description">a</div>
297 <div class="description">a</div>
290
298
291 <table id="changesetEntry">
299 <table id="changesetEntry">
292 <tr>
300 <tr>
293 <th class="author">author</th>
301 <th class="author">author</th>
294 <td class="author">&#116;&#101;&#115;&#116;</td>
302 <td class="author">&#116;&#101;&#115;&#116;</td>
295 </tr>
303 </tr>
296 <tr>
304 <tr>
297 <th class="date">date</th>
305 <th class="date">date</th>
298 <td class="date">Thu Jan 01 00:00:00 1970 +0000 (1970-01-01)</td></tr>
306 <td class="date">Thu Jan 01 00:00:00 1970 +0000 (1970-01-01)</td></tr>
299 <tr>
307 <tr>
300 <th class="author">parents</th>
308 <th class="author">parents</th>
301 <td class="author"></td>
309 <td class="author"></td>
302 </tr>
310 </tr>
303 <tr>
311 <tr>
304 <th class="author">children</th>
312 <th class="author">children</th>
305 <td class="author"> <a href="/rev/78e4ebad7cdf">78e4ebad7cdf</a></td>
313 <td class="author"> <a href="/rev/78e4ebad7cdf">78e4ebad7cdf</a></td>
306 </tr>
314 </tr>
307 <tr>
315 <tr>
308 <th class="files">files</th>
316 <th class="files">files</th>
309 <td class="files"><a href="/file/0cd96de13884/a">a</a> <a href="/file/0cd96de13884/b">b</a> </td>
317 <td class="files"><a href="/file/0cd96de13884/a">a</a> <a href="/file/0cd96de13884/b">b</a> </td>
310 </tr>
318 </tr>
311 </table>
319 </table>
312
320
313 <div class="overflow">
321 <div class="overflow">
314 <div class="sourcefirst"> line diff</div>
322 <div class="sourcefirst"> line diff</div>
315
323
316 <div class="source bottomline parity0"><pre><a href="#l1.1" id="l1.1"> 1.1</a> new file mode 100644
324 <div class="source bottomline parity0"><pre><a href="#l1.1" id="l1.1"> 1.1</a> new file mode 100644
317 <a href="#l1.2" id="l1.2"> 1.2</a> <span class="minusline">--- /dev/null
325 <a href="#l1.2" id="l1.2"> 1.2</a> <span class="minusline">--- /dev/null
318 </span><a href="#l1.3" id="l1.3"> 1.3</a> <span class="plusline">+++ b/a
326 </span><a href="#l1.3" id="l1.3"> 1.3</a> <span class="plusline">+++ b/a
319 </span><a href="#l1.4" id="l1.4"> 1.4</a> <span class="atline">@@ -0,0 +1,1 @@
327 </span><a href="#l1.4" id="l1.4"> 1.4</a> <span class="atline">@@ -0,0 +1,1 @@
320 </span><a href="#l1.5" id="l1.5"> 1.5</a> <span class="plusline">+a
328 </span><a href="#l1.5" id="l1.5"> 1.5</a> <span class="plusline">+a
321 </span></pre></div><div class="source bottomline parity1"><pre><a href="#l2.1" id="l2.1"> 2.1</a> new file mode 100644
329 </span></pre></div><div class="source bottomline parity1"><pre><a href="#l2.1" id="l2.1"> 2.1</a> new file mode 100644
322 <a href="#l2.2" id="l2.2"> 2.2</a> <span class="minusline">--- /dev/null
330 <a href="#l2.2" id="l2.2"> 2.2</a> <span class="minusline">--- /dev/null
323 </span><a href="#l2.3" id="l2.3"> 2.3</a> <span class="plusline">+++ b/b
331 </span><a href="#l2.3" id="l2.3"> 2.3</a> <span class="plusline">+++ b/b
324 </span><a href="#l2.4" id="l2.4"> 2.4</a> <span class="atline">@@ -0,0 +1,1 @@
332 </span><a href="#l2.4" id="l2.4"> 2.4</a> <span class="atline">@@ -0,0 +1,1 @@
325 </span><a href="#l2.5" id="l2.5"> 2.5</a> <span class="plusline">+b
333 </span><a href="#l2.5" id="l2.5"> 2.5</a> <span class="plusline">+b
326 </span></pre></div>
334 </span></pre></div>
327 </div>
335 </div>
328
336
329 </div>
337 </div>
330 </div>
338 </div>
331
339
332
340
333 </body>
341 </body>
334 </html>
342 </html>
335
343
336
344
337 revision
345 revision
338
346
339 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT '/raw-rev/0'
347 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT '/raw-rev/0'
340 200 Script output follows
348 200 Script output follows
341
349
342
350
343 # HG changeset patch
351 # HG changeset patch
344 # User test
352 # User test
345 # Date 0 0
353 # Date 0 0
346 # Node ID 0cd96de13884b090099512d4794ae87ad067ea8e
354 # Node ID 0cd96de13884b090099512d4794ae87ad067ea8e
347
355
348 a
356 a
349
357
350 diff --git a/a b/a
358 diff --git a/a b/a
351 new file mode 100644
359 new file mode 100644
352 --- /dev/null
360 --- /dev/null
353 +++ b/a
361 +++ b/a
354 @@ -0,0 +1,1 @@
362 @@ -0,0 +1,1 @@
355 +a
363 +a
356 diff --git a/b b/b
364 diff --git a/b b/b
357 new file mode 100644
365 new file mode 100644
358 --- /dev/null
366 --- /dev/null
359 +++ b/b
367 +++ b/b
360 @@ -0,0 +1,1 @@
368 @@ -0,0 +1,1 @@
361 +b
369 +b
362
370
363
371
364 diff removed file
372 diff removed file
365
373
366 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT '/diff/tip/a'
374 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT '/diff/tip/a'
367 200 Script output follows
375 200 Script output follows
368
376
369 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
377 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
370 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
378 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
371 <head>
379 <head>
372 <link rel="icon" href="/static/hgicon.png" type="image/png" />
380 <link rel="icon" href="/static/hgicon.png" type="image/png" />
373 <meta name="robots" content="index, nofollow" />
381 <meta name="robots" content="index, nofollow" />
374 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
382 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
375
383
376 <title>test: a diff</title>
384 <title>test: a diff</title>
377 </head>
385 </head>
378 <body>
386 <body>
379
387
380 <div class="container">
388 <div class="container">
381 <div class="menu">
389 <div class="menu">
382 <div class="logo">
390 <div class="logo">
383 <a href="http://mercurial.selenic.com/">
391 <a href="http://mercurial.selenic.com/">
384 <img src="/static/hglogo.png" alt="mercurial" /></a>
392 <img src="/static/hglogo.png" alt="mercurial" /></a>
385 </div>
393 </div>
386 <ul>
394 <ul>
387 <li><a href="/shortlog/78e4ebad7cdf">log</a></li>
395 <li><a href="/shortlog/78e4ebad7cdf">log</a></li>
388 <li><a href="/graph/78e4ebad7cdf">graph</a></li>
396 <li><a href="/graph/78e4ebad7cdf">graph</a></li>
389 <li><a href="/tags">tags</a></li>
397 <li><a href="/tags">tags</a></li>
390 <li><a href="/branches">branches</a></li>
398 <li><a href="/branches">branches</a></li>
391 </ul>
399 </ul>
392 <ul>
400 <ul>
393 <li><a href="/rev/78e4ebad7cdf">changeset</a></li>
401 <li><a href="/rev/78e4ebad7cdf">changeset</a></li>
394 <li><a href="/file/78e4ebad7cdf">browse</a></li>
402 <li><a href="/file/78e4ebad7cdf">browse</a></li>
395 </ul>
403 </ul>
396 <ul>
404 <ul>
397 <li><a href="/file/78e4ebad7cdf/a">file</a></li>
405 <li><a href="/file/78e4ebad7cdf/a">file</a></li>
398 <li><a href="/file/tip/a">latest</a></li>
406 <li><a href="/file/tip/a">latest</a></li>
399 <li class="active">diff</li>
407 <li class="active">diff</li>
400 <li><a href="/annotate/78e4ebad7cdf/a">annotate</a></li>
408 <li><a href="/annotate/78e4ebad7cdf/a">annotate</a></li>
401 <li><a href="/log/78e4ebad7cdf/a">file log</a></li>
409 <li><a href="/log/78e4ebad7cdf/a">file log</a></li>
402 <li><a href="/raw-file/78e4ebad7cdf/a">raw</a></li>
410 <li><a href="/raw-file/78e4ebad7cdf/a">raw</a></li>
403 </ul>
411 </ul>
404 </div>
412 </div>
405
413
406 <div class="main">
414 <div class="main">
407 <h2><a href="/">test</a></h2>
415 <h2><a href="/">test</a></h2>
408 <h3>diff a @ 1:78e4ebad7cdf</h3>
416 <h3>diff a @ 1:78e4ebad7cdf</h3>
409
417
410 <form class="search" action="/log">
418 <form class="search" action="/log">
411 <p></p>
419 <p></p>
412 <p><input name="rev" id="search1" type="text" size="30" /></p>
420 <p><input name="rev" id="search1" type="text" size="30" /></p>
413 <div id="hint">find changesets by author, revision,
421 <div id="hint">find changesets by author, revision,
414 files, or words in the commit message</div>
422 files, or words in the commit message</div>
415 </form>
423 </form>
416
424
417 <div class="description">b</div>
425 <div class="description">b</div>
418
426
419 <table id="changesetEntry">
427 <table id="changesetEntry">
420 <tr>
428 <tr>
421 <th>author</th>
429 <th>author</th>
422 <td>&#116;&#101;&#115;&#116;</td>
430 <td>&#116;&#101;&#115;&#116;</td>
423 </tr>
431 </tr>
424 <tr>
432 <tr>
425 <th>date</th>
433 <th>date</th>
426 <td>Thu Jan 01 00:00:00 1970 +0000 (1970-01-01)</td>
434 <td>Thu Jan 01 00:00:00 1970 +0000 (1970-01-01)</td>
427 </tr>
435 </tr>
428 <tr>
436 <tr>
429 <th>parents</th>
437 <th>parents</th>
430 <td></td>
438 <td></td>
431 </tr>
439 </tr>
432 <tr>
440 <tr>
433 <th>children</th>
441 <th>children</th>
434 <td></td>
442 <td></td>
435 </tr>
443 </tr>
436
444
437 </table>
445 </table>
438
446
439 <div class="overflow">
447 <div class="overflow">
440 <div class="sourcefirst"> line diff</div>
448 <div class="sourcefirst"> line diff</div>
441
449
442 <div class="source bottomline parity0"><pre><a href="#l1.1" id="l1.1"> 1.1</a> new file mode 100755
450 <div class="source bottomline parity0"><pre><a href="#l1.1" id="l1.1"> 1.1</a> new file mode 100755
443 <a href="#l1.2" id="l1.2"> 1.2</a> <span class="minusline">--- /dev/null
451 <a href="#l1.2" id="l1.2"> 1.2</a> <span class="minusline">--- /dev/null
444 </span><a href="#l1.3" id="l1.3"> 1.3</a> <span class="plusline">+++ b/a
452 </span><a href="#l1.3" id="l1.3"> 1.3</a> <span class="plusline">+++ b/a
445 </span><a href="#l1.4" id="l1.4"> 1.4</a> <span class="atline">@@ -0,0 +1,1 @@
453 </span><a href="#l1.4" id="l1.4"> 1.4</a> <span class="atline">@@ -0,0 +1,1 @@
446 </span><a href="#l1.5" id="l1.5"> 1.5</a> <span class="plusline">+a
454 </span><a href="#l1.5" id="l1.5"> 1.5</a> <span class="plusline">+a
447 </span></pre></div>
455 </span></pre></div>
448 </div>
456 </div>
449 </div>
457 </div>
450 </div>
458 </div>
451
459
452
460
453
461
454 </body>
462 </body>
455 </html>
463 </html>
456
464
457 $ cd ..
465 $ cd ..
458
466
459 test import rev as raw-rev
467 test import rev as raw-rev
460
468
461 $ hg clone -r0 test test1
469 $ hg clone -r0 test test1
462 requesting all changes
470 requesting all changes
463 adding changesets
471 adding changesets
464 adding manifests
472 adding manifests
465 adding file changes
473 adding file changes
466 added 1 changesets with 2 changes to 2 files
474 added 1 changesets with 2 changes to 2 files
467 updating to branch default
475 updating to branch default
468 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
476 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
469 $ cd test1
477 $ cd test1
470 $ hg import -q --exact http://localhost:$HGPORT/rev/1
478 $ hg import -q --exact http://localhost:$HGPORT/rev/1
471
479
472 errors
480 errors
473
481
474 $ cat ../test/errors.log
482 $ cat ../test/errors.log
@@ -1,376 +1,392 b''
1 Some tests for hgweb in an empty repository
1 Some tests for hgweb in an empty repository
2
2
3 $ hg init test
3 $ hg init test
4 $ cd test
4 $ cd test
5 $ hg serve -n test -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
5 $ hg serve -n test -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
6 $ cat hg.pid >> $DAEMON_PIDS
6 $ cat hg.pid >> $DAEMON_PIDS
7 $ ("$TESTDIR/get-with-headers.py" localhost:$HGPORT '/shortlog')
7 $ ("$TESTDIR/get-with-headers.py" localhost:$HGPORT '/shortlog')
8 200 Script output follows
8 200 Script output follows
9
9
10 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
10 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
11 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
11 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
12 <head>
12 <head>
13 <link rel="icon" href="/static/hgicon.png" type="image/png" />
13 <link rel="icon" href="/static/hgicon.png" type="image/png" />
14 <meta name="robots" content="index, nofollow" />
14 <meta name="robots" content="index, nofollow" />
15 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
15 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
16
16
17 <title>test: log</title>
17 <title>test: log</title>
18 <link rel="alternate" type="application/atom+xml"
18 <link rel="alternate" type="application/atom+xml"
19 href="/atom-log" title="Atom feed for test" />
19 href="/atom-log" title="Atom feed for test" />
20 <link rel="alternate" type="application/rss+xml"
20 <link rel="alternate" type="application/rss+xml"
21 href="/rss-log" title="RSS feed for test" />
21 href="/rss-log" title="RSS feed for test" />
22 </head>
22 </head>
23 <body>
23 <body>
24
24
25 <div class="container">
25 <div class="container">
26 <div class="menu">
26 <div class="menu">
27 <div class="logo">
27 <div class="logo">
28 <a href="http://mercurial.selenic.com/">
28 <a href="http://mercurial.selenic.com/">
29 <img src="/static/hglogo.png" alt="mercurial" /></a>
29 <img src="/static/hglogo.png" alt="mercurial" /></a>
30 </div>
30 </div>
31 <ul>
31 <ul>
32 <li class="active">log</li>
32 <li class="active">log</li>
33 <li><a href="/graph/000000000000">graph</a></li>
33 <li><a href="/graph/000000000000">graph</a></li>
34 <li><a href="/tags">tags</a></li>
34 <li><a href="/tags">tags</a></li>
35 <li><a href="/branches">branches</a></li>
35 <li><a href="/branches">branches</a></li>
36 <li><a href="/help">help</a></li>
36 </ul>
37 </ul>
37 <ul>
38 <ul>
38 <li><a href="/rev/000000000000">changeset</a></li>
39 <li><a href="/rev/000000000000">changeset</a></li>
39 <li><a href="/file/000000000000">browse</a></li>
40 <li><a href="/file/000000000000">browse</a></li>
40 </ul>
41 </ul>
41 <ul>
42 <ul>
42
43
43 </ul>
44 </ul>
45 <ul>
46 <li><a href="/help">help</a></li>
47 </ul>
44 </div>
48 </div>
45
49
46 <div class="main">
50 <div class="main">
47 <h2><a href="/">test</a></h2>
51 <h2><a href="/">test</a></h2>
48 <h3>log</h3>
52 <h3>log</h3>
49
53
50 <form class="search" action="/log">
54 <form class="search" action="/log">
51
55
52 <p><input name="rev" id="search1" type="text" size="30" /></p>
56 <p><input name="rev" id="search1" type="text" size="30" /></p>
53 <div id="hint">find changesets by author, revision,
57 <div id="hint">find changesets by author, revision,
54 files, or words in the commit message</div>
58 files, or words in the commit message</div>
55 </form>
59 </form>
56
60
57 <div class="navigate">
61 <div class="navigate">
58 <a href="/shortlog/-1?revcount=30">less</a>
62 <a href="/shortlog/-1?revcount=30">less</a>
59 <a href="/shortlog/-1?revcount=120">more</a>
63 <a href="/shortlog/-1?revcount=120">more</a>
60 | rev -1: <a href="/shortlog/000000000000">(0)</a> <a href="/shortlog/tip">tip</a>
64 | rev -1: <a href="/shortlog/000000000000">(0)</a> <a href="/shortlog/tip">tip</a>
61 </div>
65 </div>
62
66
63 <table class="bigtable">
67 <table class="bigtable">
64 <tr>
68 <tr>
65 <th class="age">age</th>
69 <th class="age">age</th>
66 <th class="author">author</th>
70 <th class="author">author</th>
67 <th class="description">description</th>
71 <th class="description">description</th>
68 </tr>
72 </tr>
69
73
70 </table>
74 </table>
71
75
72 <div class="navigate">
76 <div class="navigate">
73 <a href="/shortlog/-1?revcount=30">less</a>
77 <a href="/shortlog/-1?revcount=30">less</a>
74 <a href="/shortlog/-1?revcount=120">more</a>
78 <a href="/shortlog/-1?revcount=120">more</a>
75 | rev -1: <a href="/shortlog/000000000000">(0)</a> <a href="/shortlog/tip">tip</a>
79 | rev -1: <a href="/shortlog/000000000000">(0)</a> <a href="/shortlog/tip">tip</a>
76 </div>
80 </div>
77
81
78 </div>
82 </div>
79 </div>
83 </div>
80
84
81
85
82
86
83 </body>
87 </body>
84 </html>
88 </html>
85
89
86 $ ("$TESTDIR/get-with-headers.py" localhost:$HGPORT '/log')
90 $ ("$TESTDIR/get-with-headers.py" localhost:$HGPORT '/log')
87 200 Script output follows
91 200 Script output follows
88
92
89 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
93 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
90 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
94 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
91 <head>
95 <head>
92 <link rel="icon" href="/static/hgicon.png" type="image/png" />
96 <link rel="icon" href="/static/hgicon.png" type="image/png" />
93 <meta name="robots" content="index, nofollow" />
97 <meta name="robots" content="index, nofollow" />
94 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
98 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
95
99
96 <title>test: log</title>
100 <title>test: log</title>
97 <link rel="alternate" type="application/atom+xml"
101 <link rel="alternate" type="application/atom+xml"
98 href="/atom-log" title="Atom feed for test" />
102 href="/atom-log" title="Atom feed for test" />
99 <link rel="alternate" type="application/rss+xml"
103 <link rel="alternate" type="application/rss+xml"
100 href="/rss-log" title="RSS feed for test" />
104 href="/rss-log" title="RSS feed for test" />
101 </head>
105 </head>
102 <body>
106 <body>
103
107
104 <div class="container">
108 <div class="container">
105 <div class="menu">
109 <div class="menu">
106 <div class="logo">
110 <div class="logo">
107 <a href="http://mercurial.selenic.com/">
111 <a href="http://mercurial.selenic.com/">
108 <img src="/static/hglogo.png" alt="mercurial" /></a>
112 <img src="/static/hglogo.png" alt="mercurial" /></a>
109 </div>
113 </div>
110 <ul>
114 <ul>
111 <li class="active">log</li>
115 <li class="active">log</li>
112 <li><a href="/graph/000000000000">graph</a></li>
116 <li><a href="/graph/000000000000">graph</a></li>
113 <li><a href="/tags">tags</a></li>
117 <li><a href="/tags">tags</a></li>
114 <li><a href="/branches">branches</a></li>
118 <li><a href="/branches">branches</a></li>
119 <li><a href="/help">help</a></li>
115 </ul>
120 </ul>
116 <ul>
121 <ul>
117 <li><a href="/rev/000000000000">changeset</a></li>
122 <li><a href="/rev/000000000000">changeset</a></li>
118 <li><a href="/file/000000000000">browse</a></li>
123 <li><a href="/file/000000000000">browse</a></li>
119 </ul>
124 </ul>
120 <ul>
125 <ul>
121
126
122 </ul>
127 </ul>
128 <ul>
129 <li><a href="/help">help</a></li>
130 </ul>
123 </div>
131 </div>
124
132
125 <div class="main">
133 <div class="main">
126 <h2><a href="/">test</a></h2>
134 <h2><a href="/">test</a></h2>
127 <h3>log</h3>
135 <h3>log</h3>
128
136
129 <form class="search" action="/log">
137 <form class="search" action="/log">
130
138
131 <p><input name="rev" id="search1" type="text" size="30" /></p>
139 <p><input name="rev" id="search1" type="text" size="30" /></p>
132 <div id="hint">find changesets by author, revision,
140 <div id="hint">find changesets by author, revision,
133 files, or words in the commit message</div>
141 files, or words in the commit message</div>
134 </form>
142 </form>
135
143
136 <div class="navigate">
144 <div class="navigate">
137 <a href="/shortlog/-1?revcount=5">less</a>
145 <a href="/shortlog/-1?revcount=5">less</a>
138 <a href="/shortlog/-1?revcount=20">more</a>
146 <a href="/shortlog/-1?revcount=20">more</a>
139 | rev -1: <a href="/shortlog/000000000000">(0)</a> <a href="/shortlog/tip">tip</a>
147 | rev -1: <a href="/shortlog/000000000000">(0)</a> <a href="/shortlog/tip">tip</a>
140 </div>
148 </div>
141
149
142 <table class="bigtable">
150 <table class="bigtable">
143 <tr>
151 <tr>
144 <th class="age">age</th>
152 <th class="age">age</th>
145 <th class="author">author</th>
153 <th class="author">author</th>
146 <th class="description">description</th>
154 <th class="description">description</th>
147 </tr>
155 </tr>
148
156
149 </table>
157 </table>
150
158
151 <div class="navigate">
159 <div class="navigate">
152 <a href="/shortlog/-1?revcount=5">less</a>
160 <a href="/shortlog/-1?revcount=5">less</a>
153 <a href="/shortlog/-1?revcount=20">more</a>
161 <a href="/shortlog/-1?revcount=20">more</a>
154 | rev -1: <a href="/shortlog/000000000000">(0)</a> <a href="/shortlog/tip">tip</a>
162 | rev -1: <a href="/shortlog/000000000000">(0)</a> <a href="/shortlog/tip">tip</a>
155 </div>
163 </div>
156
164
157 </div>
165 </div>
158 </div>
166 </div>
159
167
160
168
161
169
162 </body>
170 </body>
163 </html>
171 </html>
164
172
165 $ ("$TESTDIR/get-with-headers.py" localhost:$HGPORT '/graph')
173 $ ("$TESTDIR/get-with-headers.py" localhost:$HGPORT '/graph')
166 200 Script output follows
174 200 Script output follows
167
175
168 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
176 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
169 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
177 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
170 <head>
178 <head>
171 <link rel="icon" href="/static/hgicon.png" type="image/png" />
179 <link rel="icon" href="/static/hgicon.png" type="image/png" />
172 <meta name="robots" content="index, nofollow" />
180 <meta name="robots" content="index, nofollow" />
173 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
181 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
174
182
175 <title>test: revision graph</title>
183 <title>test: revision graph</title>
176 <link rel="alternate" type="application/atom+xml"
184 <link rel="alternate" type="application/atom+xml"
177 href="/atom-log" title="Atom feed for test: log" />
185 href="/atom-log" title="Atom feed for test: log" />
178 <link rel="alternate" type="application/rss+xml"
186 <link rel="alternate" type="application/rss+xml"
179 href="/rss-log" title="RSS feed for test: log" />
187 href="/rss-log" title="RSS feed for test: log" />
180 <!--[if IE]><script type="text/javascript" src="/static/excanvas.js"></script><![endif]-->
188 <!--[if IE]><script type="text/javascript" src="/static/excanvas.js"></script><![endif]-->
181 </head>
189 </head>
182 <body>
190 <body>
183
191
184 <div class="container">
192 <div class="container">
185 <div class="menu">
193 <div class="menu">
186 <div class="logo">
194 <div class="logo">
187 <a href="http://mercurial.selenic.com/">
195 <a href="http://mercurial.selenic.com/">
188 <img src="/static/hglogo.png" alt="mercurial" /></a>
196 <img src="/static/hglogo.png" alt="mercurial" /></a>
189 </div>
197 </div>
190 <ul>
198 <ul>
191 <li><a href="/shortlog/000000000000">log</a></li>
199 <li><a href="/shortlog/000000000000">log</a></li>
192 <li class="active">graph</li>
200 <li class="active">graph</li>
193 <li><a href="/tags">tags</a></li>
201 <li><a href="/tags">tags</a></li>
194 <li><a href="/branches">branches</a></li>
202 <li><a href="/branches">branches</a></li>
203 <li><a href="/help">help</a></li>
195 </ul>
204 </ul>
196 <ul>
205 <ul>
197 <li><a href="/rev/000000000000">changeset</a></li>
206 <li><a href="/rev/000000000000">changeset</a></li>
198 <li><a href="/file/000000000000">browse</a></li>
207 <li><a href="/file/000000000000">browse</a></li>
199 </ul>
208 </ul>
209 <ul>
210 <li><a href="/help">help</a></li>
211 </ul>
200 </div>
212 </div>
201
213
202 <div class="main">
214 <div class="main">
203 <h2><a href="/">test</a></h2>
215 <h2><a href="/">test</a></h2>
204 <h3>graph</h3>
216 <h3>graph</h3>
205
217
206 <form class="search" action="/log">
218 <form class="search" action="/log">
207
219
208 <p><input name="rev" id="search1" type="text" size="30" /></p>
220 <p><input name="rev" id="search1" type="text" size="30" /></p>
209 <div id="hint">find changesets by author, revision,
221 <div id="hint">find changesets by author, revision,
210 files, or words in the commit message</div>
222 files, or words in the commit message</div>
211 </form>
223 </form>
212
224
213 <div class="navigate">
225 <div class="navigate">
214 <a href="/graph/-1?revcount=30">less</a>
226 <a href="/graph/-1?revcount=30">less</a>
215 <a href="/graph/-1?revcount=120">more</a>
227 <a href="/graph/-1?revcount=120">more</a>
216 | rev -1: <a href="/graph/000000000000">(0)</a> <a href="/graph/tip">tip</a>
228 | rev -1: <a href="/graph/000000000000">(0)</a> <a href="/graph/tip">tip</a>
217 </div>
229 </div>
218
230
219 <noscript><p>The revision graph only works with JavaScript-enabled browsers.</p></noscript>
231 <noscript><p>The revision graph only works with JavaScript-enabled browsers.</p></noscript>
220
232
221 <div id="wrapper">
233 <div id="wrapper">
222 <ul id="nodebgs"></ul>
234 <ul id="nodebgs"></ul>
223 <canvas id="graph" width="224" height="12"></canvas>
235 <canvas id="graph" width="224" height="12"></canvas>
224 <ul id="graphnodes"></ul>
236 <ul id="graphnodes"></ul>
225 </div>
237 </div>
226
238
227 <script type="text/javascript" src="/static/graph.js"></script>
239 <script type="text/javascript" src="/static/graph.js"></script>
228 <script type="text/javascript">
240 <script type="text/javascript">
229 <!-- hide script content
241 <!-- hide script content
230
242
231 var data = [];
243 var data = [];
232 var graph = new Graph();
244 var graph = new Graph();
233 graph.scale(39);
245 graph.scale(39);
234
246
235 graph.edge = function(x0, y0, x1, y1, color) {
247 graph.edge = function(x0, y0, x1, y1, color) {
236
248
237 this.setColor(color, 0.0, 0.65);
249 this.setColor(color, 0.0, 0.65);
238 this.ctx.beginPath();
250 this.ctx.beginPath();
239 this.ctx.moveTo(x0, y0);
251 this.ctx.moveTo(x0, y0);
240 this.ctx.lineTo(x1, y1);
252 this.ctx.lineTo(x1, y1);
241 this.ctx.stroke();
253 this.ctx.stroke();
242
254
243 }
255 }
244
256
245 var revlink = '<li style="_STYLE"><span class="desc">';
257 var revlink = '<li style="_STYLE"><span class="desc">';
246 revlink += '<a href="/rev/_NODEID" title="_NODEID">_DESC</a>';
258 revlink += '<a href="/rev/_NODEID" title="_NODEID">_DESC</a>';
247 revlink += '</span>_TAGS<span class="info">_DATE, by _USER</span></li>';
259 revlink += '</span>_TAGS<span class="info">_DATE, by _USER</span></li>';
248
260
249 graph.vertex = function(x, y, color, parity, cur) {
261 graph.vertex = function(x, y, color, parity, cur) {
250
262
251 this.ctx.beginPath();
263 this.ctx.beginPath();
252 color = this.setColor(color, 0.25, 0.75);
264 color = this.setColor(color, 0.25, 0.75);
253 this.ctx.arc(x, y, radius, 0, Math.PI * 2, true);
265 this.ctx.arc(x, y, radius, 0, Math.PI * 2, true);
254 this.ctx.fill();
266 this.ctx.fill();
255
267
256 var bg = '<li class="bg parity' + parity + '"></li>';
268 var bg = '<li class="bg parity' + parity + '"></li>';
257 var left = (this.columns + 1) * this.bg_height;
269 var left = (this.columns + 1) * this.bg_height;
258 var nstyle = 'padding-left: ' + left + 'px;';
270 var nstyle = 'padding-left: ' + left + 'px;';
259 var item = revlink.replace(/_STYLE/, nstyle);
271 var item = revlink.replace(/_STYLE/, nstyle);
260 item = item.replace(/_PARITY/, 'parity' + parity);
272 item = item.replace(/_PARITY/, 'parity' + parity);
261 item = item.replace(/_NODEID/, cur[0]);
273 item = item.replace(/_NODEID/, cur[0]);
262 item = item.replace(/_NODEID/, cur[0]);
274 item = item.replace(/_NODEID/, cur[0]);
263 item = item.replace(/_DESC/, cur[3]);
275 item = item.replace(/_DESC/, cur[3]);
264 item = item.replace(/_USER/, cur[4]);
276 item = item.replace(/_USER/, cur[4]);
265 item = item.replace(/_DATE/, cur[5]);
277 item = item.replace(/_DATE/, cur[5]);
266
278
267 var tagspan = '';
279 var tagspan = '';
268 if (cur[7].length || (cur[6][0] != 'default' || cur[6][1])) {
280 if (cur[7].length || (cur[6][0] != 'default' || cur[6][1])) {
269 tagspan = '<span class="logtags">';
281 tagspan = '<span class="logtags">';
270 if (cur[6][1]) {
282 if (cur[6][1]) {
271 tagspan += '<span class="branchhead" title="' + cur[6][0] + '">';
283 tagspan += '<span class="branchhead" title="' + cur[6][0] + '">';
272 tagspan += cur[6][0] + '</span> ';
284 tagspan += cur[6][0] + '</span> ';
273 } else if (!cur[6][1] && cur[6][0] != 'default') {
285 } else if (!cur[6][1] && cur[6][0] != 'default') {
274 tagspan += '<span class="branchname" title="' + cur[6][0] + '">';
286 tagspan += '<span class="branchname" title="' + cur[6][0] + '">';
275 tagspan += cur[6][0] + '</span> ';
287 tagspan += cur[6][0] + '</span> ';
276 }
288 }
277 if (cur[7].length) {
289 if (cur[7].length) {
278 for (var t in cur[7]) {
290 for (var t in cur[7]) {
279 var tag = cur[7][t];
291 var tag = cur[7][t];
280 tagspan += '<span class="tag">' + tag + '</span> ';
292 tagspan += '<span class="tag">' + tag + '</span> ';
281 }
293 }
282 }
294 }
283 tagspan += '</span>';
295 tagspan += '</span>';
284 }
296 }
285
297
286 item = item.replace(/_TAGS/, tagspan);
298 item = item.replace(/_TAGS/, tagspan);
287 return [bg, item];
299 return [bg, item];
288
300
289 }
301 }
290
302
291 graph.render(data);
303 graph.render(data);
292
304
293 // stop hiding script -->
305 // stop hiding script -->
294 </script>
306 </script>
295
307
296 <div class="navigate">
308 <div class="navigate">
297 <a href="/graph/-1?revcount=30">less</a>
309 <a href="/graph/-1?revcount=30">less</a>
298 <a href="/graph/-1?revcount=120">more</a>
310 <a href="/graph/-1?revcount=120">more</a>
299 | rev -1: <a href="/graph/000000000000">(0)</a> <a href="/graph/tip">tip</a>
311 | rev -1: <a href="/graph/000000000000">(0)</a> <a href="/graph/tip">tip</a>
300 </div>
312 </div>
301
313
302 </div>
314 </div>
303 </div>
315 </div>
304
316
305
317
306
318
307 </body>
319 </body>
308 </html>
320 </html>
309
321
310 $ ("$TESTDIR/get-with-headers.py" localhost:$HGPORT '/file')
322 $ ("$TESTDIR/get-with-headers.py" localhost:$HGPORT '/file')
311 200 Script output follows
323 200 Script output follows
312
324
313 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
325 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
314 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
326 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
315 <head>
327 <head>
316 <link rel="icon" href="/static/hgicon.png" type="image/png" />
328 <link rel="icon" href="/static/hgicon.png" type="image/png" />
317 <meta name="robots" content="index, nofollow" />
329 <meta name="robots" content="index, nofollow" />
318 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
330 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
319
331
320 <title>test: 000000000000 /</title>
332 <title>test: 000000000000 /</title>
321 </head>
333 </head>
322 <body>
334 <body>
323
335
324 <div class="container">
336 <div class="container">
325 <div class="menu">
337 <div class="menu">
326 <div class="logo">
338 <div class="logo">
327 <a href="http://mercurial.selenic.com/">
339 <a href="http://mercurial.selenic.com/">
328 <img src="/static/hglogo.png" alt="mercurial" /></a>
340 <img src="/static/hglogo.png" alt="mercurial" /></a>
329 </div>
341 </div>
330 <ul>
342 <ul>
331 <li><a href="/shortlog/000000000000">log</a></li>
343 <li><a href="/shortlog/000000000000">log</a></li>
332 <li><a href="/graph/000000000000">graph</a></li>
344 <li><a href="/graph/000000000000">graph</a></li>
333 <li><a href="/tags">tags</a></li>
345 <li><a href="/tags">tags</a></li>
334 <li><a href="/branches">branches</a></li>
346 <li><a href="/branches">branches</a></li>
347 <li><a href="/help">help</a></li>
335 </ul>
348 </ul>
336 <ul>
349 <ul>
337 <li><a href="/rev/000000000000">changeset</a></li>
350 <li><a href="/rev/000000000000">changeset</a></li>
338 <li class="active">browse</li>
351 <li class="active">browse</li>
339 </ul>
352 </ul>
340 <ul>
353 <ul>
341
354
342 </ul>
355 </ul>
356 <ul>
357 <li><a href="/help">help</a></li>
358 </ul>
343 </div>
359 </div>
344
360
345 <div class="main">
361 <div class="main">
346 <h2><a href="/">test</a></h2>
362 <h2><a href="/">test</a></h2>
347 <h3>directory / @ -1:000000000000 <span class="tag">tip</span> </h3>
363 <h3>directory / @ -1:000000000000 <span class="tag">tip</span> </h3>
348
364
349 <form class="search" action="/log">
365 <form class="search" action="/log">
350
366
351 <p><input name="rev" id="search1" type="text" size="30" /></p>
367 <p><input name="rev" id="search1" type="text" size="30" /></p>
352 <div id="hint">find changesets by author, revision,
368 <div id="hint">find changesets by author, revision,
353 files, or words in the commit message</div>
369 files, or words in the commit message</div>
354 </form>
370 </form>
355
371
356 <table class="bigtable">
372 <table class="bigtable">
357 <tr>
373 <tr>
358 <th class="name">name</th>
374 <th class="name">name</th>
359 <th class="size">size</th>
375 <th class="size">size</th>
360 <th class="permissions">permissions</th>
376 <th class="permissions">permissions</th>
361 </tr>
377 </tr>
362 <tr class="fileline parity0">
378 <tr class="fileline parity0">
363 <td class="name"><a href="/file/000000000000/">[up]</a></td>
379 <td class="name"><a href="/file/000000000000/">[up]</a></td>
364 <td class="size"></td>
380 <td class="size"></td>
365 <td class="permissions">drwxr-xr-x</td>
381 <td class="permissions">drwxr-xr-x</td>
366 </tr>
382 </tr>
367
383
368
384
369 </table>
385 </table>
370 </div>
386 </div>
371 </div>
387 </div>
372
388
373
389
374 </body>
390 </body>
375 </html>
391 </html>
376
392
@@ -1,198 +1,202 b''
1 setting up repo
1 setting up repo
2
2
3 $ hg init test
3 $ hg init test
4 $ cd test
4 $ cd test
5 $ echo a > a
5 $ echo a > a
6 $ hg ci -Ama
6 $ hg ci -Ama
7 adding a
7 adding a
8 $ hg rm a
8 $ hg rm a
9 $ hg ci -mdel
9 $ hg ci -mdel
10
10
11 set up hgweb
11 set up hgweb
12
12
13 $ hg serve -n test -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
13 $ hg serve -n test -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
14 $ cat hg.pid >> $DAEMON_PIDS
14 $ cat hg.pid >> $DAEMON_PIDS
15
15
16 revision
16 revision
17
17
18 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT '/rev/tip'
18 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT '/rev/tip'
19 200 Script output follows
19 200 Script output follows
20
20
21 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
21 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
22 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
22 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
23 <head>
23 <head>
24 <link rel="icon" href="/static/hgicon.png" type="image/png" />
24 <link rel="icon" href="/static/hgicon.png" type="image/png" />
25 <meta name="robots" content="index, nofollow" />
25 <meta name="robots" content="index, nofollow" />
26 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
26 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
27
27
28 <title>test: c78f6c5cbea9</title>
28 <title>test: c78f6c5cbea9</title>
29 </head>
29 </head>
30 <body>
30 <body>
31 <div class="container">
31 <div class="container">
32 <div class="menu">
32 <div class="menu">
33 <div class="logo">
33 <div class="logo">
34 <a href="http://mercurial.selenic.com/">
34 <a href="http://mercurial.selenic.com/">
35 <img src="/static/hglogo.png" alt="mercurial" /></a>
35 <img src="/static/hglogo.png" alt="mercurial" /></a>
36 </div>
36 </div>
37 <ul>
37 <ul>
38 <li><a href="/shortlog/c78f6c5cbea9">log</a></li>
38 <li><a href="/shortlog/c78f6c5cbea9">log</a></li>
39 <li><a href="/graph/c78f6c5cbea9">graph</a></li>
39 <li><a href="/graph/c78f6c5cbea9">graph</a></li>
40 <li><a href="/tags">tags</a></li>
40 <li><a href="/tags">tags</a></li>
41 <li><a href="/branches">branches</a></li>
41 <li><a href="/branches">branches</a></li>
42 <li><a href="/help">help</a></li>
42 </ul>
43 </ul>
43 <ul>
44 <ul>
44 <li class="active">changeset</li>
45 <li class="active">changeset</li>
45 <li><a href="/raw-rev/c78f6c5cbea9">raw</a></li>
46 <li><a href="/raw-rev/c78f6c5cbea9">raw</a></li>
46 <li><a href="/file/c78f6c5cbea9">browse</a></li>
47 <li><a href="/file/c78f6c5cbea9">browse</a></li>
47 </ul>
48 </ul>
48 <ul>
49 <ul>
49
50
50 </ul>
51 </ul>
52 <ul>
53 <li><a href="/help">help</a></li>
54 </ul>
51 </div>
55 </div>
52
56
53 <div class="main">
57 <div class="main">
54
58
55 <h2><a href="/">test</a></h2>
59 <h2><a href="/">test</a></h2>
56 <h3>changeset 1:c78f6c5cbea9 <span class="tag">tip</span> </h3>
60 <h3>changeset 1:c78f6c5cbea9 <span class="tag">tip</span> </h3>
57
61
58 <form class="search" action="/log">
62 <form class="search" action="/log">
59
63
60 <p><input name="rev" id="search1" type="text" size="30" /></p>
64 <p><input name="rev" id="search1" type="text" size="30" /></p>
61 <div id="hint">find changesets by author, revision,
65 <div id="hint">find changesets by author, revision,
62 files, or words in the commit message</div>
66 files, or words in the commit message</div>
63 </form>
67 </form>
64
68
65 <div class="description">del</div>
69 <div class="description">del</div>
66
70
67 <table id="changesetEntry">
71 <table id="changesetEntry">
68 <tr>
72 <tr>
69 <th class="author">author</th>
73 <th class="author">author</th>
70 <td class="author">&#116;&#101;&#115;&#116;</td>
74 <td class="author">&#116;&#101;&#115;&#116;</td>
71 </tr>
75 </tr>
72 <tr>
76 <tr>
73 <th class="date">date</th>
77 <th class="date">date</th>
74 <td class="date">Thu Jan 01 00:00:00 1970 +0000 (1970-01-01)</td></tr>
78 <td class="date">Thu Jan 01 00:00:00 1970 +0000 (1970-01-01)</td></tr>
75 <tr>
79 <tr>
76 <th class="author">parents</th>
80 <th class="author">parents</th>
77 <td class="author"><a href="/rev/cb9a9f314b8b">cb9a9f314b8b</a> </td>
81 <td class="author"><a href="/rev/cb9a9f314b8b">cb9a9f314b8b</a> </td>
78 </tr>
82 </tr>
79 <tr>
83 <tr>
80 <th class="author">children</th>
84 <th class="author">children</th>
81 <td class="author"></td>
85 <td class="author"></td>
82 </tr>
86 </tr>
83 <tr>
87 <tr>
84 <th class="files">files</th>
88 <th class="files">files</th>
85 <td class="files">a </td>
89 <td class="files">a </td>
86 </tr>
90 </tr>
87 </table>
91 </table>
88
92
89 <div class="overflow">
93 <div class="overflow">
90 <div class="sourcefirst"> line diff</div>
94 <div class="sourcefirst"> line diff</div>
91
95
92 <div class="source bottomline parity0"><pre><a href="#l1.1" id="l1.1"> 1.1</a> <span class="minusline">--- a/a Thu Jan 01 00:00:00 1970 +0000
96 <div class="source bottomline parity0"><pre><a href="#l1.1" id="l1.1"> 1.1</a> <span class="minusline">--- a/a Thu Jan 01 00:00:00 1970 +0000
93 </span><a href="#l1.2" id="l1.2"> 1.2</a> <span class="plusline">+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
97 </span><a href="#l1.2" id="l1.2"> 1.2</a> <span class="plusline">+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
94 </span><a href="#l1.3" id="l1.3"> 1.3</a> <span class="atline">@@ -1,1 +0,0 @@
98 </span><a href="#l1.3" id="l1.3"> 1.3</a> <span class="atline">@@ -1,1 +0,0 @@
95 </span><a href="#l1.4" id="l1.4"> 1.4</a> <span class="minusline">-a
99 </span><a href="#l1.4" id="l1.4"> 1.4</a> <span class="minusline">-a
96 </span></pre></div>
100 </span></pre></div>
97 </div>
101 </div>
98
102
99 </div>
103 </div>
100 </div>
104 </div>
101
105
102
106
103 </body>
107 </body>
104 </html>
108 </html>
105
109
106
110
107 diff removed file
111 diff removed file
108
112
109 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT '/diff/tip/a'
113 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT '/diff/tip/a'
110 200 Script output follows
114 200 Script output follows
111
115
112 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
116 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
113 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
117 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
114 <head>
118 <head>
115 <link rel="icon" href="/static/hgicon.png" type="image/png" />
119 <link rel="icon" href="/static/hgicon.png" type="image/png" />
116 <meta name="robots" content="index, nofollow" />
120 <meta name="robots" content="index, nofollow" />
117 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
121 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
118
122
119 <title>test: a diff</title>
123 <title>test: a diff</title>
120 </head>
124 </head>
121 <body>
125 <body>
122
126
123 <div class="container">
127 <div class="container">
124 <div class="menu">
128 <div class="menu">
125 <div class="logo">
129 <div class="logo">
126 <a href="http://mercurial.selenic.com/">
130 <a href="http://mercurial.selenic.com/">
127 <img src="/static/hglogo.png" alt="mercurial" /></a>
131 <img src="/static/hglogo.png" alt="mercurial" /></a>
128 </div>
132 </div>
129 <ul>
133 <ul>
130 <li><a href="/shortlog/c78f6c5cbea9">log</a></li>
134 <li><a href="/shortlog/c78f6c5cbea9">log</a></li>
131 <li><a href="/graph/c78f6c5cbea9">graph</a></li>
135 <li><a href="/graph/c78f6c5cbea9">graph</a></li>
132 <li><a href="/tags">tags</a></li>
136 <li><a href="/tags">tags</a></li>
133 <li><a href="/branches">branches</a></li>
137 <li><a href="/branches">branches</a></li>
134 </ul>
138 </ul>
135 <ul>
139 <ul>
136 <li><a href="/rev/c78f6c5cbea9">changeset</a></li>
140 <li><a href="/rev/c78f6c5cbea9">changeset</a></li>
137 <li><a href="/file/c78f6c5cbea9">browse</a></li>
141 <li><a href="/file/c78f6c5cbea9">browse</a></li>
138 </ul>
142 </ul>
139 <ul>
143 <ul>
140 <li><a href="/file/c78f6c5cbea9/a">file</a></li>
144 <li><a href="/file/c78f6c5cbea9/a">file</a></li>
141 <li><a href="/file/tip/a">latest</a></li>
145 <li><a href="/file/tip/a">latest</a></li>
142 <li class="active">diff</li>
146 <li class="active">diff</li>
143 <li><a href="/annotate/c78f6c5cbea9/a">annotate</a></li>
147 <li><a href="/annotate/c78f6c5cbea9/a">annotate</a></li>
144 <li><a href="/log/c78f6c5cbea9/a">file log</a></li>
148 <li><a href="/log/c78f6c5cbea9/a">file log</a></li>
145 <li><a href="/raw-file/c78f6c5cbea9/a">raw</a></li>
149 <li><a href="/raw-file/c78f6c5cbea9/a">raw</a></li>
146 </ul>
150 </ul>
147 </div>
151 </div>
148
152
149 <div class="main">
153 <div class="main">
150 <h2><a href="/">test</a></h2>
154 <h2><a href="/">test</a></h2>
151 <h3>diff a @ 1:c78f6c5cbea9</h3>
155 <h3>diff a @ 1:c78f6c5cbea9</h3>
152
156
153 <form class="search" action="/log">
157 <form class="search" action="/log">
154 <p></p>
158 <p></p>
155 <p><input name="rev" id="search1" type="text" size="30" /></p>
159 <p><input name="rev" id="search1" type="text" size="30" /></p>
156 <div id="hint">find changesets by author, revision,
160 <div id="hint">find changesets by author, revision,
157 files, or words in the commit message</div>
161 files, or words in the commit message</div>
158 </form>
162 </form>
159
163
160 <div class="description">del</div>
164 <div class="description">del</div>
161
165
162 <table id="changesetEntry">
166 <table id="changesetEntry">
163 <tr>
167 <tr>
164 <th>author</th>
168 <th>author</th>
165 <td>&#116;&#101;&#115;&#116;</td>
169 <td>&#116;&#101;&#115;&#116;</td>
166 </tr>
170 </tr>
167 <tr>
171 <tr>
168 <th>date</th>
172 <th>date</th>
169 <td>Thu Jan 01 00:00:00 1970 +0000 (1970-01-01)</td>
173 <td>Thu Jan 01 00:00:00 1970 +0000 (1970-01-01)</td>
170 </tr>
174 </tr>
171 <tr>
175 <tr>
172 <th>parents</th>
176 <th>parents</th>
173 <td><a href="/file/cb9a9f314b8b/a">cb9a9f314b8b</a> </td>
177 <td><a href="/file/cb9a9f314b8b/a">cb9a9f314b8b</a> </td>
174 </tr>
178 </tr>
175 <tr>
179 <tr>
176 <th>children</th>
180 <th>children</th>
177 <td></td>
181 <td></td>
178 </tr>
182 </tr>
179
183
180 </table>
184 </table>
181
185
182 <div class="overflow">
186 <div class="overflow">
183 <div class="sourcefirst"> line diff</div>
187 <div class="sourcefirst"> line diff</div>
184
188
185 <div class="source bottomline parity0"><pre><a href="#l1.1" id="l1.1"> 1.1</a> <span class="minusline">--- a/a Thu Jan 01 00:00:00 1970 +0000
189 <div class="source bottomline parity0"><pre><a href="#l1.1" id="l1.1"> 1.1</a> <span class="minusline">--- a/a Thu Jan 01 00:00:00 1970 +0000
186 </span><a href="#l1.2" id="l1.2"> 1.2</a> <span class="plusline">+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
190 </span><a href="#l1.2" id="l1.2"> 1.2</a> <span class="plusline">+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
187 </span><a href="#l1.3" id="l1.3"> 1.3</a> <span class="atline">@@ -1,1 +0,0 @@
191 </span><a href="#l1.3" id="l1.3"> 1.3</a> <span class="atline">@@ -1,1 +0,0 @@
188 </span><a href="#l1.4" id="l1.4"> 1.4</a> <span class="minusline">-a
192 </span><a href="#l1.4" id="l1.4"> 1.4</a> <span class="minusline">-a
189 </span></pre></div>
193 </span></pre></div>
190 </div>
194 </div>
191 </div>
195 </div>
192 </div>
196 </div>
193
197
194
198
195
199
196 </body>
200 </body>
197 </html>
201 </html>
198
202
@@ -1,425 +1,429 b''
1 Some tests for hgweb. Tests static files, plain files and different 404's.
1 Some tests for hgweb. Tests static files, plain files and different 404's.
2
2
3 $ hg init test
3 $ hg init test
4 $ cd test
4 $ cd test
5 $ mkdir da
5 $ mkdir da
6 $ echo foo > da/foo
6 $ echo foo > da/foo
7 $ echo foo > foo
7 $ echo foo > foo
8 $ hg ci -Ambase
8 $ hg ci -Ambase
9 adding da/foo
9 adding da/foo
10 adding foo
10 adding foo
11 $ hg serve -n test -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
11 $ hg serve -n test -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
12 $ cat hg.pid >> $DAEMON_PIDS
12 $ cat hg.pid >> $DAEMON_PIDS
13
13
14 manifest
14 manifest
15
15
16 $ ("$TESTDIR/get-with-headers.py" localhost:$HGPORT '/file/tip/?style=raw')
16 $ ("$TESTDIR/get-with-headers.py" localhost:$HGPORT '/file/tip/?style=raw')
17 200 Script output follows
17 200 Script output follows
18
18
19
19
20 drwxr-xr-x da
20 drwxr-xr-x da
21 -rw-r--r-- 4 foo
21 -rw-r--r-- 4 foo
22
22
23
23
24 $ ("$TESTDIR/get-with-headers.py" localhost:$HGPORT '/file/tip/da?style=raw')
24 $ ("$TESTDIR/get-with-headers.py" localhost:$HGPORT '/file/tip/da?style=raw')
25 200 Script output follows
25 200 Script output follows
26
26
27
27
28 -rw-r--r-- 4 foo
28 -rw-r--r-- 4 foo
29
29
30
30
31
31
32 plain file
32 plain file
33
33
34 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT '/file/tip/foo?style=raw'
34 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT '/file/tip/foo?style=raw'
35 200 Script output follows
35 200 Script output follows
36
36
37 foo
37 foo
38
38
39 should give a 404 - static file that does not exist
39 should give a 404 - static file that does not exist
40
40
41 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT '/static/bogus'
41 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT '/static/bogus'
42 404 Not Found
42 404 Not Found
43
43
44 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
44 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
45 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
45 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
46 <head>
46 <head>
47 <link rel="icon" href="/static/hgicon.png" type="image/png" />
47 <link rel="icon" href="/static/hgicon.png" type="image/png" />
48 <meta name="robots" content="index, nofollow" />
48 <meta name="robots" content="index, nofollow" />
49 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
49 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
50
50
51 <title>test: error</title>
51 <title>test: error</title>
52 </head>
52 </head>
53 <body>
53 <body>
54
54
55 <div class="container">
55 <div class="container">
56 <div class="menu">
56 <div class="menu">
57 <div class="logo">
57 <div class="logo">
58 <a href="http://mercurial.selenic.com/">
58 <a href="http://mercurial.selenic.com/">
59 <img src="/static/hglogo.png" width=75 height=90 border=0 alt="mercurial" /></a>
59 <img src="/static/hglogo.png" width=75 height=90 border=0 alt="mercurial" /></a>
60 </div>
60 </div>
61 <ul>
61 <ul>
62 <li><a href="/shortlog">log</a></li>
62 <li><a href="/shortlog">log</a></li>
63 <li><a href="/graph">graph</a></li>
63 <li><a href="/graph">graph</a></li>
64 <li><a href="/tags">tags</a></li>
64 <li><a href="/tags">tags</a></li>
65 <li><a href="/branches">branches</a></li>
65 <li><a href="/branches">branches</a></li>
66 </ul>
66 </ul>
67 </div>
67 </div>
68
68
69 <div class="main">
69 <div class="main">
70
70
71 <h2><a href="/">test</a></h2>
71 <h2><a href="/">test</a></h2>
72 <h3>error</h3>
72 <h3>error</h3>
73
73
74 <form class="search" action="/log">
74 <form class="search" action="/log">
75
75
76 <p><input name="rev" id="search1" type="text" size="30"></p>
76 <p><input name="rev" id="search1" type="text" size="30"></p>
77 <div id="hint">find changesets by author, revision,
77 <div id="hint">find changesets by author, revision,
78 files, or words in the commit message</div>
78 files, or words in the commit message</div>
79 </form>
79 </form>
80
80
81 <div class="description">
81 <div class="description">
82 <p>
82 <p>
83 An error occurred while processing your request:
83 An error occurred while processing your request:
84 </p>
84 </p>
85 <p>
85 <p>
86 Not Found
86 Not Found
87 </p>
87 </p>
88 </div>
88 </div>
89 </div>
89 </div>
90 </div>
90 </div>
91
91
92
92
93
93
94 </body>
94 </body>
95 </html>
95 </html>
96
96
97 [1]
97 [1]
98
98
99 should give a 404 - bad revision
99 should give a 404 - bad revision
100
100
101 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT '/file/spam/foo?style=raw'
101 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT '/file/spam/foo?style=raw'
102 404 Not Found
102 404 Not Found
103
103
104
104
105 error: revision not found: spam
105 error: revision not found: spam
106 [1]
106 [1]
107
107
108 should give a 400 - bad command
108 should give a 400 - bad command
109
109
110 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT '/file/tip/foo?cmd=spam&style=raw'
110 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT '/file/tip/foo?cmd=spam&style=raw'
111 400* (glob)
111 400* (glob)
112
112
113
113
114 error: no such method: spam
114 error: no such method: spam
115 [1]
115 [1]
116
116
117 should give a 404 - file does not exist
117 should give a 404 - file does not exist
118
118
119 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT '/file/tip/bork?style=raw'
119 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT '/file/tip/bork?style=raw'
120 404 Not Found
120 404 Not Found
121
121
122
122
123 error: bork@2ef0ac749a14: not found in manifest
123 error: bork@2ef0ac749a14: not found in manifest
124 [1]
124 [1]
125 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT '/file/tip/bork'
125 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT '/file/tip/bork'
126 404 Not Found
126 404 Not Found
127
127
128 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
128 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
129 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
129 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
130 <head>
130 <head>
131 <link rel="icon" href="/static/hgicon.png" type="image/png" />
131 <link rel="icon" href="/static/hgicon.png" type="image/png" />
132 <meta name="robots" content="index, nofollow" />
132 <meta name="robots" content="index, nofollow" />
133 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
133 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
134
134
135 <title>test: error</title>
135 <title>test: error</title>
136 </head>
136 </head>
137 <body>
137 <body>
138
138
139 <div class="container">
139 <div class="container">
140 <div class="menu">
140 <div class="menu">
141 <div class="logo">
141 <div class="logo">
142 <a href="http://mercurial.selenic.com/">
142 <a href="http://mercurial.selenic.com/">
143 <img src="/static/hglogo.png" width=75 height=90 border=0 alt="mercurial" /></a>
143 <img src="/static/hglogo.png" width=75 height=90 border=0 alt="mercurial" /></a>
144 </div>
144 </div>
145 <ul>
145 <ul>
146 <li><a href="/shortlog">log</a></li>
146 <li><a href="/shortlog">log</a></li>
147 <li><a href="/graph">graph</a></li>
147 <li><a href="/graph">graph</a></li>
148 <li><a href="/tags">tags</a></li>
148 <li><a href="/tags">tags</a></li>
149 <li><a href="/branches">branches</a></li>
149 <li><a href="/branches">branches</a></li>
150 </ul>
150 </ul>
151 </div>
151 </div>
152
152
153 <div class="main">
153 <div class="main">
154
154
155 <h2><a href="/">test</a></h2>
155 <h2><a href="/">test</a></h2>
156 <h3>error</h3>
156 <h3>error</h3>
157
157
158 <form class="search" action="/log">
158 <form class="search" action="/log">
159
159
160 <p><input name="rev" id="search1" type="text" size="30"></p>
160 <p><input name="rev" id="search1" type="text" size="30"></p>
161 <div id="hint">find changesets by author, revision,
161 <div id="hint">find changesets by author, revision,
162 files, or words in the commit message</div>
162 files, or words in the commit message</div>
163 </form>
163 </form>
164
164
165 <div class="description">
165 <div class="description">
166 <p>
166 <p>
167 An error occurred while processing your request:
167 An error occurred while processing your request:
168 </p>
168 </p>
169 <p>
169 <p>
170 bork@2ef0ac749a14: not found in manifest
170 bork@2ef0ac749a14: not found in manifest
171 </p>
171 </p>
172 </div>
172 </div>
173 </div>
173 </div>
174 </div>
174 </div>
175
175
176
176
177
177
178 </body>
178 </body>
179 </html>
179 </html>
180
180
181 [1]
181 [1]
182 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT '/diff/tip/bork?style=raw'
182 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT '/diff/tip/bork?style=raw'
183 404 Not Found
183 404 Not Found
184
184
185
185
186 error: bork@2ef0ac749a14: not found in manifest
186 error: bork@2ef0ac749a14: not found in manifest
187 [1]
187 [1]
188
188
189 try bad style
189 try bad style
190
190
191 $ ("$TESTDIR/get-with-headers.py" localhost:$HGPORT '/file/tip/?style=foobar')
191 $ ("$TESTDIR/get-with-headers.py" localhost:$HGPORT '/file/tip/?style=foobar')
192 200 Script output follows
192 200 Script output follows
193
193
194 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
194 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
195 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
195 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
196 <head>
196 <head>
197 <link rel="icon" href="/static/hgicon.png" type="image/png" />
197 <link rel="icon" href="/static/hgicon.png" type="image/png" />
198 <meta name="robots" content="index, nofollow" />
198 <meta name="robots" content="index, nofollow" />
199 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
199 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
200
200
201 <title>test: 2ef0ac749a14 /</title>
201 <title>test: 2ef0ac749a14 /</title>
202 </head>
202 </head>
203 <body>
203 <body>
204
204
205 <div class="container">
205 <div class="container">
206 <div class="menu">
206 <div class="menu">
207 <div class="logo">
207 <div class="logo">
208 <a href="http://mercurial.selenic.com/">
208 <a href="http://mercurial.selenic.com/">
209 <img src="/static/hglogo.png" alt="mercurial" /></a>
209 <img src="/static/hglogo.png" alt="mercurial" /></a>
210 </div>
210 </div>
211 <ul>
211 <ul>
212 <li><a href="/shortlog/2ef0ac749a14">log</a></li>
212 <li><a href="/shortlog/2ef0ac749a14">log</a></li>
213 <li><a href="/graph/2ef0ac749a14">graph</a></li>
213 <li><a href="/graph/2ef0ac749a14">graph</a></li>
214 <li><a href="/tags">tags</a></li>
214 <li><a href="/tags">tags</a></li>
215 <li><a href="/branches">branches</a></li>
215 <li><a href="/branches">branches</a></li>
216 <li><a href="/help">help</a></li>
216 </ul>
217 </ul>
217 <ul>
218 <ul>
218 <li><a href="/rev/2ef0ac749a14">changeset</a></li>
219 <li><a href="/rev/2ef0ac749a14">changeset</a></li>
219 <li class="active">browse</li>
220 <li class="active">browse</li>
220 </ul>
221 </ul>
221 <ul>
222 <ul>
222
223
223 </ul>
224 </ul>
225 <ul>
226 <li><a href="/help">help</a></li>
227 </ul>
224 </div>
228 </div>
225
229
226 <div class="main">
230 <div class="main">
227 <h2><a href="/">test</a></h2>
231 <h2><a href="/">test</a></h2>
228 <h3>directory / @ 0:2ef0ac749a14 <span class="tag">tip</span> </h3>
232 <h3>directory / @ 0:2ef0ac749a14 <span class="tag">tip</span> </h3>
229
233
230 <form class="search" action="/log">
234 <form class="search" action="/log">
231
235
232 <p><input name="rev" id="search1" type="text" size="30" /></p>
236 <p><input name="rev" id="search1" type="text" size="30" /></p>
233 <div id="hint">find changesets by author, revision,
237 <div id="hint">find changesets by author, revision,
234 files, or words in the commit message</div>
238 files, or words in the commit message</div>
235 </form>
239 </form>
236
240
237 <table class="bigtable">
241 <table class="bigtable">
238 <tr>
242 <tr>
239 <th class="name">name</th>
243 <th class="name">name</th>
240 <th class="size">size</th>
244 <th class="size">size</th>
241 <th class="permissions">permissions</th>
245 <th class="permissions">permissions</th>
242 </tr>
246 </tr>
243 <tr class="fileline parity0">
247 <tr class="fileline parity0">
244 <td class="name"><a href="/file/2ef0ac749a14/">[up]</a></td>
248 <td class="name"><a href="/file/2ef0ac749a14/">[up]</a></td>
245 <td class="size"></td>
249 <td class="size"></td>
246 <td class="permissions">drwxr-xr-x</td>
250 <td class="permissions">drwxr-xr-x</td>
247 </tr>
251 </tr>
248
252
249 <tr class="fileline parity1">
253 <tr class="fileline parity1">
250 <td class="name">
254 <td class="name">
251 <a href="/file/2ef0ac749a14/da">
255 <a href="/file/2ef0ac749a14/da">
252 <img src="/static/coal-folder.png" alt="dir."/> da/
256 <img src="/static/coal-folder.png" alt="dir."/> da/
253 </a>
257 </a>
254 <a href="/file/2ef0ac749a14/da/">
258 <a href="/file/2ef0ac749a14/da/">
255
259
256 </a>
260 </a>
257 </td>
261 </td>
258 <td class="size"></td>
262 <td class="size"></td>
259 <td class="permissions">drwxr-xr-x</td>
263 <td class="permissions">drwxr-xr-x</td>
260 </tr>
264 </tr>
261
265
262 <tr class="fileline parity0">
266 <tr class="fileline parity0">
263 <td class="filename">
267 <td class="filename">
264 <a href="/file/2ef0ac749a14/foo">
268 <a href="/file/2ef0ac749a14/foo">
265 <img src="/static/coal-file.png" alt="file"/> foo
269 <img src="/static/coal-file.png" alt="file"/> foo
266 </a>
270 </a>
267 </td>
271 </td>
268 <td class="size">4</td>
272 <td class="size">4</td>
269 <td class="permissions">-rw-r--r--</td>
273 <td class="permissions">-rw-r--r--</td>
270 </tr>
274 </tr>
271 </table>
275 </table>
272 </div>
276 </div>
273 </div>
277 </div>
274
278
275
279
276 </body>
280 </body>
277 </html>
281 </html>
278
282
279
283
280 stop and restart
284 stop and restart
281
285
282 $ "$TESTDIR/killdaemons.py"
286 $ "$TESTDIR/killdaemons.py"
283 $ hg serve -p $HGPORT -d --pid-file=hg.pid -A access.log
287 $ hg serve -p $HGPORT -d --pid-file=hg.pid -A access.log
284 $ cat hg.pid >> $DAEMON_PIDS
288 $ cat hg.pid >> $DAEMON_PIDS
285
289
286 Test the access/error files are opened in append mode
290 Test the access/error files are opened in append mode
287
291
288 $ python -c "print len(file('access.log').readlines()), 'log lines written'"
292 $ python -c "print len(file('access.log').readlines()), 'log lines written'"
289 10 log lines written
293 10 log lines written
290
294
291 static file
295 static file
292
296
293 $ "$TESTDIR/get-with-headers.py" --twice localhost:$HGPORT '/static/style-gitweb.css'
297 $ "$TESTDIR/get-with-headers.py" --twice localhost:$HGPORT '/static/style-gitweb.css'
294 200 Script output follows
298 200 Script output follows
295
299
296 body { font-family: sans-serif; font-size: 12px; margin:0px; border:solid #d9d8d1; border-width:1px; margin:10px; }
300 body { font-family: sans-serif; font-size: 12px; margin:0px; border:solid #d9d8d1; border-width:1px; margin:10px; }
297 a { color:#0000cc; }
301 a { color:#0000cc; }
298 a:hover, a:visited, a:active { color:#880000; }
302 a:hover, a:visited, a:active { color:#880000; }
299 div.page_header { height:25px; padding:8px; font-size:18px; font-weight:bold; background-color:#d9d8d1; }
303 div.page_header { height:25px; padding:8px; font-size:18px; font-weight:bold; background-color:#d9d8d1; }
300 div.page_header a:visited { color:#0000cc; }
304 div.page_header a:visited { color:#0000cc; }
301 div.page_header a:hover { color:#880000; }
305 div.page_header a:hover { color:#880000; }
302 div.page_nav { padding:8px; }
306 div.page_nav { padding:8px; }
303 div.page_nav a:visited { color:#0000cc; }
307 div.page_nav a:visited { color:#0000cc; }
304 div.page_path { padding:8px; border:solid #d9d8d1; border-width:0px 0px 1px}
308 div.page_path { padding:8px; border:solid #d9d8d1; border-width:0px 0px 1px}
305 div.page_footer { padding:4px 8px; background-color: #d9d8d1; }
309 div.page_footer { padding:4px 8px; background-color: #d9d8d1; }
306 div.page_footer_text { float:left; color:#555555; font-style:italic; }
310 div.page_footer_text { float:left; color:#555555; font-style:italic; }
307 div.page_body { padding:8px; }
311 div.page_body { padding:8px; }
308 div.title, a.title {
312 div.title, a.title {
309 display:block; padding:6px 8px;
313 display:block; padding:6px 8px;
310 font-weight:bold; background-color:#edece6; text-decoration:none; color:#000000;
314 font-weight:bold; background-color:#edece6; text-decoration:none; color:#000000;
311 }
315 }
312 a.title:hover { background-color: #d9d8d1; }
316 a.title:hover { background-color: #d9d8d1; }
313 div.title_text { padding:6px 0px; border: solid #d9d8d1; border-width:0px 0px 1px; }
317 div.title_text { padding:6px 0px; border: solid #d9d8d1; border-width:0px 0px 1px; }
314 div.log_body { padding:8px 8px 8px 150px; }
318 div.log_body { padding:8px 8px 8px 150px; }
315 .age { white-space:nowrap; }
319 .age { white-space:nowrap; }
316 span.age { position:relative; float:left; width:142px; font-style:italic; }
320 span.age { position:relative; float:left; width:142px; font-style:italic; }
317 div.log_link {
321 div.log_link {
318 padding:0px 8px;
322 padding:0px 8px;
319 font-size:10px; font-family:sans-serif; font-style:normal;
323 font-size:10px; font-family:sans-serif; font-style:normal;
320 position:relative; float:left; width:136px;
324 position:relative; float:left; width:136px;
321 }
325 }
322 div.list_head { padding:6px 8px 4px; border:solid #d9d8d1; border-width:1px 0px 0px; font-style:italic; }
326 div.list_head { padding:6px 8px 4px; border:solid #d9d8d1; border-width:1px 0px 0px; font-style:italic; }
323 a.list { text-decoration:none; color:#000000; }
327 a.list { text-decoration:none; color:#000000; }
324 a.list:hover { text-decoration:underline; color:#880000; }
328 a.list:hover { text-decoration:underline; color:#880000; }
325 table { padding:8px 4px; }
329 table { padding:8px 4px; }
326 th { padding:2px 5px; font-size:12px; text-align:left; }
330 th { padding:2px 5px; font-size:12px; text-align:left; }
327 tr.light:hover, .parity0:hover { background-color:#edece6; }
331 tr.light:hover, .parity0:hover { background-color:#edece6; }
328 tr.dark, .parity1 { background-color:#f6f6f0; }
332 tr.dark, .parity1 { background-color:#f6f6f0; }
329 tr.dark:hover, .parity1:hover { background-color:#edece6; }
333 tr.dark:hover, .parity1:hover { background-color:#edece6; }
330 td { padding:2px 5px; font-size:12px; vertical-align:top; }
334 td { padding:2px 5px; font-size:12px; vertical-align:top; }
331 td.closed { background-color: #99f; }
335 td.closed { background-color: #99f; }
332 td.link { padding:2px 5px; font-family:sans-serif; font-size:10px; }
336 td.link { padding:2px 5px; font-family:sans-serif; font-size:10px; }
333 td.indexlinks { white-space: nowrap; }
337 td.indexlinks { white-space: nowrap; }
334 td.indexlinks a {
338 td.indexlinks a {
335 padding: 2px 5px; line-height: 10px;
339 padding: 2px 5px; line-height: 10px;
336 border: 1px solid;
340 border: 1px solid;
337 color: #ffffff; background-color: #7777bb;
341 color: #ffffff; background-color: #7777bb;
338 border-color: #aaaadd #333366 #333366 #aaaadd;
342 border-color: #aaaadd #333366 #333366 #aaaadd;
339 font-weight: bold; text-align: center; text-decoration: none;
343 font-weight: bold; text-align: center; text-decoration: none;
340 font-size: 10px;
344 font-size: 10px;
341 }
345 }
342 td.indexlinks a:hover { background-color: #6666aa; }
346 td.indexlinks a:hover { background-color: #6666aa; }
343 div.pre { font-family:monospace; font-size:12px; white-space:pre; }
347 div.pre { font-family:monospace; font-size:12px; white-space:pre; }
344 div.diff_info { font-family:monospace; color:#000099; background-color:#edece6; font-style:italic; }
348 div.diff_info { font-family:monospace; color:#000099; background-color:#edece6; font-style:italic; }
345 div.index_include { border:solid #d9d8d1; border-width:0px 0px 1px; padding:12px 8px; }
349 div.index_include { border:solid #d9d8d1; border-width:0px 0px 1px; padding:12px 8px; }
346 div.search { margin:4px 8px; position:absolute; top:56px; right:12px }
350 div.search { margin:4px 8px; position:absolute; top:56px; right:12px }
347 .linenr { color:#999999; text-decoration:none }
351 .linenr { color:#999999; text-decoration:none }
348 div.rss_logo { float: right; white-space: nowrap; }
352 div.rss_logo { float: right; white-space: nowrap; }
349 div.rss_logo a {
353 div.rss_logo a {
350 padding:3px 6px; line-height:10px;
354 padding:3px 6px; line-height:10px;
351 border:1px solid; border-color:#fcc7a5 #7d3302 #3e1a01 #ff954e;
355 border:1px solid; border-color:#fcc7a5 #7d3302 #3e1a01 #ff954e;
352 color:#ffffff; background-color:#ff6600;
356 color:#ffffff; background-color:#ff6600;
353 font-weight:bold; font-family:sans-serif; font-size:10px;
357 font-weight:bold; font-family:sans-serif; font-size:10px;
354 text-align:center; text-decoration:none;
358 text-align:center; text-decoration:none;
355 }
359 }
356 div.rss_logo a:hover { background-color:#ee5500; }
360 div.rss_logo a:hover { background-color:#ee5500; }
357 pre { margin: 0; }
361 pre { margin: 0; }
358 span.logtags span {
362 span.logtags span {
359 padding: 0px 4px;
363 padding: 0px 4px;
360 font-size: 10px;
364 font-size: 10px;
361 font-weight: normal;
365 font-weight: normal;
362 border: 1px solid;
366 border: 1px solid;
363 background-color: #ffaaff;
367 background-color: #ffaaff;
364 border-color: #ffccff #ff00ee #ff00ee #ffccff;
368 border-color: #ffccff #ff00ee #ff00ee #ffccff;
365 }
369 }
366 span.logtags span.tagtag {
370 span.logtags span.tagtag {
367 background-color: #ffffaa;
371 background-color: #ffffaa;
368 border-color: #ffffcc #ffee00 #ffee00 #ffffcc;
372 border-color: #ffffcc #ffee00 #ffee00 #ffffcc;
369 }
373 }
370 span.logtags span.branchtag {
374 span.logtags span.branchtag {
371 background-color: #aaffaa;
375 background-color: #aaffaa;
372 border-color: #ccffcc #00cc33 #00cc33 #ccffcc;
376 border-color: #ccffcc #00cc33 #00cc33 #ccffcc;
373 }
377 }
374 span.logtags span.inbranchtag {
378 span.logtags span.inbranchtag {
375 background-color: #d5dde6;
379 background-color: #d5dde6;
376 border-color: #e3ecf4 #9398f4 #9398f4 #e3ecf4;
380 border-color: #e3ecf4 #9398f4 #9398f4 #e3ecf4;
377 }
381 }
378
382
379 /* Graph */
383 /* Graph */
380 div#wrapper {
384 div#wrapper {
381 position: relative;
385 position: relative;
382 margin: 0;
386 margin: 0;
383 padding: 0;
387 padding: 0;
384 margin-top: 3px;
388 margin-top: 3px;
385 }
389 }
386
390
387 canvas {
391 canvas {
388 position: absolute;
392 position: absolute;
389 z-index: 5;
393 z-index: 5;
390 top: -0.9em;
394 top: -0.9em;
391 margin: 0;
395 margin: 0;
392 }
396 }
393
397
394 ul#nodebgs {
398 ul#nodebgs {
395 list-style: none inside none;
399 list-style: none inside none;
396 padding: 0;
400 padding: 0;
397 margin: 0;
401 margin: 0;
398 top: -0.7em;
402 top: -0.7em;
399 }
403 }
400
404
401 ul#graphnodes li, ul#nodebgs li {
405 ul#graphnodes li, ul#nodebgs li {
402 height: 39px;
406 height: 39px;
403 }
407 }
404
408
405 ul#graphnodes {
409 ul#graphnodes {
406 position: absolute;
410 position: absolute;
407 z-index: 10;
411 z-index: 10;
408 top: -0.8em;
412 top: -0.8em;
409 list-style: none inside none;
413 list-style: none inside none;
410 padding: 0;
414 padding: 0;
411 }
415 }
412
416
413 ul#graphnodes li .info {
417 ul#graphnodes li .info {
414 display: block;
418 display: block;
415 font-size: 100%;
419 font-size: 100%;
416 position: relative;
420 position: relative;
417 top: -3px;
421 top: -3px;
418 font-style: italic;
422 font-style: italic;
419 }
423 }
420 304 Not Modified
424 304 Not Modified
421
425
422
426
423 errors
427 errors
424
428
425 $ cat errors.log
429 $ cat errors.log
General Comments 0
You need to be logged in to leave comments. Login now