##// END OF EJS Templates
hgweb: add less/more links to shortlog/filelog nav
Dirkjan Ochtman -
r10246:b9d02695 default
parent child Browse files
Show More
@@ -1,698 +1,715 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, incorporated herein by reference.
6 # GNU General Public License version 2, incorporated herein by reference.
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, archival, templater, templatefilters
10 from mercurial import error, 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
16
17 # __all__ is populated with the allowed commands. Be sure to add to it if
17 # __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.
18 # you're adding a new command, or the new command won't work.
19
19
20 __all__ = [
20 __all__ = [
21 'log', 'rawfile', 'file', 'changelog', 'shortlog', 'changeset', 'rev',
21 'log', 'rawfile', 'file', 'changelog', 'shortlog', 'changeset', 'rev',
22 'manifest', 'tags', 'branches', 'summary', 'filediff', 'diff', 'annotate',
22 'manifest', 'tags', 'branches', 'summary', 'filediff', 'diff', 'annotate',
23 'filelog', 'archive', 'static', 'graph',
23 'filelog', 'archive', 'static', 'graph',
24 ]
24 ]
25
25
26 def log(web, req, tmpl):
26 def log(web, req, tmpl):
27 if 'file' in req.form and req.form['file'][0]:
27 if 'file' in req.form and req.form['file'][0]:
28 return filelog(web, req, tmpl)
28 return filelog(web, req, tmpl)
29 else:
29 else:
30 return changelog(web, req, tmpl)
30 return changelog(web, req, tmpl)
31
31
32 def rawfile(web, req, tmpl):
32 def rawfile(web, req, tmpl):
33 path = webutil.cleanpath(web.repo, req.form.get('file', [''])[0])
33 path = webutil.cleanpath(web.repo, req.form.get('file', [''])[0])
34 if not path:
34 if not path:
35 content = manifest(web, req, tmpl)
35 content = manifest(web, req, tmpl)
36 req.respond(HTTP_OK, web.ctype)
36 req.respond(HTTP_OK, web.ctype)
37 return content
37 return content
38
38
39 try:
39 try:
40 fctx = webutil.filectx(web.repo, req)
40 fctx = webutil.filectx(web.repo, req)
41 except error.LookupError, inst:
41 except error.LookupError, inst:
42 try:
42 try:
43 content = manifest(web, req, tmpl)
43 content = manifest(web, req, tmpl)
44 req.respond(HTTP_OK, web.ctype)
44 req.respond(HTTP_OK, web.ctype)
45 return content
45 return content
46 except ErrorResponse:
46 except ErrorResponse:
47 raise inst
47 raise inst
48
48
49 path = fctx.path()
49 path = fctx.path()
50 text = fctx.data()
50 text = fctx.data()
51 mt = mimetypes.guess_type(path)[0]
51 mt = mimetypes.guess_type(path)[0]
52 if mt is None:
52 if mt is None:
53 mt = binary(text) and 'application/octet-stream' or 'text/plain'
53 mt = binary(text) and 'application/octet-stream' or 'text/plain'
54
54
55 req.respond(HTTP_OK, mt, path, len(text))
55 req.respond(HTTP_OK, mt, path, len(text))
56 return [text]
56 return [text]
57
57
58 def _filerevision(web, tmpl, fctx):
58 def _filerevision(web, tmpl, fctx):
59 f = fctx.path()
59 f = fctx.path()
60 text = fctx.data()
60 text = fctx.data()
61 parity = paritygen(web.stripecount)
61 parity = paritygen(web.stripecount)
62
62
63 if binary(text):
63 if binary(text):
64 mt = mimetypes.guess_type(f)[0] or 'application/octet-stream'
64 mt = mimetypes.guess_type(f)[0] or 'application/octet-stream'
65 text = '(binary:%s)' % mt
65 text = '(binary:%s)' % mt
66
66
67 def lines():
67 def lines():
68 for lineno, t in enumerate(text.splitlines(True)):
68 for lineno, t in enumerate(text.splitlines(True)):
69 yield {"line": t,
69 yield {"line": t,
70 "lineid": "l%d" % (lineno + 1),
70 "lineid": "l%d" % (lineno + 1),
71 "linenumber": "% 6d" % (lineno + 1),
71 "linenumber": "% 6d" % (lineno + 1),
72 "parity": parity.next()}
72 "parity": parity.next()}
73
73
74 return tmpl("filerevision",
74 return tmpl("filerevision",
75 file=f,
75 file=f,
76 path=webutil.up(f),
76 path=webutil.up(f),
77 text=lines(),
77 text=lines(),
78 rev=fctx.rev(),
78 rev=fctx.rev(),
79 node=hex(fctx.node()),
79 node=hex(fctx.node()),
80 author=fctx.user(),
80 author=fctx.user(),
81 date=fctx.date(),
81 date=fctx.date(),
82 desc=fctx.description(),
82 desc=fctx.description(),
83 branch=webutil.nodebranchnodefault(fctx),
83 branch=webutil.nodebranchnodefault(fctx),
84 parent=webutil.parents(fctx),
84 parent=webutil.parents(fctx),
85 child=webutil.children(fctx),
85 child=webutil.children(fctx),
86 rename=webutil.renamelink(fctx),
86 rename=webutil.renamelink(fctx),
87 permissions=fctx.manifest().flags(f))
87 permissions=fctx.manifest().flags(f))
88
88
89 def file(web, req, tmpl):
89 def file(web, req, tmpl):
90 path = webutil.cleanpath(web.repo, req.form.get('file', [''])[0])
90 path = webutil.cleanpath(web.repo, req.form.get('file', [''])[0])
91 if not path:
91 if not path:
92 return manifest(web, req, tmpl)
92 return manifest(web, req, tmpl)
93 try:
93 try:
94 return _filerevision(web, tmpl, webutil.filectx(web.repo, req))
94 return _filerevision(web, tmpl, webutil.filectx(web.repo, req))
95 except error.LookupError, inst:
95 except error.LookupError, inst:
96 try:
96 try:
97 return manifest(web, req, tmpl)
97 return manifest(web, req, tmpl)
98 except ErrorResponse:
98 except ErrorResponse:
99 raise inst
99 raise inst
100
100
101 def _search(web, tmpl, query):
101 def _search(web, tmpl, query):
102
102
103 def changelist(**map):
103 def changelist(**map):
104 cl = web.repo.changelog
104 cl = web.repo.changelog
105 count = 0
105 count = 0
106 qw = query.lower().split()
106 qw = query.lower().split()
107
107
108 def revgen():
108 def revgen():
109 for i in xrange(len(cl) - 1, 0, -100):
109 for i in xrange(len(cl) - 1, 0, -100):
110 l = []
110 l = []
111 for j in xrange(max(0, i - 100), i + 1):
111 for j in xrange(max(0, i - 100), i + 1):
112 ctx = web.repo[j]
112 ctx = web.repo[j]
113 l.append(ctx)
113 l.append(ctx)
114 l.reverse()
114 l.reverse()
115 for e in l:
115 for e in l:
116 yield e
116 yield e
117
117
118 for ctx in revgen():
118 for ctx in revgen():
119 miss = 0
119 miss = 0
120 for q in qw:
120 for q in qw:
121 if not (q in ctx.user().lower() or
121 if not (q in ctx.user().lower() or
122 q in ctx.description().lower() or
122 q in ctx.description().lower() or
123 q in " ".join(ctx.files()).lower()):
123 q in " ".join(ctx.files()).lower()):
124 miss = 1
124 miss = 1
125 break
125 break
126 if miss:
126 if miss:
127 continue
127 continue
128
128
129 count += 1
129 count += 1
130 n = ctx.node()
130 n = ctx.node()
131 showtags = webutil.showtag(web.repo, tmpl, 'changelogtag', n)
131 showtags = webutil.showtag(web.repo, tmpl, 'changelogtag', n)
132 files = webutil.listfilediffs(tmpl, ctx.files(), n, web.maxfiles)
132 files = webutil.listfilediffs(tmpl, ctx.files(), n, web.maxfiles)
133
133
134 yield tmpl('searchentry',
134 yield tmpl('searchentry',
135 parity=parity.next(),
135 parity=parity.next(),
136 author=ctx.user(),
136 author=ctx.user(),
137 parent=webutil.parents(ctx),
137 parent=webutil.parents(ctx),
138 child=webutil.children(ctx),
138 child=webutil.children(ctx),
139 changelogtag=showtags,
139 changelogtag=showtags,
140 desc=ctx.description(),
140 desc=ctx.description(),
141 date=ctx.date(),
141 date=ctx.date(),
142 files=files,
142 files=files,
143 rev=ctx.rev(),
143 rev=ctx.rev(),
144 node=hex(n),
144 node=hex(n),
145 tags=webutil.nodetagsdict(web.repo, n),
145 tags=webutil.nodetagsdict(web.repo, n),
146 inbranch=webutil.nodeinbranch(web.repo, ctx),
146 inbranch=webutil.nodeinbranch(web.repo, ctx),
147 branches=webutil.nodebranchdict(web.repo, ctx))
147 branches=webutil.nodebranchdict(web.repo, ctx))
148
148
149 if count >= web.maxchanges:
149 if count >= web.maxchanges:
150 break
150 break
151
151
152 cl = web.repo.changelog
152 cl = web.repo.changelog
153 parity = paritygen(web.stripecount)
153 parity = paritygen(web.stripecount)
154
154
155 return tmpl('search',
155 return tmpl('search',
156 query=query,
156 query=query,
157 node=hex(cl.tip()),
157 node=hex(cl.tip()),
158 entries=changelist,
158 entries=changelist,
159 archives=web.archivelist("tip"))
159 archives=web.archivelist("tip"))
160
160
161 def changelog(web, req, tmpl, shortlog = False):
161 def changelog(web, req, tmpl, shortlog = False):
162 if 'node' in req.form:
162 if 'node' in req.form:
163 ctx = webutil.changectx(web.repo, req)
163 ctx = webutil.changectx(web.repo, req)
164 else:
164 else:
165 if 'rev' in req.form:
165 if 'rev' in req.form:
166 hi = req.form['rev'][0]
166 hi = req.form['rev'][0]
167 else:
167 else:
168 hi = len(web.repo) - 1
168 hi = len(web.repo) - 1
169 try:
169 try:
170 ctx = web.repo[hi]
170 ctx = web.repo[hi]
171 except error.RepoError:
171 except error.RepoError:
172 return _search(web, tmpl, hi) # XXX redirect to 404 page?
172 return _search(web, tmpl, hi) # XXX redirect to 404 page?
173
173
174 def changelist(limit=0, **map):
174 def changelist(limit=0, **map):
175 l = [] # build a list in forward order for efficiency
175 l = [] # build a list in forward order for efficiency
176 for i in xrange(start, end):
176 for i in xrange(start, end):
177 ctx = web.repo[i]
177 ctx = web.repo[i]
178 n = ctx.node()
178 n = ctx.node()
179 showtags = webutil.showtag(web.repo, tmpl, 'changelogtag', n)
179 showtags = webutil.showtag(web.repo, tmpl, 'changelogtag', n)
180 files = webutil.listfilediffs(tmpl, ctx.files(), n, web.maxfiles)
180 files = webutil.listfilediffs(tmpl, ctx.files(), n, web.maxfiles)
181
181
182 l.insert(0, {"parity": parity.next(),
182 l.insert(0, {"parity": parity.next(),
183 "author": ctx.user(),
183 "author": ctx.user(),
184 "parent": webutil.parents(ctx, i - 1),
184 "parent": webutil.parents(ctx, i - 1),
185 "child": webutil.children(ctx, i + 1),
185 "child": webutil.children(ctx, i + 1),
186 "changelogtag": showtags,
186 "changelogtag": showtags,
187 "desc": ctx.description(),
187 "desc": ctx.description(),
188 "date": ctx.date(),
188 "date": ctx.date(),
189 "files": files,
189 "files": files,
190 "rev": i,
190 "rev": i,
191 "node": hex(n),
191 "node": hex(n),
192 "tags": webutil.nodetagsdict(web.repo, n),
192 "tags": webutil.nodetagsdict(web.repo, n),
193 "inbranch": webutil.nodeinbranch(web.repo, ctx),
193 "inbranch": webutil.nodeinbranch(web.repo, ctx),
194 "branches": webutil.nodebranchdict(web.repo, ctx)
194 "branches": webutil.nodebranchdict(web.repo, ctx)
195 })
195 })
196
196
197 if limit > 0:
197 if limit > 0:
198 l = l[:limit]
198 l = l[:limit]
199
199
200 for e in l:
200 for e in l:
201 yield e
201 yield e
202
202
203 maxchanges = shortlog and web.maxshortchanges or web.maxchanges
203 revcount = shortlog and web.maxshortchanges or web.maxchanges
204 if 'revcount' in req.form:
205 revcount = int(req.form.get('revcount', [revcount])[0])
206 tmpl.defaults['sessionvars']['revcount'] = revcount
207
208 lessvars = copy.copy(tmpl.defaults['sessionvars'])
209 lessvars['revcount'] = revcount / 2
210 morevars = copy.copy(tmpl.defaults['sessionvars'])
211 morevars['revcount'] = revcount * 2
212
204 cl = web.repo.changelog
213 cl = web.repo.changelog
205 count = len(cl)
214 count = len(cl)
206 pos = ctx.rev()
215 pos = ctx.rev()
207 start = max(0, pos - maxchanges + 1)
216 start = max(0, pos - revcount + 1)
208 end = min(count, start + maxchanges)
217 end = min(count, start + revcount)
209 pos = end - 1
218 pos = end - 1
210 parity = paritygen(web.stripecount, offset=start-end)
219 parity = paritygen(web.stripecount, offset=start-end)
211
220
212 changenav = webutil.revnavgen(pos, maxchanges, count, web.repo.changectx)
221 changenav = webutil.revnavgen(pos, revcount, count, web.repo.changectx)
213
222
214 return tmpl(shortlog and 'shortlog' or 'changelog',
223 return tmpl(shortlog and 'shortlog' or 'changelog', changenav=changenav,
215 changenav=changenav,
224 node=hex(ctx.node()), rev=pos, changesets=count,
216 node=hex(ctx.node()),
217 rev=pos, changesets=count,
218 entries=lambda **x: changelist(limit=0,**x),
225 entries=lambda **x: changelist(limit=0,**x),
219 latestentry=lambda **x: changelist(limit=1,**x),
226 latestentry=lambda **x: changelist(limit=1,**x),
220 archives=web.archivelist("tip"))
227 archives=web.archivelist("tip"), revcount=revcount,
228 morevars=morevars, lessvars=lessvars)
221
229
222 def shortlog(web, req, tmpl):
230 def shortlog(web, req, tmpl):
223 return changelog(web, req, tmpl, shortlog = True)
231 return changelog(web, req, tmpl, shortlog = True)
224
232
225 def changeset(web, req, tmpl):
233 def changeset(web, req, tmpl):
226 ctx = webutil.changectx(web.repo, req)
234 ctx = webutil.changectx(web.repo, req)
227 showtags = webutil.showtag(web.repo, tmpl, 'changesettag', ctx.node())
235 showtags = webutil.showtag(web.repo, tmpl, 'changesettag', ctx.node())
228 showbranch = webutil.nodebranchnodefault(ctx)
236 showbranch = webutil.nodebranchnodefault(ctx)
229
237
230 files = []
238 files = []
231 parity = paritygen(web.stripecount)
239 parity = paritygen(web.stripecount)
232 for f in ctx.files():
240 for f in ctx.files():
233 template = f in ctx and 'filenodelink' or 'filenolink'
241 template = f in ctx and 'filenodelink' or 'filenolink'
234 files.append(tmpl(template,
242 files.append(tmpl(template,
235 node=ctx.hex(), file=f,
243 node=ctx.hex(), file=f,
236 parity=parity.next()))
244 parity=parity.next()))
237
245
238 parity = paritygen(web.stripecount)
246 parity = paritygen(web.stripecount)
239 style = web.config('web', 'style', 'paper')
247 style = web.config('web', 'style', 'paper')
240 if 'style' in req.form:
248 if 'style' in req.form:
241 style = req.form['style'][0]
249 style = req.form['style'][0]
242
250
243 diffs = webutil.diffs(web.repo, tmpl, ctx, None, parity, style)
251 diffs = webutil.diffs(web.repo, tmpl, ctx, None, parity, style)
244 return tmpl('changeset',
252 return tmpl('changeset',
245 diff=diffs,
253 diff=diffs,
246 rev=ctx.rev(),
254 rev=ctx.rev(),
247 node=ctx.hex(),
255 node=ctx.hex(),
248 parent=webutil.parents(ctx),
256 parent=webutil.parents(ctx),
249 child=webutil.children(ctx),
257 child=webutil.children(ctx),
250 changesettag=showtags,
258 changesettag=showtags,
251 changesetbranch=showbranch,
259 changesetbranch=showbranch,
252 author=ctx.user(),
260 author=ctx.user(),
253 desc=ctx.description(),
261 desc=ctx.description(),
254 date=ctx.date(),
262 date=ctx.date(),
255 files=files,
263 files=files,
256 archives=web.archivelist(ctx.hex()),
264 archives=web.archivelist(ctx.hex()),
257 tags=webutil.nodetagsdict(web.repo, ctx.node()),
265 tags=webutil.nodetagsdict(web.repo, ctx.node()),
258 branch=webutil.nodebranchnodefault(ctx),
266 branch=webutil.nodebranchnodefault(ctx),
259 inbranch=webutil.nodeinbranch(web.repo, ctx),
267 inbranch=webutil.nodeinbranch(web.repo, ctx),
260 branches=webutil.nodebranchdict(web.repo, ctx))
268 branches=webutil.nodebranchdict(web.repo, ctx))
261
269
262 rev = changeset
270 rev = changeset
263
271
264 def manifest(web, req, tmpl):
272 def manifest(web, req, tmpl):
265 ctx = webutil.changectx(web.repo, req)
273 ctx = webutil.changectx(web.repo, req)
266 path = webutil.cleanpath(web.repo, req.form.get('file', [''])[0])
274 path = webutil.cleanpath(web.repo, req.form.get('file', [''])[0])
267 mf = ctx.manifest()
275 mf = ctx.manifest()
268 node = ctx.node()
276 node = ctx.node()
269
277
270 files = {}
278 files = {}
271 dirs = {}
279 dirs = {}
272 parity = paritygen(web.stripecount)
280 parity = paritygen(web.stripecount)
273
281
274 if path and path[-1] != "/":
282 if path and path[-1] != "/":
275 path += "/"
283 path += "/"
276 l = len(path)
284 l = len(path)
277 abspath = "/" + path
285 abspath = "/" + path
278
286
279 for f, n in mf.iteritems():
287 for f, n in mf.iteritems():
280 if f[:l] != path:
288 if f[:l] != path:
281 continue
289 continue
282 remain = f[l:]
290 remain = f[l:]
283 elements = remain.split('/')
291 elements = remain.split('/')
284 if len(elements) == 1:
292 if len(elements) == 1:
285 files[remain] = f
293 files[remain] = f
286 else:
294 else:
287 h = dirs # need to retain ref to dirs (root)
295 h = dirs # need to retain ref to dirs (root)
288 for elem in elements[0:-1]:
296 for elem in elements[0:-1]:
289 if elem not in h:
297 if elem not in h:
290 h[elem] = {}
298 h[elem] = {}
291 h = h[elem]
299 h = h[elem]
292 if len(h) > 1:
300 if len(h) > 1:
293 break
301 break
294 h[None] = None # denotes files present
302 h[None] = None # denotes files present
295
303
296 if mf and not files and not dirs:
304 if mf and not files and not dirs:
297 raise ErrorResponse(HTTP_NOT_FOUND, 'path not found: ' + path)
305 raise ErrorResponse(HTTP_NOT_FOUND, 'path not found: ' + path)
298
306
299 def filelist(**map):
307 def filelist(**map):
300 for f in sorted(files):
308 for f in sorted(files):
301 full = files[f]
309 full = files[f]
302
310
303 fctx = ctx.filectx(full)
311 fctx = ctx.filectx(full)
304 yield {"file": full,
312 yield {"file": full,
305 "parity": parity.next(),
313 "parity": parity.next(),
306 "basename": f,
314 "basename": f,
307 "date": fctx.date(),
315 "date": fctx.date(),
308 "size": fctx.size(),
316 "size": fctx.size(),
309 "permissions": mf.flags(full)}
317 "permissions": mf.flags(full)}
310
318
311 def dirlist(**map):
319 def dirlist(**map):
312 for d in sorted(dirs):
320 for d in sorted(dirs):
313
321
314 emptydirs = []
322 emptydirs = []
315 h = dirs[d]
323 h = dirs[d]
316 while isinstance(h, dict) and len(h) == 1:
324 while isinstance(h, dict) and len(h) == 1:
317 k,v = h.items()[0]
325 k,v = h.items()[0]
318 if v:
326 if v:
319 emptydirs.append(k)
327 emptydirs.append(k)
320 h = v
328 h = v
321
329
322 path = "%s%s" % (abspath, d)
330 path = "%s%s" % (abspath, d)
323 yield {"parity": parity.next(),
331 yield {"parity": parity.next(),
324 "path": path,
332 "path": path,
325 "emptydirs": "/".join(emptydirs),
333 "emptydirs": "/".join(emptydirs),
326 "basename": d}
334 "basename": d}
327
335
328 return tmpl("manifest",
336 return tmpl("manifest",
329 rev=ctx.rev(),
337 rev=ctx.rev(),
330 node=hex(node),
338 node=hex(node),
331 path=abspath,
339 path=abspath,
332 up=webutil.up(abspath),
340 up=webutil.up(abspath),
333 upparity=parity.next(),
341 upparity=parity.next(),
334 fentries=filelist,
342 fentries=filelist,
335 dentries=dirlist,
343 dentries=dirlist,
336 archives=web.archivelist(hex(node)),
344 archives=web.archivelist(hex(node)),
337 tags=webutil.nodetagsdict(web.repo, node),
345 tags=webutil.nodetagsdict(web.repo, node),
338 inbranch=webutil.nodeinbranch(web.repo, ctx),
346 inbranch=webutil.nodeinbranch(web.repo, ctx),
339 branches=webutil.nodebranchdict(web.repo, ctx))
347 branches=webutil.nodebranchdict(web.repo, ctx))
340
348
341 def tags(web, req, tmpl):
349 def tags(web, req, tmpl):
342 i = web.repo.tagslist()
350 i = web.repo.tagslist()
343 i.reverse()
351 i.reverse()
344 parity = paritygen(web.stripecount)
352 parity = paritygen(web.stripecount)
345
353
346 def entries(notip=False, limit=0, **map):
354 def entries(notip=False, limit=0, **map):
347 count = 0
355 count = 0
348 for k, n in i:
356 for k, n in i:
349 if notip and k == "tip":
357 if notip and k == "tip":
350 continue
358 continue
351 if limit > 0 and count >= limit:
359 if limit > 0 and count >= limit:
352 continue
360 continue
353 count = count + 1
361 count = count + 1
354 yield {"parity": parity.next(),
362 yield {"parity": parity.next(),
355 "tag": k,
363 "tag": k,
356 "date": web.repo[n].date(),
364 "date": web.repo[n].date(),
357 "node": hex(n)}
365 "node": hex(n)}
358
366
359 return tmpl("tags",
367 return tmpl("tags",
360 node=hex(web.repo.changelog.tip()),
368 node=hex(web.repo.changelog.tip()),
361 entries=lambda **x: entries(False,0, **x),
369 entries=lambda **x: entries(False,0, **x),
362 entriesnotip=lambda **x: entries(True,0, **x),
370 entriesnotip=lambda **x: entries(True,0, **x),
363 latestentry=lambda **x: entries(True,1, **x))
371 latestentry=lambda **x: entries(True,1, **x))
364
372
365 def branches(web, req, tmpl):
373 def branches(web, req, tmpl):
366 b = web.repo.branchtags()
374 b = web.repo.branchtags()
367 tips = (web.repo[n] for t, n in web.repo.branchtags().iteritems())
375 tips = (web.repo[n] for t, n in web.repo.branchtags().iteritems())
368 heads = web.repo.heads()
376 heads = web.repo.heads()
369 parity = paritygen(web.stripecount)
377 parity = paritygen(web.stripecount)
370 sortkey = lambda ctx: ('close' not in ctx.extra(), ctx.rev())
378 sortkey = lambda ctx: ('close' not in ctx.extra(), ctx.rev())
371
379
372 def entries(limit, **map):
380 def entries(limit, **map):
373 count = 0
381 count = 0
374 for ctx in sorted(tips, key=sortkey, reverse=True):
382 for ctx in sorted(tips, key=sortkey, reverse=True):
375 if limit > 0 and count >= limit:
383 if limit > 0 and count >= limit:
376 return
384 return
377 count += 1
385 count += 1
378 if ctx.node() not in heads:
386 if ctx.node() not in heads:
379 status = 'inactive'
387 status = 'inactive'
380 elif not web.repo.branchheads(ctx.branch()):
388 elif not web.repo.branchheads(ctx.branch()):
381 status = 'closed'
389 status = 'closed'
382 else:
390 else:
383 status = 'open'
391 status = 'open'
384 yield {'parity': parity.next(),
392 yield {'parity': parity.next(),
385 'branch': ctx.branch(),
393 'branch': ctx.branch(),
386 'status': status,
394 'status': status,
387 'node': ctx.hex(),
395 'node': ctx.hex(),
388 'date': ctx.date()}
396 'date': ctx.date()}
389
397
390 return tmpl('branches', node=hex(web.repo.changelog.tip()),
398 return tmpl('branches', node=hex(web.repo.changelog.tip()),
391 entries=lambda **x: entries(0, **x),
399 entries=lambda **x: entries(0, **x),
392 latestentry=lambda **x: entries(1, **x))
400 latestentry=lambda **x: entries(1, **x))
393
401
394 def summary(web, req, tmpl):
402 def summary(web, req, tmpl):
395 i = web.repo.tagslist()
403 i = web.repo.tagslist()
396 i.reverse()
404 i.reverse()
397
405
398 def tagentries(**map):
406 def tagentries(**map):
399 parity = paritygen(web.stripecount)
407 parity = paritygen(web.stripecount)
400 count = 0
408 count = 0
401 for k, n in i:
409 for k, n in i:
402 if k == "tip": # skip tip
410 if k == "tip": # skip tip
403 continue
411 continue
404
412
405 count += 1
413 count += 1
406 if count > 10: # limit to 10 tags
414 if count > 10: # limit to 10 tags
407 break
415 break
408
416
409 yield tmpl("tagentry",
417 yield tmpl("tagentry",
410 parity=parity.next(),
418 parity=parity.next(),
411 tag=k,
419 tag=k,
412 node=hex(n),
420 node=hex(n),
413 date=web.repo[n].date())
421 date=web.repo[n].date())
414
422
415 def branches(**map):
423 def branches(**map):
416 parity = paritygen(web.stripecount)
424 parity = paritygen(web.stripecount)
417
425
418 b = web.repo.branchtags()
426 b = web.repo.branchtags()
419 l = [(-web.repo.changelog.rev(n), n, t) for t, n in b.iteritems()]
427 l = [(-web.repo.changelog.rev(n), n, t) for t, n in b.iteritems()]
420 for r,n,t in sorted(l):
428 for r,n,t in sorted(l):
421 yield {'parity': parity.next(),
429 yield {'parity': parity.next(),
422 'branch': t,
430 'branch': t,
423 'node': hex(n),
431 'node': hex(n),
424 'date': web.repo[n].date()}
432 'date': web.repo[n].date()}
425
433
426 def changelist(**map):
434 def changelist(**map):
427 parity = paritygen(web.stripecount, offset=start-end)
435 parity = paritygen(web.stripecount, offset=start-end)
428 l = [] # build a list in forward order for efficiency
436 l = [] # build a list in forward order for efficiency
429 for i in xrange(start, end):
437 for i in xrange(start, end):
430 ctx = web.repo[i]
438 ctx = web.repo[i]
431 n = ctx.node()
439 n = ctx.node()
432 hn = hex(n)
440 hn = hex(n)
433
441
434 l.insert(0, tmpl(
442 l.insert(0, tmpl(
435 'shortlogentry',
443 'shortlogentry',
436 parity=parity.next(),
444 parity=parity.next(),
437 author=ctx.user(),
445 author=ctx.user(),
438 desc=ctx.description(),
446 desc=ctx.description(),
439 date=ctx.date(),
447 date=ctx.date(),
440 rev=i,
448 rev=i,
441 node=hn,
449 node=hn,
442 tags=webutil.nodetagsdict(web.repo, n),
450 tags=webutil.nodetagsdict(web.repo, n),
443 inbranch=webutil.nodeinbranch(web.repo, ctx),
451 inbranch=webutil.nodeinbranch(web.repo, ctx),
444 branches=webutil.nodebranchdict(web.repo, ctx)))
452 branches=webutil.nodebranchdict(web.repo, ctx)))
445
453
446 yield l
454 yield l
447
455
448 cl = web.repo.changelog
456 cl = web.repo.changelog
449 count = len(cl)
457 count = len(cl)
450 start = max(0, count - web.maxchanges)
458 start = max(0, count - web.maxchanges)
451 end = min(count, start + web.maxchanges)
459 end = min(count, start + web.maxchanges)
452
460
453 return tmpl("summary",
461 return tmpl("summary",
454 desc=web.config("web", "description", "unknown"),
462 desc=web.config("web", "description", "unknown"),
455 owner=get_contact(web.config) or "unknown",
463 owner=get_contact(web.config) or "unknown",
456 lastchange=cl.read(cl.tip())[2],
464 lastchange=cl.read(cl.tip())[2],
457 tags=tagentries,
465 tags=tagentries,
458 branches=branches,
466 branches=branches,
459 shortlog=changelist,
467 shortlog=changelist,
460 node=hex(cl.tip()),
468 node=hex(cl.tip()),
461 archives=web.archivelist("tip"))
469 archives=web.archivelist("tip"))
462
470
463 def filediff(web, req, tmpl):
471 def filediff(web, req, tmpl):
464 fctx, ctx = None, None
472 fctx, ctx = None, None
465 try:
473 try:
466 fctx = webutil.filectx(web.repo, req)
474 fctx = webutil.filectx(web.repo, req)
467 except LookupError:
475 except LookupError:
468 ctx = webutil.changectx(web.repo, req)
476 ctx = webutil.changectx(web.repo, req)
469 path = webutil.cleanpath(web.repo, req.form['file'][0])
477 path = webutil.cleanpath(web.repo, req.form['file'][0])
470 if path not in ctx.files():
478 if path not in ctx.files():
471 raise
479 raise
472
480
473 if fctx is not None:
481 if fctx is not None:
474 n = fctx.node()
482 n = fctx.node()
475 path = fctx.path()
483 path = fctx.path()
476 else:
484 else:
477 n = ctx.node()
485 n = ctx.node()
478 # path already defined in except clause
486 # path already defined in except clause
479
487
480 parity = paritygen(web.stripecount)
488 parity = paritygen(web.stripecount)
481 style = web.config('web', 'style', 'paper')
489 style = web.config('web', 'style', 'paper')
482 if 'style' in req.form:
490 if 'style' in req.form:
483 style = req.form['style'][0]
491 style = req.form['style'][0]
484
492
485 diffs = webutil.diffs(web.repo, tmpl, fctx or ctx, [path], parity, style)
493 diffs = webutil.diffs(web.repo, tmpl, fctx or ctx, [path], parity, style)
486 rename = fctx and webutil.renamelink(fctx) or []
494 rename = fctx and webutil.renamelink(fctx) or []
487 ctx = fctx and fctx or ctx
495 ctx = fctx and fctx or ctx
488 return tmpl("filediff",
496 return tmpl("filediff",
489 file=path,
497 file=path,
490 node=hex(n),
498 node=hex(n),
491 rev=ctx.rev(),
499 rev=ctx.rev(),
492 date=ctx.date(),
500 date=ctx.date(),
493 desc=ctx.description(),
501 desc=ctx.description(),
494 author=ctx.user(),
502 author=ctx.user(),
495 rename=rename,
503 rename=rename,
496 branch=webutil.nodebranchnodefault(ctx),
504 branch=webutil.nodebranchnodefault(ctx),
497 parent=webutil.parents(ctx),
505 parent=webutil.parents(ctx),
498 child=webutil.children(ctx),
506 child=webutil.children(ctx),
499 diff=diffs)
507 diff=diffs)
500
508
501 diff = filediff
509 diff = filediff
502
510
503 def annotate(web, req, tmpl):
511 def annotate(web, req, tmpl):
504 fctx = webutil.filectx(web.repo, req)
512 fctx = webutil.filectx(web.repo, req)
505 f = fctx.path()
513 f = fctx.path()
506 parity = paritygen(web.stripecount)
514 parity = paritygen(web.stripecount)
507
515
508 def annotate(**map):
516 def annotate(**map):
509 last = None
517 last = None
510 if binary(fctx.data()):
518 if binary(fctx.data()):
511 mt = (mimetypes.guess_type(fctx.path())[0]
519 mt = (mimetypes.guess_type(fctx.path())[0]
512 or 'application/octet-stream')
520 or 'application/octet-stream')
513 lines = enumerate([((fctx.filectx(fctx.filerev()), 1),
521 lines = enumerate([((fctx.filectx(fctx.filerev()), 1),
514 '(binary:%s)' % mt)])
522 '(binary:%s)' % mt)])
515 else:
523 else:
516 lines = enumerate(fctx.annotate(follow=True, linenumber=True))
524 lines = enumerate(fctx.annotate(follow=True, linenumber=True))
517 for lineno, ((f, targetline), l) in lines:
525 for lineno, ((f, targetline), l) in lines:
518 fnode = f.filenode()
526 fnode = f.filenode()
519
527
520 if last != fnode:
528 if last != fnode:
521 last = fnode
529 last = fnode
522
530
523 yield {"parity": parity.next(),
531 yield {"parity": parity.next(),
524 "node": hex(f.node()),
532 "node": hex(f.node()),
525 "rev": f.rev(),
533 "rev": f.rev(),
526 "author": f.user(),
534 "author": f.user(),
527 "desc": f.description(),
535 "desc": f.description(),
528 "file": f.path(),
536 "file": f.path(),
529 "targetline": targetline,
537 "targetline": targetline,
530 "line": l,
538 "line": l,
531 "lineid": "l%d" % (lineno + 1),
539 "lineid": "l%d" % (lineno + 1),
532 "linenumber": "% 6d" % (lineno + 1)}
540 "linenumber": "% 6d" % (lineno + 1)}
533
541
534 return tmpl("fileannotate",
542 return tmpl("fileannotate",
535 file=f,
543 file=f,
536 annotate=annotate,
544 annotate=annotate,
537 path=webutil.up(f),
545 path=webutil.up(f),
538 rev=fctx.rev(),
546 rev=fctx.rev(),
539 node=hex(fctx.node()),
547 node=hex(fctx.node()),
540 author=fctx.user(),
548 author=fctx.user(),
541 date=fctx.date(),
549 date=fctx.date(),
542 desc=fctx.description(),
550 desc=fctx.description(),
543 rename=webutil.renamelink(fctx),
551 rename=webutil.renamelink(fctx),
544 branch=webutil.nodebranchnodefault(fctx),
552 branch=webutil.nodebranchnodefault(fctx),
545 parent=webutil.parents(fctx),
553 parent=webutil.parents(fctx),
546 child=webutil.children(fctx),
554 child=webutil.children(fctx),
547 permissions=fctx.manifest().flags(f))
555 permissions=fctx.manifest().flags(f))
548
556
549 def filelog(web, req, tmpl):
557 def filelog(web, req, tmpl):
550
558
551 try:
559 try:
552 fctx = webutil.filectx(web.repo, req)
560 fctx = webutil.filectx(web.repo, req)
553 f = fctx.path()
561 f = fctx.path()
554 fl = fctx.filelog()
562 fl = fctx.filelog()
555 except error.LookupError:
563 except error.LookupError:
556 f = webutil.cleanpath(web.repo, req.form['file'][0])
564 f = webutil.cleanpath(web.repo, req.form['file'][0])
557 fl = web.repo.file(f)
565 fl = web.repo.file(f)
558 numrevs = len(fl)
566 numrevs = len(fl)
559 if not numrevs: # file doesn't exist at all
567 if not numrevs: # file doesn't exist at all
560 raise
568 raise
561 rev = webutil.changectx(web.repo, req).rev()
569 rev = webutil.changectx(web.repo, req).rev()
562 first = fl.linkrev(0)
570 first = fl.linkrev(0)
563 if rev < first: # current rev is from before file existed
571 if rev < first: # current rev is from before file existed
564 raise
572 raise
565 frev = numrevs - 1
573 frev = numrevs - 1
566 while fl.linkrev(frev) > rev:
574 while fl.linkrev(frev) > rev:
567 frev -= 1
575 frev -= 1
568 fctx = web.repo.filectx(f, fl.linkrev(frev))
576 fctx = web.repo.filectx(f, fl.linkrev(frev))
569
577
578 revcount = web.maxshortchanges
579 if 'revcount' in req.form:
580 revcount = int(req.form.get('revcount', [revcount])[0])
581 tmpl.defaults['sessionvars']['revcount'] = revcount
582
583 lessvars = copy.copy(tmpl.defaults['sessionvars'])
584 lessvars['revcount'] = revcount / 2
585 morevars = copy.copy(tmpl.defaults['sessionvars'])
586 morevars['revcount'] = revcount * 2
587
570 count = fctx.filerev() + 1
588 count = fctx.filerev() + 1
571 pagelen = web.maxshortchanges
589 start = max(0, fctx.filerev() - revcount + 1) # first rev on this page
572 start = max(0, fctx.filerev() - pagelen + 1) # first rev on this page
590 end = min(count, start + revcount) # last rev on this page
573 end = min(count, start + pagelen) # last rev on this page
574 parity = paritygen(web.stripecount, offset=start-end)
591 parity = paritygen(web.stripecount, offset=start-end)
575
592
576 def entries(limit=0, **map):
593 def entries(limit=0, **map):
577 l = []
594 l = []
578
595
579 repo = web.repo
596 repo = web.repo
580 for i in xrange(start, end):
597 for i in xrange(start, end):
581 iterfctx = fctx.filectx(i)
598 iterfctx = fctx.filectx(i)
582
599
583 l.insert(0, {"parity": parity.next(),
600 l.insert(0, {"parity": parity.next(),
584 "filerev": i,
601 "filerev": i,
585 "file": f,
602 "file": f,
586 "node": hex(iterfctx.node()),
603 "node": hex(iterfctx.node()),
587 "author": iterfctx.user(),
604 "author": iterfctx.user(),
588 "date": iterfctx.date(),
605 "date": iterfctx.date(),
589 "rename": webutil.renamelink(iterfctx),
606 "rename": webutil.renamelink(iterfctx),
590 "parent": webutil.parents(iterfctx),
607 "parent": webutil.parents(iterfctx),
591 "child": webutil.children(iterfctx),
608 "child": webutil.children(iterfctx),
592 "desc": iterfctx.description(),
609 "desc": iterfctx.description(),
593 "tags": webutil.nodetagsdict(repo, iterfctx.node()),
610 "tags": webutil.nodetagsdict(repo, iterfctx.node()),
594 "branch": webutil.nodebranchnodefault(iterfctx),
611 "branch": webutil.nodebranchnodefault(iterfctx),
595 "inbranch": webutil.nodeinbranch(repo, iterfctx),
612 "inbranch": webutil.nodeinbranch(repo, iterfctx),
596 "branches": webutil.nodebranchdict(repo, iterfctx)})
613 "branches": webutil.nodebranchdict(repo, iterfctx)})
597
614
598 if limit > 0:
615 if limit > 0:
599 l = l[:limit]
616 l = l[:limit]
600
617
601 for e in l:
618 for e in l:
602 yield e
619 yield e
603
620
604 nodefunc = lambda x: fctx.filectx(fileid=x)
621 nodefunc = lambda x: fctx.filectx(fileid=x)
605 nav = webutil.revnavgen(end - 1, pagelen, count, nodefunc)
622 nav = webutil.revnavgen(end - 1, revcount, count, nodefunc)
606 return tmpl("filelog", file=f, node=hex(fctx.node()), nav=nav,
623 return tmpl("filelog", file=f, node=hex(fctx.node()), nav=nav,
607 entries=lambda **x: entries(limit=0, **x),
624 entries=lambda **x: entries(limit=0, **x),
608 latestentry=lambda **x: entries(limit=1, **x))
625 latestentry=lambda **x: entries(limit=1, **x),
609
626 revcount=revcount, morevars=morevars, lessvars=lessvars)
610
627
611 def archive(web, req, tmpl):
628 def archive(web, req, tmpl):
612 type_ = req.form.get('type', [None])[0]
629 type_ = req.form.get('type', [None])[0]
613 allowed = web.configlist("web", "allow_archive")
630 allowed = web.configlist("web", "allow_archive")
614 key = req.form['node'][0]
631 key = req.form['node'][0]
615
632
616 if type_ not in web.archives:
633 if type_ not in web.archives:
617 msg = 'Unsupported archive type: %s' % type_
634 msg = 'Unsupported archive type: %s' % type_
618 raise ErrorResponse(HTTP_NOT_FOUND, msg)
635 raise ErrorResponse(HTTP_NOT_FOUND, msg)
619
636
620 if not ((type_ in allowed or
637 if not ((type_ in allowed or
621 web.configbool("web", "allow" + type_, False))):
638 web.configbool("web", "allow" + type_, False))):
622 msg = 'Archive type not allowed: %s' % type_
639 msg = 'Archive type not allowed: %s' % type_
623 raise ErrorResponse(HTTP_FORBIDDEN, msg)
640 raise ErrorResponse(HTTP_FORBIDDEN, msg)
624
641
625 reponame = re.sub(r"\W+", "-", os.path.basename(web.reponame))
642 reponame = re.sub(r"\W+", "-", os.path.basename(web.reponame))
626 cnode = web.repo.lookup(key)
643 cnode = web.repo.lookup(key)
627 arch_version = key
644 arch_version = key
628 if cnode == key or key == 'tip':
645 if cnode == key or key == 'tip':
629 arch_version = short(cnode)
646 arch_version = short(cnode)
630 name = "%s-%s" % (reponame, arch_version)
647 name = "%s-%s" % (reponame, arch_version)
631 mimetype, artype, extension, encoding = web.archive_specs[type_]
648 mimetype, artype, extension, encoding = web.archive_specs[type_]
632 headers = [
649 headers = [
633 ('Content-Type', mimetype),
650 ('Content-Type', mimetype),
634 ('Content-Disposition', 'attachment; filename=%s%s' % (name, extension))
651 ('Content-Disposition', 'attachment; filename=%s%s' % (name, extension))
635 ]
652 ]
636 if encoding:
653 if encoding:
637 headers.append(('Content-Encoding', encoding))
654 headers.append(('Content-Encoding', encoding))
638 req.header(headers)
655 req.header(headers)
639 req.respond(HTTP_OK)
656 req.respond(HTTP_OK)
640 archival.archive(web.repo, req, cnode, artype, prefix=name)
657 archival.archive(web.repo, req, cnode, artype, prefix=name)
641 return []
658 return []
642
659
643
660
644 def static(web, req, tmpl):
661 def static(web, req, tmpl):
645 fname = req.form['file'][0]
662 fname = req.form['file'][0]
646 # a repo owner may set web.static in .hg/hgrc to get any file
663 # a repo owner may set web.static in .hg/hgrc to get any file
647 # readable by the user running the CGI script
664 # readable by the user running the CGI script
648 static = web.config("web", "static", None, untrusted=False)
665 static = web.config("web", "static", None, untrusted=False)
649 if not static:
666 if not static:
650 tp = web.templatepath or templater.templatepath()
667 tp = web.templatepath or templater.templatepath()
651 if isinstance(tp, str):
668 if isinstance(tp, str):
652 tp = [tp]
669 tp = [tp]
653 static = [os.path.join(p, 'static') for p in tp]
670 static = [os.path.join(p, 'static') for p in tp]
654 return [staticfile(static, fname, req)]
671 return [staticfile(static, fname, req)]
655
672
656 def graph(web, req, tmpl):
673 def graph(web, req, tmpl):
657
674
658 rev = webutil.changectx(web.repo, req).rev()
675 rev = webutil.changectx(web.repo, req).rev()
659 bg_height = 39
676 bg_height = 39
660 revcount = web.maxshortchanges
677 revcount = web.maxshortchanges
661 if 'revcount' in req.form:
678 if 'revcount' in req.form:
662 revcount = int(req.form.get('revcount', [revcount])[0])
679 revcount = int(req.form.get('revcount', [revcount])[0])
663 tmpl.defaults['sessionvars']['revcount'] = revcount
680 tmpl.defaults['sessionvars']['revcount'] = revcount
664
681
665 lessvars = copy.copy(tmpl.defaults['sessionvars'])
682 lessvars = copy.copy(tmpl.defaults['sessionvars'])
666 lessvars['revcount'] = revcount / 2
683 lessvars['revcount'] = revcount / 2
667 morevars = copy.copy(tmpl.defaults['sessionvars'])
684 morevars = copy.copy(tmpl.defaults['sessionvars'])
668 morevars['revcount'] = revcount * 2
685 morevars['revcount'] = revcount * 2
669
686
670 max_rev = len(web.repo) - 1
687 max_rev = len(web.repo) - 1
671 revcount = min(max_rev, revcount)
688 revcount = min(max_rev, revcount)
672 revnode = web.repo.changelog.node(rev)
689 revnode = web.repo.changelog.node(rev)
673 revnode_hex = hex(revnode)
690 revnode_hex = hex(revnode)
674 uprev = min(max_rev, rev + revcount)
691 uprev = min(max_rev, rev + revcount)
675 downrev = max(0, rev - revcount)
692 downrev = max(0, rev - revcount)
676 count = len(web.repo)
693 count = len(web.repo)
677 changenav = webutil.revnavgen(rev, revcount, count, web.repo.changectx)
694 changenav = webutil.revnavgen(rev, revcount, count, web.repo.changectx)
678
695
679 dag = graphmod.revisions(web.repo, rev, downrev)
696 dag = graphmod.revisions(web.repo, rev, downrev)
680 tree = list(graphmod.colored(dag))
697 tree = list(graphmod.colored(dag))
681 canvasheight = (len(tree) + 1) * bg_height - 27;
698 canvasheight = (len(tree) + 1) * bg_height - 27;
682 data = []
699 data = []
683 for (id, type, ctx, vtx, edges) in tree:
700 for (id, type, ctx, vtx, edges) in tree:
684 if type != graphmod.CHANGESET:
701 if type != graphmod.CHANGESET:
685 continue
702 continue
686 node = short(ctx.node())
703 node = short(ctx.node())
687 age = templatefilters.age(ctx.date())
704 age = templatefilters.age(ctx.date())
688 desc = templatefilters.firstline(ctx.description())
705 desc = templatefilters.firstline(ctx.description())
689 desc = cgi.escape(templatefilters.nonempty(desc))
706 desc = cgi.escape(templatefilters.nonempty(desc))
690 user = cgi.escape(templatefilters.person(ctx.user()))
707 user = cgi.escape(templatefilters.person(ctx.user()))
691 branch = ctx.branch()
708 branch = ctx.branch()
692 branch = branch, web.repo.branchtags().get(branch) == ctx.node()
709 branch = branch, web.repo.branchtags().get(branch) == ctx.node()
693 data.append((node, vtx, edges, desc, user, age, branch, ctx.tags()))
710 data.append((node, vtx, edges, desc, user, age, branch, ctx.tags()))
694
711
695 return tmpl('graph', rev=rev, revcount=revcount, uprev=uprev,
712 return tmpl('graph', rev=rev, revcount=revcount, uprev=uprev,
696 lessvars=lessvars, morevars=morevars, downrev=downrev,
713 lessvars=lessvars, morevars=morevars, downrev=downrev,
697 canvasheight=canvasheight, jsdata=data, bg_height=bg_height,
714 canvasheight=canvasheight, jsdata=data, bg_height=bg_height,
698 node=revnode_hex, changenav=changenav)
715 node=revnode_hex, changenav=changenav)
@@ -1,60 +1,69 b''
1 {header}
1 {header}
2 <title>{repo|escape}: {file|escape} history</title>
2 <title>{repo|escape}: {file|escape} history</title>
3 <link rel="alternate" type="application/atom+xml"
3 <link rel="alternate" type="application/atom+xml"
4 href="{url}atom-log/tip/{file|urlescape}" title="Atom feed for {repo|escape}:{file}" />
4 href="{url}atom-log/tip/{file|urlescape}" title="Atom feed for {repo|escape}:{file}" />
5 <link rel="alternate" type="application/rss+xml"
5 <link rel="alternate" type="application/rss+xml"
6 href="{url}rss-log/tip/{file|urlescape}" title="RSS feed for {repo|escape}:{file}" />
6 href="{url}rss-log/tip/{file|urlescape}" title="RSS feed for {repo|escape}:{file}" />
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/{node|short}{sessionvars%urlparameter}">log</a></li>
17 <li><a href="{url}shortlog/{node|short}{sessionvars%urlparameter}">log</a></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 <li><a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a></li>
27 <li><a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a></li>
28 <li><a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a></li>
28 <li><a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a></li>
29 <li><a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a></li>
29 <li><a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a></li>
30 <li class="active">file log</li>
30 <li class="active">file log</li>
31 <li><a href="{url}raw-file/{node|short}/{file|urlescape}">raw</a></li>
31 <li><a href="{url}raw-file/{node|short}/{file|urlescape}">raw</a></li>
32 </ul>
32 </ul>
33 </div>
33 </div>
34
34
35 <div class="main">
35 <div class="main">
36 <h2><a href="{url}{sessionvars%urlparameter}">{repo|escape}</a></h2>
36 <h2><a href="{url}{sessionvars%urlparameter}">{repo|escape}</a></h2>
37 <h3>log {file|escape}</h3>
37 <h3>log {file|escape}</h3>
38
38
39 <form class="search" action="{url}log">
39 <form class="search" action="{url}log">
40 {sessionvars%hiddenformentry}
40 {sessionvars%hiddenformentry}
41 <p><input name="rev" id="search1" type="text" size="30" /></p>
41 <p><input name="rev" id="search1" type="text" size="30" /></p>
42 <div id="hint">find changesets by author, revision,
42 <div id="hint">find changesets by author, revision,
43 files, or words in the commit message</div>
43 files, or words in the commit message</div>
44 </form>
44 </form>
45
45
46 <div class="navigate">{nav%filenaventry}</div>
46 <div class="navigate">
47 <a href="{url}log/{node|short}/{file|urlescape}{lessvars%urlparameter}">less</a>
48 <a href="{url}log/{node|short}/{file|urlescape}{morevars%urlparameter}">more</a>
49 | {nav%filenaventry}</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%filelogentry}
57 {entries%filelogentry}
55 </table>
58 </table>
56
59
60 <div class="navigate">
61 <a href="{url}log/{node|short}/{file|urlescape}{lessvars%urlparameter}">less</a>
62 <a href="{url}log/{node|short}/{file|urlescape}{morevars%urlparameter}">more</a>
63 | {nav%filenaventry}
64 </div>
65
57 </div>
66 </div>
58 </div>
67 </div>
59
68
60 {footer}
69 {footer}
@@ -1,57 +1,66 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 </div>
29 </div>
30
30
31 <div class="main">
31 <div class="main">
32 <h2><a href="{url}{sessionvars%urlparameter}">{repo|escape}</a></h2>
32 <h2><a href="{url}{sessionvars%urlparameter}">{repo|escape}</a></h2>
33 <h3>log</h3>
33 <h3>log</h3>
34
34
35 <form class="search" action="{url}log">
35 <form class="search" action="{url}log">
36 {sessionvars%hiddenformentry}
36 {sessionvars%hiddenformentry}
37 <p><input name="rev" id="search1" type="text" size="30" /></p>
37 <p><input name="rev" id="search1" type="text" size="30" /></p>
38 <div id="hint">find changesets by author, revision,
38 <div id="hint">find changesets by author, revision,
39 files, or words in the commit message</div>
39 files, or words in the commit message</div>
40 </form>
40 </form>
41
41
42 <div class="navigate">rev {rev}: {changenav%navshortentry}</div>
42 <div class="navigate">
43 <a href="{url}shortlog/{rev}{lessvars%urlparameter}">less</a>
44 <a href="{url}shortlog/{rev}{morevars%urlparameter}">more</a>
45 | rev {rev}: {changenav%navshortentry}
46 </div>
43
47
44 <table class="bigtable">
48 <table class="bigtable">
45 <tr>
49 <tr>
46 <th class="age">age</th>
50 <th class="age">age</th>
47 <th class="author">author</th>
51 <th class="author">author</th>
48 <th class="description">description</th>
52 <th class="description">description</th>
49 </tr>
53 </tr>
50 {entries%shortlogentry}
54 {entries%shortlogentry}
51 </table>
55 </table>
52
56
53 <div class="navigate">rev {rev}: {changenav%navshortentry}</div>
57 <div class="navigate">
58 <a href="{url}shortlog/{rev}{lessvars%urlparameter}">less</a>
59 <a href="{url}shortlog/{rev}{morevars%urlparameter}">more</a>
60 | rev {rev}: {changenav%navshortentry}
61 </div>
62
54 </div>
63 </div>
55 </div>
64 </div>
56
65
57 {footer}
66 {footer}
@@ -1,906 +1,915 b''
1 % Set up the repo
1 % Set up the repo
2 adding da/foo
2 adding da/foo
3 adding foo
3 adding foo
4 marked working directory as branch stable
4 marked working directory as branch stable
5 % Logs and changes
5 % Logs and changes
6 200 Script output follows
6 200 Script output follows
7
7
8 <?xml version="1.0" encoding="ascii"?>
8 <?xml version="1.0" encoding="ascii"?>
9 <feed xmlns="http://127.0.0.1/2005/Atom">
9 <feed xmlns="http://127.0.0.1/2005/Atom">
10 <!-- Changelog -->
10 <!-- Changelog -->
11 <id>http://127.0.0.1/</id>
11 <id>http://127.0.0.1/</id>
12 <link rel="self" href="http://127.0.0.1/atom-log"/>
12 <link rel="self" href="http://127.0.0.1/atom-log"/>
13 <link rel="alternate" href="http://127.0.0.1/"/>
13 <link rel="alternate" href="http://127.0.0.1/"/>
14 <title>test Changelog</title>
14 <title>test Changelog</title>
15 <updated>1970-01-01T00:00:00+00:00</updated>
15 <updated>1970-01-01T00:00:00+00:00</updated>
16
16
17 <entry>
17 <entry>
18 <title>branch</title>
18 <title>branch</title>
19 <id>http://127.0.0.1/#changeset-1d22e65f027e5a0609357e7d8e7508cd2ba5d2fe</id>
19 <id>http://127.0.0.1/#changeset-1d22e65f027e5a0609357e7d8e7508cd2ba5d2fe</id>
20 <link href="http://127.0.0.1/rev/1d22e65f027e"/>
20 <link href="http://127.0.0.1/rev/1d22e65f027e"/>
21 <author>
21 <author>
22 <name>test</name>
22 <name>test</name>
23 <email>&#116;&#101;&#115;&#116;</email>
23 <email>&#116;&#101;&#115;&#116;</email>
24 </author>
24 </author>
25 <updated>1970-01-01T00:00:00+00:00</updated>
25 <updated>1970-01-01T00:00:00+00:00</updated>
26 <published>1970-01-01T00:00:00+00:00</published>
26 <published>1970-01-01T00:00:00+00:00</published>
27 <content type="xhtml">
27 <content type="xhtml">
28 <div xmlns="http://127.0.0.1/1999/xhtml">
28 <div xmlns="http://127.0.0.1/1999/xhtml">
29 <pre xml:space="preserve">branch</pre>
29 <pre xml:space="preserve">branch</pre>
30 </div>
30 </div>
31 </content>
31 </content>
32 </entry>
32 </entry>
33 <entry>
33 <entry>
34 <title>Added tag 1.0 for changeset 2ef0ac749a14</title>
34 <title>Added tag 1.0 for changeset 2ef0ac749a14</title>
35 <id>http://127.0.0.1/#changeset-a4f92ed23982be056b9852de5dfe873eaac7f0de</id>
35 <id>http://127.0.0.1/#changeset-a4f92ed23982be056b9852de5dfe873eaac7f0de</id>
36 <link href="http://127.0.0.1/rev/a4f92ed23982"/>
36 <link href="http://127.0.0.1/rev/a4f92ed23982"/>
37 <author>
37 <author>
38 <name>test</name>
38 <name>test</name>
39 <email>&#116;&#101;&#115;&#116;</email>
39 <email>&#116;&#101;&#115;&#116;</email>
40 </author>
40 </author>
41 <updated>1970-01-01T00:00:00+00:00</updated>
41 <updated>1970-01-01T00:00:00+00:00</updated>
42 <published>1970-01-01T00:00:00+00:00</published>
42 <published>1970-01-01T00:00:00+00:00</published>
43 <content type="xhtml">
43 <content type="xhtml">
44 <div xmlns="http://127.0.0.1/1999/xhtml">
44 <div xmlns="http://127.0.0.1/1999/xhtml">
45 <pre xml:space="preserve">Added tag 1.0 for changeset 2ef0ac749a14</pre>
45 <pre xml:space="preserve">Added tag 1.0 for changeset 2ef0ac749a14</pre>
46 </div>
46 </div>
47 </content>
47 </content>
48 </entry>
48 </entry>
49 <entry>
49 <entry>
50 <title>base</title>
50 <title>base</title>
51 <id>http://127.0.0.1/#changeset-2ef0ac749a14e4f57a5a822464a0902c6f7f448f</id>
51 <id>http://127.0.0.1/#changeset-2ef0ac749a14e4f57a5a822464a0902c6f7f448f</id>
52 <link href="http://127.0.0.1/rev/2ef0ac749a14"/>
52 <link href="http://127.0.0.1/rev/2ef0ac749a14"/>
53 <author>
53 <author>
54 <name>test</name>
54 <name>test</name>
55 <email>&#116;&#101;&#115;&#116;</email>
55 <email>&#116;&#101;&#115;&#116;</email>
56 </author>
56 </author>
57 <updated>1970-01-01T00:00:00+00:00</updated>
57 <updated>1970-01-01T00:00:00+00:00</updated>
58 <published>1970-01-01T00:00:00+00:00</published>
58 <published>1970-01-01T00:00:00+00:00</published>
59 <content type="xhtml">
59 <content type="xhtml">
60 <div xmlns="http://127.0.0.1/1999/xhtml">
60 <div xmlns="http://127.0.0.1/1999/xhtml">
61 <pre xml:space="preserve">base</pre>
61 <pre xml:space="preserve">base</pre>
62 </div>
62 </div>
63 </content>
63 </content>
64 </entry>
64 </entry>
65
65
66 </feed>
66 </feed>
67 200 Script output follows
67 200 Script output follows
68
68
69 <?xml version="1.0" encoding="ascii"?>
69 <?xml version="1.0" encoding="ascii"?>
70 <feed xmlns="http://127.0.0.1/2005/Atom">
70 <feed xmlns="http://127.0.0.1/2005/Atom">
71 <!-- Changelog -->
71 <!-- Changelog -->
72 <id>http://127.0.0.1/</id>
72 <id>http://127.0.0.1/</id>
73 <link rel="self" href="http://127.0.0.1/atom-log"/>
73 <link rel="self" href="http://127.0.0.1/atom-log"/>
74 <link rel="alternate" href="http://127.0.0.1/"/>
74 <link rel="alternate" href="http://127.0.0.1/"/>
75 <title>test Changelog</title>
75 <title>test Changelog</title>
76 <updated>1970-01-01T00:00:00+00:00</updated>
76 <updated>1970-01-01T00:00:00+00:00</updated>
77
77
78 <entry>
78 <entry>
79 <title>branch</title>
79 <title>branch</title>
80 <id>http://127.0.0.1/#changeset-1d22e65f027e5a0609357e7d8e7508cd2ba5d2fe</id>
80 <id>http://127.0.0.1/#changeset-1d22e65f027e5a0609357e7d8e7508cd2ba5d2fe</id>
81 <link href="http://127.0.0.1/rev/1d22e65f027e"/>
81 <link href="http://127.0.0.1/rev/1d22e65f027e"/>
82 <author>
82 <author>
83 <name>test</name>
83 <name>test</name>
84 <email>&#116;&#101;&#115;&#116;</email>
84 <email>&#116;&#101;&#115;&#116;</email>
85 </author>
85 </author>
86 <updated>1970-01-01T00:00:00+00:00</updated>
86 <updated>1970-01-01T00:00:00+00:00</updated>
87 <published>1970-01-01T00:00:00+00:00</published>
87 <published>1970-01-01T00:00:00+00:00</published>
88 <content type="xhtml">
88 <content type="xhtml">
89 <div xmlns="http://127.0.0.1/1999/xhtml">
89 <div xmlns="http://127.0.0.1/1999/xhtml">
90 <pre xml:space="preserve">branch</pre>
90 <pre xml:space="preserve">branch</pre>
91 </div>
91 </div>
92 </content>
92 </content>
93 </entry>
93 </entry>
94 <entry>
94 <entry>
95 <title>Added tag 1.0 for changeset 2ef0ac749a14</title>
95 <title>Added tag 1.0 for changeset 2ef0ac749a14</title>
96 <id>http://127.0.0.1/#changeset-a4f92ed23982be056b9852de5dfe873eaac7f0de</id>
96 <id>http://127.0.0.1/#changeset-a4f92ed23982be056b9852de5dfe873eaac7f0de</id>
97 <link href="http://127.0.0.1/rev/a4f92ed23982"/>
97 <link href="http://127.0.0.1/rev/a4f92ed23982"/>
98 <author>
98 <author>
99 <name>test</name>
99 <name>test</name>
100 <email>&#116;&#101;&#115;&#116;</email>
100 <email>&#116;&#101;&#115;&#116;</email>
101 </author>
101 </author>
102 <updated>1970-01-01T00:00:00+00:00</updated>
102 <updated>1970-01-01T00:00:00+00:00</updated>
103 <published>1970-01-01T00:00:00+00:00</published>
103 <published>1970-01-01T00:00:00+00:00</published>
104 <content type="xhtml">
104 <content type="xhtml">
105 <div xmlns="http://127.0.0.1/1999/xhtml">
105 <div xmlns="http://127.0.0.1/1999/xhtml">
106 <pre xml:space="preserve">Added tag 1.0 for changeset 2ef0ac749a14</pre>
106 <pre xml:space="preserve">Added tag 1.0 for changeset 2ef0ac749a14</pre>
107 </div>
107 </div>
108 </content>
108 </content>
109 </entry>
109 </entry>
110 <entry>
110 <entry>
111 <title>base</title>
111 <title>base</title>
112 <id>http://127.0.0.1/#changeset-2ef0ac749a14e4f57a5a822464a0902c6f7f448f</id>
112 <id>http://127.0.0.1/#changeset-2ef0ac749a14e4f57a5a822464a0902c6f7f448f</id>
113 <link href="http://127.0.0.1/rev/2ef0ac749a14"/>
113 <link href="http://127.0.0.1/rev/2ef0ac749a14"/>
114 <author>
114 <author>
115 <name>test</name>
115 <name>test</name>
116 <email>&#116;&#101;&#115;&#116;</email>
116 <email>&#116;&#101;&#115;&#116;</email>
117 </author>
117 </author>
118 <updated>1970-01-01T00:00:00+00:00</updated>
118 <updated>1970-01-01T00:00:00+00:00</updated>
119 <published>1970-01-01T00:00:00+00:00</published>
119 <published>1970-01-01T00:00:00+00:00</published>
120 <content type="xhtml">
120 <content type="xhtml">
121 <div xmlns="http://127.0.0.1/1999/xhtml">
121 <div xmlns="http://127.0.0.1/1999/xhtml">
122 <pre xml:space="preserve">base</pre>
122 <pre xml:space="preserve">base</pre>
123 </div>
123 </div>
124 </content>
124 </content>
125 </entry>
125 </entry>
126
126
127 </feed>
127 </feed>
128 200 Script output follows
128 200 Script output follows
129
129
130 <?xml version="1.0" encoding="ascii"?>
130 <?xml version="1.0" encoding="ascii"?>
131 <feed xmlns="http://127.0.0.1/2005/Atom">
131 <feed xmlns="http://127.0.0.1/2005/Atom">
132 <id>http://127.0.0.1/atom-log/tip/foo</id>
132 <id>http://127.0.0.1/atom-log/tip/foo</id>
133 <link rel="self" href="http://127.0.0.1/atom-log/tip/foo"/>
133 <link rel="self" href="http://127.0.0.1/atom-log/tip/foo"/>
134 <title>test: foo history</title>
134 <title>test: foo history</title>
135 <updated>1970-01-01T00:00:00+00:00</updated>
135 <updated>1970-01-01T00:00:00+00:00</updated>
136
136
137 <entry>
137 <entry>
138 <title>base</title>
138 <title>base</title>
139 <id>http://127.0.0.1/#changeset-2ef0ac749a14e4f57a5a822464a0902c6f7f448f</id>
139 <id>http://127.0.0.1/#changeset-2ef0ac749a14e4f57a5a822464a0902c6f7f448f</id>
140 <link href="http://127.0.0.1/rev/2ef0ac749a14"/>
140 <link href="http://127.0.0.1/rev/2ef0ac749a14"/>
141 <author>
141 <author>
142 <name>test</name>
142 <name>test</name>
143 <email>&#116;&#101;&#115;&#116;</email>
143 <email>&#116;&#101;&#115;&#116;</email>
144 </author>
144 </author>
145 <updated>1970-01-01T00:00:00+00:00</updated>
145 <updated>1970-01-01T00:00:00+00:00</updated>
146 <published>1970-01-01T00:00:00+00:00</published>
146 <published>1970-01-01T00:00:00+00:00</published>
147 <content type="xhtml">
147 <content type="xhtml">
148 <div xmlns="http://127.0.0.1/1999/xhtml">
148 <div xmlns="http://127.0.0.1/1999/xhtml">
149 <pre xml:space="preserve">base</pre>
149 <pre xml:space="preserve">base</pre>
150 </div>
150 </div>
151 </content>
151 </content>
152 </entry>
152 </entry>
153
153
154 </feed>
154 </feed>
155 200 Script output follows
155 200 Script output follows
156
156
157 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
157 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
158 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
158 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
159 <head>
159 <head>
160 <link rel="icon" href="/static/hgicon.png" type="image/png" />
160 <link rel="icon" href="/static/hgicon.png" type="image/png" />
161 <meta name="robots" content="index, nofollow" />
161 <meta name="robots" content="index, nofollow" />
162 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
162 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
163
163
164 <title>test: log</title>
164 <title>test: log</title>
165 <link rel="alternate" type="application/atom+xml"
165 <link rel="alternate" type="application/atom+xml"
166 href="/atom-log" title="Atom feed for test" />
166 href="/atom-log" title="Atom feed for test" />
167 <link rel="alternate" type="application/rss+xml"
167 <link rel="alternate" type="application/rss+xml"
168 href="/rss-log" title="RSS feed for test" />
168 href="/rss-log" title="RSS feed for test" />
169 </head>
169 </head>
170 <body>
170 <body>
171
171
172 <div class="container">
172 <div class="container">
173 <div class="menu">
173 <div class="menu">
174 <div class="logo">
174 <div class="logo">
175 <a href="http://mercurial.selenic.com/">
175 <a href="http://mercurial.selenic.com/">
176 <img src="/static/hglogo.png" alt="mercurial" /></a>
176 <img src="/static/hglogo.png" alt="mercurial" /></a>
177 </div>
177 </div>
178 <ul>
178 <ul>
179 <li class="active">log</li>
179 <li class="active">log</li>
180 <li><a href="/graph/1d22e65f027e">graph</a></li>
180 <li><a href="/graph/1d22e65f027e">graph</a></li>
181 <li><a href="/tags">tags</a></li>
181 <li><a href="/tags">tags</a></li>
182 <li><a href="/branches">branches</a></li>
182 <li><a href="/branches">branches</a></li>
183 </ul>
183 </ul>
184 <ul>
184 <ul>
185 <li><a href="/rev/1d22e65f027e">changeset</a></li>
185 <li><a href="/rev/1d22e65f027e">changeset</a></li>
186 <li><a href="/file/1d22e65f027e">browse</a></li>
186 <li><a href="/file/1d22e65f027e">browse</a></li>
187 </ul>
187 </ul>
188 <ul>
188 <ul>
189
189
190 </ul>
190 </ul>
191 </div>
191 </div>
192
192
193 <div class="main">
193 <div class="main">
194 <h2><a href="/">test</a></h2>
194 <h2><a href="/">test</a></h2>
195 <h3>log</h3>
195 <h3>log</h3>
196
196
197 <form class="search" action="/log">
197 <form class="search" action="/log">
198
198
199 <p><input name="rev" id="search1" type="text" size="30" /></p>
199 <p><input name="rev" id="search1" type="text" size="30" /></p>
200 <div id="hint">find changesets by author, revision,
200 <div id="hint">find changesets by author, revision,
201 files, or words in the commit message</div>
201 files, or words in the commit message</div>
202 </form>
202 </form>
203
203
204 <div class="navigate">rev 2: <a href="/shortlog/2ef0ac749a14">(0)</a> <a href="/shortlog/tip">tip</a> </div>
204 <div class="navigate">
205 <a href="/shortlog/2?revcount=30">less</a>
206 <a href="/shortlog/2?revcount=120">more</a>
207 | rev 2: <a href="/shortlog/2ef0ac749a14">(0)</a> <a href="/shortlog/tip">tip</a>
208 </div>
205
209
206 <table class="bigtable">
210 <table class="bigtable">
207 <tr>
211 <tr>
208 <th class="age">age</th>
212 <th class="age">age</th>
209 <th class="author">author</th>
213 <th class="author">author</th>
210 <th class="description">description</th>
214 <th class="description">description</th>
211 </tr>
215 </tr>
212 <tr class="parity0">
216 <tr class="parity0">
213 <td class="age">1970-01-01</td>
217 <td class="age">1970-01-01</td>
214 <td class="author">test</td>
218 <td class="author">test</td>
215 <td class="description"><a href="/rev/1d22e65f027e">branch</a><span class="branchhead">stable</span> <span class="tag">tip</span> </td>
219 <td class="description"><a href="/rev/1d22e65f027e">branch</a><span class="branchhead">stable</span> <span class="tag">tip</span> </td>
216 </tr>
220 </tr>
217 <tr class="parity1">
221 <tr class="parity1">
218 <td class="age">1970-01-01</td>
222 <td class="age">1970-01-01</td>
219 <td class="author">test</td>
223 <td class="author">test</td>
220 <td class="description"><a href="/rev/a4f92ed23982">Added tag 1.0 for changeset 2ef0ac749a14</a><span class="branchhead">default</span> </td>
224 <td class="description"><a href="/rev/a4f92ed23982">Added tag 1.0 for changeset 2ef0ac749a14</a><span class="branchhead">default</span> </td>
221 </tr>
225 </tr>
222 <tr class="parity0">
226 <tr class="parity0">
223 <td class="age">1970-01-01</td>
227 <td class="age">1970-01-01</td>
224 <td class="author">test</td>
228 <td class="author">test</td>
225 <td class="description"><a href="/rev/2ef0ac749a14">base</a><span class="tag">1.0</span> </td>
229 <td class="description"><a href="/rev/2ef0ac749a14">base</a><span class="tag">1.0</span> </td>
226 </tr>
230 </tr>
227
231
228 </table>
232 </table>
229
233
230 <div class="navigate">rev 2: <a href="/shortlog/2ef0ac749a14">(0)</a> <a href="/shortlog/tip">tip</a> </div>
234 <div class="navigate">
235 <a href="/shortlog/2?revcount=30">less</a>
236 <a href="/shortlog/2?revcount=120">more</a>
237 | rev 2: <a href="/shortlog/2ef0ac749a14">(0)</a> <a href="/shortlog/tip">tip</a>
238 </div>
239
231 </div>
240 </div>
232 </div>
241 </div>
233
242
234
243
235
244
236 </body>
245 </body>
237 </html>
246 </html>
238
247
239 200 Script output follows
248 200 Script output follows
240
249
241 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
250 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
242 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
251 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
243 <head>
252 <head>
244 <link rel="icon" href="/static/hgicon.png" type="image/png" />
253 <link rel="icon" href="/static/hgicon.png" type="image/png" />
245 <meta name="robots" content="index, nofollow" />
254 <meta name="robots" content="index, nofollow" />
246 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
255 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
247
256
248 <title>test: 2ef0ac749a14</title>
257 <title>test: 2ef0ac749a14</title>
249 </head>
258 </head>
250 <body>
259 <body>
251 <div class="container">
260 <div class="container">
252 <div class="menu">
261 <div class="menu">
253 <div class="logo">
262 <div class="logo">
254 <a href="http://mercurial.selenic.com/">
263 <a href="http://mercurial.selenic.com/">
255 <img src="/static/hglogo.png" alt="mercurial" /></a>
264 <img src="/static/hglogo.png" alt="mercurial" /></a>
256 </div>
265 </div>
257 <ul>
266 <ul>
258 <li><a href="/shortlog/2ef0ac749a14">log</a></li>
267 <li><a href="/shortlog/2ef0ac749a14">log</a></li>
259 <li><a href="/graph/2ef0ac749a14">graph</a></li>
268 <li><a href="/graph/2ef0ac749a14">graph</a></li>
260 <li><a href="/tags">tags</a></li>
269 <li><a href="/tags">tags</a></li>
261 <li><a href="/branches">branches</a></li>
270 <li><a href="/branches">branches</a></li>
262 </ul>
271 </ul>
263 <ul>
272 <ul>
264 <li class="active">changeset</li>
273 <li class="active">changeset</li>
265 <li><a href="/raw-rev/2ef0ac749a14">raw</a></li>
274 <li><a href="/raw-rev/2ef0ac749a14">raw</a></li>
266 <li><a href="/file/2ef0ac749a14">browse</a></li>
275 <li><a href="/file/2ef0ac749a14">browse</a></li>
267 </ul>
276 </ul>
268 <ul>
277 <ul>
269
278
270 </ul>
279 </ul>
271 </div>
280 </div>
272
281
273 <div class="main">
282 <div class="main">
274
283
275 <h2><a href="/">test</a></h2>
284 <h2><a href="/">test</a></h2>
276 <h3>changeset 0:2ef0ac749a14 <span class="tag">1.0</span> </h3>
285 <h3>changeset 0:2ef0ac749a14 <span class="tag">1.0</span> </h3>
277
286
278 <form class="search" action="/log">
287 <form class="search" action="/log">
279
288
280 <p><input name="rev" id="search1" type="text" size="30" /></p>
289 <p><input name="rev" id="search1" type="text" size="30" /></p>
281 <div id="hint">find changesets by author, revision,
290 <div id="hint">find changesets by author, revision,
282 files, or words in the commit message</div>
291 files, or words in the commit message</div>
283 </form>
292 </form>
284
293
285 <div class="description">base</div>
294 <div class="description">base</div>
286
295
287 <table id="changesetEntry">
296 <table id="changesetEntry">
288 <tr>
297 <tr>
289 <th class="author">author</th>
298 <th class="author">author</th>
290 <td class="author">&#116;&#101;&#115;&#116;</td>
299 <td class="author">&#116;&#101;&#115;&#116;</td>
291 </tr>
300 </tr>
292 <tr>
301 <tr>
293 <th class="date">date</th>
302 <th class="date">date</th>
294 <td class="date">Thu Jan 01 00:00:00 1970 +0000 (1970-01-01)</td></tr>
303 <td class="date">Thu Jan 01 00:00:00 1970 +0000 (1970-01-01)</td></tr>
295 <tr>
304 <tr>
296 <th class="author">parents</th>
305 <th class="author">parents</th>
297 <td class="author"></td>
306 <td class="author"></td>
298 </tr>
307 </tr>
299 <tr>
308 <tr>
300 <th class="author">children</th>
309 <th class="author">children</th>
301 <td class="author"> <a href="/rev/a4f92ed23982">a4f92ed23982</a></td>
310 <td class="author"> <a href="/rev/a4f92ed23982">a4f92ed23982</a></td>
302 </tr>
311 </tr>
303 <tr>
312 <tr>
304 <th class="files">files</th>
313 <th class="files">files</th>
305 <td class="files"><a href="/file/2ef0ac749a14/da/foo">da/foo</a> <a href="/file/2ef0ac749a14/foo">foo</a> </td>
314 <td class="files"><a href="/file/2ef0ac749a14/da/foo">da/foo</a> <a href="/file/2ef0ac749a14/foo">foo</a> </td>
306 </tr>
315 </tr>
307 </table>
316 </table>
308
317
309 <div class="overflow">
318 <div class="overflow">
310 <div class="sourcefirst"> line diff</div>
319 <div class="sourcefirst"> line diff</div>
311
320
312 <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
321 <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
313 </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
322 </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
314 </span><a href="#l1.3" id="l1.3"> 1.3</a> <span class="atline">@@ -0,0 +1,1 @@
323 </span><a href="#l1.3" id="l1.3"> 1.3</a> <span class="atline">@@ -0,0 +1,1 @@
315 </span><a href="#l1.4" id="l1.4"> 1.4</a> <span class="plusline">+foo
324 </span><a href="#l1.4" id="l1.4"> 1.4</a> <span class="plusline">+foo
316 </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
325 </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
317 </span><a href="#l2.2" id="l2.2"> 2.2</a> <span class="plusline">+++ b/foo Thu Jan 01 00:00:00 1970 +0000
326 </span><a href="#l2.2" id="l2.2"> 2.2</a> <span class="plusline">+++ b/foo Thu Jan 01 00:00:00 1970 +0000
318 </span><a href="#l2.3" id="l2.3"> 2.3</a> <span class="atline">@@ -0,0 +1,1 @@
327 </span><a href="#l2.3" id="l2.3"> 2.3</a> <span class="atline">@@ -0,0 +1,1 @@
319 </span><a href="#l2.4" id="l2.4"> 2.4</a> <span class="plusline">+foo
328 </span><a href="#l2.4" id="l2.4"> 2.4</a> <span class="plusline">+foo
320 </span></pre></div>
329 </span></pre></div>
321 </div>
330 </div>
322
331
323 </div>
332 </div>
324 </div>
333 </div>
325
334
326
335
327 </body>
336 </body>
328 </html>
337 </html>
329
338
330 200 Script output follows
339 200 Script output follows
331
340
332
341
333 # HG changeset patch
342 # HG changeset patch
334 # User test
343 # User test
335 # Date 0 0
344 # Date 0 0
336 # Node ID a4f92ed23982be056b9852de5dfe873eaac7f0de
345 # Node ID a4f92ed23982be056b9852de5dfe873eaac7f0de
337 # Parent 2ef0ac749a14e4f57a5a822464a0902c6f7f448f
346 # Parent 2ef0ac749a14e4f57a5a822464a0902c6f7f448f
338 Added tag 1.0 for changeset 2ef0ac749a14
347 Added tag 1.0 for changeset 2ef0ac749a14
339
348
340 diff -r 2ef0ac749a14 -r a4f92ed23982 .hgtags
349 diff -r 2ef0ac749a14 -r a4f92ed23982 .hgtags
341 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
350 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
342 +++ b/.hgtags Thu Jan 01 00:00:00 1970 +0000
351 +++ b/.hgtags Thu Jan 01 00:00:00 1970 +0000
343 @@ -0,0 +1,1 @@
352 @@ -0,0 +1,1 @@
344 +2ef0ac749a14e4f57a5a822464a0902c6f7f448f 1.0
353 +2ef0ac749a14e4f57a5a822464a0902c6f7f448f 1.0
345
354
346 % File-related
355 % File-related
347 200 Script output follows
356 200 Script output follows
348
357
349 foo
358 foo
350 200 Script output follows
359 200 Script output follows
351
360
352
361
353 test@0: foo
362 test@0: foo
354
363
355
364
356
365
357
366
358 200 Script output follows
367 200 Script output follows
359
368
360
369
361 drwxr-xr-x da
370 drwxr-xr-x da
362 -rw-r--r-- 45 .hgtags
371 -rw-r--r-- 45 .hgtags
363 -rw-r--r-- 4 foo
372 -rw-r--r-- 4 foo
364
373
365
374
366 200 Script output follows
375 200 Script output follows
367
376
368 <!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">
369 <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">
370 <head>
379 <head>
371 <link rel="icon" href="/static/hgicon.png" type="image/png" />
380 <link rel="icon" href="/static/hgicon.png" type="image/png" />
372 <meta name="robots" content="index, nofollow" />
381 <meta name="robots" content="index, nofollow" />
373 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
382 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
374
383
375 <title>test: a4f92ed23982 foo</title>
384 <title>test: a4f92ed23982 foo</title>
376 </head>
385 </head>
377 <body>
386 <body>
378
387
379 <div class="container">
388 <div class="container">
380 <div class="menu">
389 <div class="menu">
381 <div class="logo">
390 <div class="logo">
382 <a href="http://mercurial.selenic.com/">
391 <a href="http://mercurial.selenic.com/">
383 <img src="/static/hglogo.png" alt="mercurial" /></a>
392 <img src="/static/hglogo.png" alt="mercurial" /></a>
384 </div>
393 </div>
385 <ul>
394 <ul>
386 <li><a href="/shortlog/a4f92ed23982">log</a></li>
395 <li><a href="/shortlog/a4f92ed23982">log</a></li>
387 <li><a href="/graph/a4f92ed23982">graph</a></li>
396 <li><a href="/graph/a4f92ed23982">graph</a></li>
388 <li><a href="/tags">tags</a></li>
397 <li><a href="/tags">tags</a></li>
389 <li><a href="/branches">branches</a></li>
398 <li><a href="/branches">branches</a></li>
390 </ul>
399 </ul>
391 <ul>
400 <ul>
392 <li><a href="/rev/a4f92ed23982">changeset</a></li>
401 <li><a href="/rev/a4f92ed23982">changeset</a></li>
393 <li><a href="/file/a4f92ed23982/">browse</a></li>
402 <li><a href="/file/a4f92ed23982/">browse</a></li>
394 </ul>
403 </ul>
395 <ul>
404 <ul>
396 <li class="active">file</li>
405 <li class="active">file</li>
397 <li><a href="/file/tip/foo">latest</a></li>
406 <li><a href="/file/tip/foo">latest</a></li>
398 <li><a href="/diff/a4f92ed23982/foo">diff</a></li>
407 <li><a href="/diff/a4f92ed23982/foo">diff</a></li>
399 <li><a href="/annotate/a4f92ed23982/foo">annotate</a></li>
408 <li><a href="/annotate/a4f92ed23982/foo">annotate</a></li>
400 <li><a href="/log/a4f92ed23982/foo">file log</a></li>
409 <li><a href="/log/a4f92ed23982/foo">file log</a></li>
401 <li><a href="/raw-file/a4f92ed23982/foo">raw</a></li>
410 <li><a href="/raw-file/a4f92ed23982/foo">raw</a></li>
402 </ul>
411 </ul>
403 </div>
412 </div>
404
413
405 <div class="main">
414 <div class="main">
406 <h2><a href="/">test</a></h2>
415 <h2><a href="/">test</a></h2>
407 <h3>view foo @ 1:a4f92ed23982</h3>
416 <h3>view foo @ 1:a4f92ed23982</h3>
408
417
409 <form class="search" action="/log">
418 <form class="search" action="/log">
410
419
411 <p><input name="rev" id="search1" type="text" size="30" /></p>
420 <p><input name="rev" id="search1" type="text" size="30" /></p>
412 <div id="hint">find changesets by author, revision,
421 <div id="hint">find changesets by author, revision,
413 files, or words in the commit message</div>
422 files, or words in the commit message</div>
414 </form>
423 </form>
415
424
416 <div class="description">Added tag 1.0 for changeset 2ef0ac749a14</div>
425 <div class="description">Added tag 1.0 for changeset 2ef0ac749a14</div>
417
426
418 <table id="changesetEntry">
427 <table id="changesetEntry">
419 <tr>
428 <tr>
420 <th class="author">author</th>
429 <th class="author">author</th>
421 <td class="author">&#116;&#101;&#115;&#116;</td>
430 <td class="author">&#116;&#101;&#115;&#116;</td>
422 </tr>
431 </tr>
423 <tr>
432 <tr>
424 <th class="date">date</th>
433 <th class="date">date</th>
425 <td class="date">Thu Jan 01 00:00:00 1970 +0000 (1970-01-01)</td>
434 <td class="date">Thu Jan 01 00:00:00 1970 +0000 (1970-01-01)</td>
426 </tr>
435 </tr>
427 <tr>
436 <tr>
428 <th class="author">parents</th>
437 <th class="author">parents</th>
429 <td class="author"></td>
438 <td class="author"></td>
430 </tr>
439 </tr>
431 <tr>
440 <tr>
432 <th class="author">children</th>
441 <th class="author">children</th>
433 <td class="author"><a href="/file/1d22e65f027e/foo">1d22e65f027e</a> </td>
442 <td class="author"><a href="/file/1d22e65f027e/foo">1d22e65f027e</a> </td>
434 </tr>
443 </tr>
435
444
436 </table>
445 </table>
437
446
438 <div class="overflow">
447 <div class="overflow">
439 <div class="sourcefirst"> line source</div>
448 <div class="sourcefirst"> line source</div>
440
449
441 <div class="parity0 source"><a href="#l1" id="l1"> 1</a> foo
450 <div class="parity0 source"><a href="#l1" id="l1"> 1</a> foo
442 </div>
451 </div>
443 <div class="sourcelast"></div>
452 <div class="sourcelast"></div>
444 </div>
453 </div>
445 </div>
454 </div>
446 </div>
455 </div>
447
456
448
457
449
458
450 </body>
459 </body>
451 </html>
460 </html>
452
461
453 200 Script output follows
462 200 Script output follows
454
463
455
464
456 diff -r 000000000000 -r a4f92ed23982 foo
465 diff -r 000000000000 -r a4f92ed23982 foo
457 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
466 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
458 +++ b/foo Thu Jan 01 00:00:00 1970 +0000
467 +++ b/foo Thu Jan 01 00:00:00 1970 +0000
459 @@ -0,0 +1,1 @@
468 @@ -0,0 +1,1 @@
460 +foo
469 +foo
461
470
462
471
463
472
464
473
465 % Overviews
474 % Overviews
466 200 Script output follows
475 200 Script output follows
467
476
468 tip 1d22e65f027e5a0609357e7d8e7508cd2ba5d2fe
477 tip 1d22e65f027e5a0609357e7d8e7508cd2ba5d2fe
469 1.0 2ef0ac749a14e4f57a5a822464a0902c6f7f448f
478 1.0 2ef0ac749a14e4f57a5a822464a0902c6f7f448f
470 200 Script output follows
479 200 Script output follows
471
480
472 stable 1d22e65f027e5a0609357e7d8e7508cd2ba5d2fe open
481 stable 1d22e65f027e5a0609357e7d8e7508cd2ba5d2fe open
473 default a4f92ed23982be056b9852de5dfe873eaac7f0de inactive
482 default a4f92ed23982be056b9852de5dfe873eaac7f0de inactive
474 200 Script output follows
483 200 Script output follows
475
484
476 <?xml version="1.0" encoding="ascii"?>
485 <?xml version="1.0" encoding="ascii"?>
477 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
486 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
478 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US" lang="en-US">
487 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US" lang="en-US">
479 <head>
488 <head>
480 <link rel="icon" href="/static/hgicon.png" type="image/png" />
489 <link rel="icon" href="/static/hgicon.png" type="image/png" />
481 <meta name="robots" content="index, nofollow"/>
490 <meta name="robots" content="index, nofollow"/>
482 <link rel="stylesheet" href="/static/style-gitweb.css" type="text/css" />
491 <link rel="stylesheet" href="/static/style-gitweb.css" type="text/css" />
483
492
484
493
485 <title>test: Summary</title>
494 <title>test: Summary</title>
486 <link rel="alternate" type="application/atom+xml"
495 <link rel="alternate" type="application/atom+xml"
487 href="/atom-log" title="Atom feed for test"/>
496 href="/atom-log" title="Atom feed for test"/>
488 <link rel="alternate" type="application/rss+xml"
497 <link rel="alternate" type="application/rss+xml"
489 href="/rss-log" title="RSS feed for test"/>
498 href="/rss-log" title="RSS feed for test"/>
490 </head>
499 </head>
491 <body>
500 <body>
492
501
493 <div class="page_header">
502 <div class="page_header">
494 <a href="http://mercurial.selenic.com/" title="Mercurial" style="float: right;">Mercurial</a><a href="/summary?style=gitweb">test</a> / summary
503 <a href="http://mercurial.selenic.com/" title="Mercurial" style="float: right;">Mercurial</a><a href="/summary?style=gitweb">test</a> / summary
495
504
496 <form action="/log">
505 <form action="/log">
497 <input type="hidden" name="style" value="gitweb" />
506 <input type="hidden" name="style" value="gitweb" />
498 <div class="search">
507 <div class="search">
499 <input type="text" name="rev" />
508 <input type="text" name="rev" />
500 </div>
509 </div>
501 </form>
510 </form>
502 </div>
511 </div>
503
512
504 <div class="page_nav">
513 <div class="page_nav">
505 summary |
514 summary |
506 <a href="/shortlog?style=gitweb">shortlog</a> |
515 <a href="/shortlog?style=gitweb">shortlog</a> |
507 <a href="/log?style=gitweb">changelog</a> |
516 <a href="/log?style=gitweb">changelog</a> |
508 <a href="/graph?style=gitweb">graph</a> |
517 <a href="/graph?style=gitweb">graph</a> |
509 <a href="/tags?style=gitweb">tags</a> |
518 <a href="/tags?style=gitweb">tags</a> |
510 <a href="/branches?style=gitweb">branches</a> |
519 <a href="/branches?style=gitweb">branches</a> |
511 <a href="/file/1d22e65f027e?style=gitweb">files</a>
520 <a href="/file/1d22e65f027e?style=gitweb">files</a>
512 <br/>
521 <br/>
513 </div>
522 </div>
514
523
515 <div class="title">&nbsp;</div>
524 <div class="title">&nbsp;</div>
516 <table cellspacing="0">
525 <table cellspacing="0">
517 <tr><td>description</td><td>unknown</td></tr>
526 <tr><td>description</td><td>unknown</td></tr>
518 <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>
527 <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>
519 <tr><td>last change</td><td>Thu, 01 Jan 1970 00:00:00 +0000</td></tr>
528 <tr><td>last change</td><td>Thu, 01 Jan 1970 00:00:00 +0000</td></tr>
520 </table>
529 </table>
521
530
522 <div><a class="title" href="/shortlog?style=gitweb">changes</a></div>
531 <div><a class="title" href="/shortlog?style=gitweb">changes</a></div>
523 <table cellspacing="0">
532 <table cellspacing="0">
524
533
525 <tr class="parity0">
534 <tr class="parity0">
526 <td class="age"><i>1970-01-01</i></td>
535 <td class="age"><i>1970-01-01</i></td>
527 <td><i>test</i></td>
536 <td><i>test</i></td>
528 <td>
537 <td>
529 <a class="list" href="/rev/1d22e65f027e?style=gitweb">
538 <a class="list" href="/rev/1d22e65f027e?style=gitweb">
530 <b>branch</b>
539 <b>branch</b>
531 <span class="logtags"><span class="branchtag" title="stable">stable</span> <span class="tagtag" title="tip">tip</span> </span>
540 <span class="logtags"><span class="branchtag" title="stable">stable</span> <span class="tagtag" title="tip">tip</span> </span>
532 </a>
541 </a>
533 </td>
542 </td>
534 <td class="link" nowrap>
543 <td class="link" nowrap>
535 <a href="/rev/1d22e65f027e?style=gitweb">changeset</a> |
544 <a href="/rev/1d22e65f027e?style=gitweb">changeset</a> |
536 <a href="/file/1d22e65f027e?style=gitweb">files</a>
545 <a href="/file/1d22e65f027e?style=gitweb">files</a>
537 </td>
546 </td>
538 </tr>
547 </tr>
539 <tr class="parity1">
548 <tr class="parity1">
540 <td class="age"><i>1970-01-01</i></td>
549 <td class="age"><i>1970-01-01</i></td>
541 <td><i>test</i></td>
550 <td><i>test</i></td>
542 <td>
551 <td>
543 <a class="list" href="/rev/a4f92ed23982?style=gitweb">
552 <a class="list" href="/rev/a4f92ed23982?style=gitweb">
544 <b>Added tag 1.0 for changeset 2ef0ac749a14</b>
553 <b>Added tag 1.0 for changeset 2ef0ac749a14</b>
545 <span class="logtags"><span class="branchtag" title="default">default</span> </span>
554 <span class="logtags"><span class="branchtag" title="default">default</span> </span>
546 </a>
555 </a>
547 </td>
556 </td>
548 <td class="link" nowrap>
557 <td class="link" nowrap>
549 <a href="/rev/a4f92ed23982?style=gitweb">changeset</a> |
558 <a href="/rev/a4f92ed23982?style=gitweb">changeset</a> |
550 <a href="/file/a4f92ed23982?style=gitweb">files</a>
559 <a href="/file/a4f92ed23982?style=gitweb">files</a>
551 </td>
560 </td>
552 </tr>
561 </tr>
553 <tr class="parity0">
562 <tr class="parity0">
554 <td class="age"><i>1970-01-01</i></td>
563 <td class="age"><i>1970-01-01</i></td>
555 <td><i>test</i></td>
564 <td><i>test</i></td>
556 <td>
565 <td>
557 <a class="list" href="/rev/2ef0ac749a14?style=gitweb">
566 <a class="list" href="/rev/2ef0ac749a14?style=gitweb">
558 <b>base</b>
567 <b>base</b>
559 <span class="logtags"><span class="tagtag" title="1.0">1.0</span> </span>
568 <span class="logtags"><span class="tagtag" title="1.0">1.0</span> </span>
560 </a>
569 </a>
561 </td>
570 </td>
562 <td class="link" nowrap>
571 <td class="link" nowrap>
563 <a href="/rev/2ef0ac749a14?style=gitweb">changeset</a> |
572 <a href="/rev/2ef0ac749a14?style=gitweb">changeset</a> |
564 <a href="/file/2ef0ac749a14?style=gitweb">files</a>
573 <a href="/file/2ef0ac749a14?style=gitweb">files</a>
565 </td>
574 </td>
566 </tr>
575 </tr>
567 <tr class="light"><td colspan="4"><a class="list" href="/shortlog?style=gitweb">...</a></td></tr>
576 <tr class="light"><td colspan="4"><a class="list" href="/shortlog?style=gitweb">...</a></td></tr>
568 </table>
577 </table>
569
578
570 <div><a class="title" href="/tags?style=gitweb">tags</a></div>
579 <div><a class="title" href="/tags?style=gitweb">tags</a></div>
571 <table cellspacing="0">
580 <table cellspacing="0">
572
581
573 <tr class="parity0">
582 <tr class="parity0">
574 <td class="age"><i>1970-01-01</i></td>
583 <td class="age"><i>1970-01-01</i></td>
575 <td><a class="list" href="/rev/2ef0ac749a14?style=gitweb"><b>1.0</b></a></td>
584 <td><a class="list" href="/rev/2ef0ac749a14?style=gitweb"><b>1.0</b></a></td>
576 <td class="link">
585 <td class="link">
577 <a href="/rev/2ef0ac749a14?style=gitweb">changeset</a> |
586 <a href="/rev/2ef0ac749a14?style=gitweb">changeset</a> |
578 <a href="/log/2ef0ac749a14?style=gitweb">changelog</a> |
587 <a href="/log/2ef0ac749a14?style=gitweb">changelog</a> |
579 <a href="/file/2ef0ac749a14?style=gitweb">files</a>
588 <a href="/file/2ef0ac749a14?style=gitweb">files</a>
580 </td>
589 </td>
581 </tr>
590 </tr>
582 <tr class="light"><td colspan="3"><a class="list" href="/tags?style=gitweb">...</a></td></tr>
591 <tr class="light"><td colspan="3"><a class="list" href="/tags?style=gitweb">...</a></td></tr>
583 </table>
592 </table>
584
593
585 <div><a class="title" href="#">branches</a></div>
594 <div><a class="title" href="#">branches</a></div>
586 <table cellspacing="0">
595 <table cellspacing="0">
587
596
588 <tr class="parity0">
597 <tr class="parity0">
589 <td class="age"><i>1970-01-01</i></td>
598 <td class="age"><i>1970-01-01</i></td>
590 <td><a class="list" href="/shortlog/1d22e65f027e?style=gitweb"><b>1d22e65f027e</b></a></td>
599 <td><a class="list" href="/shortlog/1d22e65f027e?style=gitweb"><b>1d22e65f027e</b></a></td>
591 <td class="">stable</td>
600 <td class="">stable</td>
592 <td class="link">
601 <td class="link">
593 <a href="/changeset/1d22e65f027e?style=gitweb">changeset</a> |
602 <a href="/changeset/1d22e65f027e?style=gitweb">changeset</a> |
594 <a href="/log/1d22e65f027e?style=gitweb">changelog</a> |
603 <a href="/log/1d22e65f027e?style=gitweb">changelog</a> |
595 <a href="/file/1d22e65f027e?style=gitweb">files</a>
604 <a href="/file/1d22e65f027e?style=gitweb">files</a>
596 </td>
605 </td>
597 </tr>
606 </tr>
598 <tr class="parity1">
607 <tr class="parity1">
599 <td class="age"><i>1970-01-01</i></td>
608 <td class="age"><i>1970-01-01</i></td>
600 <td><a class="list" href="/shortlog/a4f92ed23982?style=gitweb"><b>a4f92ed23982</b></a></td>
609 <td><a class="list" href="/shortlog/a4f92ed23982?style=gitweb"><b>a4f92ed23982</b></a></td>
601 <td class="">default</td>
610 <td class="">default</td>
602 <td class="link">
611 <td class="link">
603 <a href="/changeset/a4f92ed23982?style=gitweb">changeset</a> |
612 <a href="/changeset/a4f92ed23982?style=gitweb">changeset</a> |
604 <a href="/log/a4f92ed23982?style=gitweb">changelog</a> |
613 <a href="/log/a4f92ed23982?style=gitweb">changelog</a> |
605 <a href="/file/a4f92ed23982?style=gitweb">files</a>
614 <a href="/file/a4f92ed23982?style=gitweb">files</a>
606 </td>
615 </td>
607 </tr>
616 </tr>
608 <tr class="light">
617 <tr class="light">
609 <td colspan="4"><a class="list" href="#">...</a></td>
618 <td colspan="4"><a class="list" href="#">...</a></td>
610 </tr>
619 </tr>
611 </table>
620 </table>
612 <div class="page_footer">
621 <div class="page_footer">
613 <div class="page_footer_text">test</div>
622 <div class="page_footer_text">test</div>
614 <div class="rss_logo">
623 <div class="rss_logo">
615 <a href="/rss-log">RSS</a>
624 <a href="/rss-log">RSS</a>
616 <a href="/atom-log">Atom</a>
625 <a href="/atom-log">Atom</a>
617 </div>
626 </div>
618 <br />
627 <br />
619
628
620 </div>
629 </div>
621 </body>
630 </body>
622 </html>
631 </html>
623
632
624 200 Script output follows
633 200 Script output follows
625
634
626 <?xml version="1.0" encoding="ascii"?>
635 <?xml version="1.0" encoding="ascii"?>
627 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
636 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
628 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US" lang="en-US">
637 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US" lang="en-US">
629 <head>
638 <head>
630 <link rel="icon" href="/static/hgicon.png" type="image/png" />
639 <link rel="icon" href="/static/hgicon.png" type="image/png" />
631 <meta name="robots" content="index, nofollow"/>
640 <meta name="robots" content="index, nofollow"/>
632 <link rel="stylesheet" href="/static/style-gitweb.css" type="text/css" />
641 <link rel="stylesheet" href="/static/style-gitweb.css" type="text/css" />
633
642
634
643
635 <title>test: Graph</title>
644 <title>test: Graph</title>
636 <link rel="alternate" type="application/atom+xml"
645 <link rel="alternate" type="application/atom+xml"
637 href="/atom-log" title="Atom feed for test"/>
646 href="/atom-log" title="Atom feed for test"/>
638 <link rel="alternate" type="application/rss+xml"
647 <link rel="alternate" type="application/rss+xml"
639 href="/rss-log" title="RSS feed for test"/>
648 href="/rss-log" title="RSS feed for test"/>
640 <!--[if IE]><script type="text/javascript" src="/static/excanvas.js"></script><![endif]-->
649 <!--[if IE]><script type="text/javascript" src="/static/excanvas.js"></script><![endif]-->
641 </head>
650 </head>
642 <body>
651 <body>
643
652
644 <div class="page_header">
653 <div class="page_header">
645 <a href="http://mercurial.selenic.com/" title="Mercurial" style="float: right;">Mercurial</a><a href="/summary?style=gitweb">test</a> / graph
654 <a href="http://mercurial.selenic.com/" title="Mercurial" style="float: right;">Mercurial</a><a href="/summary?style=gitweb">test</a> / graph
646 </div>
655 </div>
647
656
648 <form action="/log">
657 <form action="/log">
649 <input type="hidden" name="style" value="gitweb" />
658 <input type="hidden" name="style" value="gitweb" />
650 <div class="search">
659 <div class="search">
651 <input type="text" name="rev" />
660 <input type="text" name="rev" />
652 </div>
661 </div>
653 </form>
662 </form>
654 <div class="page_nav">
663 <div class="page_nav">
655 <a href="/summary?style=gitweb">summary</a> |
664 <a href="/summary?style=gitweb">summary</a> |
656 <a href="/shortlog?style=gitweb">shortlog</a> |
665 <a href="/shortlog?style=gitweb">shortlog</a> |
657 <a href="/log/2?style=gitweb">changelog</a> |
666 <a href="/log/2?style=gitweb">changelog</a> |
658 graph |
667 graph |
659 <a href="/tags?style=gitweb">tags</a> |
668 <a href="/tags?style=gitweb">tags</a> |
660 <a href="/branches?style=gitweb">branches</a> |
669 <a href="/branches?style=gitweb">branches</a> |
661 <a href="/file/1d22e65f027e?style=gitweb">files</a>
670 <a href="/file/1d22e65f027e?style=gitweb">files</a>
662 <br/>
671 <br/>
663 <a href="/graph/2?style=gitweb&revcount=30">less</a>
672 <a href="/graph/2?style=gitweb&revcount=30">less</a>
664 <a href="/graph/2?style=gitweb&revcount=120">more</a>
673 <a href="/graph/2?style=gitweb&revcount=120">more</a>
665 | <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/>
674 | <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/>
666 </div>
675 </div>
667
676
668 <div class="title">&nbsp;</div>
677 <div class="title">&nbsp;</div>
669
678
670 <noscript>The revision graph only works with JavaScript-enabled browsers.</noscript>
679 <noscript>The revision graph only works with JavaScript-enabled browsers.</noscript>
671
680
672 <div id="wrapper">
681 <div id="wrapper">
673 <ul id="nodebgs"></ul>
682 <ul id="nodebgs"></ul>
674 <canvas id="graph" width="224" height="129"></canvas>
683 <canvas id="graph" width="224" height="129"></canvas>
675 <ul id="graphnodes"></ul>
684 <ul id="graphnodes"></ul>
676 </div>
685 </div>
677
686
678 <script type="text/javascript" src="/static/graph.js"></script>
687 <script type="text/javascript" src="/static/graph.js"></script>
679 <script>
688 <script>
680 <!-- hide script content
689 <!-- hide script content
681
690
682 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"]]];
691 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"]]];
683 var graph = new Graph();
692 var graph = new Graph();
684 graph.scale(39);
693 graph.scale(39);
685
694
686 graph.edge = function(x0, y0, x1, y1, color) {
695 graph.edge = function(x0, y0, x1, y1, color) {
687
696
688 this.setColor(color, 0.0, 0.65);
697 this.setColor(color, 0.0, 0.65);
689 this.ctx.beginPath();
698 this.ctx.beginPath();
690 this.ctx.moveTo(x0, y0);
699 this.ctx.moveTo(x0, y0);
691 this.ctx.lineTo(x1, y1);
700 this.ctx.lineTo(x1, y1);
692 this.ctx.stroke();
701 this.ctx.stroke();
693
702
694 }
703 }
695
704
696 var revlink = '<li style="_STYLE"><span class="desc">';
705 var revlink = '<li style="_STYLE"><span class="desc">';
697 revlink += '<a class="list" href="/rev/_NODEID?style=gitweb" title="_NODEID"><b>_DESC</b></a>';
706 revlink += '<a class="list" href="/rev/_NODEID?style=gitweb" title="_NODEID"><b>_DESC</b></a>';
698 revlink += '</span> _TAGS';
707 revlink += '</span> _TAGS';
699 revlink += '<span class="info">_DATE ago, by _USER</span></li>';
708 revlink += '<span class="info">_DATE ago, by _USER</span></li>';
700
709
701 graph.vertex = function(x, y, color, parity, cur) {
710 graph.vertex = function(x, y, color, parity, cur) {
702
711
703 this.ctx.beginPath();
712 this.ctx.beginPath();
704 color = this.setColor(color, 0.25, 0.75);
713 color = this.setColor(color, 0.25, 0.75);
705 this.ctx.arc(x, y, radius, 0, Math.PI * 2, true);
714 this.ctx.arc(x, y, radius, 0, Math.PI * 2, true);
706 this.ctx.fill();
715 this.ctx.fill();
707
716
708 var bg = '<li class="bg parity' + parity + '"></li>';
717 var bg = '<li class="bg parity' + parity + '"></li>';
709 var left = (this.columns + 1) * this.bg_height;
718 var left = (this.columns + 1) * this.bg_height;
710 var nstyle = 'padding-left: ' + left + 'px;';
719 var nstyle = 'padding-left: ' + left + 'px;';
711 var item = revlink.replace(/_STYLE/, nstyle);
720 var item = revlink.replace(/_STYLE/, nstyle);
712 item = item.replace(/_PARITY/, 'parity' + parity);
721 item = item.replace(/_PARITY/, 'parity' + parity);
713 item = item.replace(/_NODEID/, cur[0]);
722 item = item.replace(/_NODEID/, cur[0]);
714 item = item.replace(/_NODEID/, cur[0]);
723 item = item.replace(/_NODEID/, cur[0]);
715 item = item.replace(/_DESC/, cur[3]);
724 item = item.replace(/_DESC/, cur[3]);
716 item = item.replace(/_USER/, cur[4]);
725 item = item.replace(/_USER/, cur[4]);
717 item = item.replace(/_DATE/, cur[5]);
726 item = item.replace(/_DATE/, cur[5]);
718
727
719 var tagspan = '';
728 var tagspan = '';
720 if (cur[7].length || (cur[6][0] != 'default' || cur[6][1])) {
729 if (cur[7].length || (cur[6][0] != 'default' || cur[6][1])) {
721 tagspan = '<span class="logtags">';
730 tagspan = '<span class="logtags">';
722 if (cur[6][1]) {
731 if (cur[6][1]) {
723 tagspan += '<span class="branchtag" title="' + cur[6][0] + '">';
732 tagspan += '<span class="branchtag" title="' + cur[6][0] + '">';
724 tagspan += cur[6][0] + '</span> ';
733 tagspan += cur[6][0] + '</span> ';
725 } else if (!cur[6][1] && cur[6][0] != 'default') {
734 } else if (!cur[6][1] && cur[6][0] != 'default') {
726 tagspan += '<span class="inbranchtag" title="' + cur[6][0] + '">';
735 tagspan += '<span class="inbranchtag" title="' + cur[6][0] + '">';
727 tagspan += cur[6][0] + '</span> ';
736 tagspan += cur[6][0] + '</span> ';
728 }
737 }
729 if (cur[7].length) {
738 if (cur[7].length) {
730 for (var t in cur[7]) {
739 for (var t in cur[7]) {
731 var tag = cur[7][t];
740 var tag = cur[7][t];
732 tagspan += '<span class="tagtag">' + tag + '</span> ';
741 tagspan += '<span class="tagtag">' + tag + '</span> ';
733 }
742 }
734 }
743 }
735 tagspan += '</span>';
744 tagspan += '</span>';
736 }
745 }
737
746
738 item = item.replace(/_TAGS/, tagspan);
747 item = item.replace(/_TAGS/, tagspan);
739 return [bg, item];
748 return [bg, item];
740
749
741 }
750 }
742
751
743 graph.render(data);
752 graph.render(data);
744
753
745 // stop hiding script -->
754 // stop hiding script -->
746 </script>
755 </script>
747
756
748 <div class="page_nav">
757 <div class="page_nav">
749 <a href="/graph/2?style=gitweb&revcount=30">less</a>
758 <a href="/graph/2?style=gitweb&revcount=30">less</a>
750 <a href="/graph/2?style=gitweb&revcount=120">more</a>
759 <a href="/graph/2?style=gitweb&revcount=120">more</a>
751 | <a href="/graph/2ef0ac749a14?style=gitweb">(0)</a> <a href="/graph/2ef0ac749a14?style=gitweb">-2</a> <a href="/graph/tip?style=gitweb">tip</a>
760 | <a href="/graph/2ef0ac749a14?style=gitweb">(0)</a> <a href="/graph/2ef0ac749a14?style=gitweb">-2</a> <a href="/graph/tip?style=gitweb">tip</a>
752 </div>
761 </div>
753
762
754 <div class="page_footer">
763 <div class="page_footer">
755 <div class="page_footer_text">test</div>
764 <div class="page_footer_text">test</div>
756 <div class="rss_logo">
765 <div class="rss_logo">
757 <a href="/rss-log">RSS</a>
766 <a href="/rss-log">RSS</a>
758 <a href="/atom-log">Atom</a>
767 <a href="/atom-log">Atom</a>
759 </div>
768 </div>
760 <br />
769 <br />
761
770
762 </div>
771 </div>
763 </body>
772 </body>
764 </html>
773 </html>
765
774
766 % capabilities
775 % capabilities
767 200 Script output follows
776 200 Script output follows
768
777
769 lookup changegroupsubset branchmap unbundle=HG10GZ,HG10BZ,HG10UN% heads
778 lookup changegroupsubset branchmap unbundle=HG10GZ,HG10BZ,HG10UN% heads
770 200 Script output follows
779 200 Script output follows
771
780
772 1d22e65f027e5a0609357e7d8e7508cd2ba5d2fe
781 1d22e65f027e5a0609357e7d8e7508cd2ba5d2fe
773 % lookup
782 % lookup
774 200 Script output follows
783 200 Script output follows
775
784
776 0 'key'
785 0 'key'
777 % branches
786 % branches
778 200 Script output follows
787 200 Script output follows
779
788
780 1d22e65f027e5a0609357e7d8e7508cd2ba5d2fe 2ef0ac749a14e4f57a5a822464a0902c6f7f448f 0000000000000000000000000000000000000000 0000000000000000000000000000000000000000
789 1d22e65f027e5a0609357e7d8e7508cd2ba5d2fe 2ef0ac749a14e4f57a5a822464a0902c6f7f448f 0000000000000000000000000000000000000000 0000000000000000000000000000000000000000
781 % changegroup
790 % changegroup
782 200 Script output follows
791 200 Script output follows
783
792
784 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
793 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
785 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~\
794 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~\
786 \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
795 \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
787 \xb0\x90\x92\x88\xb9\x14"\x068\xc2\x1e@\x00\xbb\x8a)\xd3\'\x859
796 \xb0\x90\x92\x88\xb9\x14"\x068\xc2\x1e@\x00\xbb\x8a)\xd3\'\x859
788 \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
797 \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
789 % stream_out
798 % stream_out
790 200 Script output follows
799 200 Script output follows
791
800
792 1
801 1
793 % failing unbundle, requires POST request
802 % failing unbundle, requires POST request
794 405 push requires POST request
803 405 push requires POST request
795
804
796 0
805 0
797 push requires POST request
806 push requires POST request
798 % Static files
807 % Static files
799 200 Script output follows
808 200 Script output follows
800
809
801 a { text-decoration:none; }
810 a { text-decoration:none; }
802 .age { white-space:nowrap; }
811 .age { white-space:nowrap; }
803 .date { white-space:nowrap; }
812 .date { white-space:nowrap; }
804 .indexlinks { white-space:nowrap; }
813 .indexlinks { white-space:nowrap; }
805 .parity0 { background-color: #ddd; }
814 .parity0 { background-color: #ddd; }
806 .parity1 { background-color: #eee; }
815 .parity1 { background-color: #eee; }
807 .lineno { width: 60px; color: #aaa; font-size: smaller;
816 .lineno { width: 60px; color: #aaa; font-size: smaller;
808 text-align: right; }
817 text-align: right; }
809 .plusline { color: green; }
818 .plusline { color: green; }
810 .minusline { color: red; }
819 .minusline { color: red; }
811 .atline { color: purple; }
820 .atline { color: purple; }
812 .annotate { font-size: smaller; text-align: right; padding-right: 1em; }
821 .annotate { font-size: smaller; text-align: right; padding-right: 1em; }
813 .buttons a {
822 .buttons a {
814 background-color: #666;
823 background-color: #666;
815 padding: 2pt;
824 padding: 2pt;
816 color: white;
825 color: white;
817 font-family: sans;
826 font-family: sans;
818 font-weight: bold;
827 font-weight: bold;
819 }
828 }
820 .navigate a {
829 .navigate a {
821 background-color: #ccc;
830 background-color: #ccc;
822 padding: 2pt;
831 padding: 2pt;
823 font-family: sans;
832 font-family: sans;
824 color: black;
833 color: black;
825 }
834 }
826
835
827 .metatag {
836 .metatag {
828 background-color: #888;
837 background-color: #888;
829 color: white;
838 color: white;
830 text-align: right;
839 text-align: right;
831 }
840 }
832
841
833 /* Common */
842 /* Common */
834 pre { margin: 0; }
843 pre { margin: 0; }
835
844
836 .logo {
845 .logo {
837 float: right;
846 float: right;
838 clear: right;
847 clear: right;
839 }
848 }
840
849
841 /* Changelog/Filelog entries */
850 /* Changelog/Filelog entries */
842 .logEntry { width: 100%; }
851 .logEntry { width: 100%; }
843 .logEntry .age { width: 15%; }
852 .logEntry .age { width: 15%; }
844 .logEntry th { font-weight: normal; text-align: right; vertical-align: top; }
853 .logEntry th { font-weight: normal; text-align: right; vertical-align: top; }
845 .logEntry th.age, .logEntry th.firstline { font-weight: bold; }
854 .logEntry th.age, .logEntry th.firstline { font-weight: bold; }
846 .logEntry th.firstline { text-align: left; width: inherit; }
855 .logEntry th.firstline { text-align: left; width: inherit; }
847
856
848 /* Shortlog entries */
857 /* Shortlog entries */
849 .slogEntry { width: 100%; }
858 .slogEntry { width: 100%; }
850 .slogEntry .age { width: 8em; }
859 .slogEntry .age { width: 8em; }
851 .slogEntry td { font-weight: normal; text-align: left; vertical-align: top; }
860 .slogEntry td { font-weight: normal; text-align: left; vertical-align: top; }
852 .slogEntry td.author { width: 15em; }
861 .slogEntry td.author { width: 15em; }
853
862
854 /* Tag entries */
863 /* Tag entries */
855 #tagEntries { list-style: none; margin: 0; padding: 0; }
864 #tagEntries { list-style: none; margin: 0; padding: 0; }
856 #tagEntries .tagEntry { list-style: none; margin: 0; padding: 0; }
865 #tagEntries .tagEntry { list-style: none; margin: 0; padding: 0; }
857
866
858 /* Changeset entry */
867 /* Changeset entry */
859 #changesetEntry { }
868 #changesetEntry { }
860 #changesetEntry th { font-weight: normal; background-color: #888; color: #fff; text-align: right; }
869 #changesetEntry th { font-weight: normal; background-color: #888; color: #fff; text-align: right; }
861 #changesetEntry th.files, #changesetEntry th.description { vertical-align: top; }
870 #changesetEntry th.files, #changesetEntry th.description { vertical-align: top; }
862
871
863 /* File diff view */
872 /* File diff view */
864 #filediffEntry { }
873 #filediffEntry { }
865 #filediffEntry th { font-weight: normal; background-color: #888; color: #fff; text-align: right; }
874 #filediffEntry th { font-weight: normal; background-color: #888; color: #fff; text-align: right; }
866
875
867 /* Graph */
876 /* Graph */
868 div#wrapper {
877 div#wrapper {
869 position: relative;
878 position: relative;
870 margin: 0;
879 margin: 0;
871 padding: 0;
880 padding: 0;
872 }
881 }
873
882
874 canvas {
883 canvas {
875 position: absolute;
884 position: absolute;
876 z-index: 5;
885 z-index: 5;
877 top: -0.6em;
886 top: -0.6em;
878 margin: 0;
887 margin: 0;
879 }
888 }
880
889
881 ul#nodebgs {
890 ul#nodebgs {
882 list-style: none inside none;
891 list-style: none inside none;
883 padding: 0;
892 padding: 0;
884 margin: 0;
893 margin: 0;
885 top: -0.7em;
894 top: -0.7em;
886 }
895 }
887
896
888 ul#graphnodes li, ul#nodebgs li {
897 ul#graphnodes li, ul#nodebgs li {
889 height: 39px;
898 height: 39px;
890 }
899 }
891
900
892 ul#graphnodes {
901 ul#graphnodes {
893 position: absolute;
902 position: absolute;
894 z-index: 10;
903 z-index: 10;
895 top: -0.85em;
904 top: -0.85em;
896 list-style: none inside none;
905 list-style: none inside none;
897 padding: 0;
906 padding: 0;
898 }
907 }
899
908
900 ul#graphnodes li .info {
909 ul#graphnodes li .info {
901 display: block;
910 display: block;
902 font-size: 70%;
911 font-size: 70%;
903 position: relative;
912 position: relative;
904 top: -1px;
913 top: -1px;
905 }
914 }
906 % ERRORS ENCOUNTERED
915 % ERRORS ENCOUNTERED
@@ -1,348 +1,366 b''
1 200 Script output follows
1 200 Script output follows
2
2
3 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
3 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
4 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
4 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
5 <head>
5 <head>
6 <link rel="icon" href="/static/hgicon.png" type="image/png" />
6 <link rel="icon" href="/static/hgicon.png" type="image/png" />
7 <meta name="robots" content="index, nofollow" />
7 <meta name="robots" content="index, nofollow" />
8 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
8 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
9
9
10 <title>test: log</title>
10 <title>test: log</title>
11 <link rel="alternate" type="application/atom+xml"
11 <link rel="alternate" type="application/atom+xml"
12 href="/atom-log" title="Atom feed for test" />
12 href="/atom-log" title="Atom feed for test" />
13 <link rel="alternate" type="application/rss+xml"
13 <link rel="alternate" type="application/rss+xml"
14 href="/rss-log" title="RSS feed for test" />
14 href="/rss-log" title="RSS feed for test" />
15 </head>
15 </head>
16 <body>
16 <body>
17
17
18 <div class="container">
18 <div class="container">
19 <div class="menu">
19 <div class="menu">
20 <div class="logo">
20 <div class="logo">
21 <a href="http://mercurial.selenic.com/">
21 <a href="http://mercurial.selenic.com/">
22 <img src="/static/hglogo.png" alt="mercurial" /></a>
22 <img src="/static/hglogo.png" alt="mercurial" /></a>
23 </div>
23 </div>
24 <ul>
24 <ul>
25 <li class="active">log</li>
25 <li class="active">log</li>
26 <li><a href="/graph/000000000000">graph</a></li>
26 <li><a href="/graph/000000000000">graph</a></li>
27 <li><a href="/tags">tags</a></li>
27 <li><a href="/tags">tags</a></li>
28 <li><a href="/branches">branches</a></li>
28 <li><a href="/branches">branches</a></li>
29 </ul>
29 </ul>
30 <ul>
30 <ul>
31 <li><a href="/rev/000000000000">changeset</a></li>
31 <li><a href="/rev/000000000000">changeset</a></li>
32 <li><a href="/file/000000000000">browse</a></li>
32 <li><a href="/file/000000000000">browse</a></li>
33 </ul>
33 </ul>
34 <ul>
34 <ul>
35
35
36 </ul>
36 </ul>
37 </div>
37 </div>
38
38
39 <div class="main">
39 <div class="main">
40 <h2><a href="/">test</a></h2>
40 <h2><a href="/">test</a></h2>
41 <h3>log</h3>
41 <h3>log</h3>
42
42
43 <form class="search" action="/log">
43 <form class="search" action="/log">
44
44
45 <p><input name="rev" id="search1" type="text" size="30" /></p>
45 <p><input name="rev" id="search1" type="text" size="30" /></p>
46 <div id="hint">find changesets by author, revision,
46 <div id="hint">find changesets by author, revision,
47 files, or words in the commit message</div>
47 files, or words in the commit message</div>
48 </form>
48 </form>
49
49
50 <div class="navigate">rev -1: <a href="/shortlog/000000000000">(0)</a> <a href="/shortlog/tip">tip</a> </div>
50 <div class="navigate">
51 <a href="/shortlog/-1?revcount=30">less</a>
52 <a href="/shortlog/-1?revcount=120">more</a>
53 | rev -1: <a href="/shortlog/000000000000">(0)</a> <a href="/shortlog/tip">tip</a>
54 </div>
51
55
52 <table class="bigtable">
56 <table class="bigtable">
53 <tr>
57 <tr>
54 <th class="age">age</th>
58 <th class="age">age</th>
55 <th class="author">author</th>
59 <th class="author">author</th>
56 <th class="description">description</th>
60 <th class="description">description</th>
57 </tr>
61 </tr>
58
62
59 </table>
63 </table>
60
64
61 <div class="navigate">rev -1: <a href="/shortlog/000000000000">(0)</a> <a href="/shortlog/tip">tip</a> </div>
65 <div class="navigate">
66 <a href="/shortlog/-1?revcount=30">less</a>
67 <a href="/shortlog/-1?revcount=120">more</a>
68 | rev -1: <a href="/shortlog/000000000000">(0)</a> <a href="/shortlog/tip">tip</a>
69 </div>
70
62 </div>
71 </div>
63 </div>
72 </div>
64
73
65
74
66
75
67 </body>
76 </body>
68 </html>
77 </html>
69
78
70 200 Script output follows
79 200 Script output follows
71
80
72 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
81 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
73 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
82 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
74 <head>
83 <head>
75 <link rel="icon" href="/static/hgicon.png" type="image/png" />
84 <link rel="icon" href="/static/hgicon.png" type="image/png" />
76 <meta name="robots" content="index, nofollow" />
85 <meta name="robots" content="index, nofollow" />
77 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
86 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
78
87
79 <title>test: log</title>
88 <title>test: log</title>
80 <link rel="alternate" type="application/atom+xml"
89 <link rel="alternate" type="application/atom+xml"
81 href="/atom-log" title="Atom feed for test" />
90 href="/atom-log" title="Atom feed for test" />
82 <link rel="alternate" type="application/rss+xml"
91 <link rel="alternate" type="application/rss+xml"
83 href="/rss-log" title="RSS feed for test" />
92 href="/rss-log" title="RSS feed for test" />
84 </head>
93 </head>
85 <body>
94 <body>
86
95
87 <div class="container">
96 <div class="container">
88 <div class="menu">
97 <div class="menu">
89 <div class="logo">
98 <div class="logo">
90 <a href="http://mercurial.selenic.com/">
99 <a href="http://mercurial.selenic.com/">
91 <img src="/static/hglogo.png" alt="mercurial" /></a>
100 <img src="/static/hglogo.png" alt="mercurial" /></a>
92 </div>
101 </div>
93 <ul>
102 <ul>
94 <li class="active">log</li>
103 <li class="active">log</li>
95 <li><a href="/graph/000000000000">graph</a></li>
104 <li><a href="/graph/000000000000">graph</a></li>
96 <li><a href="/tags">tags</a></li>
105 <li><a href="/tags">tags</a></li>
97 <li><a href="/branches">branches</a></li>
106 <li><a href="/branches">branches</a></li>
98 </ul>
107 </ul>
99 <ul>
108 <ul>
100 <li><a href="/rev/000000000000">changeset</a></li>
109 <li><a href="/rev/000000000000">changeset</a></li>
101 <li><a href="/file/000000000000">browse</a></li>
110 <li><a href="/file/000000000000">browse</a></li>
102 </ul>
111 </ul>
103 <ul>
112 <ul>
104
113
105 </ul>
114 </ul>
106 </div>
115 </div>
107
116
108 <div class="main">
117 <div class="main">
109 <h2><a href="/">test</a></h2>
118 <h2><a href="/">test</a></h2>
110 <h3>log</h3>
119 <h3>log</h3>
111
120
112 <form class="search" action="/log">
121 <form class="search" action="/log">
113
122
114 <p><input name="rev" id="search1" type="text" size="30" /></p>
123 <p><input name="rev" id="search1" type="text" size="30" /></p>
115 <div id="hint">find changesets by author, revision,
124 <div id="hint">find changesets by author, revision,
116 files, or words in the commit message</div>
125 files, or words in the commit message</div>
117 </form>
126 </form>
118
127
119 <div class="navigate">rev -1: <a href="/shortlog/000000000000">(0)</a> <a href="/shortlog/tip">tip</a> </div>
128 <div class="navigate">
129 <a href="/shortlog/-1?revcount=5">less</a>
130 <a href="/shortlog/-1?revcount=20">more</a>
131 | rev -1: <a href="/shortlog/000000000000">(0)</a> <a href="/shortlog/tip">tip</a>
132 </div>
120
133
121 <table class="bigtable">
134 <table class="bigtable">
122 <tr>
135 <tr>
123 <th class="age">age</th>
136 <th class="age">age</th>
124 <th class="author">author</th>
137 <th class="author">author</th>
125 <th class="description">description</th>
138 <th class="description">description</th>
126 </tr>
139 </tr>
127
140
128 </table>
141 </table>
129
142
130 <div class="navigate">rev -1: <a href="/shortlog/000000000000">(0)</a> <a href="/shortlog/tip">tip</a> </div>
143 <div class="navigate">
144 <a href="/shortlog/-1?revcount=5">less</a>
145 <a href="/shortlog/-1?revcount=20">more</a>
146 | rev -1: <a href="/shortlog/000000000000">(0)</a> <a href="/shortlog/tip">tip</a>
147 </div>
148
131 </div>
149 </div>
132 </div>
150 </div>
133
151
134
152
135
153
136 </body>
154 </body>
137 </html>
155 </html>
138
156
139 200 Script output follows
157 200 Script output follows
140
158
141 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
159 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
142 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
160 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
143 <head>
161 <head>
144 <link rel="icon" href="/static/hgicon.png" type="image/png" />
162 <link rel="icon" href="/static/hgicon.png" type="image/png" />
145 <meta name="robots" content="index, nofollow" />
163 <meta name="robots" content="index, nofollow" />
146 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
164 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
147
165
148 <title>test: revision graph</title>
166 <title>test: revision graph</title>
149 <link rel="alternate" type="application/atom+xml"
167 <link rel="alternate" type="application/atom+xml"
150 href="/atom-log" title="Atom feed for test: log" />
168 href="/atom-log" title="Atom feed for test: log" />
151 <link rel="alternate" type="application/rss+xml"
169 <link rel="alternate" type="application/rss+xml"
152 href="/rss-log" title="RSS feed for test: log" />
170 href="/rss-log" title="RSS feed for test: log" />
153 <!--[if IE]><script type="text/javascript" src="/static/excanvas.js"></script><![endif]-->
171 <!--[if IE]><script type="text/javascript" src="/static/excanvas.js"></script><![endif]-->
154 </head>
172 </head>
155 <body>
173 <body>
156
174
157 <div class="container">
175 <div class="container">
158 <div class="menu">
176 <div class="menu">
159 <div class="logo">
177 <div class="logo">
160 <a href="http://mercurial.selenic.com/">
178 <a href="http://mercurial.selenic.com/">
161 <img src="/static/hglogo.png" alt="mercurial" /></a>
179 <img src="/static/hglogo.png" alt="mercurial" /></a>
162 </div>
180 </div>
163 <ul>
181 <ul>
164 <li><a href="/shortlog/000000000000">log</a></li>
182 <li><a href="/shortlog/000000000000">log</a></li>
165 <li class="active">graph</li>
183 <li class="active">graph</li>
166 <li><a href="/tags">tags</a></li>
184 <li><a href="/tags">tags</a></li>
167 <li><a href="/branches">branches</a></li>
185 <li><a href="/branches">branches</a></li>
168 </ul>
186 </ul>
169 <ul>
187 <ul>
170 <li><a href="/rev/000000000000">changeset</a></li>
188 <li><a href="/rev/000000000000">changeset</a></li>
171 <li><a href="/file/000000000000">browse</a></li>
189 <li><a href="/file/000000000000">browse</a></li>
172 </ul>
190 </ul>
173 </div>
191 </div>
174
192
175 <div class="main">
193 <div class="main">
176 <h2><a href="/">test</a></h2>
194 <h2><a href="/">test</a></h2>
177 <h3>graph</h3>
195 <h3>graph</h3>
178
196
179 <form class="search" action="/log">
197 <form class="search" action="/log">
180
198
181 <p><input name="rev" id="search1" type="text" size="30" /></p>
199 <p><input name="rev" id="search1" type="text" size="30" /></p>
182 <div id="hint">find changesets by author, revision,
200 <div id="hint">find changesets by author, revision,
183 files, or words in the commit message</div>
201 files, or words in the commit message</div>
184 </form>
202 </form>
185
203
186 <div class="navigate">
204 <div class="navigate">
187 <a href="/graph/-1?revcount=30">less</a>
205 <a href="/graph/-1?revcount=30">less</a>
188 <a href="/graph/-1?revcount=120">more</a>
206 <a href="/graph/-1?revcount=120">more</a>
189 | rev -1: <a href="/graph/000000000000">(0)</a> <a href="/graph/tip">tip</a>
207 | rev -1: <a href="/graph/000000000000">(0)</a> <a href="/graph/tip">tip</a>
190 </div>
208 </div>
191
209
192 <noscript><p>The revision graph only works with JavaScript-enabled browsers.</p></noscript>
210 <noscript><p>The revision graph only works with JavaScript-enabled browsers.</p></noscript>
193
211
194 <div id="wrapper">
212 <div id="wrapper">
195 <ul id="nodebgs"></ul>
213 <ul id="nodebgs"></ul>
196 <canvas id="graph" width="224" height="12"></canvas>
214 <canvas id="graph" width="224" height="12"></canvas>
197 <ul id="graphnodes"></ul>
215 <ul id="graphnodes"></ul>
198 </div>
216 </div>
199
217
200 <script type="text/javascript" src="/static/graph.js"></script>
218 <script type="text/javascript" src="/static/graph.js"></script>
201 <script type="text/javascript">
219 <script type="text/javascript">
202 <!-- hide script content
220 <!-- hide script content
203
221
204 var data = [];
222 var data = [];
205 var graph = new Graph();
223 var graph = new Graph();
206 graph.scale(39);
224 graph.scale(39);
207
225
208 graph.edge = function(x0, y0, x1, y1, color) {
226 graph.edge = function(x0, y0, x1, y1, color) {
209
227
210 this.setColor(color, 0.0, 0.65);
228 this.setColor(color, 0.0, 0.65);
211 this.ctx.beginPath();
229 this.ctx.beginPath();
212 this.ctx.moveTo(x0, y0);
230 this.ctx.moveTo(x0, y0);
213 this.ctx.lineTo(x1, y1);
231 this.ctx.lineTo(x1, y1);
214 this.ctx.stroke();
232 this.ctx.stroke();
215
233
216 }
234 }
217
235
218 var revlink = '<li style="_STYLE"><span class="desc">';
236 var revlink = '<li style="_STYLE"><span class="desc">';
219 revlink += '<a href="/rev/_NODEID" title="_NODEID">_DESC</a>';
237 revlink += '<a href="/rev/_NODEID" title="_NODEID">_DESC</a>';
220 revlink += '</span>_TAGS<span class="info">_DATE ago, by _USER</span></li>';
238 revlink += '</span>_TAGS<span class="info">_DATE ago, by _USER</span></li>';
221
239
222 graph.vertex = function(x, y, color, parity, cur) {
240 graph.vertex = function(x, y, color, parity, cur) {
223
241
224 this.ctx.beginPath();
242 this.ctx.beginPath();
225 color = this.setColor(color, 0.25, 0.75);
243 color = this.setColor(color, 0.25, 0.75);
226 this.ctx.arc(x, y, radius, 0, Math.PI * 2, true);
244 this.ctx.arc(x, y, radius, 0, Math.PI * 2, true);
227 this.ctx.fill();
245 this.ctx.fill();
228
246
229 var bg = '<li class="bg parity' + parity + '"></li>';
247 var bg = '<li class="bg parity' + parity + '"></li>';
230 var left = (this.columns + 1) * this.bg_height;
248 var left = (this.columns + 1) * this.bg_height;
231 var nstyle = 'padding-left: ' + left + 'px;';
249 var nstyle = 'padding-left: ' + left + 'px;';
232 var item = revlink.replace(/_STYLE/, nstyle);
250 var item = revlink.replace(/_STYLE/, nstyle);
233 item = item.replace(/_PARITY/, 'parity' + parity);
251 item = item.replace(/_PARITY/, 'parity' + parity);
234 item = item.replace(/_NODEID/, cur[0]);
252 item = item.replace(/_NODEID/, cur[0]);
235 item = item.replace(/_NODEID/, cur[0]);
253 item = item.replace(/_NODEID/, cur[0]);
236 item = item.replace(/_DESC/, cur[3]);
254 item = item.replace(/_DESC/, cur[3]);
237 item = item.replace(/_USER/, cur[4]);
255 item = item.replace(/_USER/, cur[4]);
238 item = item.replace(/_DATE/, cur[5]);
256 item = item.replace(/_DATE/, cur[5]);
239
257
240 var tagspan = '';
258 var tagspan = '';
241 if (cur[7].length || (cur[6][0] != 'default' || cur[6][1])) {
259 if (cur[7].length || (cur[6][0] != 'default' || cur[6][1])) {
242 tagspan = '<span class="logtags">';
260 tagspan = '<span class="logtags">';
243 if (cur[6][1]) {
261 if (cur[6][1]) {
244 tagspan += '<span class="branchhead" title="' + cur[6][0] + '">';
262 tagspan += '<span class="branchhead" title="' + cur[6][0] + '">';
245 tagspan += cur[6][0] + '</span> ';
263 tagspan += cur[6][0] + '</span> ';
246 } else if (!cur[6][1] && cur[6][0] != 'default') {
264 } else if (!cur[6][1] && cur[6][0] != 'default') {
247 tagspan += '<span class="branchname" title="' + cur[6][0] + '">';
265 tagspan += '<span class="branchname" title="' + cur[6][0] + '">';
248 tagspan += cur[6][0] + '</span> ';
266 tagspan += cur[6][0] + '</span> ';
249 }
267 }
250 if (cur[7].length) {
268 if (cur[7].length) {
251 for (var t in cur[7]) {
269 for (var t in cur[7]) {
252 var tag = cur[7][t];
270 var tag = cur[7][t];
253 tagspan += '<span class="tag">' + tag + '</span> ';
271 tagspan += '<span class="tag">' + tag + '</span> ';
254 }
272 }
255 }
273 }
256 tagspan += '</span>';
274 tagspan += '</span>';
257 }
275 }
258
276
259 item = item.replace(/_TAGS/, tagspan);
277 item = item.replace(/_TAGS/, tagspan);
260 return [bg, item];
278 return [bg, item];
261
279
262 }
280 }
263
281
264 graph.render(data);
282 graph.render(data);
265
283
266 // stop hiding script -->
284 // stop hiding script -->
267 </script>
285 </script>
268
286
269 <div class="navigate">
287 <div class="navigate">
270 <a href="/graph/-1?revcount=30">less</a>
288 <a href="/graph/-1?revcount=30">less</a>
271 <a href="/graph/-1?revcount=120">more</a>
289 <a href="/graph/-1?revcount=120">more</a>
272 | rev -1: <a href="/graph/000000000000">(0)</a> <a href="/graph/tip">tip</a>
290 | rev -1: <a href="/graph/000000000000">(0)</a> <a href="/graph/tip">tip</a>
273 </div>
291 </div>
274
292
275 </div>
293 </div>
276 </div>
294 </div>
277
295
278
296
279
297
280 </body>
298 </body>
281 </html>
299 </html>
282
300
283 200 Script output follows
301 200 Script output follows
284
302
285 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
303 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
286 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
304 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
287 <head>
305 <head>
288 <link rel="icon" href="/static/hgicon.png" type="image/png" />
306 <link rel="icon" href="/static/hgicon.png" type="image/png" />
289 <meta name="robots" content="index, nofollow" />
307 <meta name="robots" content="index, nofollow" />
290 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
308 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
291
309
292 <title>test: 000000000000 /</title>
310 <title>test: 000000000000 /</title>
293 </head>
311 </head>
294 <body>
312 <body>
295
313
296 <div class="container">
314 <div class="container">
297 <div class="menu">
315 <div class="menu">
298 <div class="logo">
316 <div class="logo">
299 <a href="http://mercurial.selenic.com/">
317 <a href="http://mercurial.selenic.com/">
300 <img src="/static/hglogo.png" alt="mercurial" /></a>
318 <img src="/static/hglogo.png" alt="mercurial" /></a>
301 </div>
319 </div>
302 <ul>
320 <ul>
303 <li><a href="/shortlog/000000000000">log</a></li>
321 <li><a href="/shortlog/000000000000">log</a></li>
304 <li><a href="/graph/000000000000">graph</a></li>
322 <li><a href="/graph/000000000000">graph</a></li>
305 <li><a href="/tags">tags</a></li>
323 <li><a href="/tags">tags</a></li>
306 <li><a href="/branches">branches</a></li>
324 <li><a href="/branches">branches</a></li>
307 </ul>
325 </ul>
308 <ul>
326 <ul>
309 <li><a href="/rev/000000000000">changeset</a></li>
327 <li><a href="/rev/000000000000">changeset</a></li>
310 <li class="active">browse</li>
328 <li class="active">browse</li>
311 </ul>
329 </ul>
312 <ul>
330 <ul>
313
331
314 </ul>
332 </ul>
315 </div>
333 </div>
316
334
317 <div class="main">
335 <div class="main">
318 <h2><a href="/">test</a></h2>
336 <h2><a href="/">test</a></h2>
319 <h3>directory / @ -1:000000000000 <span class="tag">tip</span> </h3>
337 <h3>directory / @ -1:000000000000 <span class="tag">tip</span> </h3>
320
338
321 <form class="search" action="/log">
339 <form class="search" action="/log">
322
340
323 <p><input name="rev" id="search1" type="text" size="30" /></p>
341 <p><input name="rev" id="search1" type="text" size="30" /></p>
324 <div id="hint">find changesets by author, revision,
342 <div id="hint">find changesets by author, revision,
325 files, or words in the commit message</div>
343 files, or words in the commit message</div>
326 </form>
344 </form>
327
345
328 <table class="bigtable">
346 <table class="bigtable">
329 <tr>
347 <tr>
330 <th class="name">name</th>
348 <th class="name">name</th>
331 <th class="size">size</th>
349 <th class="size">size</th>
332 <th class="permissions">permissions</th>
350 <th class="permissions">permissions</th>
333 </tr>
351 </tr>
334 <tr class="fileline parity0">
352 <tr class="fileline parity0">
335 <td class="name"><a href="/file/000000000000/">[up]</a></td>
353 <td class="name"><a href="/file/000000000000/">[up]</a></td>
336 <td class="size"></td>
354 <td class="size"></td>
337 <td class="permissions">drwxr-xr-x</td>
355 <td class="permissions">drwxr-xr-x</td>
338 </tr>
356 </tr>
339
357
340
358
341 </table>
359 </table>
342 </div>
360 </div>
343 </div>
361 </div>
344
362
345
363
346 </body>
364 </body>
347 </html>
365 </html>
348
366
@@ -1,569 +1,605 b''
1 adding b
1 adding b
2 adding a
2 adding a
3 adding a
3 adding a
4 changeset: 6:38d962e6234d
4 changeset: 6:38d962e6234d
5 tag: tip
5 tag: tip
6 user: test
6 user: test
7 date: Thu Jan 01 00:00:00 1970 +0000
7 date: Thu Jan 01 00:00:00 1970 +0000
8 summary: change c
8 summary: change c
9
9
10 diff -r a3b6a9e4507e -r 38d962e6234d c
10 diff -r a3b6a9e4507e -r 38d962e6234d c
11 --- a/c Thu Jan 01 00:00:00 1970 +0000
11 --- a/c Thu Jan 01 00:00:00 1970 +0000
12 +++ b/c Thu Jan 01 00:00:00 1970 +0000
12 +++ b/c Thu Jan 01 00:00:00 1970 +0000
13 @@ -1,1 +1,2 @@
13 @@ -1,1 +1,2 @@
14 b
14 b
15 +c
15 +c
16
16
17 changeset: 5:a3b6a9e4507e
17 changeset: 5:a3b6a9e4507e
18 user: test
18 user: test
19 date: Thu Jan 01 00:00:00 1970 +0000
19 date: Thu Jan 01 00:00:00 1970 +0000
20 summary: mv b
20 summary: mv b
21
21
22 diff -r 52e848cdcd88 -r a3b6a9e4507e b
22 diff -r 52e848cdcd88 -r a3b6a9e4507e b
23 --- a/b Thu Jan 01 00:00:00 1970 +0000
23 --- a/b Thu Jan 01 00:00:00 1970 +0000
24 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
24 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
25 @@ -1,1 +0,0 @@
25 @@ -1,1 +0,0 @@
26 -b
26 -b
27 diff -r 52e848cdcd88 -r a3b6a9e4507e c
27 diff -r 52e848cdcd88 -r a3b6a9e4507e c
28 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
28 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
29 +++ b/c Thu Jan 01 00:00:00 1970 +0000
29 +++ b/c Thu Jan 01 00:00:00 1970 +0000
30 @@ -0,0 +1,1 @@
30 @@ -0,0 +1,1 @@
31 +b
31 +b
32
32
33 changeset: 4:52e848cdcd88
33 changeset: 4:52e848cdcd88
34 user: test
34 user: test
35 date: Thu Jan 01 00:00:00 1970 +0000
35 date: Thu Jan 01 00:00:00 1970 +0000
36 summary: del2 a
36 summary: del2 a
37
37
38 diff -r 01de2d66a28d -r 52e848cdcd88 a
38 diff -r 01de2d66a28d -r 52e848cdcd88 a
39 --- a/a Thu Jan 01 00:00:00 1970 +0000
39 --- a/a Thu Jan 01 00:00:00 1970 +0000
40 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
40 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
41 @@ -1,1 +0,0 @@
41 @@ -1,1 +0,0 @@
42 -b
42 -b
43
43
44 changeset: 3:01de2d66a28d
44 changeset: 3:01de2d66a28d
45 user: test
45 user: test
46 date: Thu Jan 01 00:00:00 1970 +0000
46 date: Thu Jan 01 00:00:00 1970 +0000
47 summary: second a
47 summary: second a
48
48
49 diff -r be3ebcc91739 -r 01de2d66a28d a
49 diff -r be3ebcc91739 -r 01de2d66a28d a
50 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
50 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
51 +++ b/a Thu Jan 01 00:00:00 1970 +0000
51 +++ b/a Thu Jan 01 00:00:00 1970 +0000
52 @@ -0,0 +1,1 @@
52 @@ -0,0 +1,1 @@
53 +b
53 +b
54
54
55 changeset: 2:be3ebcc91739
55 changeset: 2:be3ebcc91739
56 user: test
56 user: test
57 date: Thu Jan 01 00:00:00 1970 +0000
57 date: Thu Jan 01 00:00:00 1970 +0000
58 summary: del a
58 summary: del a
59
59
60 diff -r 5ed941583260 -r be3ebcc91739 a
60 diff -r 5ed941583260 -r be3ebcc91739 a
61 --- a/a Thu Jan 01 00:00:00 1970 +0000
61 --- a/a Thu Jan 01 00:00:00 1970 +0000
62 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
62 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
63 @@ -1,1 +0,0 @@
63 @@ -1,1 +0,0 @@
64 -a
64 -a
65
65
66 changeset: 1:5ed941583260
66 changeset: 1:5ed941583260
67 user: test
67 user: test
68 date: Thu Jan 01 00:00:00 1970 +0000
68 date: Thu Jan 01 00:00:00 1970 +0000
69 summary: first a
69 summary: first a
70
70
71 diff -r 6563da9dcf87 -r 5ed941583260 a
71 diff -r 6563da9dcf87 -r 5ed941583260 a
72 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
72 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
73 +++ b/a Thu Jan 01 00:00:00 1970 +0000
73 +++ b/a Thu Jan 01 00:00:00 1970 +0000
74 @@ -0,0 +1,1 @@
74 @@ -0,0 +1,1 @@
75 +a
75 +a
76
76
77 changeset: 0:6563da9dcf87
77 changeset: 0:6563da9dcf87
78 user: test
78 user: test
79 date: Thu Jan 01 00:00:00 1970 +0000
79 date: Thu Jan 01 00:00:00 1970 +0000
80 summary: b
80 summary: b
81
81
82 diff -r 000000000000 -r 6563da9dcf87 b
82 diff -r 000000000000 -r 6563da9dcf87 b
83 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
83 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
84 +++ b/b Thu Jan 01 00:00:00 1970 +0000
84 +++ b/b Thu Jan 01 00:00:00 1970 +0000
85 @@ -0,0 +1,1 @@
85 @@ -0,0 +1,1 @@
86 +b
86 +b
87
87
88 % tip - two revisions
88 % tip - two revisions
89 200 Script output follows
89 200 Script output follows
90
90
91 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
91 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
92 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
92 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
93 <head>
93 <head>
94 <link rel="icon" href="/static/hgicon.png" type="image/png" />
94 <link rel="icon" href="/static/hgicon.png" type="image/png" />
95 <meta name="robots" content="index, nofollow" />
95 <meta name="robots" content="index, nofollow" />
96 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
96 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
97
97
98 <title>test: a history</title>
98 <title>test: a history</title>
99 <link rel="alternate" type="application/atom+xml"
99 <link rel="alternate" type="application/atom+xml"
100 href="/atom-log/tip/a" title="Atom feed for test:a" />
100 href="/atom-log/tip/a" title="Atom feed for test:a" />
101 <link rel="alternate" type="application/rss+xml"
101 <link rel="alternate" type="application/rss+xml"
102 href="/rss-log/tip/a" title="RSS feed for test:a" />
102 href="/rss-log/tip/a" title="RSS feed for test:a" />
103 </head>
103 </head>
104 <body>
104 <body>
105
105
106 <div class="container">
106 <div class="container">
107 <div class="menu">
107 <div class="menu">
108 <div class="logo">
108 <div class="logo">
109 <a href="http://mercurial.selenic.com/">
109 <a href="http://mercurial.selenic.com/">
110 <img src="/static/hglogo.png" alt="mercurial" /></a>
110 <img src="/static/hglogo.png" alt="mercurial" /></a>
111 </div>
111 </div>
112 <ul>
112 <ul>
113 <li><a href="/shortlog/01de2d66a28d">log</a></li>
113 <li><a href="/shortlog/01de2d66a28d">log</a></li>
114 <li><a href="/graph/01de2d66a28d">graph</a></li>
114 <li><a href="/graph/01de2d66a28d">graph</a></li>
115 <li><a href="/tags">tags</a></li>
115 <li><a href="/tags">tags</a></li>
116 <li><a href="/branches">branches</a></li>
116 <li><a href="/branches">branches</a></li>
117 </ul>
117 </ul>
118 <ul>
118 <ul>
119 <li><a href="/rev/01de2d66a28d">changeset</a></li>
119 <li><a href="/rev/01de2d66a28d">changeset</a></li>
120 <li><a href="/file/01de2d66a28d">browse</a></li>
120 <li><a href="/file/01de2d66a28d">browse</a></li>
121 </ul>
121 </ul>
122 <ul>
122 <ul>
123 <li><a href="/file/01de2d66a28d/a">file</a></li>
123 <li><a href="/file/01de2d66a28d/a">file</a></li>
124 <li><a href="/diff/01de2d66a28d/a">diff</a></li>
124 <li><a href="/diff/01de2d66a28d/a">diff</a></li>
125 <li><a href="/annotate/01de2d66a28d/a">annotate</a></li>
125 <li><a href="/annotate/01de2d66a28d/a">annotate</a></li>
126 <li class="active">file log</li>
126 <li class="active">file log</li>
127 <li><a href="/raw-file/01de2d66a28d/a">raw</a></li>
127 <li><a href="/raw-file/01de2d66a28d/a">raw</a></li>
128 </ul>
128 </ul>
129 </div>
129 </div>
130
130
131 <div class="main">
131 <div class="main">
132 <h2><a href="/">test</a></h2>
132 <h2><a href="/">test</a></h2>
133 <h3>log a</h3>
133 <h3>log a</h3>
134
134
135 <form class="search" action="/log">
135 <form class="search" action="/log">
136
136
137 <p><input name="rev" id="search1" type="text" size="30" /></p>
137 <p><input name="rev" id="search1" type="text" size="30" /></p>
138 <div id="hint">find changesets by author, revision,
138 <div id="hint">find changesets by author, revision,
139 files, or words in the commit message</div>
139 files, or words in the commit message</div>
140 </form>
140 </form>
141
141
142 <div class="navigate"><a href="/log/5ed941583260/a">(0)</a> <a href="/log/tip/a">tip</a> </div>
142 <div class="navigate">
143 <a href="/log/01de2d66a28d/a?revcount=30">less</a>
144 <a href="/log/01de2d66a28d/a?revcount=120">more</a>
145 | <a href="/log/5ed941583260/a">(0)</a> <a href="/log/tip/a">tip</a> </div>
143
146
144 <table class="bigtable">
147 <table class="bigtable">
145 <tr>
148 <tr>
146 <th class="age">age</th>
149 <th class="age">age</th>
147 <th class="author">author</th>
150 <th class="author">author</th>
148 <th class="description">description</th>
151 <th class="description">description</th>
149 </tr>
152 </tr>
150 <tr class="parity0">
153 <tr class="parity0">
151 <td class="age">1970-01-01</td>
154 <td class="age">1970-01-01</td>
152 <td class="author">test</td>
155 <td class="author">test</td>
153 <td class="description"><a href="/rev/01de2d66a28d">second a</a></td>
156 <td class="description"><a href="/rev/01de2d66a28d">second a</a></td>
154 </tr>
157 </tr>
155 <tr class="parity1">
158 <tr class="parity1">
156 <td class="age">1970-01-01</td>
159 <td class="age">1970-01-01</td>
157 <td class="author">test</td>
160 <td class="author">test</td>
158 <td class="description"><a href="/rev/5ed941583260">first a</a></td>
161 <td class="description"><a href="/rev/5ed941583260">first a</a></td>
159 </tr>
162 </tr>
160
163
161 </table>
164 </table>
162
165
166 <div class="navigate">
167 <a href="/log/01de2d66a28d/a?revcount=30">less</a>
168 <a href="/log/01de2d66a28d/a?revcount=120">more</a>
169 | <a href="/log/5ed941583260/a">(0)</a> <a href="/log/tip/a">tip</a>
170 </div>
171
163 </div>
172 </div>
164 </div>
173 </div>
165
174
166
175
167
176
168 </body>
177 </body>
169 </html>
178 </html>
170
179
171 % second version - two revisions
180 % second version - two revisions
172 200 Script output follows
181 200 Script output follows
173
182
174 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
183 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
175 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
184 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
176 <head>
185 <head>
177 <link rel="icon" href="/static/hgicon.png" type="image/png" />
186 <link rel="icon" href="/static/hgicon.png" type="image/png" />
178 <meta name="robots" content="index, nofollow" />
187 <meta name="robots" content="index, nofollow" />
179 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
188 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
180
189
181 <title>test: a history</title>
190 <title>test: a history</title>
182 <link rel="alternate" type="application/atom+xml"
191 <link rel="alternate" type="application/atom+xml"
183 href="/atom-log/tip/a" title="Atom feed for test:a" />
192 href="/atom-log/tip/a" title="Atom feed for test:a" />
184 <link rel="alternate" type="application/rss+xml"
193 <link rel="alternate" type="application/rss+xml"
185 href="/rss-log/tip/a" title="RSS feed for test:a" />
194 href="/rss-log/tip/a" title="RSS feed for test:a" />
186 </head>
195 </head>
187 <body>
196 <body>
188
197
189 <div class="container">
198 <div class="container">
190 <div class="menu">
199 <div class="menu">
191 <div class="logo">
200 <div class="logo">
192 <a href="http://mercurial.selenic.com/">
201 <a href="http://mercurial.selenic.com/">
193 <img src="/static/hglogo.png" alt="mercurial" /></a>
202 <img src="/static/hglogo.png" alt="mercurial" /></a>
194 </div>
203 </div>
195 <ul>
204 <ul>
196 <li><a href="/shortlog/01de2d66a28d">log</a></li>
205 <li><a href="/shortlog/01de2d66a28d">log</a></li>
197 <li><a href="/graph/01de2d66a28d">graph</a></li>
206 <li><a href="/graph/01de2d66a28d">graph</a></li>
198 <li><a href="/tags">tags</a></li>
207 <li><a href="/tags">tags</a></li>
199 <li><a href="/branches">branches</a></li>
208 <li><a href="/branches">branches</a></li>
200 </ul>
209 </ul>
201 <ul>
210 <ul>
202 <li><a href="/rev/01de2d66a28d">changeset</a></li>
211 <li><a href="/rev/01de2d66a28d">changeset</a></li>
203 <li><a href="/file/01de2d66a28d">browse</a></li>
212 <li><a href="/file/01de2d66a28d">browse</a></li>
204 </ul>
213 </ul>
205 <ul>
214 <ul>
206 <li><a href="/file/01de2d66a28d/a">file</a></li>
215 <li><a href="/file/01de2d66a28d/a">file</a></li>
207 <li><a href="/diff/01de2d66a28d/a">diff</a></li>
216 <li><a href="/diff/01de2d66a28d/a">diff</a></li>
208 <li><a href="/annotate/01de2d66a28d/a">annotate</a></li>
217 <li><a href="/annotate/01de2d66a28d/a">annotate</a></li>
209 <li class="active">file log</li>
218 <li class="active">file log</li>
210 <li><a href="/raw-file/01de2d66a28d/a">raw</a></li>
219 <li><a href="/raw-file/01de2d66a28d/a">raw</a></li>
211 </ul>
220 </ul>
212 </div>
221 </div>
213
222
214 <div class="main">
223 <div class="main">
215 <h2><a href="/">test</a></h2>
224 <h2><a href="/">test</a></h2>
216 <h3>log a</h3>
225 <h3>log a</h3>
217
226
218 <form class="search" action="/log">
227 <form class="search" action="/log">
219
228
220 <p><input name="rev" id="search1" type="text" size="30" /></p>
229 <p><input name="rev" id="search1" type="text" size="30" /></p>
221 <div id="hint">find changesets by author, revision,
230 <div id="hint">find changesets by author, revision,
222 files, or words in the commit message</div>
231 files, or words in the commit message</div>
223 </form>
232 </form>
224
233
225 <div class="navigate"><a href="/log/5ed941583260/a">(0)</a> <a href="/log/tip/a">tip</a> </div>
234 <div class="navigate">
235 <a href="/log/01de2d66a28d/a?revcount=30">less</a>
236 <a href="/log/01de2d66a28d/a?revcount=120">more</a>
237 | <a href="/log/5ed941583260/a">(0)</a> <a href="/log/tip/a">tip</a> </div>
226
238
227 <table class="bigtable">
239 <table class="bigtable">
228 <tr>
240 <tr>
229 <th class="age">age</th>
241 <th class="age">age</th>
230 <th class="author">author</th>
242 <th class="author">author</th>
231 <th class="description">description</th>
243 <th class="description">description</th>
232 </tr>
244 </tr>
233 <tr class="parity0">
245 <tr class="parity0">
234 <td class="age">1970-01-01</td>
246 <td class="age">1970-01-01</td>
235 <td class="author">test</td>
247 <td class="author">test</td>
236 <td class="description"><a href="/rev/01de2d66a28d">second a</a></td>
248 <td class="description"><a href="/rev/01de2d66a28d">second a</a></td>
237 </tr>
249 </tr>
238 <tr class="parity1">
250 <tr class="parity1">
239 <td class="age">1970-01-01</td>
251 <td class="age">1970-01-01</td>
240 <td class="author">test</td>
252 <td class="author">test</td>
241 <td class="description"><a href="/rev/5ed941583260">first a</a></td>
253 <td class="description"><a href="/rev/5ed941583260">first a</a></td>
242 </tr>
254 </tr>
243
255
244 </table>
256 </table>
245
257
258 <div class="navigate">
259 <a href="/log/01de2d66a28d/a?revcount=30">less</a>
260 <a href="/log/01de2d66a28d/a?revcount=120">more</a>
261 | <a href="/log/5ed941583260/a">(0)</a> <a href="/log/tip/a">tip</a>
262 </div>
263
246 </div>
264 </div>
247 </div>
265 </div>
248
266
249
267
250
268
251 </body>
269 </body>
252 </html>
270 </html>
253
271
254 % first deleted - one revision
272 % first deleted - one revision
255 200 Script output follows
273 200 Script output follows
256
274
257 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
275 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
258 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
276 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
259 <head>
277 <head>
260 <link rel="icon" href="/static/hgicon.png" type="image/png" />
278 <link rel="icon" href="/static/hgicon.png" type="image/png" />
261 <meta name="robots" content="index, nofollow" />
279 <meta name="robots" content="index, nofollow" />
262 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
280 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
263
281
264 <title>test: a history</title>
282 <title>test: a history</title>
265 <link rel="alternate" type="application/atom+xml"
283 <link rel="alternate" type="application/atom+xml"
266 href="/atom-log/tip/a" title="Atom feed for test:a" />
284 href="/atom-log/tip/a" title="Atom feed for test:a" />
267 <link rel="alternate" type="application/rss+xml"
285 <link rel="alternate" type="application/rss+xml"
268 href="/rss-log/tip/a" title="RSS feed for test:a" />
286 href="/rss-log/tip/a" title="RSS feed for test:a" />
269 </head>
287 </head>
270 <body>
288 <body>
271
289
272 <div class="container">
290 <div class="container">
273 <div class="menu">
291 <div class="menu">
274 <div class="logo">
292 <div class="logo">
275 <a href="http://mercurial.selenic.com/">
293 <a href="http://mercurial.selenic.com/">
276 <img src="/static/hglogo.png" alt="mercurial" /></a>
294 <img src="/static/hglogo.png" alt="mercurial" /></a>
277 </div>
295 </div>
278 <ul>
296 <ul>
279 <li><a href="/shortlog/5ed941583260">log</a></li>
297 <li><a href="/shortlog/5ed941583260">log</a></li>
280 <li><a href="/graph/5ed941583260">graph</a></li>
298 <li><a href="/graph/5ed941583260">graph</a></li>
281 <li><a href="/tags">tags</a></li>
299 <li><a href="/tags">tags</a></li>
282 <li><a href="/branches">branches</a></li>
300 <li><a href="/branches">branches</a></li>
283 </ul>
301 </ul>
284 <ul>
302 <ul>
285 <li><a href="/rev/5ed941583260">changeset</a></li>
303 <li><a href="/rev/5ed941583260">changeset</a></li>
286 <li><a href="/file/5ed941583260">browse</a></li>
304 <li><a href="/file/5ed941583260">browse</a></li>
287 </ul>
305 </ul>
288 <ul>
306 <ul>
289 <li><a href="/file/5ed941583260/a">file</a></li>
307 <li><a href="/file/5ed941583260/a">file</a></li>
290 <li><a href="/diff/5ed941583260/a">diff</a></li>
308 <li><a href="/diff/5ed941583260/a">diff</a></li>
291 <li><a href="/annotate/5ed941583260/a">annotate</a></li>
309 <li><a href="/annotate/5ed941583260/a">annotate</a></li>
292 <li class="active">file log</li>
310 <li class="active">file log</li>
293 <li><a href="/raw-file/5ed941583260/a">raw</a></li>
311 <li><a href="/raw-file/5ed941583260/a">raw</a></li>
294 </ul>
312 </ul>
295 </div>
313 </div>
296
314
297 <div class="main">
315 <div class="main">
298 <h2><a href="/">test</a></h2>
316 <h2><a href="/">test</a></h2>
299 <h3>log a</h3>
317 <h3>log a</h3>
300
318
301 <form class="search" action="/log">
319 <form class="search" action="/log">
302
320
303 <p><input name="rev" id="search1" type="text" size="30" /></p>
321 <p><input name="rev" id="search1" type="text" size="30" /></p>
304 <div id="hint">find changesets by author, revision,
322 <div id="hint">find changesets by author, revision,
305 files, or words in the commit message</div>
323 files, or words in the commit message</div>
306 </form>
324 </form>
307
325
308 <div class="navigate"><a href="/log/5ed941583260/a">(0)</a> <a href="/log/tip/a">tip</a> </div>
326 <div class="navigate">
327 <a href="/log/5ed941583260/a?revcount=30">less</a>
328 <a href="/log/5ed941583260/a?revcount=120">more</a>
329 | <a href="/log/5ed941583260/a">(0)</a> <a href="/log/tip/a">tip</a> </div>
309
330
310 <table class="bigtable">
331 <table class="bigtable">
311 <tr>
332 <tr>
312 <th class="age">age</th>
333 <th class="age">age</th>
313 <th class="author">author</th>
334 <th class="author">author</th>
314 <th class="description">description</th>
335 <th class="description">description</th>
315 </tr>
336 </tr>
316 <tr class="parity0">
337 <tr class="parity0">
317 <td class="age">1970-01-01</td>
338 <td class="age">1970-01-01</td>
318 <td class="author">test</td>
339 <td class="author">test</td>
319 <td class="description"><a href="/rev/5ed941583260">first a</a></td>
340 <td class="description"><a href="/rev/5ed941583260">first a</a></td>
320 </tr>
341 </tr>
321
342
322 </table>
343 </table>
323
344
345 <div class="navigate">
346 <a href="/log/5ed941583260/a?revcount=30">less</a>
347 <a href="/log/5ed941583260/a?revcount=120">more</a>
348 | <a href="/log/5ed941583260/a">(0)</a> <a href="/log/tip/a">tip</a>
349 </div>
350
324 </div>
351 </div>
325 </div>
352 </div>
326
353
327
354
328
355
329 </body>
356 </body>
330 </html>
357 </html>
331
358
332 % first version - one revision
359 % first version - one revision
333 200 Script output follows
360 200 Script output follows
334
361
335 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
362 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
336 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
363 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
337 <head>
364 <head>
338 <link rel="icon" href="/static/hgicon.png" type="image/png" />
365 <link rel="icon" href="/static/hgicon.png" type="image/png" />
339 <meta name="robots" content="index, nofollow" />
366 <meta name="robots" content="index, nofollow" />
340 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
367 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
341
368
342 <title>test: a history</title>
369 <title>test: a history</title>
343 <link rel="alternate" type="application/atom+xml"
370 <link rel="alternate" type="application/atom+xml"
344 href="/atom-log/tip/a" title="Atom feed for test:a" />
371 href="/atom-log/tip/a" title="Atom feed for test:a" />
345 <link rel="alternate" type="application/rss+xml"
372 <link rel="alternate" type="application/rss+xml"
346 href="/rss-log/tip/a" title="RSS feed for test:a" />
373 href="/rss-log/tip/a" title="RSS feed for test:a" />
347 </head>
374 </head>
348 <body>
375 <body>
349
376
350 <div class="container">
377 <div class="container">
351 <div class="menu">
378 <div class="menu">
352 <div class="logo">
379 <div class="logo">
353 <a href="http://mercurial.selenic.com/">
380 <a href="http://mercurial.selenic.com/">
354 <img src="/static/hglogo.png" alt="mercurial" /></a>
381 <img src="/static/hglogo.png" alt="mercurial" /></a>
355 </div>
382 </div>
356 <ul>
383 <ul>
357 <li><a href="/shortlog/5ed941583260">log</a></li>
384 <li><a href="/shortlog/5ed941583260">log</a></li>
358 <li><a href="/graph/5ed941583260">graph</a></li>
385 <li><a href="/graph/5ed941583260">graph</a></li>
359 <li><a href="/tags">tags</a></li>
386 <li><a href="/tags">tags</a></li>
360 <li><a href="/branches">branches</a></li>
387 <li><a href="/branches">branches</a></li>
361 </ul>
388 </ul>
362 <ul>
389 <ul>
363 <li><a href="/rev/5ed941583260">changeset</a></li>
390 <li><a href="/rev/5ed941583260">changeset</a></li>
364 <li><a href="/file/5ed941583260">browse</a></li>
391 <li><a href="/file/5ed941583260">browse</a></li>
365 </ul>
392 </ul>
366 <ul>
393 <ul>
367 <li><a href="/file/5ed941583260/a">file</a></li>
394 <li><a href="/file/5ed941583260/a">file</a></li>
368 <li><a href="/diff/5ed941583260/a">diff</a></li>
395 <li><a href="/diff/5ed941583260/a">diff</a></li>
369 <li><a href="/annotate/5ed941583260/a">annotate</a></li>
396 <li><a href="/annotate/5ed941583260/a">annotate</a></li>
370 <li class="active">file log</li>
397 <li class="active">file log</li>
371 <li><a href="/raw-file/5ed941583260/a">raw</a></li>
398 <li><a href="/raw-file/5ed941583260/a">raw</a></li>
372 </ul>
399 </ul>
373 </div>
400 </div>
374
401
375 <div class="main">
402 <div class="main">
376 <h2><a href="/">test</a></h2>
403 <h2><a href="/">test</a></h2>
377 <h3>log a</h3>
404 <h3>log a</h3>
378
405
379 <form class="search" action="/log">
406 <form class="search" action="/log">
380
407
381 <p><input name="rev" id="search1" type="text" size="30" /></p>
408 <p><input name="rev" id="search1" type="text" size="30" /></p>
382 <div id="hint">find changesets by author, revision,
409 <div id="hint">find changesets by author, revision,
383 files, or words in the commit message</div>
410 files, or words in the commit message</div>
384 </form>
411 </form>
385
412
386 <div class="navigate"><a href="/log/5ed941583260/a">(0)</a> <a href="/log/tip/a">tip</a> </div>
413 <div class="navigate">
414 <a href="/log/5ed941583260/a?revcount=30">less</a>
415 <a href="/log/5ed941583260/a?revcount=120">more</a>
416 | <a href="/log/5ed941583260/a">(0)</a> <a href="/log/tip/a">tip</a> </div>
387
417
388 <table class="bigtable">
418 <table class="bigtable">
389 <tr>
419 <tr>
390 <th class="age">age</th>
420 <th class="age">age</th>
391 <th class="author">author</th>
421 <th class="author">author</th>
392 <th class="description">description</th>
422 <th class="description">description</th>
393 </tr>
423 </tr>
394 <tr class="parity0">
424 <tr class="parity0">
395 <td class="age">1970-01-01</td>
425 <td class="age">1970-01-01</td>
396 <td class="author">test</td>
426 <td class="author">test</td>
397 <td class="description"><a href="/rev/5ed941583260">first a</a></td>
427 <td class="description"><a href="/rev/5ed941583260">first a</a></td>
398 </tr>
428 </tr>
399
429
400 </table>
430 </table>
401
431
432 <div class="navigate">
433 <a href="/log/5ed941583260/a?revcount=30">less</a>
434 <a href="/log/5ed941583260/a?revcount=120">more</a>
435 | <a href="/log/5ed941583260/a">(0)</a> <a href="/log/tip/a">tip</a>
436 </div>
437
402 </div>
438 </div>
403 </div>
439 </div>
404
440
405
441
406
442
407 </body>
443 </body>
408 </html>
444 </html>
409
445
410 % before addition - error
446 % before addition - error
411 404 Not Found
447 404 Not Found
412
448
413 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
449 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
414 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
450 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
415 <head>
451 <head>
416 <link rel="icon" href="/static/hgicon.png" type="image/png" />
452 <link rel="icon" href="/static/hgicon.png" type="image/png" />
417 <meta name="robots" content="index, nofollow" />
453 <meta name="robots" content="index, nofollow" />
418 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
454 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
419
455
420 <title>test: error</title>
456 <title>test: error</title>
421 </head>
457 </head>
422 <body>
458 <body>
423
459
424 <div class="container">
460 <div class="container">
425 <div class="menu">
461 <div class="menu">
426 <div class="logo">
462 <div class="logo">
427 <a href="http://mercurial.selenic.com/">
463 <a href="http://mercurial.selenic.com/">
428 <img src="/static/hglogo.png" width=75 height=90 border=0 alt="mercurial" /></a>
464 <img src="/static/hglogo.png" width=75 height=90 border=0 alt="mercurial" /></a>
429 </div>
465 </div>
430 <ul>
466 <ul>
431 <li><a href="/shortlog">log</a></li>
467 <li><a href="/shortlog">log</a></li>
432 <li><a href="/graph">graph</a></li>
468 <li><a href="/graph">graph</a></li>
433 <li><a href="/tags">tags</a></li>
469 <li><a href="/tags">tags</a></li>
434 <li><a href="/branches">branches</a></li>
470 <li><a href="/branches">branches</a></li>
435 </ul>
471 </ul>
436 </div>
472 </div>
437
473
438 <div class="main">
474 <div class="main">
439
475
440 <h2><a href="/">test</a></h2>
476 <h2><a href="/">test</a></h2>
441 <h3>error</h3>
477 <h3>error</h3>
442
478
443 <form class="search" action="/log">
479 <form class="search" action="/log">
444
480
445 <p><input name="rev" id="search1" type="text" size="30"></p>
481 <p><input name="rev" id="search1" type="text" size="30"></p>
446 <div id="hint">find changesets by author, revision,
482 <div id="hint">find changesets by author, revision,
447 files, or words in the commit message</div>
483 files, or words in the commit message</div>
448 </form>
484 </form>
449
485
450 <div class="description">
486 <div class="description">
451 <p>
487 <p>
452 An error occurred while processing your request:
488 An error occurred while processing your request:
453 </p>
489 </p>
454 <p>
490 <p>
455 a@6563da9dcf87: not found in manifest
491 a@6563da9dcf87: not found in manifest
456 </p>
492 </p>
457 </div>
493 </div>
458 </div>
494 </div>
459 </div>
495 </div>
460
496
461
497
462
498
463 </body>
499 </body>
464 </html>
500 </html>
465
501
466 % should show base link, use spartan because it shows it
502 % should show base link, use spartan because it shows it
467 200 Script output follows
503 200 Script output follows
468
504
469 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
505 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
470 <html>
506 <html>
471 <head>
507 <head>
472 <link rel="icon" href="/static/hgicon.png" type="image/png">
508 <link rel="icon" href="/static/hgicon.png" type="image/png">
473 <meta name="robots" content="index, nofollow" />
509 <meta name="robots" content="index, nofollow" />
474 <link rel="stylesheet" href="/static/style.css" type="text/css" />
510 <link rel="stylesheet" href="/static/style.css" type="text/css" />
475
511
476 <title>test: c history</title>
512 <title>test: c history</title>
477 <link rel="alternate" type="application/atom+xml"
513 <link rel="alternate" type="application/atom+xml"
478 href="/atom-log/tip/c" title="Atom feed for test:c">
514 href="/atom-log/tip/c" title="Atom feed for test:c">
479 <link rel="alternate" type="application/rss+xml"
515 <link rel="alternate" type="application/rss+xml"
480 href="/rss-log/tip/c" title="RSS feed for test:c">
516 href="/rss-log/tip/c" title="RSS feed for test:c">
481 </head>
517 </head>
482 <body>
518 <body>
483
519
484 <div class="buttons">
520 <div class="buttons">
485 <a href="/log?style=spartan">changelog</a>
521 <a href="/log?style=spartan">changelog</a>
486 <a href="/shortlog?style=spartan">shortlog</a>
522 <a href="/shortlog?style=spartan">shortlog</a>
487 <a href="/graph?style=spartan">graph</a>
523 <a href="/graph?style=spartan">graph</a>
488 <a href="/tags?style=spartan">tags</a>
524 <a href="/tags?style=spartan">tags</a>
489 <a href="/branches?style=spartan">branches</a>
525 <a href="/branches?style=spartan">branches</a>
490 <a href="/file/38d962e6234d/c?style=spartan">file</a>
526 <a href="/file/38d962e6234d/c?style=spartan">file</a>
491 <a href="/annotate/38d962e6234d/c?style=spartan">annotate</a>
527 <a href="/annotate/38d962e6234d/c?style=spartan">annotate</a>
492 <a type="application/rss+xml" href="/rss-log/tip/c">rss</a>
528 <a type="application/rss+xml" href="/rss-log/tip/c">rss</a>
493 <a type="application/atom+xml" href="/atom-log/tip/c" title="Atom feed for test:c">atom</a>
529 <a type="application/atom+xml" href="/atom-log/tip/c" title="Atom feed for test:c">atom</a>
494 </div>
530 </div>
495
531
496 <h2>c revision history</h2>
532 <h2>c revision history</h2>
497
533
498 <p>navigate: <small class="navigate"><a href="/log/a3b6a9e4507e/c?style=spartan">(0)</a> <a href="/log/tip/c?style=spartan">tip</a> </small></p>
534 <p>navigate: <small class="navigate"><a href="/log/a3b6a9e4507e/c?style=spartan">(0)</a> <a href="/log/tip/c?style=spartan">tip</a> </small></p>
499
535
500 <table class="logEntry parity0">
536 <table class="logEntry parity0">
501 <tr>
537 <tr>
502 <th class="age">1970-01-01:</th>
538 <th class="age">1970-01-01:</th>
503 <th class="firstline"><a href="/rev/38d962e6234d?style=spartan">change c</a></th>
539 <th class="firstline"><a href="/rev/38d962e6234d?style=spartan">change c</a></th>
504 </tr>
540 </tr>
505 <tr>
541 <tr>
506 <th class="revision">revision 1:</td>
542 <th class="revision">revision 1:</td>
507 <td class="node">
543 <td class="node">
508 <a href="/file/38d962e6234d/c?style=spartan">38d962e6234d</a>
544 <a href="/file/38d962e6234d/c?style=spartan">38d962e6234d</a>
509 <a href="/diff/38d962e6234d/c?style=spartan">(diff)</a>
545 <a href="/diff/38d962e6234d/c?style=spartan">(diff)</a>
510 <a href="/annotate/38d962e6234d/c?style=spartan">(annotate)</a>
546 <a href="/annotate/38d962e6234d/c?style=spartan">(annotate)</a>
511 </td>
547 </td>
512 </tr>
548 </tr>
513
549
514 <tr>
550 <tr>
515 <th class="author">author:</th>
551 <th class="author">author:</th>
516 <td class="author">&#116;&#101;&#115;&#116;</td>
552 <td class="author">&#116;&#101;&#115;&#116;</td>
517 </tr>
553 </tr>
518 <tr>
554 <tr>
519 <th class="date">date:</th>
555 <th class="date">date:</th>
520 <td class="date">Thu Jan 01 00:00:00 1970 +0000</td>
556 <td class="date">Thu Jan 01 00:00:00 1970 +0000</td>
521 </tr>
557 </tr>
522 </table>
558 </table>
523
559
524
560
525 <table class="logEntry parity1">
561 <table class="logEntry parity1">
526 <tr>
562 <tr>
527 <th class="age">1970-01-01:</th>
563 <th class="age">1970-01-01:</th>
528 <th class="firstline"><a href="/rev/a3b6a9e4507e?style=spartan">mv b</a></th>
564 <th class="firstline"><a href="/rev/a3b6a9e4507e?style=spartan">mv b</a></th>
529 </tr>
565 </tr>
530 <tr>
566 <tr>
531 <th class="revision">revision 0:</td>
567 <th class="revision">revision 0:</td>
532 <td class="node">
568 <td class="node">
533 <a href="/file/a3b6a9e4507e/c?style=spartan">a3b6a9e4507e</a>
569 <a href="/file/a3b6a9e4507e/c?style=spartan">a3b6a9e4507e</a>
534 <a href="/diff/a3b6a9e4507e/c?style=spartan">(diff)</a>
570 <a href="/diff/a3b6a9e4507e/c?style=spartan">(diff)</a>
535 <a href="/annotate/a3b6a9e4507e/c?style=spartan">(annotate)</a>
571 <a href="/annotate/a3b6a9e4507e/c?style=spartan">(annotate)</a>
536 </td>
572 </td>
537 </tr>
573 </tr>
538
574
539 <tr>
575 <tr>
540 <th>base:</th>
576 <th>base:</th>
541 <td>
577 <td>
542 <a href="/file/1e88685f5dde/b?style=spartan">
578 <a href="/file/1e88685f5dde/b?style=spartan">
543 b@1e88685f5dde
579 b@1e88685f5dde
544 </a>
580 </a>
545 </td>
581 </td>
546 </tr>
582 </tr>
547 <tr>
583 <tr>
548 <th class="author">author:</th>
584 <th class="author">author:</th>
549 <td class="author">&#116;&#101;&#115;&#116;</td>
585 <td class="author">&#116;&#101;&#115;&#116;</td>
550 </tr>
586 </tr>
551 <tr>
587 <tr>
552 <th class="date">date:</th>
588 <th class="date">date:</th>
553 <td class="date">Thu Jan 01 00:00:00 1970 +0000</td>
589 <td class="date">Thu Jan 01 00:00:00 1970 +0000</td>
554 </tr>
590 </tr>
555 </table>
591 </table>
556
592
557
593
558
594
559
595
560
596
561 <div class="logo">
597 <div class="logo">
562 <a href="http://mercurial.selenic.com/">
598 <a href="http://mercurial.selenic.com/">
563 <img src="/static/hglogo.png" width=75 height=90 border=0 alt="mercurial"></a>
599 <img src="/static/hglogo.png" width=75 height=90 border=0 alt="mercurial"></a>
564 </div>
600 </div>
565
601
566 </body>
602 </body>
567 </html>
603 </html>
568
604
569 % errors
605 % errors
General Comments 0
You need to be logged in to leave comments. Login now