##// END OF EJS Templates
templater: readable dates older than 24 months revert to ISO8601 (issue1006)
Dirkjan Ochtman -
r9722:4d9dea17 default
parent child Browse files
Show More
@@ -1,212 +1,215 b''
1 1 # template-filters.py - common template expansion filters
2 2 #
3 3 # Copyright 2005-2008 Matt Mackall <mpm@selenic.com>
4 4 #
5 5 # This software may be used and distributed according to the terms of the
6 6 # GNU General Public License version 2, incorporated herein by reference.
7 7
8 8 import cgi, re, os, time, urllib, textwrap
9 9 import util, encoding
10 10
11 11 def stringify(thing):
12 12 '''turn nested template iterator into string.'''
13 13 if hasattr(thing, '__iter__') and not isinstance(thing, str):
14 14 return "".join([stringify(t) for t in thing if t is not None])
15 15 return str(thing)
16 16
17 17 agescales = [("second", 1),
18 18 ("minute", 60),
19 19 ("hour", 3600),
20 20 ("day", 3600 * 24),
21 21 ("week", 3600 * 24 * 7),
22 22 ("month", 3600 * 24 * 30),
23 23 ("year", 3600 * 24 * 365)]
24 24
25 25 agescales.reverse()
26 26
27 27 def age(date):
28 28 '''turn a (timestamp, tzoff) tuple into an age string.'''
29 29
30 30 def plural(t, c):
31 31 if c == 1:
32 32 return t
33 33 return t + "s"
34 34 def fmt(t, c):
35 35 return "%d %s" % (c, plural(t, c))
36 36
37 37 now = time.time()
38 38 then = date[0]
39 39 if then > now:
40 40 return 'in the future'
41 41
42 42 delta = max(1, int(now - then))
43 if delta > agescales[0][1] * 2:
44 return util.shortdate(date)
45
43 46 for t, s in agescales:
44 47 n = delta // s
45 48 if n >= 2 or s == 1:
46 49 return '%s ago' % fmt(t, n)
47 50
48 51 para_re = None
49 52 space_re = None
50 53
51 54 def fill(text, width):
52 55 '''fill many paragraphs.'''
53 56 global para_re, space_re
54 57 if para_re is None:
55 58 para_re = re.compile('(\n\n|\n\\s*[-*]\\s*)', re.M)
56 59 space_re = re.compile(r' +')
57 60
58 61 def findparas():
59 62 start = 0
60 63 while True:
61 64 m = para_re.search(text, start)
62 65 if not m:
63 66 w = len(text)
64 67 while w > start and text[w-1].isspace(): w -= 1
65 68 yield text[start:w], text[w:]
66 69 break
67 70 yield text[start:m.start(0)], m.group(1)
68 71 start = m.end(1)
69 72
70 73 return "".join([space_re.sub(' ', textwrap.fill(para, width)) + rest
71 74 for para, rest in findparas()])
72 75
73 76 def firstline(text):
74 77 '''return the first line of text'''
75 78 try:
76 79 return text.splitlines(True)[0].rstrip('\r\n')
77 80 except IndexError:
78 81 return ''
79 82
80 83 def nl2br(text):
81 84 '''replace raw newlines with xhtml line breaks.'''
82 85 return text.replace('\n', '<br/>\n')
83 86
84 87 def obfuscate(text):
85 88 text = unicode(text, encoding.encoding, 'replace')
86 89 return ''.join(['&#%d;' % ord(c) for c in text])
87 90
88 91 def domain(author):
89 92 '''get domain of author, or empty string if none.'''
90 93 f = author.find('@')
91 94 if f == -1: return ''
92 95 author = author[f+1:]
93 96 f = author.find('>')
94 97 if f >= 0: author = author[:f]
95 98 return author
96 99
97 100 def person(author):
98 101 '''get name of author, or else username.'''
99 102 if not '@' in author: return author
100 103 f = author.find('<')
101 104 if f == -1: return util.shortuser(author)
102 105 return author[:f].rstrip()
103 106
104 107 def indent(text, prefix):
105 108 '''indent each non-empty line of text after first with prefix.'''
106 109 lines = text.splitlines()
107 110 num_lines = len(lines)
108 111 endswithnewline = text[-1:] == '\n'
109 112 def indenter():
110 113 for i in xrange(num_lines):
111 114 l = lines[i]
112 115 if i and l.strip():
113 116 yield prefix
114 117 yield l
115 118 if i < num_lines - 1 or endswithnewline:
116 119 yield '\n'
117 120 return "".join(indenter())
118 121
119 122 def permissions(flags):
120 123 if "l" in flags:
121 124 return "lrwxrwxrwx"
122 125 if "x" in flags:
123 126 return "-rwxr-xr-x"
124 127 return "-rw-r--r--"
125 128
126 129 def xmlescape(text):
127 130 text = (text
128 131 .replace('&', '&amp;')
129 132 .replace('<', '&lt;')
130 133 .replace('>', '&gt;')
131 134 .replace('"', '&quot;')
132 135 .replace("'", '&#39;')) # &apos; invalid in HTML
133 136 return re.sub('[\x00-\x08\x0B\x0C\x0E-\x1F]', ' ', text)
134 137
135 138 _escapes = [
136 139 ('\\', '\\\\'), ('"', '\\"'), ('\t', '\\t'), ('\n', '\\n'),
137 140 ('\r', '\\r'), ('\f', '\\f'), ('\b', '\\b'),
138 141 ]
139 142
140 143 def jsonescape(s):
141 144 for k, v in _escapes:
142 145 s = s.replace(k, v)
143 146 return s
144 147
145 148 def json(obj):
146 149 if obj is None or obj is False or obj is True:
147 150 return {None: 'null', False: 'false', True: 'true'}[obj]
148 151 elif isinstance(obj, int) or isinstance(obj, float):
149 152 return str(obj)
150 153 elif isinstance(obj, str):
151 154 return '"%s"' % jsonescape(obj)
152 155 elif isinstance(obj, unicode):
153 156 return json(obj.encode('utf-8'))
154 157 elif hasattr(obj, 'keys'):
155 158 out = []
156 159 for k, v in obj.iteritems():
157 160 s = '%s: %s' % (json(k), json(v))
158 161 out.append(s)
159 162 return '{' + ', '.join(out) + '}'
160 163 elif hasattr(obj, '__iter__'):
161 164 out = []
162 165 for i in obj:
163 166 out.append(json(i))
164 167 return '[' + ', '.join(out) + ']'
165 168 else:
166 169 raise TypeError('cannot encode type %s' % obj.__class__.__name__)
167 170
168 171 def stripdir(text):
169 172 '''Treat the text as path and strip a directory level, if possible.'''
170 173 dir = os.path.dirname(text)
171 174 if dir == "":
172 175 return os.path.basename(text)
173 176 else:
174 177 return dir
175 178
176 179 def nonempty(str):
177 180 return str or "(none)"
178 181
179 182 filters = {
180 183 "addbreaks": nl2br,
181 184 "basename": os.path.basename,
182 185 "stripdir": stripdir,
183 186 "age": age,
184 187 "date": lambda x: util.datestr(x),
185 188 "domain": domain,
186 189 "email": util.email,
187 190 "escape": lambda x: cgi.escape(x, True),
188 191 "fill68": lambda x: fill(x, width=68),
189 192 "fill76": lambda x: fill(x, width=76),
190 193 "firstline": firstline,
191 194 "tabindent": lambda x: indent(x, '\t'),
192 195 "hgdate": lambda x: "%d %d" % x,
193 196 "isodate": lambda x: util.datestr(x, '%Y-%m-%d %H:%M %1%2'),
194 197 "isodatesec": lambda x: util.datestr(x, '%Y-%m-%d %H:%M:%S %1%2'),
195 198 "json": json,
196 199 "jsonescape": jsonescape,
197 200 "localdate": lambda x: (x[0], util.makedate()[1]),
198 201 "nonempty": nonempty,
199 202 "obfuscate": obfuscate,
200 203 "permissions": permissions,
201 204 "person": person,
202 205 "rfc822date": lambda x: util.datestr(x, "%a, %d %b %Y %H:%M:%S %1%2"),
203 206 "rfc3339date": lambda x: util.datestr(x, "%Y-%m-%dT%H:%M:%S%1:%2"),
204 207 "short": lambda x: x[:12],
205 208 "shortdate": util.shortdate,
206 209 "stringify": stringify,
207 210 "strip": lambda x: x.strip(),
208 211 "urlescape": lambda x: urllib.quote(x),
209 212 "user": lambda x: util.shortuser(x),
210 213 "stringescape": lambda x: x.encode('string_escape'),
211 214 "xmlescape": xmlescape,
212 215 }
@@ -1,30 +1,29 b''
1 1 #!/usr/bin/env python
2 2
3 3 """This does HTTP GET requests given a host:port and path and returns
4 4 a subset of the headers plus the body of the result."""
5 5
6 6 import httplib, sys, re
7 7
8 8 try:
9 9 import msvcrt, os
10 10 msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY)
11 11 msvcrt.setmode(sys.stderr.fileno(), os.O_BINARY)
12 12 except ImportError:
13 13 pass
14 14
15 15 headers = [h.lower() for h in sys.argv[3:]]
16 16 conn = httplib.HTTPConnection(sys.argv[1])
17 17 conn.request("GET", sys.argv[2])
18 18 response = conn.getresponse()
19 19 print response.status, response.reason
20 20 for h in headers:
21 21 if response.getheader(h, None) is not None:
22 22 print "%s: %s" % (h, response.getheader(h))
23 23 print
24 24 data = response.read()
25 data = re.sub('\d+ years', 'many years', data)
26 25 sys.stdout.write(data)
27 26
28 27 if 200 <= response.status <= 299:
29 28 sys.exit(0)
30 29 sys.exit(1)
@@ -1,991 +1,991 b''
1 1 % Set up the repo
2 2 adding da/foo
3 3 adding foo
4 4 marked working directory as branch stable
5 5 % Logs and changes
6 6 200 Script output follows
7 7
8 8 <?xml version="1.0" encoding="ascii"?>
9 9 <feed xmlns="http://127.0.0.1/2005/Atom">
10 10 <!-- Changelog -->
11 11 <id>http://127.0.0.1/</id>
12 12 <link rel="self" href="http://127.0.0.1/atom-log"/>
13 13 <link rel="alternate" href="http://127.0.0.1/"/>
14 14 <title>test Changelog</title>
15 15 <updated>1970-01-01T00:00:00+00:00</updated>
16 16
17 17 <entry>
18 18 <title>branch</title>
19 19 <id>http://127.0.0.1/#changeset-1d22e65f027e5a0609357e7d8e7508cd2ba5d2fe</id>
20 20 <link href="http://127.0.0.1/rev/1d22e65f027e"/>
21 21 <author>
22 22 <name>test</name>
23 23 <email>&#116;&#101;&#115;&#116;</email>
24 24 </author>
25 25 <updated>1970-01-01T00:00:00+00:00</updated>
26 26 <published>1970-01-01T00:00:00+00:00</published>
27 27 <content type="xhtml">
28 28 <div xmlns="http://127.0.0.1/1999/xhtml">
29 29 <pre xml:space="preserve">branch</pre>
30 30 </div>
31 31 </content>
32 32 </entry>
33 33 <entry>
34 34 <title>Added tag 1.0 for changeset 2ef0ac749a14</title>
35 35 <id>http://127.0.0.1/#changeset-a4f92ed23982be056b9852de5dfe873eaac7f0de</id>
36 36 <link href="http://127.0.0.1/rev/a4f92ed23982"/>
37 37 <author>
38 38 <name>test</name>
39 39 <email>&#116;&#101;&#115;&#116;</email>
40 40 </author>
41 41 <updated>1970-01-01T00:00:00+00:00</updated>
42 42 <published>1970-01-01T00:00:00+00:00</published>
43 43 <content type="xhtml">
44 44 <div xmlns="http://127.0.0.1/1999/xhtml">
45 45 <pre xml:space="preserve">Added tag 1.0 for changeset 2ef0ac749a14</pre>
46 46 </div>
47 47 </content>
48 48 </entry>
49 49 <entry>
50 50 <title>base</title>
51 51 <id>http://127.0.0.1/#changeset-2ef0ac749a14e4f57a5a822464a0902c6f7f448f</id>
52 52 <link href="http://127.0.0.1/rev/2ef0ac749a14"/>
53 53 <author>
54 54 <name>test</name>
55 55 <email>&#116;&#101;&#115;&#116;</email>
56 56 </author>
57 57 <updated>1970-01-01T00:00:00+00:00</updated>
58 58 <published>1970-01-01T00:00:00+00:00</published>
59 59 <content type="xhtml">
60 60 <div xmlns="http://127.0.0.1/1999/xhtml">
61 61 <pre xml:space="preserve">base</pre>
62 62 </div>
63 63 </content>
64 64 </entry>
65 65
66 66 </feed>
67 67 200 Script output follows
68 68
69 69 <?xml version="1.0" encoding="ascii"?>
70 70 <feed xmlns="http://127.0.0.1/2005/Atom">
71 71 <!-- Changelog -->
72 72 <id>http://127.0.0.1/</id>
73 73 <link rel="self" href="http://127.0.0.1/atom-log"/>
74 74 <link rel="alternate" href="http://127.0.0.1/"/>
75 75 <title>test Changelog</title>
76 76 <updated>1970-01-01T00:00:00+00:00</updated>
77 77
78 78 <entry>
79 79 <title>branch</title>
80 80 <id>http://127.0.0.1/#changeset-1d22e65f027e5a0609357e7d8e7508cd2ba5d2fe</id>
81 81 <link href="http://127.0.0.1/rev/1d22e65f027e"/>
82 82 <author>
83 83 <name>test</name>
84 84 <email>&#116;&#101;&#115;&#116;</email>
85 85 </author>
86 86 <updated>1970-01-01T00:00:00+00:00</updated>
87 87 <published>1970-01-01T00:00:00+00:00</published>
88 88 <content type="xhtml">
89 89 <div xmlns="http://127.0.0.1/1999/xhtml">
90 90 <pre xml:space="preserve">branch</pre>
91 91 </div>
92 92 </content>
93 93 </entry>
94 94 <entry>
95 95 <title>Added tag 1.0 for changeset 2ef0ac749a14</title>
96 96 <id>http://127.0.0.1/#changeset-a4f92ed23982be056b9852de5dfe873eaac7f0de</id>
97 97 <link href="http://127.0.0.1/rev/a4f92ed23982"/>
98 98 <author>
99 99 <name>test</name>
100 100 <email>&#116;&#101;&#115;&#116;</email>
101 101 </author>
102 102 <updated>1970-01-01T00:00:00+00:00</updated>
103 103 <published>1970-01-01T00:00:00+00:00</published>
104 104 <content type="xhtml">
105 105 <div xmlns="http://127.0.0.1/1999/xhtml">
106 106 <pre xml:space="preserve">Added tag 1.0 for changeset 2ef0ac749a14</pre>
107 107 </div>
108 108 </content>
109 109 </entry>
110 110 <entry>
111 111 <title>base</title>
112 112 <id>http://127.0.0.1/#changeset-2ef0ac749a14e4f57a5a822464a0902c6f7f448f</id>
113 113 <link href="http://127.0.0.1/rev/2ef0ac749a14"/>
114 114 <author>
115 115 <name>test</name>
116 116 <email>&#116;&#101;&#115;&#116;</email>
117 117 </author>
118 118 <updated>1970-01-01T00:00:00+00:00</updated>
119 119 <published>1970-01-01T00:00:00+00:00</published>
120 120 <content type="xhtml">
121 121 <div xmlns="http://127.0.0.1/1999/xhtml">
122 122 <pre xml:space="preserve">base</pre>
123 123 </div>
124 124 </content>
125 125 </entry>
126 126
127 127 </feed>
128 128 200 Script output follows
129 129
130 130 <?xml version="1.0" encoding="ascii"?>
131 131 <feed xmlns="http://127.0.0.1/2005/Atom">
132 132 <id>http://127.0.0.1/atom-log/tip/foo</id>
133 133 <link rel="self" href="http://127.0.0.1/atom-log/tip/foo"/>
134 134 <title>test: foo history</title>
135 135 <updated>1970-01-01T00:00:00+00:00</updated>
136 136
137 137 <entry>
138 138 <title>base</title>
139 139 <id>http://127.0.0.1/#changeset-2ef0ac749a14e4f57a5a822464a0902c6f7f448f</id>
140 140 <link href="http://127.0.0.1/rev/2ef0ac749a14"/>
141 141 <author>
142 142 <name>test</name>
143 143 <email>&#116;&#101;&#115;&#116;</email>
144 144 </author>
145 145 <updated>1970-01-01T00:00:00+00:00</updated>
146 146 <published>1970-01-01T00:00:00+00:00</published>
147 147 <content type="xhtml">
148 148 <div xmlns="http://127.0.0.1/1999/xhtml">
149 149 <pre xml:space="preserve">base</pre>
150 150 </div>
151 151 </content>
152 152 </entry>
153 153
154 154 </feed>
155 155 200 Script output follows
156 156
157 157 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
158 158 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
159 159 <head>
160 160 <link rel="icon" href="/static/hgicon.png" type="image/png" />
161 161 <meta name="robots" content="index, nofollow" />
162 162 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
163 163
164 164 <title>test: log</title>
165 165 <link rel="alternate" type="application/atom+xml"
166 166 href="/atom-log" title="Atom feed for test" />
167 167 <link rel="alternate" type="application/rss+xml"
168 168 href="/rss-log" title="RSS feed for test" />
169 169 </head>
170 170 <body>
171 171
172 172 <div class="container">
173 173 <div class="menu">
174 174 <div class="logo">
175 175 <a href="http://mercurial.selenic.com/">
176 176 <img src="/static/hglogo.png" alt="mercurial" /></a>
177 177 </div>
178 178 <ul>
179 179 <li class="active">log</li>
180 180 <li><a href="/graph/1d22e65f027e">graph</a></li>
181 181 <li><a href="/tags">tags</a></li>
182 182 <li><a href="/branches">branches</a></li>
183 183 </ul>
184 184 <ul>
185 185 <li><a href="/rev/1d22e65f027e">changeset</a></li>
186 186 <li><a href="/file/1d22e65f027e">browse</a></li>
187 187 </ul>
188 188 <ul>
189 189
190 190 </ul>
191 191 </div>
192 192
193 193 <div class="main">
194 194 <h2><a href="/">test</a></h2>
195 195 <h3>log</h3>
196 196
197 197 <form class="search" action="/log">
198 198
199 199 <p><input name="rev" id="search1" type="text" size="30" /></p>
200 200 <div id="hint">find changesets by author, revision,
201 201 files, or words in the commit message</div>
202 202 </form>
203 203
204 204 <div class="navigate">rev 2: <a href="/shortlog/2ef0ac749a14">(0)</a> <a href="/shortlog/tip">tip</a> </div>
205 205
206 206 <table class="bigtable">
207 207 <tr>
208 208 <th class="age">age</th>
209 209 <th class="author">author</th>
210 210 <th class="description">description</th>
211 211 </tr>
212 212 <tr class="parity0">
213 <td class="age">many years ago</td>
213 <td class="age">1970-01-01</td>
214 214 <td class="author">test</td>
215 215 <td class="description"><a href="/rev/1d22e65f027e">branch</a><span class="branchhead">stable</span> <span class="tag">tip</span> </td>
216 216 </tr>
217 217 <tr class="parity1">
218 <td class="age">many years ago</td>
218 <td class="age">1970-01-01</td>
219 219 <td class="author">test</td>
220 220 <td class="description"><a href="/rev/a4f92ed23982">Added tag 1.0 for changeset 2ef0ac749a14</a><span class="branchhead">default</span> </td>
221 221 </tr>
222 222 <tr class="parity0">
223 <td class="age">many years ago</td>
223 <td class="age">1970-01-01</td>
224 224 <td class="author">test</td>
225 225 <td class="description"><a href="/rev/2ef0ac749a14">base</a><span class="tag">1.0</span> </td>
226 226 </tr>
227 227
228 228 </table>
229 229
230 230 <div class="navigate">rev 2: <a href="/shortlog/2ef0ac749a14">(0)</a> <a href="/shortlog/tip">tip</a> </div>
231 231 </div>
232 232 </div>
233 233
234 234
235 235
236 236 </body>
237 237 </html>
238 238
239 239 200 Script output follows
240 240
241 241 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
242 242 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
243 243 <head>
244 244 <link rel="icon" href="/static/hgicon.png" type="image/png" />
245 245 <meta name="robots" content="index, nofollow" />
246 246 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
247 247
248 248 <title>test: 2ef0ac749a14</title>
249 249 </head>
250 250 <body>
251 251 <div class="container">
252 252 <div class="menu">
253 253 <div class="logo">
254 254 <a href="http://mercurial.selenic.com/">
255 255 <img src="/static/hglogo.png" alt="mercurial" /></a>
256 256 </div>
257 257 <ul>
258 258 <li><a href="/shortlog/2ef0ac749a14">log</a></li>
259 259 <li><a href="/graph/2ef0ac749a14">graph</a></li>
260 260 <li><a href="/tags">tags</a></li>
261 261 <li><a href="/branches">branches</a></li>
262 262 </ul>
263 263 <ul>
264 264 <li class="active">changeset</li>
265 265 <li><a href="/raw-rev/2ef0ac749a14">raw</a></li>
266 266 <li><a href="/file/2ef0ac749a14">browse</a></li>
267 267 </ul>
268 268 <ul>
269 269
270 270 </ul>
271 271 </div>
272 272
273 273 <div class="main">
274 274
275 275 <h2><a href="/">test</a></h2>
276 276 <h3>changeset 0:2ef0ac749a14 <span class="tag">1.0</span> </h3>
277 277
278 278 <form class="search" action="/log">
279 279
280 280 <p><input name="rev" id="search1" type="text" size="30" /></p>
281 281 <div id="hint">find changesets by author, revision,
282 282 files, or words in the commit message</div>
283 283 </form>
284 284
285 285 <div class="description">base</div>
286 286
287 287 <table id="changesetEntry">
288 288 <tr>
289 289 <th class="author">author</th>
290 290 <td class="author">&#116;&#101;&#115;&#116;</td>
291 291 </tr>
292 292 <tr>
293 293 <th class="date">date</th>
294 <td class="date">Thu Jan 01 00:00:00 1970 +0000 (many years ago)</td></tr>
294 <td class="date">Thu Jan 01 00:00:00 1970 +0000 (1970-01-01)</td></tr>
295 295 <tr>
296 296 <th class="author">parents</th>
297 297 <td class="author"></td>
298 298 </tr>
299 299 <tr>
300 300 <th class="author">children</th>
301 301 <td class="author"> <a href="/rev/a4f92ed23982">a4f92ed23982</a></td>
302 302 </tr>
303 303 <tr>
304 304 <th class="files">files</th>
305 305 <td class="files"><a href="/file/2ef0ac749a14/da/foo">da/foo</a> <a href="/file/2ef0ac749a14/foo">foo</a> </td>
306 306 </tr>
307 307 </table>
308 308
309 309 <div class="overflow">
310 310 <div class="sourcefirst"> line diff</div>
311 311
312 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
313 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
314 314 </span><a href="#l1.3" id="l1.3"> 1.3</a> <span class="atline">@@ -0,0 +1,1 @@
315 315 </span><a href="#l1.4" id="l1.4"> 1.4</a> <span class="plusline">+foo
316 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
317 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
318 318 </span><a href="#l2.3" id="l2.3"> 2.3</a> <span class="atline">@@ -0,0 +1,1 @@
319 319 </span><a href="#l2.4" id="l2.4"> 2.4</a> <span class="plusline">+foo
320 320 </span></pre></div>
321 321 </div>
322 322
323 323 </div>
324 324 </div>
325 325
326 326
327 327 </body>
328 328 </html>
329 329
330 330 200 Script output follows
331 331
332 332
333 333 # HG changeset patch
334 334 # User test
335 335 # Date 0 0
336 336 # Node ID a4f92ed23982be056b9852de5dfe873eaac7f0de
337 337 # Parent 2ef0ac749a14e4f57a5a822464a0902c6f7f448f
338 338 Added tag 1.0 for changeset 2ef0ac749a14
339 339
340 340 diff -r 2ef0ac749a14 -r a4f92ed23982 .hgtags
341 341 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
342 342 +++ b/.hgtags Thu Jan 01 00:00:00 1970 +0000
343 343 @@ -0,0 +1,1 @@
344 344 +2ef0ac749a14e4f57a5a822464a0902c6f7f448f 1.0
345 345
346 346 % File-related
347 347 200 Script output follows
348 348
349 349 foo
350 350 200 Script output follows
351 351
352 352
353 353 test@0: foo
354 354
355 355
356 356
357 357
358 358 200 Script output follows
359 359
360 360
361 361 drwxr-xr-x da
362 362 -rw-r--r-- 45 .hgtags
363 363 -rw-r--r-- 4 foo
364 364
365 365
366 366 200 Script output follows
367 367
368 368 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
369 369 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
370 370 <head>
371 371 <link rel="icon" href="/static/hgicon.png" type="image/png" />
372 372 <meta name="robots" content="index, nofollow" />
373 373 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
374 374
375 375 <title>test: a4f92ed23982 foo</title>
376 376 </head>
377 377 <body>
378 378
379 379 <div class="container">
380 380 <div class="menu">
381 381 <div class="logo">
382 382 <a href="http://mercurial.selenic.com/">
383 383 <img src="/static/hglogo.png" alt="mercurial" /></a>
384 384 </div>
385 385 <ul>
386 386 <li><a href="/shortlog/a4f92ed23982">log</a></li>
387 387 <li><a href="/graph/a4f92ed23982">graph</a></li>
388 388 <li><a href="/tags">tags</a></li>
389 389 <li><a href="/branches">branches</a></li>
390 390 </ul>
391 391 <ul>
392 392 <li><a href="/rev/a4f92ed23982">changeset</a></li>
393 393 <li><a href="/file/a4f92ed23982/">browse</a></li>
394 394 </ul>
395 395 <ul>
396 396 <li class="active">file</li>
397 397 <li><a href="/file/tip/foo">latest</a></li>
398 398 <li><a href="/diff/a4f92ed23982/foo">diff</a></li>
399 399 <li><a href="/annotate/a4f92ed23982/foo">annotate</a></li>
400 400 <li><a href="/log/a4f92ed23982/foo">file log</a></li>
401 401 <li><a href="/raw-file/a4f92ed23982/foo">raw</a></li>
402 402 </ul>
403 403 </div>
404 404
405 405 <div class="main">
406 406 <h2><a href="/">test</a></h2>
407 407 <h3>view foo @ 1:a4f92ed23982</h3>
408 408
409 409 <form class="search" action="/log">
410 410
411 411 <p><input name="rev" id="search1" type="text" size="30" /></p>
412 412 <div id="hint">find changesets by author, revision,
413 413 files, or words in the commit message</div>
414 414 </form>
415 415
416 416 <div class="description">Added tag 1.0 for changeset 2ef0ac749a14</div>
417 417
418 418 <table id="changesetEntry">
419 419 <tr>
420 420 <th class="author">author</th>
421 421 <td class="author">&#116;&#101;&#115;&#116;</td>
422 422 </tr>
423 423 <tr>
424 424 <th class="date">date</th>
425 <td class="date">Thu Jan 01 00:00:00 1970 +0000 (many years ago)</td>
425 <td class="date">Thu Jan 01 00:00:00 1970 +0000 (1970-01-01)</td>
426 426 </tr>
427 427 <tr>
428 428 <th class="author">parents</th>
429 429 <td class="author"></td>
430 430 </tr>
431 431 <tr>
432 432 <th class="author">children</th>
433 433 <td class="author"><a href="/file/1d22e65f027e/foo">1d22e65f027e</a> </td>
434 434 </tr>
435 435
436 436 </table>
437 437
438 438 <div class="overflow">
439 439 <div class="sourcefirst"> line source</div>
440 440
441 441 <div class="parity0 source"><a href="#l1" id="l1"> 1</a> foo
442 442 </div>
443 443 <div class="sourcelast"></div>
444 444 </div>
445 445 </div>
446 446 </div>
447 447
448 448
449 449
450 450 </body>
451 451 </html>
452 452
453 453 200 Script output follows
454 454
455 455
456 456 diff -r 000000000000 -r a4f92ed23982 foo
457 457 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
458 458 +++ b/foo Thu Jan 01 00:00:00 1970 +0000
459 459 @@ -0,0 +1,1 @@
460 460 +foo
461 461
462 462
463 463
464 464
465 465 % Overviews
466 466 200 Script output follows
467 467
468 468 <?xml version="1.0" encoding="ascii"?>
469 469 <feed xmlns="http://127.0.0.1/2005/Atom">
470 470 <id>http://127.0.0.1/</id>
471 471 <link rel="self" href="http://127.0.0.1/atom-tags"/>
472 472 <link rel="alternate" href="http://127.0.0.1/tags"/>
473 473 <title>test: tags</title>
474 474 <summary>test tag history</summary>
475 475 <author><name>Mercurial SCM</name></author>
476 476 <updated>1970-01-01T00:00:00+00:00</updated>
477 477
478 478 <entry>
479 479 <title>1.0</title>
480 480 <link rel="alternate" href="http://127.0.0.1/rev/2ef0ac749a14"/>
481 481 <id>http://127.0.0.1/#tag-2ef0ac749a14e4f57a5a822464a0902c6f7f448f</id>
482 482 <updated>1970-01-01T00:00:00+00:00</updated>
483 483 <published>1970-01-01T00:00:00+00:00</published>
484 484 <content type="text">1.0</content>
485 485 </entry>
486 486
487 487 </feed>
488 488 200 Script output follows
489 489
490 490 <?xml version="1.0" encoding="ascii"?>
491 491 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://127.0.0.1/TR/xhtml1/DTD/xhtml1-strict.dtd">
492 492 <html xmlns="http://127.0.0.1/1999/xhtml" xml:lang="en-US" lang="en-US">
493 493 <head>
494 494 <link rel="icon" href="/static/hgicon.png" type="image/png" />
495 495 <meta name="robots" content="index, nofollow"/>
496 496 <link rel="stylesheet" href="/static/style-gitweb.css" type="text/css" />
497 497
498 498
499 499 <title>test: Branches</title>
500 500 <link rel="alternate" type="application/atom+xml"
501 501 href="/atom-tags" title="Atom feed for test"/>
502 502 <link rel="alternate" type="application/rss+xml"
503 503 href="/rss-tags" title="RSS feed for test"/>
504 504 </head>
505 505 <body>
506 506
507 507 <div class="page_header">
508 508 <a href="http://127.0.0.1/" title="Mercurial" style="float: right;">Mercurial</a><a href="/summary?style=gitweb">test</a> / branches
509 509 </div>
510 510
511 511 <div class="page_nav">
512 512 <a href="/summary?style=gitweb">summary</a> |
513 513 <a href="/shortlog?style=gitweb">shortlog</a> |
514 514 <a href="/log?style=gitweb">changelog</a> |
515 515 <a href="/graph?style=gitweb">graph</a> |
516 516 <a href="/tags?style=gitweb">tags</a> |
517 517 branches |
518 518 <a href="/file/1d22e65f027e?style=gitweb">files</a>
519 519 <br/>
520 520 </div>
521 521
522 522 <div class="title">&nbsp;</div>
523 523 <table cellspacing="0">
524 524
525 525 <tr class="parity0">
526 <td class="age"><i>many years ago</i></td>
526 <td class="age"><i>1970-01-01</i></td>
527 527 <td><a class="list" href="/shortlog/1d22e65f027e?style=gitweb"><b>1d22e65f027e</b></a></td>
528 528 <td class="open">stable</td>
529 529 <td class="link">
530 530 <a href="/changeset/1d22e65f027e?style=gitweb">changeset</a> |
531 531 <a href="/log/1d22e65f027e?style=gitweb">changelog</a> |
532 532 <a href="/file/1d22e65f027e?style=gitweb">files</a>
533 533 </td>
534 534 </tr>
535 535 <tr class="parity1">
536 <td class="age"><i>many years ago</i></td>
536 <td class="age"><i>1970-01-01</i></td>
537 537 <td><a class="list" href="/shortlog/a4f92ed23982?style=gitweb"><b>a4f92ed23982</b></a></td>
538 538 <td class="inactive">default</td>
539 539 <td class="link">
540 540 <a href="/changeset/a4f92ed23982?style=gitweb">changeset</a> |
541 541 <a href="/log/a4f92ed23982?style=gitweb">changelog</a> |
542 542 <a href="/file/a4f92ed23982?style=gitweb">files</a>
543 543 </td>
544 544 </tr>
545 545 </table>
546 546
547 547 <div class="page_footer">
548 548 <div class="page_footer_text">test</div>
549 549 <div class="rss_logo">
550 550 <a href="/rss-log">RSS</a>
551 551 <a href="/atom-log">Atom</a>
552 552 </div>
553 553 <br />
554 554
555 555 </div>
556 556 </body>
557 557 </html>
558 558
559 559 200 Script output follows
560 560
561 561 <?xml version="1.0" encoding="ascii"?>
562 562 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
563 563 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US" lang="en-US">
564 564 <head>
565 565 <link rel="icon" href="/static/hgicon.png" type="image/png" />
566 566 <meta name="robots" content="index, nofollow"/>
567 567 <link rel="stylesheet" href="/static/style-gitweb.css" type="text/css" />
568 568
569 569
570 570 <title>test: Summary</title>
571 571 <link rel="alternate" type="application/atom+xml"
572 572 href="/atom-log" title="Atom feed for test"/>
573 573 <link rel="alternate" type="application/rss+xml"
574 574 href="/rss-log" title="RSS feed for test"/>
575 575 </head>
576 576 <body>
577 577
578 578 <div class="page_header">
579 579 <a href="http://mercurial.selenic.com/" title="Mercurial" style="float: right;">Mercurial</a><a href="/summary?style=gitweb">test</a> / summary
580 580
581 581 <form action="/log">
582 582 <input type="hidden" name="style" value="gitweb" />
583 583 <div class="search">
584 584 <input type="text" name="rev" />
585 585 </div>
586 586 </form>
587 587 </div>
588 588
589 589 <div class="page_nav">
590 590 summary |
591 591 <a href="/shortlog?style=gitweb">shortlog</a> |
592 592 <a href="/log?style=gitweb">changelog</a> |
593 593 <a href="/graph?style=gitweb">graph</a> |
594 594 <a href="/tags?style=gitweb">tags</a> |
595 595 <a href="/branches?style=gitweb">branches</a> |
596 596 <a href="/file/1d22e65f027e?style=gitweb">files</a>
597 597 <br/>
598 598 </div>
599 599
600 600 <div class="title">&nbsp;</div>
601 601 <table cellspacing="0">
602 602 <tr><td>description</td><td>unknown</td></tr>
603 603 <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>
604 604 <tr><td>last change</td><td>Thu, 01 Jan 1970 00:00:00 +0000</td></tr>
605 605 </table>
606 606
607 607 <div><a class="title" href="/shortlog?style=gitweb">changes</a></div>
608 608 <table cellspacing="0">
609 609
610 610 <tr class="parity0">
611 <td class="age"><i>many years ago</i></td>
611 <td class="age"><i>1970-01-01</i></td>
612 612 <td><i>test</i></td>
613 613 <td>
614 614 <a class="list" href="/rev/1d22e65f027e?style=gitweb">
615 615 <b>branch</b>
616 616 <span class="logtags"><span class="branchtag" title="stable">stable</span> <span class="tagtag" title="tip">tip</span> </span>
617 617 </a>
618 618 </td>
619 619 <td class="link" nowrap>
620 620 <a href="/rev/1d22e65f027e?style=gitweb">changeset</a> |
621 621 <a href="/file/1d22e65f027e?style=gitweb">files</a>
622 622 </td>
623 623 </tr>
624 624 <tr class="parity1">
625 <td class="age"><i>many years ago</i></td>
625 <td class="age"><i>1970-01-01</i></td>
626 626 <td><i>test</i></td>
627 627 <td>
628 628 <a class="list" href="/rev/a4f92ed23982?style=gitweb">
629 629 <b>Added tag 1.0 for changeset 2ef0ac749a14</b>
630 630 <span class="logtags"><span class="branchtag" title="default">default</span> </span>
631 631 </a>
632 632 </td>
633 633 <td class="link" nowrap>
634 634 <a href="/rev/a4f92ed23982?style=gitweb">changeset</a> |
635 635 <a href="/file/a4f92ed23982?style=gitweb">files</a>
636 636 </td>
637 637 </tr>
638 638 <tr class="parity0">
639 <td class="age"><i>many years ago</i></td>
639 <td class="age"><i>1970-01-01</i></td>
640 640 <td><i>test</i></td>
641 641 <td>
642 642 <a class="list" href="/rev/2ef0ac749a14?style=gitweb">
643 643 <b>base</b>
644 644 <span class="logtags"><span class="tagtag" title="1.0">1.0</span> </span>
645 645 </a>
646 646 </td>
647 647 <td class="link" nowrap>
648 648 <a href="/rev/2ef0ac749a14?style=gitweb">changeset</a> |
649 649 <a href="/file/2ef0ac749a14?style=gitweb">files</a>
650 650 </td>
651 651 </tr>
652 652 <tr class="light"><td colspan="4"><a class="list" href="/shortlog?style=gitweb">...</a></td></tr>
653 653 </table>
654 654
655 655 <div><a class="title" href="/tags?style=gitweb">tags</a></div>
656 656 <table cellspacing="0">
657 657
658 658 <tr class="parity0">
659 <td class="age"><i>many years ago</i></td>
659 <td class="age"><i>1970-01-01</i></td>
660 660 <td><a class="list" href="/rev/2ef0ac749a14?style=gitweb"><b>1.0</b></a></td>
661 661 <td class="link">
662 662 <a href="/rev/2ef0ac749a14?style=gitweb">changeset</a> |
663 663 <a href="/log/2ef0ac749a14?style=gitweb">changelog</a> |
664 664 <a href="/file/2ef0ac749a14?style=gitweb">files</a>
665 665 </td>
666 666 </tr>
667 667 <tr class="light"><td colspan="3"><a class="list" href="/tags?style=gitweb">...</a></td></tr>
668 668 </table>
669 669
670 670 <div><a class="title" href="#">branches</a></div>
671 671 <table cellspacing="0">
672 672
673 673 <tr class="parity0">
674 <td class="age"><i>many years ago</i></td>
674 <td class="age"><i>1970-01-01</i></td>
675 675 <td><a class="list" href="/shortlog/1d22e65f027e?style=gitweb"><b>1d22e65f027e</b></a></td>
676 676 <td class="">stable</td>
677 677 <td class="link">
678 678 <a href="/changeset/1d22e65f027e?style=gitweb">changeset</a> |
679 679 <a href="/log/1d22e65f027e?style=gitweb">changelog</a> |
680 680 <a href="/file/1d22e65f027e?style=gitweb">files</a>
681 681 </td>
682 682 </tr>
683 683 <tr class="parity1">
684 <td class="age"><i>many years ago</i></td>
684 <td class="age"><i>1970-01-01</i></td>
685 685 <td><a class="list" href="/shortlog/a4f92ed23982?style=gitweb"><b>a4f92ed23982</b></a></td>
686 686 <td class="">default</td>
687 687 <td class="link">
688 688 <a href="/changeset/a4f92ed23982?style=gitweb">changeset</a> |
689 689 <a href="/log/a4f92ed23982?style=gitweb">changelog</a> |
690 690 <a href="/file/a4f92ed23982?style=gitweb">files</a>
691 691 </td>
692 692 </tr>
693 693 <tr class="light">
694 694 <td colspan="4"><a class="list" href="#">...</a></td>
695 695 </tr>
696 696 </table>
697 697 <div class="page_footer">
698 698 <div class="page_footer_text">test</div>
699 699 <div class="rss_logo">
700 700 <a href="/rss-log">RSS</a>
701 701 <a href="/atom-log">Atom</a>
702 702 </div>
703 703 <br />
704 704
705 705 </div>
706 706 </body>
707 707 </html>
708 708
709 709 200 Script output follows
710 710
711 711 <?xml version="1.0" encoding="ascii"?>
712 712 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
713 713 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US" lang="en-US">
714 714 <head>
715 715 <link rel="icon" href="/static/hgicon.png" type="image/png" />
716 716 <meta name="robots" content="index, nofollow"/>
717 717 <link rel="stylesheet" href="/static/style-gitweb.css" type="text/css" />
718 718
719 719
720 720 <title>test: Graph</title>
721 721 <link rel="alternate" type="application/atom+xml"
722 722 href="/atom-log" title="Atom feed for test"/>
723 723 <link rel="alternate" type="application/rss+xml"
724 724 href="/rss-log" title="RSS feed for test"/>
725 725 <!--[if IE]><script type="text/javascript" src="/static/excanvas.js"></script><![endif]-->
726 726 </head>
727 727 <body>
728 728
729 729 <div class="page_header">
730 730 <a href="http://mercurial.selenic.com/" title="Mercurial" style="float: right;">Mercurial</a><a href="/summary?style=gitweb">test</a> / graph
731 731 </div>
732 732
733 733 <form action="/log">
734 734 <input type="hidden" name="style" value="gitweb" />
735 735 <div class="search">
736 736 <input type="text" name="rev" />
737 737 </div>
738 738 </form>
739 739 <div class="page_nav">
740 740 <a href="/summary?style=gitweb">summary</a> |
741 741 <a href="/shortlog?style=gitweb">shortlog</a> |
742 742 <a href="/log/2?style=gitweb">changelog</a> |
743 743 graph |
744 744 <a href="/tags?style=gitweb">tags</a> |
745 745 <a href="/branches?style=gitweb">branches</a> |
746 746 <a href="/file/1d22e65f027e?style=gitweb">files</a>
747 747 <br/>
748 748 <a href="/graph/2?style=gitweb&revcount=12">less</a>
749 749 <a href="/graph/2?style=gitweb&revcount=50">more</a>
750 750 | <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/>
751 751 </div>
752 752
753 753 <div class="title">&nbsp;</div>
754 754
755 755 <noscript>The revision graph only works with JavaScript-enabled browsers.</noscript>
756 756
757 757 <div id="wrapper">
758 758 <ul id="nodebgs"></ul>
759 759 <canvas id="graph" width="224" height="129"></canvas>
760 760 <ul id="graphnodes"></ul>
761 761 </div>
762 762
763 763 <script type="text/javascript" src="/static/graph.js"></script>
764 764 <script>
765 765 <!-- hide script content
766 766
767 var data = [["1d22e65f027e", [0, 1], [[0, 0, 1]], "branch", "test", "many years ago", ["stable", true], ["tip"]], ["a4f92ed23982", [0, 1], [[0, 0, 1]], "Added tag 1.0 for changeset 2ef0ac749a14", "test", "many years ago", ["default", true], []], ["2ef0ac749a14", [0, 1], [], "base", "test", "many years ago", ["default", false], ["1.0"]]];
767 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"]]];
768 768 var graph = new Graph();
769 769 graph.scale(39);
770 770
771 771 graph.edge = function(x0, y0, x1, y1, color) {
772 772
773 773 this.setColor(color, 0.0, 0.65);
774 774 this.ctx.beginPath();
775 775 this.ctx.moveTo(x0, y0);
776 776 this.ctx.lineTo(x1, y1);
777 777 this.ctx.stroke();
778 778
779 779 }
780 780
781 781 var revlink = '<li style="_STYLE"><span class="desc">';
782 782 revlink += '<a class="list" href="/rev/_NODEID?style=gitweb" title="_NODEID"><b>_DESC</b></a>';
783 783 revlink += '</span> _TAGS';
784 784 revlink += '<span class="info">_DATE ago, by _USER</span></li>';
785 785
786 786 graph.vertex = function(x, y, color, parity, cur) {
787 787
788 788 this.ctx.beginPath();
789 789 color = this.setColor(color, 0.25, 0.75);
790 790 this.ctx.arc(x, y, radius, 0, Math.PI * 2, true);
791 791 this.ctx.fill();
792 792
793 793 var bg = '<li class="bg parity' + parity + '"></li>';
794 794 var left = (this.columns + 1) * this.bg_height;
795 795 var nstyle = 'padding-left: ' + left + 'px;';
796 796 var item = revlink.replace(/_STYLE/, nstyle);
797 797 item = item.replace(/_PARITY/, 'parity' + parity);
798 798 item = item.replace(/_NODEID/, cur[0]);
799 799 item = item.replace(/_NODEID/, cur[0]);
800 800 item = item.replace(/_DESC/, cur[3]);
801 801 item = item.replace(/_USER/, cur[4]);
802 802 item = item.replace(/_DATE/, cur[5]);
803 803
804 804 var tagspan = '';
805 805 if (cur[7].length || (cur[6][0] != 'default' || cur[6][1])) {
806 806 tagspan = '<span class="logtags">';
807 807 if (cur[6][1]) {
808 808 tagspan += '<span class="branchtag" title="' + cur[6][0] + '">';
809 809 tagspan += cur[6][0] + '</span> ';
810 810 } else if (!cur[6][1] && cur[6][0] != 'default') {
811 811 tagspan += '<span class="inbranchtag" title="' + cur[6][0] + '">';
812 812 tagspan += cur[6][0] + '</span> ';
813 813 }
814 814 if (cur[7].length) {
815 815 for (var t in cur[7]) {
816 816 var tag = cur[7][t];
817 817 tagspan += '<span class="tagtag">' + tag + '</span> ';
818 818 }
819 819 }
820 820 tagspan += '</span>';
821 821 }
822 822
823 823 item = item.replace(/_TAGS/, tagspan);
824 824 return [bg, item];
825 825
826 826 }
827 827
828 828 graph.render(data);
829 829
830 830 // stop hiding script -->
831 831 </script>
832 832
833 833 <div class="page_nav">
834 834 <a href="/graph/2?style=gitweb&revcount=12">less</a>
835 835 <a href="/graph/2?style=gitweb&revcount=50">more</a>
836 836 | <a href="/graph/2ef0ac749a14?style=gitweb">(0)</a> <a href="/graph/2ef0ac749a14?style=gitweb">-2</a> <a href="/graph/tip?style=gitweb">tip</a>
837 837 </div>
838 838
839 839 <div class="page_footer">
840 840 <div class="page_footer_text">test</div>
841 841 <div class="rss_logo">
842 842 <a href="/rss-log">RSS</a>
843 843 <a href="/atom-log">Atom</a>
844 844 </div>
845 845 <br />
846 846
847 847 </div>
848 848 </body>
849 849 </html>
850 850
851 851 % capabilities
852 852 200 Script output follows
853 853
854 854 lookup changegroupsubset branchmap unbundle=HG10GZ,HG10BZ,HG10UN% heads
855 855 200 Script output follows
856 856
857 857 1d22e65f027e5a0609357e7d8e7508cd2ba5d2fe
858 858 % lookup
859 859 200 Script output follows
860 860
861 861 0 'key'
862 862 % branches
863 863 200 Script output follows
864 864
865 865 1d22e65f027e5a0609357e7d8e7508cd2ba5d2fe 2ef0ac749a14e4f57a5a822464a0902c6f7f448f 0000000000000000000000000000000000000000 0000000000000000000000000000000000000000
866 866 % changegroup
867 867 200 Script output follows
868 868
869 869 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
870 870 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~\
871 871 \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
872 872 \xb0\x90\x92\x88\xb9\x14"\x068\xc2\x1e@\x00\xbb\x8a)\xd3\'\x859
873 873 \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
874 874 % stream_out
875 875 200 Script output follows
876 876
877 877 1
878 878 % failing unbundle, requires POST request
879 879 405 push requires POST request
880 880
881 881 0
882 882 push requires POST request
883 883 % Static files
884 884 200 Script output follows
885 885
886 886 a { text-decoration:none; }
887 887 .age { white-space:nowrap; }
888 888 .date { white-space:nowrap; }
889 889 .indexlinks { white-space:nowrap; }
890 890 .parity0 { background-color: #ddd; }
891 891 .parity1 { background-color: #eee; }
892 892 .lineno { width: 60px; color: #aaa; font-size: smaller;
893 893 text-align: right; }
894 894 .plusline { color: green; }
895 895 .minusline { color: red; }
896 896 .atline { color: purple; }
897 897 .annotate { font-size: smaller; text-align: right; padding-right: 1em; }
898 898 .buttons a {
899 899 background-color: #666;
900 900 padding: 2pt;
901 901 color: white;
902 902 font-family: sans;
903 903 font-weight: bold;
904 904 }
905 905 .navigate a {
906 906 background-color: #ccc;
907 907 padding: 2pt;
908 908 font-family: sans;
909 909 color: black;
910 910 }
911 911
912 912 .metatag {
913 913 background-color: #888;
914 914 color: white;
915 915 text-align: right;
916 916 }
917 917
918 918 /* Common */
919 919 pre { margin: 0; }
920 920
921 921 .logo {
922 922 float: right;
923 923 clear: right;
924 924 }
925 925
926 926 /* Changelog/Filelog entries */
927 927 .logEntry { width: 100%; }
928 928 .logEntry .age { width: 15%; }
929 929 .logEntry th { font-weight: normal; text-align: right; vertical-align: top; }
930 930 .logEntry th.age, .logEntry th.firstline { font-weight: bold; }
931 931 .logEntry th.firstline { text-align: left; width: inherit; }
932 932
933 933 /* Shortlog entries */
934 934 .slogEntry { width: 100%; }
935 935 .slogEntry .age { width: 8em; }
936 936 .slogEntry td { font-weight: normal; text-align: left; vertical-align: top; }
937 937 .slogEntry td.author { width: 15em; }
938 938
939 939 /* Tag entries */
940 940 #tagEntries { list-style: none; margin: 0; padding: 0; }
941 941 #tagEntries .tagEntry { list-style: none; margin: 0; padding: 0; }
942 942
943 943 /* Changeset entry */
944 944 #changesetEntry { }
945 945 #changesetEntry th { font-weight: normal; background-color: #888; color: #fff; text-align: right; }
946 946 #changesetEntry th.files, #changesetEntry th.description { vertical-align: top; }
947 947
948 948 /* File diff view */
949 949 #filediffEntry { }
950 950 #filediffEntry th { font-weight: normal; background-color: #888; color: #fff; text-align: right; }
951 951
952 952 /* Graph */
953 953 div#wrapper {
954 954 position: relative;
955 955 margin: 0;
956 956 padding: 0;
957 957 }
958 958
959 959 canvas {
960 960 position: absolute;
961 961 z-index: 5;
962 962 top: -0.6em;
963 963 margin: 0;
964 964 }
965 965
966 966 ul#nodebgs {
967 967 list-style: none inside none;
968 968 padding: 0;
969 969 margin: 0;
970 970 top: -0.7em;
971 971 }
972 972
973 973 ul#graphnodes li, ul#nodebgs li {
974 974 height: 39px;
975 975 }
976 976
977 977 ul#graphnodes {
978 978 position: absolute;
979 979 z-index: 10;
980 980 top: -0.85em;
981 981 list-style: none inside none;
982 982 padding: 0;
983 983 }
984 984
985 985 ul#graphnodes li .info {
986 986 display: block;
987 987 font-size: 70%;
988 988 position: relative;
989 989 top: -1px;
990 990 }
991 991 % ERRORS ENCOUNTERED
@@ -1,420 +1,420 b''
1 1 % setting up repo
2 2 adding a
3 3 adding b
4 4 % change permissions for git diffs
5 5 % set up hgweb
6 6 % revision
7 7 200 Script output follows
8 8
9 9 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
10 10 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
11 11 <head>
12 12 <link rel="icon" href="/static/hgicon.png" type="image/png" />
13 13 <meta name="robots" content="index, nofollow" />
14 14 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
15 15
16 16 <title>test: 0cd96de13884</title>
17 17 </head>
18 18 <body>
19 19 <div class="container">
20 20 <div class="menu">
21 21 <div class="logo">
22 22 <a href="http://mercurial.selenic.com/">
23 23 <img src="/static/hglogo.png" alt="mercurial" /></a>
24 24 </div>
25 25 <ul>
26 26 <li><a href="/shortlog/0cd96de13884">log</a></li>
27 27 <li><a href="/graph/0cd96de13884">graph</a></li>
28 28 <li><a href="/tags">tags</a></li>
29 29 <li><a href="/branches">branches</a></li>
30 30 </ul>
31 31 <ul>
32 32 <li class="active">changeset</li>
33 33 <li><a href="/raw-rev/0cd96de13884">raw</a></li>
34 34 <li><a href="/file/0cd96de13884">browse</a></li>
35 35 </ul>
36 36 <ul>
37 37
38 38 </ul>
39 39 </div>
40 40
41 41 <div class="main">
42 42
43 43 <h2><a href="/">test</a></h2>
44 44 <h3>changeset 0:0cd96de13884 </h3>
45 45
46 46 <form class="search" action="/log">
47 47
48 48 <p><input name="rev" id="search1" type="text" size="30" /></p>
49 49 <div id="hint">find changesets by author, revision,
50 50 files, or words in the commit message</div>
51 51 </form>
52 52
53 53 <div class="description">a</div>
54 54
55 55 <table id="changesetEntry">
56 56 <tr>
57 57 <th class="author">author</th>
58 58 <td class="author">&#116;&#101;&#115;&#116;</td>
59 59 </tr>
60 60 <tr>
61 61 <th class="date">date</th>
62 <td class="date">Thu Jan 01 00:00:00 1970 +0000 (many years ago)</td></tr>
62 <td class="date">Thu Jan 01 00:00:00 1970 +0000 (1970-01-01)</td></tr>
63 63 <tr>
64 64 <th class="author">parents</th>
65 65 <td class="author"></td>
66 66 </tr>
67 67 <tr>
68 68 <th class="author">children</th>
69 69 <td class="author"> <a href="/rev/78e4ebad7cdf">78e4ebad7cdf</a></td>
70 70 </tr>
71 71 <tr>
72 72 <th class="files">files</th>
73 73 <td class="files"><a href="/file/0cd96de13884/a">a</a> <a href="/file/0cd96de13884/b">b</a> </td>
74 74 </tr>
75 75 </table>
76 76
77 77 <div class="overflow">
78 78 <div class="sourcefirst"> line diff</div>
79 79
80 80 <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
81 81 </span><a href="#l1.2" id="l1.2"> 1.2</a> <span class="plusline">+++ b/a Thu Jan 01 00:00:00 1970 +0000
82 82 </span><a href="#l1.3" id="l1.3"> 1.3</a> <span class="atline">@@ -0,0 +1,1 @@
83 83 </span><a href="#l1.4" id="l1.4"> 1.4</a> <span class="plusline">+a
84 84 </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
85 85 </span><a href="#l2.2" id="l2.2"> 2.2</a> <span class="plusline">+++ b/b Thu Jan 01 00:00:00 1970 +0000
86 86 </span><a href="#l2.3" id="l2.3"> 2.3</a> <span class="atline">@@ -0,0 +1,1 @@
87 87 </span><a href="#l2.4" id="l2.4"> 2.4</a> <span class="plusline">+b
88 88 </span></pre></div>
89 89 </div>
90 90
91 91 </div>
92 92 </div>
93 93
94 94
95 95 </body>
96 96 </html>
97 97
98 98 % raw revision
99 99 200 Script output follows
100 100
101 101
102 102 # HG changeset patch
103 103 # User test
104 104 # Date 0 0
105 105 # Node ID 0cd96de13884b090099512d4794ae87ad067ea8e
106 106
107 107 a
108 108
109 109 diff -r 000000000000 -r 0cd96de13884 a
110 110 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
111 111 +++ b/a Thu Jan 01 00:00:00 1970 +0000
112 112 @@ -0,0 +1,1 @@
113 113 +a
114 114 diff -r 000000000000 -r 0cd96de13884 b
115 115 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
116 116 +++ b/b Thu Jan 01 00:00:00 1970 +0000
117 117 @@ -0,0 +1,1 @@
118 118 +b
119 119
120 120 % diff removed file
121 121 200 Script output follows
122 122
123 123 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
124 124 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
125 125 <head>
126 126 <link rel="icon" href="/static/hgicon.png" type="image/png" />
127 127 <meta name="robots" content="index, nofollow" />
128 128 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
129 129
130 130 <title>test: a diff</title>
131 131 </head>
132 132 <body>
133 133
134 134 <div class="container">
135 135 <div class="menu">
136 136 <div class="logo">
137 137 <a href="http://mercurial.selenic.com/">
138 138 <img src="/static/hglogo.png" alt="mercurial" /></a>
139 139 </div>
140 140 <ul>
141 141 <li><a href="/shortlog/78e4ebad7cdf">log</a></li>
142 142 <li><a href="/graph/78e4ebad7cdf">graph</a></li>
143 143 <li><a href="/tags">tags</a></li>
144 144 <li><a href="/branches">branches</a></li>
145 145 </ul>
146 146 <ul>
147 147 <li><a href="/rev/78e4ebad7cdf">changeset</a></li>
148 148 <li><a href="/file/78e4ebad7cdf">browse</a></li>
149 149 </ul>
150 150 <ul>
151 151 <li><a href="/file/78e4ebad7cdf/a">file</a></li>
152 152 <li><a href="/file/tip/a">latest</a></li>
153 153 <li class="active">diff</li>
154 154 <li><a href="/annotate/78e4ebad7cdf/a">annotate</a></li>
155 155 <li><a href="/log/78e4ebad7cdf/a">file log</a></li>
156 156 <li><a href="/raw-file/78e4ebad7cdf/a">raw</a></li>
157 157 </ul>
158 158 </div>
159 159
160 160 <div class="main">
161 161 <h2><a href="/">test</a></h2>
162 162 <h3>diff a @ 1:78e4ebad7cdf</h3>
163 163
164 164 <form class="search" action="/log">
165 165 <p></p>
166 166 <p><input name="rev" id="search1" type="text" size="30" /></p>
167 167 <div id="hint">find changesets by author, revision,
168 168 files, or words in the commit message</div>
169 169 </form>
170 170
171 171 <div class="description">b</div>
172 172
173 173 <table id="changesetEntry">
174 174 <tr>
175 175 <th>author</th>
176 176 <td>&#116;&#101;&#115;&#116;</td>
177 177 </tr>
178 178 <tr>
179 179 <th>date</th>
180 <td>Thu Jan 01 00:00:00 1970 +0000 (many years ago)</td>
180 <td>Thu Jan 01 00:00:00 1970 +0000 (1970-01-01)</td>
181 181 </tr>
182 182 <tr>
183 183 <th>parents</th>
184 184 <td></td>
185 185 </tr>
186 186 <tr>
187 187 <th>children</th>
188 188 <td></td>
189 189 </tr>
190 190
191 191 </table>
192 192
193 193 <div class="overflow">
194 194 <div class="sourcefirst"> line diff</div>
195 195
196 196 <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
197 197 </span><a href="#l1.2" id="l1.2"> 1.2</a> <span class="plusline">+++ b/a Thu Jan 01 00:00:00 1970 +0000
198 198 </span><a href="#l1.3" id="l1.3"> 1.3</a> <span class="atline">@@ -0,0 +1,1 @@
199 199 </span><a href="#l1.4" id="l1.4"> 1.4</a> <span class="plusline">+a
200 200 </span></pre></div>
201 201 </div>
202 202 </div>
203 203 </div>
204 204
205 205
206 206
207 207 </body>
208 208 </html>
209 209
210 210 % set up hgweb with git diffs
211 211 % revision
212 212 200 Script output follows
213 213
214 214 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
215 215 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
216 216 <head>
217 217 <link rel="icon" href="/static/hgicon.png" type="image/png" />
218 218 <meta name="robots" content="index, nofollow" />
219 219 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
220 220
221 221 <title>test: 0cd96de13884</title>
222 222 </head>
223 223 <body>
224 224 <div class="container">
225 225 <div class="menu">
226 226 <div class="logo">
227 227 <a href="http://mercurial.selenic.com/">
228 228 <img src="/static/hglogo.png" alt="mercurial" /></a>
229 229 </div>
230 230 <ul>
231 231 <li><a href="/shortlog/0cd96de13884">log</a></li>
232 232 <li><a href="/graph/0cd96de13884">graph</a></li>
233 233 <li><a href="/tags">tags</a></li>
234 234 <li><a href="/branches">branches</a></li>
235 235 </ul>
236 236 <ul>
237 237 <li class="active">changeset</li>
238 238 <li><a href="/raw-rev/0cd96de13884">raw</a></li>
239 239 <li><a href="/file/0cd96de13884">browse</a></li>
240 240 </ul>
241 241 <ul>
242 242
243 243 </ul>
244 244 </div>
245 245
246 246 <div class="main">
247 247
248 248 <h2><a href="/">test</a></h2>
249 249 <h3>changeset 0:0cd96de13884 </h3>
250 250
251 251 <form class="search" action="/log">
252 252
253 253 <p><input name="rev" id="search1" type="text" size="30" /></p>
254 254 <div id="hint">find changesets by author, revision,
255 255 files, or words in the commit message</div>
256 256 </form>
257 257
258 258 <div class="description">a</div>
259 259
260 260 <table id="changesetEntry">
261 261 <tr>
262 262 <th class="author">author</th>
263 263 <td class="author">&#116;&#101;&#115;&#116;</td>
264 264 </tr>
265 265 <tr>
266 266 <th class="date">date</th>
267 <td class="date">Thu Jan 01 00:00:00 1970 +0000 (many years ago)</td></tr>
267 <td class="date">Thu Jan 01 00:00:00 1970 +0000 (1970-01-01)</td></tr>
268 268 <tr>
269 269 <th class="author">parents</th>
270 270 <td class="author"></td>
271 271 </tr>
272 272 <tr>
273 273 <th class="author">children</th>
274 274 <td class="author"> <a href="/rev/78e4ebad7cdf">78e4ebad7cdf</a></td>
275 275 </tr>
276 276 <tr>
277 277 <th class="files">files</th>
278 278 <td class="files"><a href="/file/0cd96de13884/a">a</a> <a href="/file/0cd96de13884/b">b</a> </td>
279 279 </tr>
280 280 </table>
281 281
282 282 <div class="overflow">
283 283 <div class="sourcefirst"> line diff</div>
284 284
285 285 <div class="source bottomline parity0"><pre><a href="#l1.1" id="l1.1"> 1.1</a> new file mode 100644
286 286 <a href="#l1.2" id="l1.2"> 1.2</a> <span class="minusline">--- /dev/null
287 287 </span><a href="#l1.3" id="l1.3"> 1.3</a> <span class="plusline">+++ b/a
288 288 </span><a href="#l1.4" id="l1.4"> 1.4</a> <span class="atline">@@ -0,0 +1,1 @@
289 289 </span><a href="#l1.5" id="l1.5"> 1.5</a> <span class="plusline">+a
290 290 </span></pre></div><div class="source bottomline parity1"><pre><a href="#l2.1" id="l2.1"> 2.1</a> new file mode 100644
291 291 <a href="#l2.2" id="l2.2"> 2.2</a> <span class="minusline">--- /dev/null
292 292 </span><a href="#l2.3" id="l2.3"> 2.3</a> <span class="plusline">+++ b/b
293 293 </span><a href="#l2.4" id="l2.4"> 2.4</a> <span class="atline">@@ -0,0 +1,1 @@
294 294 </span><a href="#l2.5" id="l2.5"> 2.5</a> <span class="plusline">+b
295 295 </span></pre></div>
296 296 </div>
297 297
298 298 </div>
299 299 </div>
300 300
301 301
302 302 </body>
303 303 </html>
304 304
305 305 % revision
306 306 200 Script output follows
307 307
308 308
309 309 # HG changeset patch
310 310 # User test
311 311 # Date 0 0
312 312 # Node ID 0cd96de13884b090099512d4794ae87ad067ea8e
313 313
314 314 a
315 315
316 316 diff --git a/a b/a
317 317 new file mode 100644
318 318 --- /dev/null
319 319 +++ b/a
320 320 @@ -0,0 +1,1 @@
321 321 +a
322 322 diff --git a/b b/b
323 323 new file mode 100644
324 324 --- /dev/null
325 325 +++ b/b
326 326 @@ -0,0 +1,1 @@
327 327 +b
328 328
329 329 % diff removed file
330 330 200 Script output follows
331 331
332 332 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
333 333 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
334 334 <head>
335 335 <link rel="icon" href="/static/hgicon.png" type="image/png" />
336 336 <meta name="robots" content="index, nofollow" />
337 337 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
338 338
339 339 <title>test: a diff</title>
340 340 </head>
341 341 <body>
342 342
343 343 <div class="container">
344 344 <div class="menu">
345 345 <div class="logo">
346 346 <a href="http://mercurial.selenic.com/">
347 347 <img src="/static/hglogo.png" alt="mercurial" /></a>
348 348 </div>
349 349 <ul>
350 350 <li><a href="/shortlog/78e4ebad7cdf">log</a></li>
351 351 <li><a href="/graph/78e4ebad7cdf">graph</a></li>
352 352 <li><a href="/tags">tags</a></li>
353 353 <li><a href="/branches">branches</a></li>
354 354 </ul>
355 355 <ul>
356 356 <li><a href="/rev/78e4ebad7cdf">changeset</a></li>
357 357 <li><a href="/file/78e4ebad7cdf">browse</a></li>
358 358 </ul>
359 359 <ul>
360 360 <li><a href="/file/78e4ebad7cdf/a">file</a></li>
361 361 <li><a href="/file/tip/a">latest</a></li>
362 362 <li class="active">diff</li>
363 363 <li><a href="/annotate/78e4ebad7cdf/a">annotate</a></li>
364 364 <li><a href="/log/78e4ebad7cdf/a">file log</a></li>
365 365 <li><a href="/raw-file/78e4ebad7cdf/a">raw</a></li>
366 366 </ul>
367 367 </div>
368 368
369 369 <div class="main">
370 370 <h2><a href="/">test</a></h2>
371 371 <h3>diff a @ 1:78e4ebad7cdf</h3>
372 372
373 373 <form class="search" action="/log">
374 374 <p></p>
375 375 <p><input name="rev" id="search1" type="text" size="30" /></p>
376 376 <div id="hint">find changesets by author, revision,
377 377 files, or words in the commit message</div>
378 378 </form>
379 379
380 380 <div class="description">b</div>
381 381
382 382 <table id="changesetEntry">
383 383 <tr>
384 384 <th>author</th>
385 385 <td>&#116;&#101;&#115;&#116;</td>
386 386 </tr>
387 387 <tr>
388 388 <th>date</th>
389 <td>Thu Jan 01 00:00:00 1970 +0000 (many years ago)</td>
389 <td>Thu Jan 01 00:00:00 1970 +0000 (1970-01-01)</td>
390 390 </tr>
391 391 <tr>
392 392 <th>parents</th>
393 393 <td></td>
394 394 </tr>
395 395 <tr>
396 396 <th>children</th>
397 397 <td></td>
398 398 </tr>
399 399
400 400 </table>
401 401
402 402 <div class="overflow">
403 403 <div class="sourcefirst"> line diff</div>
404 404
405 405 <div class="source bottomline parity0"><pre><a href="#l1.1" id="l1.1"> 1.1</a> new file mode 100755
406 406 <a href="#l1.2" id="l1.2"> 1.2</a> <span class="minusline">--- /dev/null
407 407 </span><a href="#l1.3" id="l1.3"> 1.3</a> <span class="plusline">+++ b/a
408 408 </span><a href="#l1.4" id="l1.4"> 1.4</a> <span class="atline">@@ -0,0 +1,1 @@
409 409 </span><a href="#l1.5" id="l1.5"> 1.5</a> <span class="plusline">+a
410 410 </span></pre></div>
411 411 </div>
412 412 </div>
413 413 </div>
414 414
415 415
416 416
417 417 </body>
418 418 </html>
419 419
420 420 % errors
@@ -1,569 +1,569 b''
1 1 adding b
2 2 adding a
3 3 adding a
4 4 changeset: 6:38d962e6234d
5 5 tag: tip
6 6 user: test
7 7 date: Thu Jan 01 00:00:00 1970 +0000
8 8 summary: change c
9 9
10 10 diff -r a3b6a9e4507e -r 38d962e6234d c
11 11 --- a/c Thu Jan 01 00:00:00 1970 +0000
12 12 +++ b/c Thu Jan 01 00:00:00 1970 +0000
13 13 @@ -1,1 +1,2 @@
14 14 b
15 15 +c
16 16
17 17 changeset: 5:a3b6a9e4507e
18 18 user: test
19 19 date: Thu Jan 01 00:00:00 1970 +0000
20 20 summary: mv b
21 21
22 22 diff -r 52e848cdcd88 -r a3b6a9e4507e b
23 23 --- a/b Thu Jan 01 00:00:00 1970 +0000
24 24 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
25 25 @@ -1,1 +0,0 @@
26 26 -b
27 27 diff -r 52e848cdcd88 -r a3b6a9e4507e c
28 28 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
29 29 +++ b/c Thu Jan 01 00:00:00 1970 +0000
30 30 @@ -0,0 +1,1 @@
31 31 +b
32 32
33 33 changeset: 4:52e848cdcd88
34 34 user: test
35 35 date: Thu Jan 01 00:00:00 1970 +0000
36 36 summary: del2 a
37 37
38 38 diff -r 01de2d66a28d -r 52e848cdcd88 a
39 39 --- a/a Thu Jan 01 00:00:00 1970 +0000
40 40 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
41 41 @@ -1,1 +0,0 @@
42 42 -b
43 43
44 44 changeset: 3:01de2d66a28d
45 45 user: test
46 46 date: Thu Jan 01 00:00:00 1970 +0000
47 47 summary: second a
48 48
49 49 diff -r be3ebcc91739 -r 01de2d66a28d a
50 50 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
51 51 +++ b/a Thu Jan 01 00:00:00 1970 +0000
52 52 @@ -0,0 +1,1 @@
53 53 +b
54 54
55 55 changeset: 2:be3ebcc91739
56 56 user: test
57 57 date: Thu Jan 01 00:00:00 1970 +0000
58 58 summary: del a
59 59
60 60 diff -r 5ed941583260 -r be3ebcc91739 a
61 61 --- a/a Thu Jan 01 00:00:00 1970 +0000
62 62 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
63 63 @@ -1,1 +0,0 @@
64 64 -a
65 65
66 66 changeset: 1:5ed941583260
67 67 user: test
68 68 date: Thu Jan 01 00:00:00 1970 +0000
69 69 summary: first a
70 70
71 71 diff -r 6563da9dcf87 -r 5ed941583260 a
72 72 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
73 73 +++ b/a Thu Jan 01 00:00:00 1970 +0000
74 74 @@ -0,0 +1,1 @@
75 75 +a
76 76
77 77 changeset: 0:6563da9dcf87
78 78 user: test
79 79 date: Thu Jan 01 00:00:00 1970 +0000
80 80 summary: b
81 81
82 82 diff -r 000000000000 -r 6563da9dcf87 b
83 83 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
84 84 +++ b/b Thu Jan 01 00:00:00 1970 +0000
85 85 @@ -0,0 +1,1 @@
86 86 +b
87 87
88 88 % tip - two revisions
89 89 200 Script output follows
90 90
91 91 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
92 92 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
93 93 <head>
94 94 <link rel="icon" href="/static/hgicon.png" type="image/png" />
95 95 <meta name="robots" content="index, nofollow" />
96 96 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
97 97
98 98 <title>test: a history</title>
99 99 <link rel="alternate" type="application/atom+xml"
100 100 href="/atom-log/tip/a" title="Atom feed for test:a" />
101 101 <link rel="alternate" type="application/rss+xml"
102 102 href="/rss-log/tip/a" title="RSS feed for test:a" />
103 103 </head>
104 104 <body>
105 105
106 106 <div class="container">
107 107 <div class="menu">
108 108 <div class="logo">
109 109 <a href="http://mercurial.selenic.com/">
110 110 <img src="/static/hglogo.png" alt="mercurial" /></a>
111 111 </div>
112 112 <ul>
113 113 <li><a href="/shortlog/01de2d66a28d">log</a></li>
114 114 <li><a href="/graph/01de2d66a28d">graph</a></li>
115 115 <li><a href="/tags">tags</a></li>
116 116 <li><a href="/branches">branches</a></li>
117 117 </ul>
118 118 <ul>
119 119 <li><a href="/rev/01de2d66a28d">changeset</a></li>
120 120 <li><a href="/file/01de2d66a28d">browse</a></li>
121 121 </ul>
122 122 <ul>
123 123 <li><a href="/file/01de2d66a28d/a">file</a></li>
124 124 <li><a href="/diff/01de2d66a28d/a">diff</a></li>
125 125 <li><a href="/annotate/01de2d66a28d/a">annotate</a></li>
126 126 <li class="active">file log</li>
127 127 <li><a href="/raw-file/01de2d66a28d/a">raw</a></li>
128 128 </ul>
129 129 </div>
130 130
131 131 <div class="main">
132 132 <h2><a href="/">test</a></h2>
133 133 <h3>log a</h3>
134 134
135 135 <form class="search" action="/log">
136 136
137 137 <p><input name="rev" id="search1" type="text" size="30" /></p>
138 138 <div id="hint">find changesets by author, revision,
139 139 files, or words in the commit message</div>
140 140 </form>
141 141
142 142 <div class="navigate"><a href="/log/5ed941583260/a">(0)</a> <a href="/log/tip/a">tip</a> </div>
143 143
144 144 <table class="bigtable">
145 145 <tr>
146 146 <th class="age">age</th>
147 147 <th class="author">author</th>
148 148 <th class="description">description</th>
149 149 </tr>
150 150 <tr class="parity0">
151 <td class="age">many years ago</td>
151 <td class="age">1970-01-01</td>
152 152 <td class="author">test</td>
153 153 <td class="description"><a href="/rev/01de2d66a28d">second a</a></td>
154 154 </tr>
155 155 <tr class="parity1">
156 <td class="age">many years ago</td>
156 <td class="age">1970-01-01</td>
157 157 <td class="author">test</td>
158 158 <td class="description"><a href="/rev/5ed941583260">first a</a></td>
159 159 </tr>
160 160
161 161 </table>
162 162
163 163 </div>
164 164 </div>
165 165
166 166
167 167
168 168 </body>
169 169 </html>
170 170
171 171 % second version - two revisions
172 172 200 Script output follows
173 173
174 174 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
175 175 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
176 176 <head>
177 177 <link rel="icon" href="/static/hgicon.png" type="image/png" />
178 178 <meta name="robots" content="index, nofollow" />
179 179 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
180 180
181 181 <title>test: a history</title>
182 182 <link rel="alternate" type="application/atom+xml"
183 183 href="/atom-log/tip/a" title="Atom feed for test:a" />
184 184 <link rel="alternate" type="application/rss+xml"
185 185 href="/rss-log/tip/a" title="RSS feed for test:a" />
186 186 </head>
187 187 <body>
188 188
189 189 <div class="container">
190 190 <div class="menu">
191 191 <div class="logo">
192 192 <a href="http://mercurial.selenic.com/">
193 193 <img src="/static/hglogo.png" alt="mercurial" /></a>
194 194 </div>
195 195 <ul>
196 196 <li><a href="/shortlog/01de2d66a28d">log</a></li>
197 197 <li><a href="/graph/01de2d66a28d">graph</a></li>
198 198 <li><a href="/tags">tags</a></li>
199 199 <li><a href="/branches">branches</a></li>
200 200 </ul>
201 201 <ul>
202 202 <li><a href="/rev/01de2d66a28d">changeset</a></li>
203 203 <li><a href="/file/01de2d66a28d">browse</a></li>
204 204 </ul>
205 205 <ul>
206 206 <li><a href="/file/01de2d66a28d/a">file</a></li>
207 207 <li><a href="/diff/01de2d66a28d/a">diff</a></li>
208 208 <li><a href="/annotate/01de2d66a28d/a">annotate</a></li>
209 209 <li class="active">file log</li>
210 210 <li><a href="/raw-file/01de2d66a28d/a">raw</a></li>
211 211 </ul>
212 212 </div>
213 213
214 214 <div class="main">
215 215 <h2><a href="/">test</a></h2>
216 216 <h3>log a</h3>
217 217
218 218 <form class="search" action="/log">
219 219
220 220 <p><input name="rev" id="search1" type="text" size="30" /></p>
221 221 <div id="hint">find changesets by author, revision,
222 222 files, or words in the commit message</div>
223 223 </form>
224 224
225 225 <div class="navigate"><a href="/log/5ed941583260/a">(0)</a> <a href="/log/tip/a">tip</a> </div>
226 226
227 227 <table class="bigtable">
228 228 <tr>
229 229 <th class="age">age</th>
230 230 <th class="author">author</th>
231 231 <th class="description">description</th>
232 232 </tr>
233 233 <tr class="parity0">
234 <td class="age">many years ago</td>
234 <td class="age">1970-01-01</td>
235 235 <td class="author">test</td>
236 236 <td class="description"><a href="/rev/01de2d66a28d">second a</a></td>
237 237 </tr>
238 238 <tr class="parity1">
239 <td class="age">many years ago</td>
239 <td class="age">1970-01-01</td>
240 240 <td class="author">test</td>
241 241 <td class="description"><a href="/rev/5ed941583260">first a</a></td>
242 242 </tr>
243 243
244 244 </table>
245 245
246 246 </div>
247 247 </div>
248 248
249 249
250 250
251 251 </body>
252 252 </html>
253 253
254 254 % first deleted - one revision
255 255 200 Script output follows
256 256
257 257 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
258 258 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
259 259 <head>
260 260 <link rel="icon" href="/static/hgicon.png" type="image/png" />
261 261 <meta name="robots" content="index, nofollow" />
262 262 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
263 263
264 264 <title>test: a history</title>
265 265 <link rel="alternate" type="application/atom+xml"
266 266 href="/atom-log/tip/a" title="Atom feed for test:a" />
267 267 <link rel="alternate" type="application/rss+xml"
268 268 href="/rss-log/tip/a" title="RSS feed for test:a" />
269 269 </head>
270 270 <body>
271 271
272 272 <div class="container">
273 273 <div class="menu">
274 274 <div class="logo">
275 275 <a href="http://mercurial.selenic.com/">
276 276 <img src="/static/hglogo.png" alt="mercurial" /></a>
277 277 </div>
278 278 <ul>
279 279 <li><a href="/shortlog/5ed941583260">log</a></li>
280 280 <li><a href="/graph/5ed941583260">graph</a></li>
281 281 <li><a href="/tags">tags</a></li>
282 282 <li><a href="/branches">branches</a></li>
283 283 </ul>
284 284 <ul>
285 285 <li><a href="/rev/5ed941583260">changeset</a></li>
286 286 <li><a href="/file/5ed941583260">browse</a></li>
287 287 </ul>
288 288 <ul>
289 289 <li><a href="/file/5ed941583260/a">file</a></li>
290 290 <li><a href="/diff/5ed941583260/a">diff</a></li>
291 291 <li><a href="/annotate/5ed941583260/a">annotate</a></li>
292 292 <li class="active">file log</li>
293 293 <li><a href="/raw-file/5ed941583260/a">raw</a></li>
294 294 </ul>
295 295 </div>
296 296
297 297 <div class="main">
298 298 <h2><a href="/">test</a></h2>
299 299 <h3>log a</h3>
300 300
301 301 <form class="search" action="/log">
302 302
303 303 <p><input name="rev" id="search1" type="text" size="30" /></p>
304 304 <div id="hint">find changesets by author, revision,
305 305 files, or words in the commit message</div>
306 306 </form>
307 307
308 308 <div class="navigate"><a href="/log/5ed941583260/a">(0)</a> <a href="/log/tip/a">tip</a> </div>
309 309
310 310 <table class="bigtable">
311 311 <tr>
312 312 <th class="age">age</th>
313 313 <th class="author">author</th>
314 314 <th class="description">description</th>
315 315 </tr>
316 316 <tr class="parity0">
317 <td class="age">many years ago</td>
317 <td class="age">1970-01-01</td>
318 318 <td class="author">test</td>
319 319 <td class="description"><a href="/rev/5ed941583260">first a</a></td>
320 320 </tr>
321 321
322 322 </table>
323 323
324 324 </div>
325 325 </div>
326 326
327 327
328 328
329 329 </body>
330 330 </html>
331 331
332 332 % first version - one revision
333 333 200 Script output follows
334 334
335 335 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
336 336 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
337 337 <head>
338 338 <link rel="icon" href="/static/hgicon.png" type="image/png" />
339 339 <meta name="robots" content="index, nofollow" />
340 340 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
341 341
342 342 <title>test: a history</title>
343 343 <link rel="alternate" type="application/atom+xml"
344 344 href="/atom-log/tip/a" title="Atom feed for test:a" />
345 345 <link rel="alternate" type="application/rss+xml"
346 346 href="/rss-log/tip/a" title="RSS feed for test:a" />
347 347 </head>
348 348 <body>
349 349
350 350 <div class="container">
351 351 <div class="menu">
352 352 <div class="logo">
353 353 <a href="http://mercurial.selenic.com/">
354 354 <img src="/static/hglogo.png" alt="mercurial" /></a>
355 355 </div>
356 356 <ul>
357 357 <li><a href="/shortlog/5ed941583260">log</a></li>
358 358 <li><a href="/graph/5ed941583260">graph</a></li>
359 359 <li><a href="/tags">tags</a></li>
360 360 <li><a href="/branches">branches</a></li>
361 361 </ul>
362 362 <ul>
363 363 <li><a href="/rev/5ed941583260">changeset</a></li>
364 364 <li><a href="/file/5ed941583260">browse</a></li>
365 365 </ul>
366 366 <ul>
367 367 <li><a href="/file/5ed941583260/a">file</a></li>
368 368 <li><a href="/diff/5ed941583260/a">diff</a></li>
369 369 <li><a href="/annotate/5ed941583260/a">annotate</a></li>
370 370 <li class="active">file log</li>
371 371 <li><a href="/raw-file/5ed941583260/a">raw</a></li>
372 372 </ul>
373 373 </div>
374 374
375 375 <div class="main">
376 376 <h2><a href="/">test</a></h2>
377 377 <h3>log a</h3>
378 378
379 379 <form class="search" action="/log">
380 380
381 381 <p><input name="rev" id="search1" type="text" size="30" /></p>
382 382 <div id="hint">find changesets by author, revision,
383 383 files, or words in the commit message</div>
384 384 </form>
385 385
386 386 <div class="navigate"><a href="/log/5ed941583260/a">(0)</a> <a href="/log/tip/a">tip</a> </div>
387 387
388 388 <table class="bigtable">
389 389 <tr>
390 390 <th class="age">age</th>
391 391 <th class="author">author</th>
392 392 <th class="description">description</th>
393 393 </tr>
394 394 <tr class="parity0">
395 <td class="age">many years ago</td>
395 <td class="age">1970-01-01</td>
396 396 <td class="author">test</td>
397 397 <td class="description"><a href="/rev/5ed941583260">first a</a></td>
398 398 </tr>
399 399
400 400 </table>
401 401
402 402 </div>
403 403 </div>
404 404
405 405
406 406
407 407 </body>
408 408 </html>
409 409
410 410 % before addition - error
411 411 404 Not Found
412 412
413 413 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
414 414 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
415 415 <head>
416 416 <link rel="icon" href="/static/hgicon.png" type="image/png" />
417 417 <meta name="robots" content="index, nofollow" />
418 418 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
419 419
420 420 <title>test: error</title>
421 421 </head>
422 422 <body>
423 423
424 424 <div class="container">
425 425 <div class="menu">
426 426 <div class="logo">
427 427 <a href="http://mercurial.selenic.com/">
428 428 <img src="/static/hglogo.png" width=75 height=90 border=0 alt="mercurial" /></a>
429 429 </div>
430 430 <ul>
431 431 <li><a href="/shortlog">log</a></li>
432 432 <li><a href="/graph">graph</a></li>
433 433 <li><a href="/tags">tags</a></li>
434 434 <li><a href="/branches">branches</a></li>
435 435 </ul>
436 436 </div>
437 437
438 438 <div class="main">
439 439
440 440 <h2><a href="/">test</a></h2>
441 441 <h3>error</h3>
442 442
443 443 <form class="search" action="/log">
444 444
445 445 <p><input name="rev" id="search1" type="text" size="30"></p>
446 446 <div id="hint">find changesets by author, revision,
447 447 files, or words in the commit message</div>
448 448 </form>
449 449
450 450 <div class="description">
451 451 <p>
452 452 An error occurred while processing your request:
453 453 </p>
454 454 <p>
455 455 a@6563da9dcf87: not found in manifest
456 456 </p>
457 457 </div>
458 458 </div>
459 459 </div>
460 460
461 461
462 462
463 463 </body>
464 464 </html>
465 465
466 466 % should show base link, use spartan because it shows it
467 467 200 Script output follows
468 468
469 469 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
470 470 <html>
471 471 <head>
472 472 <link rel="icon" href="/static/hgicon.png" type="image/png">
473 473 <meta name="robots" content="index, nofollow" />
474 474 <link rel="stylesheet" href="/static/style.css" type="text/css" />
475 475
476 476 <title>test: c history</title>
477 477 <link rel="alternate" type="application/atom+xml"
478 478 href="/atom-log/tip/c" title="Atom feed for test:c">
479 479 <link rel="alternate" type="application/rss+xml"
480 480 href="/rss-log/tip/c" title="RSS feed for test:c">
481 481 </head>
482 482 <body>
483 483
484 484 <div class="buttons">
485 485 <a href="/log?style=spartan">changelog</a>
486 486 <a href="/shortlog?style=spartan">shortlog</a>
487 487 <a href="/graph?style=spartan">graph</a>
488 488 <a href="/tags?style=spartan">tags</a>
489 489 <a href="/branches?style=spartan">branches</a>
490 490 <a href="/file/38d962e6234d/c?style=spartan">file</a>
491 491 <a href="/annotate/38d962e6234d/c?style=spartan">annotate</a>
492 492 <a type="application/rss+xml" href="/rss-log/tip/c">rss</a>
493 493 <a type="application/atom+xml" href="/atom-log/tip/c" title="Atom feed for test:c">atom</a>
494 494 </div>
495 495
496 496 <h2>c revision history</h2>
497 497
498 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>
499 499
500 500 <table class="logEntry parity0">
501 501 <tr>
502 <th class="age">many years ago:</th>
502 <th class="age">1970-01-01:</th>
503 503 <th class="firstline"><a href="/rev/38d962e6234d?style=spartan">change c</a></th>
504 504 </tr>
505 505 <tr>
506 506 <th class="revision">revision 1:</td>
507 507 <td class="node">
508 508 <a href="/file/38d962e6234d/c?style=spartan">38d962e6234d</a>
509 509 <a href="/diff/38d962e6234d/c?style=spartan">(diff)</a>
510 510 <a href="/annotate/38d962e6234d/c?style=spartan">(annotate)</a>
511 511 </td>
512 512 </tr>
513 513
514 514 <tr>
515 515 <th class="author">author:</th>
516 516 <td class="author">&#116;&#101;&#115;&#116;</td>
517 517 </tr>
518 518 <tr>
519 519 <th class="date">date:</th>
520 520 <td class="date">Thu Jan 01 00:00:00 1970 +0000</td>
521 521 </tr>
522 522 </table>
523 523
524 524
525 525 <table class="logEntry parity1">
526 526 <tr>
527 <th class="age">many years ago:</th>
527 <th class="age">1970-01-01:</th>
528 528 <th class="firstline"><a href="/rev/a3b6a9e4507e?style=spartan">mv b</a></th>
529 529 </tr>
530 530 <tr>
531 531 <th class="revision">revision 0:</td>
532 532 <td class="node">
533 533 <a href="/file/a3b6a9e4507e/c?style=spartan">a3b6a9e4507e</a>
534 534 <a href="/diff/a3b6a9e4507e/c?style=spartan">(diff)</a>
535 535 <a href="/annotate/a3b6a9e4507e/c?style=spartan">(annotate)</a>
536 536 </td>
537 537 </tr>
538 538
539 539 <tr>
540 540 <th>base:</th>
541 541 <td>
542 542 <a href="/file/1e88685f5dde/b?style=spartan">
543 543 b@1e88685f5dde
544 544 </a>
545 545 </td>
546 546 </tr>
547 547 <tr>
548 548 <th class="author">author:</th>
549 549 <td class="author">&#116;&#101;&#115;&#116;</td>
550 550 </tr>
551 551 <tr>
552 552 <th class="date">date:</th>
553 553 <td class="date">Thu Jan 01 00:00:00 1970 +0000</td>
554 554 </tr>
555 555 </table>
556 556
557 557
558 558
559 559
560 560
561 561 <div class="logo">
562 562 <a href="http://mercurial.selenic.com/">
563 563 <img src="/static/hglogo.png" width=75 height=90 border=0 alt="mercurial"></a>
564 564 </div>
565 565
566 566 </body>
567 567 </html>
568 568
569 569 % errors
@@ -1,181 +1,181 b''
1 1 % setting up repo
2 2 adding a
3 3 % set up hgweb
4 4 % revision
5 5 200 Script output follows
6 6
7 7 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
8 8 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
9 9 <head>
10 10 <link rel="icon" href="/static/hgicon.png" type="image/png" />
11 11 <meta name="robots" content="index, nofollow" />
12 12 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
13 13
14 14 <title>test: c78f6c5cbea9</title>
15 15 </head>
16 16 <body>
17 17 <div class="container">
18 18 <div class="menu">
19 19 <div class="logo">
20 20 <a href="http://mercurial.selenic.com/">
21 21 <img src="/static/hglogo.png" alt="mercurial" /></a>
22 22 </div>
23 23 <ul>
24 24 <li><a href="/shortlog/c78f6c5cbea9">log</a></li>
25 25 <li><a href="/graph/c78f6c5cbea9">graph</a></li>
26 26 <li><a href="/tags">tags</a></li>
27 27 <li><a href="/branches">branches</a></li>
28 28 </ul>
29 29 <ul>
30 30 <li class="active">changeset</li>
31 31 <li><a href="/raw-rev/c78f6c5cbea9">raw</a></li>
32 32 <li><a href="/file/c78f6c5cbea9">browse</a></li>
33 33 </ul>
34 34 <ul>
35 35
36 36 </ul>
37 37 </div>
38 38
39 39 <div class="main">
40 40
41 41 <h2><a href="/">test</a></h2>
42 42 <h3>changeset 1:c78f6c5cbea9 <span class="tag">tip</span> </h3>
43 43
44 44 <form class="search" action="/log">
45 45
46 46 <p><input name="rev" id="search1" type="text" size="30" /></p>
47 47 <div id="hint">find changesets by author, revision,
48 48 files, or words in the commit message</div>
49 49 </form>
50 50
51 51 <div class="description">del</div>
52 52
53 53 <table id="changesetEntry">
54 54 <tr>
55 55 <th class="author">author</th>
56 56 <td class="author">&#116;&#101;&#115;&#116;</td>
57 57 </tr>
58 58 <tr>
59 59 <th class="date">date</th>
60 <td class="date">Thu Jan 01 00:00:00 1970 +0000 (many years ago)</td></tr>
60 <td class="date">Thu Jan 01 00:00:00 1970 +0000 (1970-01-01)</td></tr>
61 61 <tr>
62 62 <th class="author">parents</th>
63 63 <td class="author"><a href="/rev/cb9a9f314b8b">cb9a9f314b8b</a> </td>
64 64 </tr>
65 65 <tr>
66 66 <th class="author">children</th>
67 67 <td class="author"></td>
68 68 </tr>
69 69 <tr>
70 70 <th class="files">files</th>
71 71 <td class="files">a </td>
72 72 </tr>
73 73 </table>
74 74
75 75 <div class="overflow">
76 76 <div class="sourcefirst"> line diff</div>
77 77
78 78 <div class="source bottomline parity0"><pre><a href="#l1.1" id="l1.1"> 1.1</a> <span class="minusline">--- a/a Thu Jan 01 00:00:00 1970 +0000
79 79 </span><a href="#l1.2" id="l1.2"> 1.2</a> <span class="plusline">+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
80 80 </span><a href="#l1.3" id="l1.3"> 1.3</a> <span class="atline">@@ -1,1 +0,0 @@
81 81 </span><a href="#l1.4" id="l1.4"> 1.4</a> <span class="minusline">-a
82 82 </span></pre></div>
83 83 </div>
84 84
85 85 </div>
86 86 </div>
87 87
88 88
89 89 </body>
90 90 </html>
91 91
92 92 % diff removed file
93 93 200 Script output follows
94 94
95 95 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
96 96 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
97 97 <head>
98 98 <link rel="icon" href="/static/hgicon.png" type="image/png" />
99 99 <meta name="robots" content="index, nofollow" />
100 100 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
101 101
102 102 <title>test: a diff</title>
103 103 </head>
104 104 <body>
105 105
106 106 <div class="container">
107 107 <div class="menu">
108 108 <div class="logo">
109 109 <a href="http://mercurial.selenic.com/">
110 110 <img src="/static/hglogo.png" alt="mercurial" /></a>
111 111 </div>
112 112 <ul>
113 113 <li><a href="/shortlog/c78f6c5cbea9">log</a></li>
114 114 <li><a href="/graph/c78f6c5cbea9">graph</a></li>
115 115 <li><a href="/tags">tags</a></li>
116 116 <li><a href="/branches">branches</a></li>
117 117 </ul>
118 118 <ul>
119 119 <li><a href="/rev/c78f6c5cbea9">changeset</a></li>
120 120 <li><a href="/file/c78f6c5cbea9">browse</a></li>
121 121 </ul>
122 122 <ul>
123 123 <li><a href="/file/c78f6c5cbea9/a">file</a></li>
124 124 <li><a href="/file/tip/a">latest</a></li>
125 125 <li class="active">diff</li>
126 126 <li><a href="/annotate/c78f6c5cbea9/a">annotate</a></li>
127 127 <li><a href="/log/c78f6c5cbea9/a">file log</a></li>
128 128 <li><a href="/raw-file/c78f6c5cbea9/a">raw</a></li>
129 129 </ul>
130 130 </div>
131 131
132 132 <div class="main">
133 133 <h2><a href="/">test</a></h2>
134 134 <h3>diff a @ 1:c78f6c5cbea9</h3>
135 135
136 136 <form class="search" action="/log">
137 137 <p></p>
138 138 <p><input name="rev" id="search1" type="text" size="30" /></p>
139 139 <div id="hint">find changesets by author, revision,
140 140 files, or words in the commit message</div>
141 141 </form>
142 142
143 143 <div class="description">del</div>
144 144
145 145 <table id="changesetEntry">
146 146 <tr>
147 147 <th>author</th>
148 148 <td>&#116;&#101;&#115;&#116;</td>
149 149 </tr>
150 150 <tr>
151 151 <th>date</th>
152 <td>Thu Jan 01 00:00:00 1970 +0000 (many years ago)</td>
152 <td>Thu Jan 01 00:00:00 1970 +0000 (1970-01-01)</td>
153 153 </tr>
154 154 <tr>
155 155 <th>parents</th>
156 156 <td><a href="/file/cb9a9f314b8b/a">cb9a9f314b8b</a> </td>
157 157 </tr>
158 158 <tr>
159 159 <th>children</th>
160 160 <td></td>
161 161 </tr>
162 162
163 163 </table>
164 164
165 165 <div class="overflow">
166 166 <div class="sourcefirst"> line diff</div>
167 167
168 168 <div class="source bottomline parity0"><pre><a href="#l1.1" id="l1.1"> 1.1</a> <span class="minusline">--- a/a Thu Jan 01 00:00:00 1970 +0000
169 169 </span><a href="#l1.2" id="l1.2"> 1.2</a> <span class="plusline">+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
170 170 </span><a href="#l1.3" id="l1.3"> 1.3</a> <span class="atline">@@ -1,1 +0,0 @@
171 171 </span><a href="#l1.4" id="l1.4"> 1.4</a> <span class="minusline">-a
172 172 </span></pre></div>
173 173 </div>
174 174 </div>
175 175 </div>
176 176
177 177
178 178
179 179 </body>
180 180 </html>
181 181
@@ -1,467 +1,467 b''
1 1 adding primes.py
2 2 % hg serve
3 3 % hgweb filerevision, html
4 4 200 Script output follows
5 5
6 6 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
7 7 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
8 8 <head>
9 9 <link rel="icon" href="/static/hgicon.png" type="image/png" />
10 10 <meta name="robots" content="index, nofollow" />
11 11 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
12 12
13 13 <link rel="stylesheet" href="/highlightcss" type="text/css" />
14 14 <title>test: 853dcd4de2a6 primes.py</title>
15 15 </head>
16 16 <body>
17 17
18 18 <div class="container">
19 19 <div class="menu">
20 20 <div class="logo">
21 21 <a href="http://mercurial.selenic.com/">
22 22 <img src="/static/hglogo.png" alt="mercurial" /></a>
23 23 </div>
24 24 <ul>
25 25 <li><a href="/shortlog/853dcd4de2a6">log</a></li>
26 26 <li><a href="/graph/853dcd4de2a6">graph</a></li>
27 27 <li><a href="/tags">tags</a></li>
28 28 <li><a href="/branches">branches</a></li>
29 29 </ul>
30 30 <ul>
31 31 <li><a href="/rev/853dcd4de2a6">changeset</a></li>
32 32 <li><a href="/file/853dcd4de2a6/">browse</a></li>
33 33 </ul>
34 34 <ul>
35 35 <li class="active">file</li>
36 36 <li><a href="/file/tip/primes.py">latest</a></li>
37 37 <li><a href="/diff/853dcd4de2a6/primes.py">diff</a></li>
38 38 <li><a href="/annotate/853dcd4de2a6/primes.py">annotate</a></li>
39 39 <li><a href="/log/853dcd4de2a6/primes.py">file log</a></li>
40 40 <li><a href="/raw-file/853dcd4de2a6/primes.py">raw</a></li>
41 41 </ul>
42 42 </div>
43 43
44 44 <div class="main">
45 45 <h2><a href="/">test</a></h2>
46 46 <h3>view primes.py @ 0:853dcd4de2a6</h3>
47 47
48 48 <form class="search" action="/log">
49 49
50 50 <p><input name="rev" id="search1" type="text" size="30" /></p>
51 51 <div id="hint">find changesets by author, revision,
52 52 files, or words in the commit message</div>
53 53 </form>
54 54
55 55 <div class="description">a</div>
56 56
57 57 <table id="changesetEntry">
58 58 <tr>
59 59 <th class="author">author</th>
60 60 <td class="author">&#116;&#101;&#115;&#116;</td>
61 61 </tr>
62 62 <tr>
63 63 <th class="date">date</th>
64 <td class="date">Thu Jan 01 00:00:00 1970 +0000 (many years ago)</td>
64 <td class="date">Thu Jan 01 00:00:00 1970 +0000 (1970-01-01)</td>
65 65 </tr>
66 66 <tr>
67 67 <th class="author">parents</th>
68 68 <td class="author"></td>
69 69 </tr>
70 70 <tr>
71 71 <th class="author">children</th>
72 72 <td class="author"></td>
73 73 </tr>
74 74
75 75 </table>
76 76
77 77 <div class="overflow">
78 78 <div class="sourcefirst"> line source</div>
79 79
80 80 <div class="parity0 source"><a href="#l1" id="l1"> 1</a> <span class="c">#!/usr/bin/env python</span></div>
81 81 <div class="parity1 source"><a href="#l2" id="l2"> 2</a> </div>
82 82 <div class="parity0 source"><a href="#l3" id="l3"> 3</a> <span class="sd">&quot;&quot;&quot;Fun with generators. Corresponding Haskell implementation:</span></div>
83 83 <div class="parity1 source"><a href="#l4" id="l4"> 4</a> </div>
84 84 <div class="parity0 source"><a href="#l5" id="l5"> 5</a> <span class="sd">primes = 2 : sieve [3, 5..]</span></div>
85 85 <div class="parity1 source"><a href="#l6" id="l6"> 6</a> <span class="sd"> where sieve (p:ns) = p : sieve [n | n &lt;- ns, mod n p /= 0]</span></div>
86 86 <div class="parity0 source"><a href="#l7" id="l7"> 7</a> <span class="sd">&quot;&quot;&quot;</span></div>
87 87 <div class="parity1 source"><a href="#l8" id="l8"> 8</a> </div>
88 88 <div class="parity0 source"><a href="#l9" id="l9"> 9</a> <span class="kn">from</span> <span class="nn">itertools</span> <span class="kn">import</span> <span class="n">dropwhile</span><span class="p">,</span> <span class="n">ifilter</span><span class="p">,</span> <span class="n">islice</span><span class="p">,</span> <span class="n">count</span><span class="p">,</span> <span class="n">chain</span></div>
89 89 <div class="parity1 source"><a href="#l10" id="l10"> 10</a> </div>
90 90 <div class="parity0 source"><a href="#l11" id="l11"> 11</a> <span class="kn">def</span> <span class="nf">primes</span><span class="p">():</span></div>
91 91 <div class="parity1 source"><a href="#l12" id="l12"> 12</a> <span class="sd">&quot;&quot;&quot;Generate all primes.&quot;&quot;&quot;</span></div>
92 92 <div class="parity0 source"><a href="#l13" id="l13"> 13</a> <span class="kn">def</span> <span class="nf">sieve</span><span class="p">(</span><span class="n">ns</span><span class="p">):</span></div>
93 93 <div class="parity1 source"><a href="#l14" id="l14"> 14</a> <span class="n">p</span> <span class="o">=</span> <span class="n">ns</span><span class="o">.</span><span class="n">next</span><span class="p">()</span></div>
94 94 <div class="parity0 source"><a href="#l15" id="l15"> 15</a> <span class="c"># It is important to yield *here* in order to stop the</span></div>
95 95 <div class="parity1 source"><a href="#l16" id="l16"> 16</a> <span class="c"># infinite recursion.</span></div>
96 96 <div class="parity0 source"><a href="#l17" id="l17"> 17</a> <span class="kn">yield</span> <span class="n">p</span></div>
97 97 <div class="parity1 source"><a href="#l18" id="l18"> 18</a> <span class="n">ns</span> <span class="o">=</span> <span class="n">ifilter</span><span class="p">(</span><span class="kn">lambda</span> <span class="n">n</span><span class="p">:</span> <span class="n">n</span> <span class="o">%</span> <span class="n">p</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">,</span> <span class="n">ns</span><span class="p">)</span></div>
98 98 <div class="parity0 source"><a href="#l19" id="l19"> 19</a> <span class="kn">for</span> <span class="n">n</span> <span class="ow">in</span> <span class="n">sieve</span><span class="p">(</span><span class="n">ns</span><span class="p">):</span></div>
99 99 <div class="parity1 source"><a href="#l20" id="l20"> 20</a> <span class="kn">yield</span> <span class="n">n</span></div>
100 100 <div class="parity0 source"><a href="#l21" id="l21"> 21</a> </div>
101 101 <div class="parity1 source"><a href="#l22" id="l22"> 22</a> <span class="n">odds</span> <span class="o">=</span> <span class="n">ifilter</span><span class="p">(</span><span class="kn">lambda</span> <span class="n">i</span><span class="p">:</span> <span class="n">i</span> <span class="o">%</span> <span class="mi">2</span> <span class="o">==</span> <span class="mi">1</span><span class="p">,</span> <span class="n">count</span><span class="p">())</span></div>
102 102 <div class="parity0 source"><a href="#l23" id="l23"> 23</a> <span class="kn">return</span> <span class="n">chain</span><span class="p">([</span><span class="mi">2</span><span class="p">],</span> <span class="n">sieve</span><span class="p">(</span><span class="n">dropwhile</span><span class="p">(</span><span class="kn">lambda</span> <span class="n">n</span><span class="p">:</span> <span class="n">n</span> <span class="o">&lt;</span> <span class="mi">3</span><span class="p">,</span> <span class="n">odds</span><span class="p">)))</span></div>
103 103 <div class="parity1 source"><a href="#l24" id="l24"> 24</a> </div>
104 104 <div class="parity0 source"><a href="#l25" id="l25"> 25</a> <span class="kn">if</span> <span class="n">__name__</span> <span class="o">==</span> <span class="s">&quot;__main__&quot;</span><span class="p">:</span></div>
105 105 <div class="parity1 source"><a href="#l26" id="l26"> 26</a> <span class="kn">import</span> <span class="nn">sys</span></div>
106 106 <div class="parity0 source"><a href="#l27" id="l27"> 27</a> <span class="kn">try</span><span class="p">:</span></div>
107 107 <div class="parity1 source"><a href="#l28" id="l28"> 28</a> <span class="n">n</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span></div>
108 108 <div class="parity0 source"><a href="#l29" id="l29"> 29</a> <span class="kn">except</span> <span class="p">(</span><span class="ne">ValueError</span><span class="p">,</span> <span class="ne">IndexError</span><span class="p">):</span></div>
109 109 <div class="parity1 source"><a href="#l30" id="l30"> 30</a> <span class="n">n</span> <span class="o">=</span> <span class="mi">10</span></div>
110 110 <div class="parity0 source"><a href="#l31" id="l31"> 31</a> <span class="n">p</span> <span class="o">=</span> <span class="n">primes</span><span class="p">()</span></div>
111 111 <div class="parity1 source"><a href="#l32" id="l32"> 32</a> <span class="kn">print</span> <span class="s">&quot;The first </span><span class="si">%d</span><span class="s"> primes: </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">n</span><span class="p">,</span> <span class="nb">list</span><span class="p">(</span><span class="n">islice</span><span class="p">(</span><span class="n">p</span><span class="p">,</span> <span class="n">n</span><span class="p">)))</span></div>
112 112 <div class="sourcelast"></div>
113 113 </div>
114 114 </div>
115 115 </div>
116 116
117 117
118 118
119 119 </body>
120 120 </html>
121 121
122 122 % hgweb fileannotate, html
123 123 200 Script output follows
124 124
125 125 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
126 126 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
127 127 <head>
128 128 <link rel="icon" href="/static/hgicon.png" type="image/png" />
129 129 <meta name="robots" content="index, nofollow" />
130 130 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
131 131
132 132 <link rel="stylesheet" href="/highlightcss" type="text/css" />
133 133 <title>test: primes.py annotate</title>
134 134 </head>
135 135 <body>
136 136
137 137 <div class="container">
138 138 <div class="menu">
139 139 <div class="logo">
140 140 <a href="http://mercurial.selenic.com/">
141 141 <img src="/static/hglogo.png" alt="mercurial" /></a>
142 142 </div>
143 143 <ul>
144 144 <li><a href="/shortlog/853dcd4de2a6">log</a></li>
145 145 <li><a href="/graph/853dcd4de2a6">graph</a></li>
146 146 <li><a href="/tags">tags</a></li>
147 147 <li><a href="/branches">branches</a></li>
148 148 </ul>
149 149
150 150 <ul>
151 151 <li><a href="/rev/853dcd4de2a6">changeset</a></li>
152 152 <li><a href="/file/853dcd4de2a6/">browse</a></li>
153 153 </ul>
154 154 <ul>
155 155 <li><a href="/file/853dcd4de2a6/primes.py">file</a></li>
156 156 <li><a href="/file/tip/primes.py">latest</a></li>
157 157 <li><a href="/diff/853dcd4de2a6/primes.py">diff</a></li>
158 158 <li class="active">annotate</li>
159 159 <li><a href="/log/853dcd4de2a6/primes.py">file log</a></li>
160 160 <li><a href="/raw-annotate/853dcd4de2a6/primes.py">raw</a></li>
161 161 </ul>
162 162 </div>
163 163
164 164 <div class="main">
165 165 <h2><a href="/">test</a></h2>
166 166 <h3>annotate primes.py @ 0:853dcd4de2a6</h3>
167 167
168 168 <form class="search" action="/log">
169 169
170 170 <p><input name="rev" id="search1" type="text" size="30" /></p>
171 171 <div id="hint">find changesets by author, revision,
172 172 files, or words in the commit message</div>
173 173 </form>
174 174
175 175 <div class="description">a</div>
176 176
177 177 <table id="changesetEntry">
178 178 <tr>
179 179 <th class="author">author</th>
180 180 <td class="author">&#116;&#101;&#115;&#116;</td>
181 181 </tr>
182 182 <tr>
183 183 <th class="date">date</th>
184 <td class="date">Thu Jan 01 00:00:00 1970 +0000 (many years ago)</td>
184 <td class="date">Thu Jan 01 00:00:00 1970 +0000 (1970-01-01)</td>
185 185 </tr>
186 186 <tr>
187 187 <th class="author">parents</th>
188 188 <td class="author"></td>
189 189 </tr>
190 190 <tr>
191 191 <th class="author">children</th>
192 192 <td class="author"></td>
193 193 </tr>
194 194
195 195 </table>
196 196
197 197 <div class="overflow">
198 198 <table class="bigtable">
199 199 <tr>
200 200 <th class="annotate">rev</th>
201 201 <th class="line">&nbsp;&nbsp;line source</th>
202 202 </tr>
203 203
204 204 <tr class="parity0">
205 205 <td class="annotate">
206 206 <a href="/annotate/853dcd4de2a6/primes.py#1"
207 207 title="853dcd4de2a6: a">test@0</a>
208 208 </td>
209 209 <td class="source"><a href="#l1" id="l1"> 1</a> <span class="c">#!/usr/bin/env python</span></td>
210 210 </tr>
211 211 <tr class="parity1">
212 212 <td class="annotate">
213 213 <a href="/annotate/853dcd4de2a6/primes.py#2"
214 214 title="853dcd4de2a6: a">test@0</a>
215 215 </td>
216 216 <td class="source"><a href="#l2" id="l2"> 2</a> </td>
217 217 </tr>
218 218 <tr class="parity0">
219 219 <td class="annotate">
220 220 <a href="/annotate/853dcd4de2a6/primes.py#3"
221 221 title="853dcd4de2a6: a">test@0</a>
222 222 </td>
223 223 <td class="source"><a href="#l3" id="l3"> 3</a> <span class="sd">&quot;&quot;&quot;Fun with generators. Corresponding Haskell implementation:</span></td>
224 224 </tr>
225 225 <tr class="parity1">
226 226 <td class="annotate">
227 227 <a href="/annotate/853dcd4de2a6/primes.py#4"
228 228 title="853dcd4de2a6: a">test@0</a>
229 229 </td>
230 230 <td class="source"><a href="#l4" id="l4"> 4</a> </td>
231 231 </tr>
232 232 <tr class="parity0">
233 233 <td class="annotate">
234 234 <a href="/annotate/853dcd4de2a6/primes.py#5"
235 235 title="853dcd4de2a6: a">test@0</a>
236 236 </td>
237 237 <td class="source"><a href="#l5" id="l5"> 5</a> <span class="sd">primes = 2 : sieve [3, 5..]</span></td>
238 238 </tr>
239 239 <tr class="parity1">
240 240 <td class="annotate">
241 241 <a href="/annotate/853dcd4de2a6/primes.py#6"
242 242 title="853dcd4de2a6: a">test@0</a>
243 243 </td>
244 244 <td class="source"><a href="#l6" id="l6"> 6</a> <span class="sd"> where sieve (p:ns) = p : sieve [n | n &lt;- ns, mod n p /= 0]</span></td>
245 245 </tr>
246 246 <tr class="parity0">
247 247 <td class="annotate">
248 248 <a href="/annotate/853dcd4de2a6/primes.py#7"
249 249 title="853dcd4de2a6: a">test@0</a>
250 250 </td>
251 251 <td class="source"><a href="#l7" id="l7"> 7</a> <span class="sd">&quot;&quot;&quot;</span></td>
252 252 </tr>
253 253 <tr class="parity1">
254 254 <td class="annotate">
255 255 <a href="/annotate/853dcd4de2a6/primes.py#8"
256 256 title="853dcd4de2a6: a">test@0</a>
257 257 </td>
258 258 <td class="source"><a href="#l8" id="l8"> 8</a> </td>
259 259 </tr>
260 260 <tr class="parity0">
261 261 <td class="annotate">
262 262 <a href="/annotate/853dcd4de2a6/primes.py#9"
263 263 title="853dcd4de2a6: a">test@0</a>
264 264 </td>
265 265 <td class="source"><a href="#l9" id="l9"> 9</a> <span class="kn">from</span> <span class="nn">itertools</span> <span class="kn">import</span> <span class="n">dropwhile</span><span class="p">,</span> <span class="n">ifilter</span><span class="p">,</span> <span class="n">islice</span><span class="p">,</span> <span class="n">count</span><span class="p">,</span> <span class="n">chain</span></td>
266 266 </tr>
267 267 <tr class="parity1">
268 268 <td class="annotate">
269 269 <a href="/annotate/853dcd4de2a6/primes.py#10"
270 270 title="853dcd4de2a6: a">test@0</a>
271 271 </td>
272 272 <td class="source"><a href="#l10" id="l10"> 10</a> </td>
273 273 </tr>
274 274 <tr class="parity0">
275 275 <td class="annotate">
276 276 <a href="/annotate/853dcd4de2a6/primes.py#11"
277 277 title="853dcd4de2a6: a">test@0</a>
278 278 </td>
279 279 <td class="source"><a href="#l11" id="l11"> 11</a> <span class="kn">def</span> <span class="nf">primes</span><span class="p">():</span></td>
280 280 </tr>
281 281 <tr class="parity1">
282 282 <td class="annotate">
283 283 <a href="/annotate/853dcd4de2a6/primes.py#12"
284 284 title="853dcd4de2a6: a">test@0</a>
285 285 </td>
286 286 <td class="source"><a href="#l12" id="l12"> 12</a> <span class="sd">&quot;&quot;&quot;Generate all primes.&quot;&quot;&quot;</span></td>
287 287 </tr>
288 288 <tr class="parity0">
289 289 <td class="annotate">
290 290 <a href="/annotate/853dcd4de2a6/primes.py#13"
291 291 title="853dcd4de2a6: a">test@0</a>
292 292 </td>
293 293 <td class="source"><a href="#l13" id="l13"> 13</a> <span class="kn">def</span> <span class="nf">sieve</span><span class="p">(</span><span class="n">ns</span><span class="p">):</span></td>
294 294 </tr>
295 295 <tr class="parity1">
296 296 <td class="annotate">
297 297 <a href="/annotate/853dcd4de2a6/primes.py#14"
298 298 title="853dcd4de2a6: a">test@0</a>
299 299 </td>
300 300 <td class="source"><a href="#l14" id="l14"> 14</a> <span class="n">p</span> <span class="o">=</span> <span class="n">ns</span><span class="o">.</span><span class="n">next</span><span class="p">()</span></td>
301 301 </tr>
302 302 <tr class="parity0">
303 303 <td class="annotate">
304 304 <a href="/annotate/853dcd4de2a6/primes.py#15"
305 305 title="853dcd4de2a6: a">test@0</a>
306 306 </td>
307 307 <td class="source"><a href="#l15" id="l15"> 15</a> <span class="c"># It is important to yield *here* in order to stop the</span></td>
308 308 </tr>
309 309 <tr class="parity1">
310 310 <td class="annotate">
311 311 <a href="/annotate/853dcd4de2a6/primes.py#16"
312 312 title="853dcd4de2a6: a">test@0</a>
313 313 </td>
314 314 <td class="source"><a href="#l16" id="l16"> 16</a> <span class="c"># infinite recursion.</span></td>
315 315 </tr>
316 316 <tr class="parity0">
317 317 <td class="annotate">
318 318 <a href="/annotate/853dcd4de2a6/primes.py#17"
319 319 title="853dcd4de2a6: a">test@0</a>
320 320 </td>
321 321 <td class="source"><a href="#l17" id="l17"> 17</a> <span class="kn">yield</span> <span class="n">p</span></td>
322 322 </tr>
323 323 <tr class="parity1">
324 324 <td class="annotate">
325 325 <a href="/annotate/853dcd4de2a6/primes.py#18"
326 326 title="853dcd4de2a6: a">test@0</a>
327 327 </td>
328 328 <td class="source"><a href="#l18" id="l18"> 18</a> <span class="n">ns</span> <span class="o">=</span> <span class="n">ifilter</span><span class="p">(</span><span class="kn">lambda</span> <span class="n">n</span><span class="p">:</span> <span class="n">n</span> <span class="o">%</span> <span class="n">p</span> <span class="o">!=</span> <span class="mf">0</span><span class="p">,</span> <span class="n">ns</span><span class="p">)</span></td>
329 329 </tr>
330 330 <tr class="parity0">
331 331 <td class="annotate">
332 332 <a href="/annotate/853dcd4de2a6/primes.py#19"
333 333 title="853dcd4de2a6: a">test@0</a>
334 334 </td>
335 335 <td class="source"><a href="#l19" id="l19"> 19</a> <span class="kn">for</span> <span class="n">n</span> <span class="ow">in</span> <span class="n">sieve</span><span class="p">(</span><span class="n">ns</span><span class="p">):</span></td>
336 336 </tr>
337 337 <tr class="parity1">
338 338 <td class="annotate">
339 339 <a href="/annotate/853dcd4de2a6/primes.py#20"
340 340 title="853dcd4de2a6: a">test@0</a>
341 341 </td>
342 342 <td class="source"><a href="#l20" id="l20"> 20</a> <span class="kn">yield</span> <span class="n">n</span></td>
343 343 </tr>
344 344 <tr class="parity0">
345 345 <td class="annotate">
346 346 <a href="/annotate/853dcd4de2a6/primes.py#21"
347 347 title="853dcd4de2a6: a">test@0</a>
348 348 </td>
349 349 <td class="source"><a href="#l21" id="l21"> 21</a> </td>
350 350 </tr>
351 351 <tr class="parity1">
352 352 <td class="annotate">
353 353 <a href="/annotate/853dcd4de2a6/primes.py#22"
354 354 title="853dcd4de2a6: a">test@0</a>
355 355 </td>
356 356 <td class="source"><a href="#l22" id="l22"> 22</a> <span class="n">odds</span> <span class="o">=</span> <span class="n">ifilter</span><span class="p">(</span><span class="kn">lambda</span> <span class="n">i</span><span class="p">:</span> <span class="n">i</span> <span class="o">%</span> <span class="mf">2</span> <span class="o">==</span> <span class="mf">1</span><span class="p">,</span> <span class="n">count</span><span class="p">())</span></td>
357 357 </tr>
358 358 <tr class="parity0">
359 359 <td class="annotate">
360 360 <a href="/annotate/853dcd4de2a6/primes.py#23"
361 361 title="853dcd4de2a6: a">test@0</a>
362 362 </td>
363 363 <td class="source"><a href="#l23" id="l23"> 23</a> <span class="kn">return</span> <span class="n">chain</span><span class="p">([</span><span class="mf">2</span><span class="p">],</span> <span class="n">sieve</span><span class="p">(</span><span class="n">dropwhile</span><span class="p">(</span><span class="kn">lambda</span> <span class="n">n</span><span class="p">:</span> <span class="n">n</span> <span class="o">&lt;</span> <span class="mf">3</span><span class="p">,</span> <span class="n">odds</span><span class="p">)))</span></td>
364 364 </tr>
365 365 <tr class="parity1">
366 366 <td class="annotate">
367 367 <a href="/annotate/853dcd4de2a6/primes.py#24"
368 368 title="853dcd4de2a6: a">test@0</a>
369 369 </td>
370 370 <td class="source"><a href="#l24" id="l24"> 24</a> </td>
371 371 </tr>
372 372 <tr class="parity0">
373 373 <td class="annotate">
374 374 <a href="/annotate/853dcd4de2a6/primes.py#25"
375 375 title="853dcd4de2a6: a">test@0</a>
376 376 </td>
377 377 <td class="source"><a href="#l25" id="l25"> 25</a> <span class="kn">if</span> <span class="n">__name__</span> <span class="o">==</span> <span class="s">&quot;__main__&quot;</span><span class="p">:</span></td>
378 378 </tr>
379 379 <tr class="parity1">
380 380 <td class="annotate">
381 381 <a href="/annotate/853dcd4de2a6/primes.py#26"
382 382 title="853dcd4de2a6: a">test@0</a>
383 383 </td>
384 384 <td class="source"><a href="#l26" id="l26"> 26</a> <span class="kn">import</span> <span class="nn">sys</span></td>
385 385 </tr>
386 386 <tr class="parity0">
387 387 <td class="annotate">
388 388 <a href="/annotate/853dcd4de2a6/primes.py#27"
389 389 title="853dcd4de2a6: a">test@0</a>
390 390 </td>
391 391 <td class="source"><a href="#l27" id="l27"> 27</a> <span class="kn">try</span><span class="p">:</span></td>
392 392 </tr>
393 393 <tr class="parity1">
394 394 <td class="annotate">
395 395 <a href="/annotate/853dcd4de2a6/primes.py#28"
396 396 title="853dcd4de2a6: a">test@0</a>
397 397 </td>
398 398 <td class="source"><a href="#l28" id="l28"> 28</a> <span class="n">n</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mf">1</span><span class="p">])</span></td>
399 399 </tr>
400 400 <tr class="parity0">
401 401 <td class="annotate">
402 402 <a href="/annotate/853dcd4de2a6/primes.py#29"
403 403 title="853dcd4de2a6: a">test@0</a>
404 404 </td>
405 405 <td class="source"><a href="#l29" id="l29"> 29</a> <span class="kn">except</span> <span class="p">(</span><span class="ne">ValueError</span><span class="p">,</span> <span class="ne">IndexError</span><span class="p">):</span></td>
406 406 </tr>
407 407 <tr class="parity1">
408 408 <td class="annotate">
409 409 <a href="/annotate/853dcd4de2a6/primes.py#30"
410 410 title="853dcd4de2a6: a">test@0</a>
411 411 </td>
412 412 <td class="source"><a href="#l30" id="l30"> 30</a> <span class="n">n</span> <span class="o">=</span> <span class="mf">10</span></td>
413 413 </tr>
414 414 <tr class="parity0">
415 415 <td class="annotate">
416 416 <a href="/annotate/853dcd4de2a6/primes.py#31"
417 417 title="853dcd4de2a6: a">test@0</a>
418 418 </td>
419 419 <td class="source"><a href="#l31" id="l31"> 31</a> <span class="n">p</span> <span class="o">=</span> <span class="n">primes</span><span class="p">()</span></td>
420 420 </tr>
421 421 <tr class="parity1">
422 422 <td class="annotate">
423 423 <a href="/annotate/853dcd4de2a6/primes.py#32"
424 424 title="853dcd4de2a6: a">test@0</a>
425 425 </td>
426 426 <td class="source"><a href="#l32" id="l32"> 32</a> <span class="kn">print</span> <span class="s">&quot;The first </span><span class="si">%d</span><span class="s"> primes: </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">n</span><span class="p">,</span> <span class="nb">list</span><span class="p">(</span><span class="n">islice</span><span class="p">(</span><span class="n">p</span><span class="p">,</span> <span class="n">n</span><span class="p">)))</span></td>
427 427 </tr>
428 428 </table>
429 429 </div>
430 430 </div>
431 431 </div>
432 432
433 433
434 434
435 435 </body>
436 436 </html>
437 437
438 438 % hgweb fileannotate, raw
439 439
440 440 % hgweb filerevision, raw
441 441
442 442 % hgweb highlightcss friendly
443 443 200 Script output follows
444 444
445 445 /* pygments_style = friendly */
446 446
447 447 % errors encountered
448 448 % hg serve again
449 449 % hgweb highlightcss fruity
450 450 200 Script output follows
451 451
452 452 /* pygments_style = fruity */
453 453
454 454 % errors encountered
455 455 adding eucjp.txt
456 456 % HGENCODING=euc-jp hg serve
457 457 % hgweb filerevision, html
458 458 <div class="parity0 source"><a href="#l1" id="l1"> 1</a> \xb5\xfe</div>
459 459 % errors encountered
460 460 % HGENCODING=utf-8 hg serve
461 461 % hgweb filerevision, html
462 462 <div class="parity0 source"><a href="#l1" id="l1"> 1</a> \xef\xbf\xbd\xef\xbf\xbd</div>
463 463 % errors encountered
464 464 % HGENCODING=us-ascii hg serve
465 465 % hgweb filerevision, html
466 466 <div class="parity0 source"><a href="#l1" id="l1"> 1</a> ??</div>
467 467 % errors encountered
General Comments 0
You need to be logged in to leave comments. Login now