##// END OF EJS Templates
web: Made elapsed time calculation dynamic (javascript)....
Benoit Allard -
r14046:b24e5a70 default
parent child Browse files
Show More
@@ -0,0 +1,220 b''
1 // mercurial.js - JavaScript utility functions
2 //
3 // Rendering of branch DAGs on the client side
4 // Display of elapsed time
5 //
6 // Copyright 2008 Dirkjan Ochtman <dirkjan AT ochtman DOT nl>
7 // Copyright 2006 Alexander Schremmer <alex AT alexanderweb DOT de>
8 //
9 // derived from code written by Scott James Remnant <scott@ubuntu.com>
10 // Copyright 2005 Canonical Ltd.
11 //
12 // This software may be used and distributed according to the terms
13 // of the GNU General Public License, incorporated herein by reference.
14
15 var colors = [
16 [ 1.0, 0.0, 0.0 ],
17 [ 1.0, 1.0, 0.0 ],
18 [ 0.0, 1.0, 0.0 ],
19 [ 0.0, 1.0, 1.0 ],
20 [ 0.0, 0.0, 1.0 ],
21 [ 1.0, 0.0, 1.0 ]
22 ];
23
24 function Graph() {
25
26 this.canvas = document.getElementById('graph');
27 if (navigator.userAgent.indexOf('MSIE') >= 0) this.canvas = window.G_vmlCanvasManager.initElement(this.canvas);
28 this.ctx = this.canvas.getContext('2d');
29 this.ctx.strokeStyle = 'rgb(0, 0, 0)';
30 this.ctx.fillStyle = 'rgb(0, 0, 0)';
31 this.cur = [0, 0];
32 this.line_width = 3;
33 this.bg = [0, 4];
34 this.cell = [2, 0];
35 this.columns = 0;
36 this.revlink = '';
37
38 this.scale = function(height) {
39 this.bg_height = height;
40 this.box_size = Math.floor(this.bg_height / 1.2);
41 this.cell_height = this.box_size;
42 }
43
44 function colorPart(num) {
45 num *= 255
46 num = num < 0 ? 0 : num;
47 num = num > 255 ? 255 : num;
48 var digits = Math.round(num).toString(16);
49 if (num < 16) {
50 return '0' + digits;
51 } else {
52 return digits;
53 }
54 }
55
56 this.setColor = function(color, bg, fg) {
57
58 // Set the colour.
59 //
60 // Picks a distinct colour based on an internal wheel; the bg
61 // parameter provides the value that should be assigned to the 'zero'
62 // colours and the fg parameter provides the multiplier that should be
63 // applied to the foreground colours.
64
65 color %= colors.length;
66 var red = (colors[color][0] * fg) || bg;
67 var green = (colors[color][1] * fg) || bg;
68 var blue = (colors[color][2] * fg) || bg;
69 red = Math.round(red * 255);
70 green = Math.round(green * 255);
71 blue = Math.round(blue * 255);
72 var s = 'rgb(' + red + ', ' + green + ', ' + blue + ')';
73 this.ctx.strokeStyle = s;
74 this.ctx.fillStyle = s;
75 return s;
76
77 }
78
79 this.render = function(data) {
80
81 var backgrounds = '';
82 var nodedata = '';
83
84 for (var i in data) {
85
86 var parity = i % 2;
87 this.cell[1] += this.bg_height;
88 this.bg[1] += this.bg_height;
89
90 var cur = data[i];
91 var node = cur[1];
92 var edges = cur[2];
93 var fold = false;
94
95 for (var j in edges) {
96
97 line = edges[j];
98 start = line[0];
99 end = line[1];
100 color = line[2];
101
102 if (end > this.columns || start > this.columns) {
103 this.columns += 1;
104 }
105
106 if (start == this.columns && start > end) {
107 var fold = true;
108 }
109
110 x0 = this.cell[0] + this.box_size * start + this.box_size / 2;
111 y0 = this.bg[1] - this.bg_height / 2;
112 x1 = this.cell[0] + this.box_size * end + this.box_size / 2;
113 y1 = this.bg[1] + this.bg_height / 2;
114
115 this.edge(x0, y0, x1, y1, color);
116
117 }
118
119 // Draw the revision node in the right column
120
121 column = node[0]
122 color = node[1]
123
124 radius = this.box_size / 8;
125 x = this.cell[0] + this.box_size * column + this.box_size / 2;
126 y = this.bg[1] - this.bg_height / 2;
127 var add = this.vertex(x, y, color, parity, cur);
128 backgrounds += add[0];
129 nodedata += add[1];
130
131 if (fold) this.columns -= 1;
132
133 }
134
135 document.getElementById('nodebgs').innerHTML += backgrounds;
136 document.getElementById('graphnodes').innerHTML += nodedata;
137
138 }
139
140 }
141
142
143 process_dates = (function(document, RegExp, Math, isNaN, Date, _false, _true){
144
145 // derived from code from mercurial/templatefilter.py
146
147 var scales = {
148 'year': 365 * 24 * 60 * 60,
149 'month': 30 * 24 * 60 * 60,
150 'week': 7 * 24 * 60 * 60,
151 'day': 24 * 60 * 60,
152 'hour': 60 * 60,
153 'minute': 60,
154 'second': 1
155 };
156
157 function format(count, string){
158 var ret = count + ' ' + string;
159 if (count > 1){
160 ret = ret + 's';
161 }
162 return ret;
163 }
164
165 function age(datestr){
166 var now = new Date();
167 var once = new Date(datestr);
168
169 if (isNaN(once.getTime())){
170 // parsing error
171 return datestr;
172 }
173
174 var delta = Math.floor((now.getTime() - once.getTime()) / 1000);
175
176 var future = _false;
177 if (delta < 0){
178 future = _true;
179 delta = -delta;
180 if (delta > (30 * scales.year)){
181 return "in the distant future";
182 }
183 }
184
185 if (delta > (2 * scales.year)){
186 return once.getFullYear() + '-' + once.getMonth() + '-' + once.getDate();
187 }
188
189 for (unit in scales){
190 var s = scales[unit];
191 var n = Math.floor(delta / s);
192 if ((n >= 2) || (s == 1)){
193 if (future){
194 return format(n, unit) + ' from now';
195 } else {
196 return format(n, unit) + ' ago';
197 }
198 }
199 }
200 }
201
202 return function(){
203 var nodes = document.getElementsByTagName('*');
204 var ageclass = new RegExp('\\bage\\b');
205 var dateclass = new RegExp('\\bdate\\b');
206 for (var i=0; i<nodes.length; ++i){
207 var node = nodes[i];
208 var classes = node.className;
209 if (ageclass.test(classes)){
210 var agevalue = age(node.textContent);
211 if (dateclass.test(classes)){
212 // We want both: date + (age)
213 node.textContent += ' ('+agevalue+')';
214 } else {
215 node.textContent = agevalue;
216 }
217 }
218 }
219 }
220 })(document, RegExp, Math, isNaN, Date, false, true)
@@ -1,6 +1,7 b''
1 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
2 2 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
3 3 <head>
4 4 <link rel="icon" href="{staticurl}hgicon.png" type="image/png" />
5 5 <meta name="robots" content="index, nofollow" />
6 6 <link rel="stylesheet" href="{staticurl}style-coal.css" type="text/css" />
7 <script type="text/javascript" src="{staticurl}mercurial.js"></script>
@@ -1,212 +1,212 b''
1 1 default = 'shortlog'
2 2
3 3 mimetype = 'text/html; charset={encoding}'
4 4 header = header.tmpl
5 5 footer = ../paper/footer.tmpl
6 6 search = ../paper/search.tmpl
7 7
8 8 changelog = ../paper/shortlog.tmpl
9 9 shortlog = ../paper/shortlog.tmpl
10 10 shortlogentry = ../paper/shortlogentry.tmpl
11 11 graph = ../paper/graph.tmpl
12 12
13 13 help = ../paper/help.tmpl
14 14 helptopics = ../paper/helptopics.tmpl
15 15
16 16 helpentry = '<tr><td><a href="{url}help/{topic|escape}{sessionvars%urlparameter}">{topic|escape}</a></td><td>{summary|escape}</td></tr>'
17 17
18 18 naventry = '<a href="{url}log/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
19 19 navshortentry = '<a href="{url}shortlog/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
20 20 navgraphentry = '<a href="{url}graph/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
21 21 filenaventry = '<a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{label|escape}</a> '
22 22 filedifflink = '<a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a> '
23 23 filenodelink = '<a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a> '
24 24 filenolink = '{file|escape} '
25 25 fileellipses = '...'
26 26 changelogentry = ../paper/shortlogentry.tmpl
27 27 searchentry = ../paper/shortlogentry.tmpl
28 28 changeset = ../paper/changeset.tmpl
29 29 manifest = ../paper/manifest.tmpl
30 30
31 31 nav = '{before%naventry} {after%naventry}'
32 32 navshort = '{before%navshortentry}{after%navshortentry}'
33 33 navgraph = '{before%navgraphentry}{after%navgraphentry}'
34 34 filenav = '{before%filenaventry}{after%filenaventry}'
35 35
36 36 direntry = '
37 37 <tr class="fileline parity{parity}">
38 38 <td class="name">
39 39 <a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">
40 40 <img src="{staticurl}coal-folder.png" alt="dir."/> {basename|escape}/
41 41 </a>
42 42 <a href="{url}file/{node|short}{path|urlescape}/{emptydirs|urlescape}{sessionvars%urlparameter}">
43 43 {emptydirs|escape}
44 44 </a>
45 45 </td>
46 46 <td class="size"></td>
47 47 <td class="permissions">drwxr-xr-x</td>
48 48 </tr>'
49 49
50 50 fileentry = '
51 51 <tr class="fileline parity{parity}">
52 52 <td class="filename">
53 53 <a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
54 54 <img src="{staticurl}coal-file.png" alt="file"/> {basename|escape}
55 55 </a>
56 56 </td>
57 57 <td class="size">{size}</td>
58 58 <td class="permissions">{permissions|permissions}</td>
59 59 </tr>'
60 60
61 61 filerevision = ../paper/filerevision.tmpl
62 62 fileannotate = ../paper/fileannotate.tmpl
63 63 filediff = ../paper/filediff.tmpl
64 64 filelog = ../paper/filelog.tmpl
65 65 fileline = '
66 66 <div class="parity{parity} source"><a href="#{lineid}" id="{lineid}">{linenumber}</a> {line|escape}</div>'
67 67 filelogentry = ../paper/filelogentry.tmpl
68 68
69 69 annotateline = '
70 70 <tr class="parity{parity}">
71 71 <td class="annotate">
72 72 <a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}#{targetline}"
73 73 title="{node|short}: {desc|escape|firstline}">{author|user}@{rev}</a>
74 74 </td>
75 75 <td class="source"><a href="#{lineid}" id="{lineid}">{linenumber}</a> {line|escape}</td>
76 76 </tr>'
77 77
78 78 diffblock = '<div class="source bottomline parity{parity}"><pre>{lines}</pre></div>'
79 79 difflineplus = '<a href="#{lineid}" id="{lineid}">{linenumber}</a> <span class="plusline">{line|escape}</span>'
80 80 difflineminus = '<a href="#{lineid}" id="{lineid}">{linenumber}</a> <span class="minusline">{line|escape}</span>'
81 81 difflineat = '<a href="#{lineid}" id="{lineid}">{linenumber}</a> <span class="atline">{line|escape}</span>'
82 82 diffline = '<a href="#{lineid}" id="{lineid}">{linenumber}</a> {line|escape}'
83 83
84 84 changelogparent = '
85 85 <tr>
86 86 <th class="parent">parent {rev}:</th>
87 87 <td class="parent"><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td>
88 88 </tr>'
89 89
90 90 changesetparent = '<a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a> '
91 91
92 92 filerevparent = '<a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{rename%filerename}{node|short}</a> '
93 93 filerevchild = '<a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a> '
94 94
95 95 filerename = '{file|escape}@'
96 96 filelogrename = '
97 97 <span class="base">
98 98 base
99 99 <a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
100 100 {file|escape}@{node|short}
101 101 </a>
102 102 </span>'
103 103 fileannotateparent = '
104 104 <tr>
105 105 <td class="metatag">parent:</td>
106 106 <td>
107 107 <a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
108 108 {rename%filerename}{node|short}
109 109 </a>
110 110 </td>
111 111 </tr>'
112 112 changesetchild = ' <a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a>'
113 113 changelogchild = '
114 114 <tr>
115 115 <th class="child">child</th>
116 116 <td class="child">
117 117 <a href="{url}rev/{node|short}{sessionvars%urlparameter}">
118 118 {node|short}
119 119 </a>
120 120 </td>
121 121 </tr>'
122 122 fileannotatechild = '
123 123 <tr>
124 124 <td class="metatag">child:</td>
125 125 <td>
126 126 <a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
127 127 {node|short}
128 128 </a>
129 129 </td>
130 130 </tr>'
131 131 tags = ../paper/tags.tmpl
132 132 tagentry = '
133 133 <tr class="tagEntry parity{parity}">
134 134 <td>
135 135 <a href="{url}rev/{node|short}{sessionvars%urlparameter}">
136 136 {tag|escape}
137 137 </a>
138 138 </td>
139 139 <td class="node">
140 140 {node|short}
141 141 </td>
142 142 </tr>'
143 143 bookmarks = ../paper/bookmarks.tmpl
144 144 bookmarkentry = '
145 145 <tr class="tagEntry parity{parity}">
146 146 <td>
147 147 <a href="{url}rev/{node|short}{sessionvars%urlparameter}">
148 148 {bookmark|escape}
149 149 </a>
150 150 </td>
151 151 <td class="node">
152 152 {node|short}
153 153 </td>
154 154 </tr>'
155 155 branches = ../paper/branches.tmpl
156 156 branchentry = '
157 157 <tr class="tagEntry parity{parity}">
158 158 <td>
159 159 <a href="{url}shortlog/{node|short}{sessionvars%urlparameter}" class="{status}">
160 160 {branch|escape}
161 161 </a>
162 162 </td>
163 163 <td class="node">
164 164 {node|short}
165 165 </td>
166 166 </tr>'
167 167 changelogtag = '<span class="tag">{name|escape}</span> '
168 168 changesettag = '<span class="tag">{tag|escape}</span> '
169 169 changesetbookmark = '<span class="tag">{bookmark|escape}</span> '
170 170 changelogbranchhead = '<span class="branchhead">{name|escape}</span> '
171 171 changelogbranchname = '<span class="branchname">{name|escape}</span> '
172 172
173 173 filediffparent = '
174 174 <tr>
175 175 <th class="parent">parent {rev}:</th>
176 176 <td class="parent"><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td>
177 177 </tr>'
178 178 filelogparent = '
179 179 <tr>
180 180 <th>parent {rev}:</th>
181 181 <td><a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></td>
182 182 </tr>'
183 183 filediffchild = '
184 184 <tr>
185 185 <th class="child">child {rev}:</th>
186 186 <td class="child"><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a>
187 187 </td>
188 188 </tr>'
189 189 filelogchild = '
190 190 <tr>
191 191 <th>child {rev}:</th>
192 192 <td><a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></td>
193 193 </tr>'
194 194
195 195 indexentry = '
196 196 <tr class="parity{parity}">
197 197 <td><a href="{url}{sessionvars%urlparameter}">{name|escape}</a></td>
198 198 <td>{description}</td>
199 199 <td>{contact|obfuscate}</td>
200 <td class="age">{lastchange|age}</td>
200 <td class="age">{lastchange|date}</td>
201 201 <td class="indexlinks">{archives%indexarchiveentry}</td>
202 202 </tr>\n'
203 203 indexarchiveentry = '<a href="{url}archive/{node|short}{extension|urlescape}">&nbsp;&darr;{type|escape}</a>'
204 204 index = ../paper/index.tmpl
205 205 archiveentry = '
206 206 <li>
207 207 <a href="{url}archive/{node|short}{extension|urlescape}">{type|escape}</a>
208 208 </li>'
209 209 notfound = ../paper/notfound.tmpl
210 210 error = ../paper/error.tmpl
211 211 urlparameter = '{separator}{name}={value|urlescape}'
212 212 hiddenformentry = '<input type="hidden" name="{name}" value="{value|escape}" />'
@@ -1,14 +1,14 b''
1 1 <div>
2 <a class="title" href="{url}rev/{node|short}{sessionvars%urlparameter}"><span class="age">{date|age}</span>{desc|strip|firstline|escape|nonempty}<span class="logtags"> {inbranch%inbranchtag}{branches%branchtag}{tags%tagtag}{bookmarks%bookmarktag}</span></a>
2 <a class="title" href="{url}rev/{node|short}{sessionvars%urlparameter}"><span class="age">{date|date}</span>{desc|strip|firstline|escape|nonempty}<span class="logtags"> {inbranch%inbranchtag}{branches%branchtag}{tags%tagtag}{bookmarks%bookmarktag}</span></a>
3 3 </div>
4 4 <div class="title_text">
5 5 <div class="log_link">
6 6 <a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a><br/>
7 7 </div>
8 8 <i>{author|obfuscate} [{date|rfc822date}] rev {rev}</i><br/>
9 9 </div>
10 10 <div class="log_body">
11 11 {desc|strip|escape|addbreaks|nonempty}
12 12 <br/>
13 13 <br/>
14 14 </div>
@@ -1,53 +1,53 b''
1 1 {header}
2 2 <title>{repo|escape}: changeset {rev}:{node|short}</title>
3 3 <link rel="alternate" type="application/atom+xml"
4 4 href="{url}atom-log" title="Atom feed for {repo|escape}"/>
5 5 <link rel="alternate" type="application/rss+xml"
6 6 href="{url}rss-log" title="RSS feed for {repo|escape}"/>
7 7 </head>
8 8 <body>
9 9
10 10 <div class="page_header">
11 11 <a href="{logourl}" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / changeset
12 12 </div>
13 13
14 14 <div class="page_nav">
15 15 <a href="{url}summary{sessionvars%urlparameter}">summary</a> |
16 16 <a href="{url}shortlog/{rev}{sessionvars%urlparameter}">shortlog</a> |
17 17 <a href="{url}log/{rev}{sessionvars%urlparameter}">changelog</a> |
18 18 <a href="{url}graph{sessionvars%urlparameter}">graph</a> |
19 19 <a href="{url}tags{sessionvars%urlparameter}">tags</a> |
20 20 <a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a> |
21 21 <a href="{url}branches{sessionvars%urlparameter}">branches</a> |
22 22 <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a> |
23 23 changeset |
24 24 <a href="{url}raw-rev/{node|short}">raw</a> {archives%archiveentry} |
25 25 <a href="{url}help{sessionvars%urlparameter}">help</a>
26 26 <br/>
27 27 </div>
28 28
29 29 <div>
30 30 <a class="title" href="{url}raw-rev/{node|short}">{desc|strip|escape|firstline|nonempty} <span class="logtags">{inbranch%inbranchtag}{branches%branchtag}{tags%tagtag}{bookmarks%bookmarktag}</span></a>
31 31 </div>
32 32 <div class="title_text">
33 33 <table cellspacing="0">
34 34 <tr><td>author</td><td>{author|obfuscate}</td></tr>
35 <tr><td></td><td>{date|date} ({date|age})</td></tr>
35 <tr><td></td><td class="date age">{date|date}</td></tr>
36 36 {branch%changesetbranch}
37 37 <tr><td>changeset {rev}</td><td style="font-family:monospace">{node|short}</td></tr>
38 38 {parent%changesetparent}
39 39 {child%changesetchild}
40 40 </table></div>
41 41
42 42 <div class="page_body">
43 43 {desc|strip|escape|addbreaks|nonempty}
44 44 </div>
45 45 <div class="list_head"></div>
46 46 <div class="title_text">
47 47 <table cellspacing="0">
48 48 {files}
49 49 </table></div>
50 50
51 51 <div class="page_body">{diff}</div>
52 52
53 53 {footer}
@@ -1,65 +1,65 b''
1 1 {header}
2 2 <title>{repo|escape}: {file|escape}@{node|short} (annotated)</title>
3 3 <link rel="alternate" type="application/atom+xml"
4 4 href="{url}atom-log" title="Atom feed for {repo|escape}"/>
5 5 <link rel="alternate" type="application/rss+xml"
6 6 href="{url}rss-log" title="RSS feed for {repo|escape}"/>
7 7 </head>
8 8 <body>
9 9
10 10 <div class="page_header">
11 11 <a href="{logourl}" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / annotate
12 12 </div>
13 13
14 14 <div class="page_nav">
15 15 <a href="{url}summary{sessionvars%urlparameter}">summary</a> |
16 16 <a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a> |
17 17 <a href="{url}log{sessionvars%urlparameter}">changelog</a> |
18 18 <a href="{url}graph{sessionvars%urlparameter}">graph</a> |
19 19 <a href="{url}tags{sessionvars%urlparameter}">tags</a> |
20 20 <a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a> |
21 21 <a href="{url}branches{sessionvars%urlparameter}">branches</a> |
22 22 <a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">files</a> |
23 23 <a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a> |
24 24 <a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a> |
25 25 <a href="{url}file/tip/{file|urlescape}{sessionvars%urlparameter}">latest</a> |
26 26 <a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">revisions</a> |
27 27 annotate |
28 28 <a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a> |
29 29 <a href="{url}raw-annotate/{node|short}/{file|urlescape}">raw</a> |
30 30 <a href="{url}help{sessionvars%urlparameter}">help</a>
31 31 <br/>
32 32 </div>
33 33
34 34 <div class="title">{file|escape}</div>
35 35
36 36 <div class="title_text">
37 37 <table cellspacing="0">
38 38 <tr>
39 39 <td>author</td>
40 40 <td>{author|obfuscate}</td></tr>
41 41 <tr>
42 42 <td></td>
43 <td>{date|date} ({date|age})</td></tr>
43 <td class="date age">{date|date}</td></tr>
44 44 {branch%filerevbranch}
45 45 <tr>
46 46 <td>changeset {rev}</td>
47 47 <td style="font-family:monospace"><a class="list" href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td></tr>
48 48 {parent%fileannotateparent}
49 49 {child%fileannotatechild}
50 50 <tr>
51 51 <td>permissions</td>
52 52 <td style="font-family:monospace">{permissions|permissions}</td></tr>
53 53 </table>
54 54 </div>
55 55
56 56 <div class="page_path">
57 57 {desc|strip|escape|addbreaks|nonempty}
58 58 </div>
59 59 <div class="page_body">
60 60 <table>
61 61 {annotate%annotateline}
62 62 </table>
63 63 </div>
64 64
65 65 {footer}
@@ -1,64 +1,64 b''
1 1 {header}
2 2 <title>{repo|escape}: {file|escape}@{node|short}</title>
3 3 <link rel="alternate" type="application/atom+xml"
4 4 href="{url}atom-log" title="Atom feed for {repo|escape}"/>
5 5 <link rel="alternate" type="application/rss+xml"
6 6 href="{url}rss-log" title="RSS feed for {repo|escape}"/>
7 7 </head>
8 8 <body>
9 9
10 10 <div class="page_header">
11 11 <a href="{logourl}" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / file revision
12 12 </div>
13 13
14 14 <div class="page_nav">
15 15 <a href="{url}summary{sessionvars%urlparameter}">summary</a> |
16 16 <a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a> |
17 17 <a href="{url}log{sessionvars%urlparameter}">changelog</a> |
18 18 <a href="{url}graph{sessionvars%urlparameter}">graph</a> |
19 19 <a href="{url}tags{sessionvars%urlparameter}">tags</a> |
20 20 <a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a> |
21 21 <a href="{url}branches{sessionvars%urlparameter}">branches</a> |
22 22 <a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">files</a> |
23 23 <a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a> |
24 24 file |
25 25 <a href="{url}file/tip/{file|urlescape}{sessionvars%urlparameter}">latest</a> |
26 26 <a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">revisions</a> |
27 27 <a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a> |
28 28 <a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a> |
29 29 <a href="{url}raw-file/{node|short}/{file|urlescape}">raw</a> |
30 30 <a href="{url}help{sessionvars%urlparameter}">help</a>
31 31 <br/>
32 32 </div>
33 33
34 34 <div class="title">{file|escape}</div>
35 35
36 36 <div class="title_text">
37 37 <table cellspacing="0">
38 38 <tr>
39 39 <td>author</td>
40 40 <td>{author|obfuscate}</td></tr>
41 41 <tr>
42 42 <td></td>
43 <td>{date|date} ({date|age})</td></tr>
43 <td class="date age">{date|date}</td></tr>
44 44 {branch%filerevbranch}
45 45 <tr>
46 46 <td>changeset {rev}</td>
47 47 <td style="font-family:monospace"><a class="list" href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td></tr>
48 48 {parent%filerevparent}
49 49 {child%filerevchild}
50 50 <tr>
51 51 <td>permissions</td>
52 52 <td style="font-family:monospace">{permissions|permissions}</td></tr>
53 53 </table>
54 54 </div>
55 55
56 56 <div class="page_path">
57 57 {desc|strip|escape|addbreaks|nonempty}
58 58 </div>
59 59
60 60 <div class="page_body">
61 61 {text%fileline}
62 62 </div>
63 63
64 64 {footer}
@@ -1,11 +1,12 b''
1 <script type="text/javascript">process_dates()</script>
1 2 <div class="page_footer">
2 3 <div class="page_footer_text">{repo|escape}</div>
3 4 <div class="rss_logo">
4 5 <a href="{url}rss-log">RSS</a>
5 6 <a href="{url}atom-log">Atom</a>
6 7 </div>
7 8 <br />
8 9 {motd}
9 10 </div>
10 11 </body>
11 12 </html>
@@ -1,129 +1,128 b''
1 1 {header}
2 2 <title>{repo|escape}: Graph</title>
3 3 <link rel="alternate" type="application/atom+xml"
4 4 href="{url}atom-log" title="Atom feed for {repo|escape}"/>
5 5 <link rel="alternate" type="application/rss+xml"
6 6 href="{url}rss-log" title="RSS feed for {repo|escape}"/>
7 7 <!--[if IE]><script type="text/javascript" src="{staticurl}excanvas.js"></script><![endif]-->
8 8 </head>
9 9 <body>
10 10
11 11 <div class="page_header">
12 12 <a href="{logourl}" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / graph
13 13 </div>
14 14
15 15 <form action="{url}log">
16 16 {sessionvars%hiddenformentry}
17 17 <div class="search">
18 18 <input type="text" name="rev" />
19 19 </div>
20 20 </form>
21 21 <div class="page_nav">
22 22 <a href="{url}summary{sessionvars%urlparameter}">summary</a> |
23 23 <a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a> |
24 24 <a href="{url}log/{rev}{sessionvars%urlparameter}">changelog</a> |
25 25 graph |
26 26 <a href="{url}tags{sessionvars%urlparameter}">tags</a> |
27 27 <a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a> |
28 28 <a href="{url}branches{sessionvars%urlparameter}">branches</a> |
29 29 <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a> |
30 30 <a href="{url}help{sessionvars%urlparameter}">help</a>
31 31 <br/>
32 32 <a href="{url}graph/{rev}{lessvars%urlparameter}">less</a>
33 33 <a href="{url}graph/{rev}{morevars%urlparameter}">more</a>
34 34 | {changenav%navgraph}<br/>
35 35 </div>
36 36
37 37 <div class="title">&nbsp;</div>
38 38
39 39 <noscript>The revision graph only works with JavaScript-enabled browsers.</noscript>
40 40
41 41 <div id="wrapper">
42 42 <ul id="nodebgs"></ul>
43 43 <canvas id="graph" width="480" height="{canvasheight}"></canvas>
44 44 <ul id="graphnodes"></ul>
45 45 </div>
46 46
47 <script type="text/javascript" src="{staticurl}graph.js"></script>
48 47 <script>
49 48 <!-- hide script content
50 49
51 50 var data = {jsdata|json};
52 51 var graph = new Graph();
53 52 graph.scale({bg_height});
54 53
55 54 graph.edge = function(x0, y0, x1, y1, color) \{
56 55
57 56 this.setColor(color, 0.0, 0.65);
58 57 this.ctx.beginPath();
59 58 this.ctx.moveTo(x0, y0);
60 59 this.ctx.lineTo(x1, y1);
61 60 this.ctx.stroke();
62 61
63 62 }
64 63
65 64 var revlink = '<li style="_STYLE"><span class="desc">';
66 65 revlink += '<a class="list" href="{url}rev/_NODEID{sessionvars%urlparameter}" title="_NODEID"><b>_DESC</b></a>';
67 66 revlink += '</span> _TAGS';
68 67 revlink += '<span class="info">_DATE, by _USER</span></li>';
69 68
70 69 graph.vertex = function(x, y, color, parity, cur) \{
71 70
72 71 this.ctx.beginPath();
73 72 color = this.setColor(color, 0.25, 0.75);
74 73 this.ctx.arc(x, y, radius, 0, Math.PI * 2, true);
75 74 this.ctx.fill();
76 75
77 76 var bg = '<li class="bg parity' + parity + '"></li>';
78 77 var left = (this.columns + 1) * this.bg_height;
79 78 var nstyle = 'padding-left: ' + left + 'px;';
80 79 var item = revlink.replace(/_STYLE/, nstyle);
81 80 item = item.replace(/_PARITY/, 'parity' + parity);
82 81 item = item.replace(/_NODEID/, cur[0]);
83 82 item = item.replace(/_NODEID/, cur[0]);
84 83 item = item.replace(/_DESC/, cur[3]);
85 84 item = item.replace(/_USER/, cur[4]);
86 85 item = item.replace(/_DATE/, cur[5]);
87 86
88 87 var tagspan = '';
89 88 if (cur[7].length || cur[8].length || (cur[6][0] != 'default' || cur[6][1])) \{
90 89 tagspan = '<span class="logtags">';
91 90 if (cur[6][1]) \{
92 91 tagspan += '<span class="branchtag" title="' + cur[6][0] + '">';
93 92 tagspan += cur[6][0] + '</span> ';
94 93 } else if (!cur[6][1] && cur[6][0] != 'default') \{
95 94 tagspan += '<span class="inbranchtag" title="' + cur[6][0] + '">';
96 95 tagspan += cur[6][0] + '</span> ';
97 96 }
98 97 if (cur[7].length) \{
99 98 for (var t in cur[7]) \{
100 99 var tag = cur[7][t];
101 100 tagspan += '<span class="tagtag">' + tag + '</span> ';
102 101 }
103 102 }
104 103 if (cur[8].length) \{
105 104 for (var t in cur[8]) \{
106 105 var bookmark = cur[8][t];
107 106 tagspan += '<span class="bookmarktag">' + bookmark + '</span> ';
108 107 }
109 108 }
110 109 tagspan += '</span>';
111 110 }
112 111
113 112 item = item.replace(/_TAGS/, tagspan);
114 113 return [bg, item];
115 114
116 115 }
117 116
118 117 graph.render(data);
119 118
120 119 // stop hiding script -->
121 120 </script>
122 121
123 122 <div class="page_nav">
124 123 <a href="{url}graph/{rev}{lessvars%urlparameter}">less</a>
125 124 <a href="{url}graph/{rev}{morevars%urlparameter}">more</a>
126 125 | {changenav%navgraph}
127 126 </div>
128 127
129 128 {footer}
@@ -1,8 +1,8 b''
1 1 <?xml version="1.0" encoding="{encoding}"?>
2 2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3 3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US" lang="en-US">
4 4 <head>
5 5 <link rel="icon" href="{staticurl}hgicon.png" type="image/png" />
6 6 <meta name="robots" content="index, nofollow"/>
7 7 <link rel="stylesheet" href="{staticurl}style-gitweb.css" type="text/css" />
8
8 <script type="text/javascript" src="{staticurl}mercurial.js"></script>
@@ -1,272 +1,272 b''
1 1 default = 'summary'
2 2 mimetype = 'text/html; charset={encoding}'
3 3 header = header.tmpl
4 4 footer = footer.tmpl
5 5 search = search.tmpl
6 6 changelog = changelog.tmpl
7 7 summary = summary.tmpl
8 8 error = error.tmpl
9 9 notfound = notfound.tmpl
10 10
11 11 help = help.tmpl
12 12 helptopics = helptopics.tmpl
13 13
14 14 helpentry = '<tr><td><a href="{url}help/{topic|escape}{sessionvars%urlparameter}">{topic|escape}</a></td><td>{summary|escape}</td></tr>'
15 15
16 16 naventry = '<a href="{url}log/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
17 17 navshortentry = '<a href="{url}shortlog/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
18 18 navgraphentry = '<a href="{url}graph/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
19 19 filenaventry = '<a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{label|escape}</a> '
20 20 filedifflink = '<a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a> '
21 21 filenodelink = '
22 22 <tr class="parity{parity}">
23 23 <td><a class="list" href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a></td>
24 24 <td></td>
25 25 <td class="link">
26 26 <a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a> |
27 27 <a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a> |
28 28 <a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a> |
29 29 <a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">revisions</a>
30 30 </td>
31 31 </tr>'
32 32 filenolink = '
33 33 <tr class="parity{parity}">
34 34 <td><a class="list" href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a></td>
35 35 <td></td>
36 36 <td class="link">
37 37 file |
38 38 annotate |
39 39 <a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a> |
40 40 <a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">revisions</a>
41 41 </td>
42 42 </tr>'
43 43
44 44 nav = '{before%naventry} {after%naventry}'
45 45 navshort = '{before%navshortentry}{after%navshortentry}'
46 46 navgraph = '{before%navgraphentry}{after%navgraphentry}'
47 47 filenav = '{before%filenaventry}{after%filenaventry}'
48 48
49 49 fileellipses = '...'
50 50 changelogentry = changelogentry.tmpl
51 51 searchentry = changelogentry.tmpl
52 52 changeset = changeset.tmpl
53 53 manifest = manifest.tmpl
54 54 direntry = '
55 55 <tr class="parity{parity}">
56 56 <td style="font-family:monospace">drwxr-xr-x</td>
57 57 <td style="font-family:monospace"></td>
58 58 <td style="font-family:monospace"></td>
59 59 <td>
60 60 <a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">{basename|escape}</a>
61 61 <a href="{url}file/{node|short}{path|urlescape}/{emptydirs|urlescape}{sessionvars%urlparameter}">{emptydirs|escape}</a>
62 62 </td>
63 63 <td class="link">
64 64 <a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">files</a>
65 65 </td>
66 66 </tr>'
67 67 fileentry = '
68 68 <tr class="parity{parity}">
69 69 <td style="font-family:monospace">{permissions|permissions}</td>
70 70 <td style="font-family:monospace" align=right>{date|isodate}</td>
71 71 <td style="font-family:monospace" align=right>{size}</td>
72 72 <td class="list">
73 73 <a class="list" href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{basename|escape}</a>
74 74 </td>
75 75 <td class="link">
76 76 <a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a> |
77 77 <a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">revisions</a> |
78 78 <a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a>
79 79 </td>
80 80 </tr>'
81 81 filerevision = filerevision.tmpl
82 82 fileannotate = fileannotate.tmpl
83 83 filediff = filediff.tmpl
84 84 filelog = filelog.tmpl
85 85 fileline = '
86 86 <div style="font-family:monospace" class="parity{parity}">
87 87 <pre><a class="linenr" href="#{lineid}" id="{lineid}">{linenumber}</a> {line|escape}</pre>
88 88 </div>'
89 89 annotateline = '
90 90 <tr style="font-family:monospace" class="parity{parity}">
91 91 <td class="linenr" style="text-align: right;">
92 92 <a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}#l{targetline}"
93 93 title="{node|short}: {desc|escape|firstline}">{author|user}@{rev}</a>
94 94 </td>
95 95 <td><pre><a class="linenr" href="#{lineid}" id="{lineid}">{linenumber}</a></pre></td>
96 96 <td><pre>{line|escape}</pre></td>
97 97 </tr>'
98 98 difflineplus = '<span style="color:#008800;"><a class="linenr" href="#{lineid}" id="{lineid}">{linenumber}</a> {line|escape}</span>'
99 99 difflineminus = '<span style="color:#cc0000;"><a class="linenr" href="#{lineid}" id="{lineid}">{linenumber}</a> {line|escape}</span>'
100 100 difflineat = '<span style="color:#990099;"><a class="linenr" href="#{lineid}" id="{lineid}">{linenumber}</a> {line|escape}</span>'
101 101 diffline = '<span><a class="linenr" href="#{lineid}" id="{lineid}">{linenumber}</a> {line|escape}</span>'
102 102 changelogparent = '
103 103 <tr>
104 104 <th class="parent">parent {rev}:</th>
105 105 <td class="parent">
106 106 <a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a>
107 107 </td>
108 108 </tr>'
109 109 changesetbranch = '<tr><td>branch</td><td>{name}</td></tr>'
110 110 changesetparent = '
111 111 <tr>
112 112 <td>parent {rev}</td>
113 113 <td style="font-family:monospace">
114 114 <a class="list" href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a>
115 115 </td>
116 116 </tr>'
117 117 filerevbranch = '<tr><td>branch</td><td>{name}</td></tr>'
118 118 filerevparent = '
119 119 <tr>
120 120 <td>parent {rev}</td>
121 121 <td style="font-family:monospace">
122 122 <a class="list" href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
123 123 {rename%filerename}{node|short}
124 124 </a>
125 125 </td>
126 126 </tr>'
127 127 filerename = '{file|escape}@'
128 128 filelogrename = '| <a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">base</a>'
129 129 fileannotateparent = '
130 130 <tr>
131 131 <td>parent {rev}</td>
132 132 <td style="font-family:monospace">
133 133 <a class="list" href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
134 134 {rename%filerename}{node|short}
135 135 </a>
136 136 </td>
137 137 </tr>'
138 138 changelogchild = '
139 139 <tr>
140 140 <th class="child">child {rev}:</th>
141 141 <td class="child"><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td>
142 142 </tr>'
143 143 changesetchild = '
144 144 <tr>
145 145 <td>child {rev}</td>
146 146 <td style="font-family:monospace">
147 147 <a class="list" href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a>
148 148 </td>
149 149 </tr>'
150 150 filerevchild = '
151 151 <tr>
152 152 <td>child {rev}</td>
153 153 <td style="font-family:monospace">
154 154 <a class="list" href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></td>
155 155 </tr>'
156 156 fileannotatechild = '
157 157 <tr>
158 158 <td>child {rev}</td>
159 159 <td style="font-family:monospace">
160 160 <a class="list" href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></td>
161 161 </tr>'
162 162 tags = tags.tmpl
163 163 tagentry = '
164 164 <tr class="parity{parity}">
165 <td class="age"><i>{date|age}</i></td>
165 <td class="age"><i class="age">{date|date}</i></td>
166 166 <td><a class="list" href="{url}rev/{node|short}{sessionvars%urlparameter}"><b>{tag|escape}</b></a></td>
167 167 <td class="link">
168 168 <a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a> |
169 169 <a href="{url}log/{node|short}{sessionvars%urlparameter}">changelog</a> |
170 170 <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>
171 171 </td>
172 172 </tr>'
173 173 bookmarks = bookmarks.tmpl
174 174 bookmarkentry = '
175 175 <tr class="parity{parity}">
176 <td class="age"><i>{date|age}</i></td>
176 <td class="age"><i class="age">{date|date}</i></td>
177 177 <td><a class="list" href="{url}rev/{node|short}{sessionvars%urlparameter}"><b>{bookmark|escape}</b></a></td>
178 178 <td class="link">
179 179 <a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a> |
180 180 <a href="{url}log/{node|short}{sessionvars%urlparameter}">changelog</a> |
181 181 <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>
182 182 </td>
183 183 </tr>'
184 184 branches = branches.tmpl
185 185 branchentry = '
186 186 <tr class="parity{parity}">
187 <td class="age"><i>{date|age}</i></td>
187 <td class="age"><i class="age">{date|date}</i></td>
188 188 <td><a class="list" href="{url}shortlog/{node|short}{sessionvars%urlparameter}"><b>{node|short}</b></a></td>
189 189 <td class="{status}">{branch|escape}</td>
190 190 <td class="link">
191 191 <a href="{url}changeset/{node|short}{sessionvars%urlparameter}">changeset</a> |
192 192 <a href="{url}log/{node|short}{sessionvars%urlparameter}">changelog</a> |
193 193 <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>
194 194 </td>
195 195 </tr>'
196 196 diffblock = '<pre>{lines}</pre>'
197 197 filediffparent = '
198 198 <tr>
199 199 <td>parent {rev}</td>
200 200 <td style="font-family:monospace">
201 201 <a class="list" href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
202 202 {node|short}
203 203 </a>
204 204 </td>
205 205 </tr>'
206 206 filelogparent = '
207 207 <tr>
208 208 <td align="right">parent {rev}:&nbsp;</td>
209 209 <td><a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></td>
210 210 </tr>'
211 211 filediffchild = '
212 212 <tr>
213 213 <td>child {rev}</td>
214 214 <td style="font-family:monospace">
215 215 <a class="list" href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a>
216 216 </td>
217 217 </tr>'
218 218 filelogchild = '
219 219 <tr>
220 220 <td align="right">child {rev}:&nbsp;</td>
221 221 <td><a href="{url}file{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></td>
222 222 </tr>'
223 223 shortlog = shortlog.tmpl
224 224 graph = graph.tmpl
225 225 tagtag = '<span class="tagtag" title="{name}">{name}</span> '
226 226 branchtag = '<span class="branchtag" title="{name}">{name}</span> '
227 227 inbranchtag = '<span class="inbranchtag" title="{name}">{name}</span> '
228 228 bookmarktag = '<span class="bookmarktag" title="{name}">{name}</span> '
229 229 shortlogentry = '
230 230 <tr class="parity{parity}">
231 <td class="age"><i>{date|age}</i></td>
231 <td class="age"><i class="age">{date|date}</i></td>
232 232 <td><i>{author|person}</i></td>
233 233 <td>
234 234 <a class="list" href="{url}rev/{node|short}{sessionvars%urlparameter}">
235 235 <b>{desc|strip|firstline|escape|nonempty}</b>
236 236 <span class="logtags">{inbranch%inbranchtag}{branches%branchtag}{tags%tagtag}{bookmarks%bookmarktag}</span>
237 237 </a>
238 238 </td>
239 239 <td class="link" nowrap>
240 240 <a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a> |
241 241 <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>
242 242 </td>
243 243 </tr>'
244 244 filelogentry = '
245 245 <tr class="parity{parity}">
246 <td class="age"><i>{date|age}</i></td>
246 <td class="age"><i class="age">{date|date}</i></td>
247 247 <td>
248 248 <a class="list" href="{url}rev/{node|short}{sessionvars%urlparameter}">
249 249 <b>{desc|strip|firstline|escape|nonempty}</b>
250 250 </a>
251 251 </td>
252 252 <td class="link">
253 253 <a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a>&nbsp;|&nbsp;<a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a>&nbsp;|&nbsp;<a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a> {rename%filelogrename}</td>
254 254 </tr>'
255 255 archiveentry = ' | <a href="{url}archive/{node|short}{extension}">{type|escape}</a> '
256 256 indexentry = '
257 257 <tr class="parity{parity}">
258 258 <td>
259 259 <a class="list" href="{url}{sessionvars%urlparameter}">
260 260 <b>{name|escape}</b>
261 261 </a>
262 262 </td>
263 263 <td>{description}</td>
264 264 <td>{contact|obfuscate}</td>
265 <td class="age">{lastchange|age}</td>
265 <td class="age">{lastchange|date}</td>
266 266 <td class="indexlinks">{archives%indexarchiveentry}</td>
267 267 <td><div class="rss_logo"><a href="{url}rss-log">RSS</a> <a href="{url}atom-log">Atom</a></div></td>
268 268 </tr>\n'
269 269 indexarchiveentry = ' <a href="{url}archive/{node|short}{extension}">{type|escape}</a> '
270 270 index = index.tmpl
271 271 urlparameter = '{separator}{name}={value|urlescape}'
272 272 hiddenformentry = '<input type="hidden" name="{name}" value="{value|escape}" />'
@@ -1,6 +1,6 b''
1 1 <h3 class="changelog"><a class="title" href="{url}rev/{node|short}{sessionvars%urlparameter}">{desc|strip|firstline|escape|nonempty}<span class="logtags"> {inbranch%inbranchtag}{branches%branchtag}{tags%tagtag}{bookmarks%bookmarktag}</span></a></h3>
2 2 <ul class="changelog-entry">
3 <li class="age">{date|age}</li>
3 <li class="age">{date|date}</li>
4 4 <li>by <span class="name">{author|obfuscate}</span> <span class="revdate">[{date|rfc822date}] rev {rev}</span></li>
5 5 <li class="description">{desc|strip|escape|addbreaks|nonempty}</li>
6 6 </ul>
@@ -1,65 +1,65 b''
1 1 {header}
2 2 <title>{repo|escape}: changeset {rev}:{node|short}</title>
3 3 <link rel="alternate" type="application/atom+xml" href="{url}atom-log" title="Atom feed for {repo|escape}"/>
4 4 <link rel="alternate" type="application/rss+xml" href="{url}rss-log" title="RSS feed for {repo|escape}"/>
5 5 </head>
6 6
7 7 <body>
8 8 <div id="container">
9 9 <div class="page-header">
10 10 <h1><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / files</h1>
11 11
12 12 <form action="{url}log">
13 13 {sessionvars%hiddenformentry}
14 14 <dl class="search">
15 15 <dt><label>Search: </label></dt>
16 16 <dd><input type="text" name="rev" /></dd>
17 17 </dl>
18 18 </form>
19 19
20 20 <ul class="page-nav">
21 21 <li><a href="{url}summary{sessionvars%urlparameter}">summary</a></li>
22 22 <li><a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a></li>
23 23 <li><a href="{url}changelog{sessionvars%urlparameter}">changelog</a></li>
24 24 <li><a href="{url}graph/{node|short}{sessionvars%urlparameter}">graph</a></li>
25 25 <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
26 26 <li><a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a></li>
27 27 <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
28 28 <li><a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a></li>
29 29 <li><a href="{url}help{sessionvars%urlparameter}">help</a></li>
30 30 </ul>
31 31 </div>
32 32
33 33 <ul class="submenu">
34 34 <li class="current">changeset</li>
35 35 <li><a href="{url}raw-rev/{node|short}">raw</a> {archives%archiveentry}</li>
36 36 </ul>
37 37
38 38 <h2 class="no-link no-border">changeset</h2>
39 39
40 40 <h3 class="changeset"><a href="{url}raw-rev/{node|short}">{desc|strip|escape|firstline|nonempty} <span class="logtags">{inbranch%inbranchtag}{branches%branchtag}{tags%tagtag}{bookmarks%bookmarktag}</span></a></h3>
41 <p class="changeset-age"><span>{date|age}</span></p>
41 <p class="changeset-age age">{date|date}</p>
42 42
43 43 <dl class="overview">
44 44 <dt>author</dt>
45 45 <dd>{author|obfuscate}</dd>
46 46 <dt>date</dt>
47 47 <dd>{date|date}</dd>
48 48 {branch%changesetbranch}
49 49 <dt>changeset {rev}</dt>
50 50 <dd>{node|short}</dd>
51 51 {parent%changesetparent}
52 52 {child%changesetchild}
53 53 </dl>
54 54
55 55 <p class="description">{desc|strip|escape|addbreaks|nonempty}</p>
56 56
57 57 <table>
58 58 {files}
59 59 </table>
60 60
61 61 <div class="diff">
62 62 {diff}
63 63 </div>
64 64
65 65 {footer}
@@ -1,65 +1,65 b''
1 1 {header}
2 2 <title>{repo|escape}: {file|escape}@{node|short} (annotated)</title>
3 3 <link rel="alternate" type="application/atom+xml" href="{url}atom-log" title="Atom feed for {repo|escape}"/>
4 4 <link rel="alternate" type="application/rss+xml" href="{url}rss-log" title="RSS feed for {repo|escape}"/>
5 5 </head>
6 6
7 7 <body>
8 8 <div id="container">
9 9 <div class="page-header">
10 10 <h1><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / annotate</h1>
11 11
12 12 <form action="{url}log">
13 13 {sessionvars%hiddenformentry}
14 14 <dl class="search">
15 15 <dt><label>Search: </label></dt>
16 16 <dd><input type="text" name="rev" /></dd>
17 17 </dl>
18 18 </form>
19 19
20 20 <ul class="page-nav">
21 21 <li><a href="{url}summary{sessionvars%urlparameter}">summary</a></li>
22 22 <li><a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a></li>
23 23 <li><a href="{url}log{sessionvars%urlparameter}">changelog</a></li>
24 24 <li><a href="{url}graph/{node|short}{sessionvars%urlparameter}">graph</a></li>
25 25 <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
26 26 <li><a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a></li>
27 27 <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
28 28 <li><a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">files</a></li>
29 29 <li><a href="{url}help{sessionvars%urlparameter}">help</a></li>
30 30 </ul>
31 31 </div>
32 32
33 33 <ul class="submenu">
34 34 <li><a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a></li>
35 35 <li><a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">revisions</a></li>
36 36 <li class="current">annotate</li>
37 37 <li><a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a></li>
38 38 <li><a href="{url}raw-annotate/{node|short}/{file|urlescape}">raw</a></li>
39 39 </ul>
40 40
41 41 <h2 class="no-link no-border">{file|escape}@{node|short} (annotated)</h2>
42 42 <h3 class="changeset">{file|escape}</h3>
43 <p class="changeset-age"><span>{date|age}</span></p>
43 <p class="changeset-age age">{date|date}</p>
44 44
45 45 <dl class="overview">
46 46 <dt>author</dt>
47 47 <dd>{author|obfuscate}</dd>
48 48 <dt>date</dt>
49 49 <dd>{date|date}</dd>
50 50 {branch%filerevbranch}
51 51 <dt>changeset {rev}</dt>
52 52 <dd><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></dd>
53 53 {parent%fileannotateparent}
54 54 {child%fileannotatechild}
55 55 <dt>permissions</dt>
56 56 <dd>{permissions|permissions}</dd>
57 57 </dl>
58 58
59 59 <p class="description">{desc|strip|escape|addbreaks|nonempty}</p>
60 60
61 61 <table class="annotated">
62 62 {annotate%annotateline}
63 63 </table>
64 64
65 65 {footer}
@@ -1,65 +1,65 b''
1 1 {header}
2 2 <title>{repo|escape}: {file|escape}@{node|short}</title>
3 3 <link rel="alternate" type="application/atom+xml" href="{url}atom-log" title="Atom feed for {repo|escape}"/>
4 4 <link rel="alternate" type="application/rss+xml" href="{url}rss-log" title="RSS feed for {repo|escape}"/>
5 5 </head>
6 6
7 7 <body>
8 8 <div id="container">
9 9 <div class="page-header">
10 10 <h1><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / file revision</h1>
11 11
12 12 <form action="{url}log">
13 13 {sessionvars%hiddenformentry}
14 14 <dl class="search">
15 15 <dt><label>Search: </label></dt>
16 16 <dd><input type="text" name="rev" /></dd>
17 17 </dl>
18 18 </form>
19 19
20 20 <ul class="page-nav">
21 21 <li><a href="{url}summary{sessionvars%urlparameter}">summary</a></li>
22 22 <li><a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a></li>
23 23 <li><a href="{url}changelog{sessionvars%urlparameter}">changelog</a></li>
24 24 <li><a href="{url}graph/{node|short}{sessionvars%urlparameter}">graph</a></li>
25 25 <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
26 26 <li><a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a></li>
27 27 <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
28 28 <li><a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">files</a></li>
29 29 <li><a href="{url}help{sessionvars%urlparameter}">help</a></li>
30 30 </ul>
31 31 </div>
32 32
33 33 <ul class="submenu">
34 34 <li class="current">file</li>
35 35 <li><a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">revisions</a></li>
36 36 <li><a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a></li>
37 37 <li><a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a></li>
38 38 <li><a href="{url}raw-file/{node|short}/{file|urlescape}">raw</a></li>
39 39 </ul>
40 40
41 41 <h2 class="no-link no-border">{file|escape}@{node|short}</h2>
42 42 <h3 class="changeset">{file|escape}</h3>
43 <p class="changeset-age"><span>{date|age}</span></p>
43 <p class="changeset-age age">{date|date}</p>
44 44
45 45 <dl class="overview">
46 46 <dt>author</dt>
47 47 <dd>{author|obfuscate}</dd>
48 48 <dt>date</dt>
49 49 <dd>{date|date}</dd>
50 50 {branch%filerevbranch}
51 51 <dt>changeset {rev}</dt>
52 52 <dd><a class="list" href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></dd>
53 53 {parent%filerevparent}
54 54 {child%filerevchild}
55 55 <dt>permissions</dt>
56 56 <dd>{permissions|permissions}</dd>
57 57 </dl>
58 58
59 59 <p class="description">{desc|strip|escape|addbreaks|nonempty}</p>
60 60
61 61 <div class="source">
62 62 {text%fileline}
63 63 </div>
64 64
65 65 {footer}
@@ -1,22 +1,23 b''
1 <script type="text/javascript">process_dates()</script>
1 2 <div class="page-footer">
2 3 <p>Mercurial Repository: {repo|escape}</p>
3 4 <ul class="rss-logo">
4 5 <li><a href="{url}rss-log">RSS</a></li>
5 6 <li><a href="{url}atom-log">Atom</a></li>
6 7 </ul>
7 8 {motd}
8 9 </div>
9 10
10 11 <div id="powered-by">
11 12 <p><a href="{logourl}" title="Mercurial"><img src="{staticurl}hglogo.png" width=75 height=90 border=0 alt="mercurial"></a></p>
12 13 </div>
13 14
14 15 <div id="corner-top-left"></div>
15 16 <div id="corner-top-right"></div>
16 17 <div id="corner-bottom-left"></div>
17 18 <div id="corner-bottom-right"></div>
18 19
19 20 </div>
20 21
21 22 </body>
22 23 </html>
@@ -1,126 +1,125 b''
1 1 {header}
2 2 <title>{repo|escape}: graph</title>
3 3 <link rel="alternate" type="application/atom+xml" href="{url}atom-log" title="Atom feed for {repo|escape}"/>
4 4 <link rel="alternate" type="application/rss+xml" href="{url}rss-log" title="RSS feed for {repo|escape}"/>
5 5 <!--[if IE]><script type="text/javascript" src="{staticurl}excanvas.js"></script><![endif]-->
6 6 </head>
7 7
8 8 <body>
9 9 <div id="container">
10 10 <div class="page-header">
11 11 <h1><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / graph</h1>
12 12
13 13 <form action="{url}log">
14 14 {sessionvars%hiddenformentry}
15 15 <dl class="search">
16 16 <dt><label>Search: </label></dt>
17 17 <dd><input type="text" name="rev" /></dd>
18 18 </dl>
19 19 </form>
20 20
21 21 <ul class="page-nav">
22 22 <li><a href="{url}summary{sessionvars%urlparameter}">summary</a></li>
23 23 <li><a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a></li>
24 24 <li><a href="{url}changelog{sessionvars%urlparameter}">changelog</a></li>
25 25 <li class="current">graph</li>
26 26 <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
27 27 <li><a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a></li>
28 28 <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
29 29 <li><a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a></li>
30 30 <li><a href="{url}help{sessionvars%urlparameter}">help</a></li>
31 31 </ul>
32 32 </div>
33 33
34 34 <h2 class="no-link no-border">graph</h2>
35 35
36 36 <div id="noscript">The revision graph only works with JavaScript-enabled browsers.</div>
37 37 <div id="wrapper">
38 38 <ul id="nodebgs"></ul>
39 39 <canvas id="graph" width="480" height="{canvasheight}"></canvas>
40 40 <ul id="graphnodes"></ul>
41 41 </div>
42 42
43 <script type="text/javascript" src="{staticurl}graph.js"></script>
44 43 <script>
45 44 <!-- hide script content
46 45
47 46 document.getElementById('noscript').style.display = 'none';
48 47
49 48 var data = {jsdata|json};
50 49 var graph = new Graph();
51 50 graph.scale({bg_height});
52 51
53 52 graph.edge = function(x0, y0, x1, y1, color) \{
54 53
55 54 this.setColor(color, 0.0, 0.65);
56 55 this.ctx.beginPath();
57 56 this.ctx.moveTo(x0, y0);
58 57 this.ctx.lineTo(x1, y1);
59 58 this.ctx.stroke();
60 59
61 60 }
62 61
63 62 var revlink = '<li style="_STYLE"><span class="desc">';
64 63 revlink += '<a href="{url}rev/_NODEID{sessionvars%urlparameter}" title="_NODEID">_DESC</a>';
65 64 revlink += '</span>_TAGS<span class="info">_DATE, by _USER</span></li>';
66 65
67 66 graph.vertex = function(x, y, color, parity, cur) \{
68 67
69 68 this.ctx.beginPath();
70 69 color = this.setColor(color, 0.25, 0.75);
71 70 this.ctx.arc(x, y, radius, 0, Math.PI * 2, true);
72 71 this.ctx.fill();
73 72
74 73 var bg = '<li class="bg parity' + parity + '"></li>';
75 74 var left = (this.columns + 1) * this.bg_height;
76 75 var nstyle = 'padding-left: ' + left + 'px;';
77 76 var item = revlink.replace(/_STYLE/, nstyle);
78 77 item = item.replace(/_PARITY/, 'parity' + parity);
79 78 item = item.replace(/_NODEID/, cur[0]);
80 79 item = item.replace(/_NODEID/, cur[0]);
81 80 item = item.replace(/_DESC/, cur[3]);
82 81 item = item.replace(/_USER/, cur[4]);
83 82 item = item.replace(/_DATE/, cur[5]);
84 83
85 84 var tagspan = '';
86 85 if (cur[7].length || cur[8].length || (cur[6][0] != 'default' || cur[6][1])) \{
87 86 tagspan = '<span class="logtags">';
88 87 if (cur[6][1]) \{
89 88 tagspan += '<span class="branchtag" title="' + cur[6][0] + '">';
90 89 tagspan += cur[6][0] + '</span> ';
91 90 } else if (!cur[6][1] && cur[6][0] != 'default') \{
92 91 tagspan += '<span class="inbranchtag" title="' + cur[6][0] + '">';
93 92 tagspan += cur[6][0] + '</span> ';
94 93 }
95 94 if (cur[7].length) \{
96 95 for (var t in cur[7]) \{
97 96 var tag = cur[7][t];
98 97 tagspan += '<span class="tagtag">' + tag + '</span> ';
99 98 }
100 99 }
101 100 if (cur[8].length) \{
102 101 for (var t in cur[8]) \{
103 102 var bookmark = cur[8][t];
104 103 tagspan += '<span class="bookmarktag">' + bookmark + '</span> ';
105 104 }
106 105 }
107 106 tagspan += '</span>';
108 107 }
109 108
110 109 item = item.replace(/_TAGS/, tagspan);
111 110 return [bg, item];
112 111
113 112 }
114 113
115 114 graph.render(data);
116 115
117 116 // stop hiding script -->
118 117 </script>
119 118
120 119 <div class="page-path">
121 120 <a href="{url}graph/{rev}{lessvars%urlparameter}">less</a>
122 121 <a href="{url}graph/{rev}{morevars%urlparameter}">more</a>
123 122 | {changenav%navgraph}
124 123 </div>
125 124
126 125 {footer}
@@ -1,6 +1,7 b''
1 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
2 2 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
3 3 <head>
4 4 <link rel="icon" href="{staticurl}hgicon.png" type="image/png" />
5 5 <meta name="robots" content="index, nofollow"/>
6 6 <link rel="stylesheet" href="{staticurl}style-monoblue.css" type="text/css" />
7 <script type="text/javascript" src="{staticurl}mercurial.js"></script>
@@ -1,238 +1,238 b''
1 1 default = 'summary'
2 2 mimetype = 'text/html; charset={encoding}'
3 3 header = header.tmpl
4 4 footer = footer.tmpl
5 5 search = search.tmpl
6 6 changelog = changelog.tmpl
7 7 summary = summary.tmpl
8 8 error = error.tmpl
9 9 notfound = notfound.tmpl
10 10
11 11 help = help.tmpl
12 12 helptopics = helptopics.tmpl
13 13
14 14 helpentry = '<tr><td><a href="{url}help/{topic|escape}{sessionvars%urlparameter}">{topic|escape}</a></td><td>{summary|escape}</td></tr>'
15 15
16 16 naventry = '<a href="{url}log/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
17 17 navshortentry = '<a href="{url}shortlog/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
18 18 navgraphentry = '<a href="{url}graph/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
19 19 filenaventry = '<a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{label|escape}</a>'
20 20 filedifflink = '<a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a> '
21 21 filenodelink = '
22 22 <tr class="parity{parity}">
23 23 <td><a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a></td>
24 24 <td></td>
25 25 <td>
26 26 <a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a> |
27 27 <a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a> |
28 28 <a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a> |
29 29 <a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">revisions</a>
30 30 </td>
31 31 </tr>'
32 32 filenolink = '
33 33 <tr class="parity{parity}">
34 34 <td>
35 35 <a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a></td><td></td><td>file |
36 36 annotate |
37 37 <a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a> |
38 38 <a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">revisions</a>
39 39 </td>
40 40 </tr>'
41 41
42 42 nav = '{before%naventry} {after%naventry}'
43 43 navshort = '{before%navshortentry}{after%navshortentry}'
44 44 navgraph = '{before%navgraphentry}{after%navgraphentry}'
45 45 filenav = '{before%filenaventry}{after%filenaventry}'
46 46
47 47 fileellipses = '...'
48 48 changelogentry = changelogentry.tmpl
49 49 searchentry = changelogentry.tmpl
50 50 changeset = changeset.tmpl
51 51 manifest = manifest.tmpl
52 52 direntry = '
53 53 <tr class="parity{parity}">
54 54 <td>drwxr-xr-x</td>
55 55 <td></td>
56 56 <td></td>
57 57 <td><a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">{basename|escape}</a></td>
58 58 <td><a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">files</a></td>
59 59 </tr>'
60 60 fileentry = '
61 61 <tr class="parity{parity}">
62 62 <td>{permissions|permissions}</td>
63 63 <td>{date|isodate}</td>
64 64 <td>{size}</td>
65 65 <td><a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{basename|escape}</a></td>
66 66 <td>
67 67 <a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a> |
68 68 <a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">revisions</a> |
69 69 <a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a>
70 70 </td>
71 71 </tr>'
72 72 filerevision = filerevision.tmpl
73 73 fileannotate = fileannotate.tmpl
74 74 filediff = filediff.tmpl
75 75 filelog = filelog.tmpl
76 76 fileline = '
77 77 <div style="font-family:monospace" class="parity{parity}">
78 78 <pre><a class="linenr" href="#{lineid}" id="{lineid}">{linenumber}</a> {line|escape}</pre>
79 79 </div>'
80 80 annotateline = '
81 81 <tr class="parity{parity}">
82 82 <td class="linenr">
83 83 <a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}#{targetline}"
84 84 title="{node|short}: {desc|escape|firstline}">{author|user}@{rev}</a>
85 85 </td>
86 86 <td class="lineno">
87 87 <a href="#{lineid}" id="{lineid}">{linenumber}</a>
88 88 </td>
89 89 <td class="source">{line|escape}</td>
90 90 </tr>'
91 91 difflineplus = '<span style="color:#008800;"><a class="linenr" href="#{lineid}" id="{lineid}">{linenumber}</a> {line|escape}</span>'
92 92 difflineminus = '<span style="color:#cc0000;"><a class="linenr" href="#{lineid}" id="{lineid}">{linenumber}</a> {line|escape}</span>'
93 93 difflineat = '<span style="color:#990099;"><a class="linenr" href="#{lineid}" id="{lineid}">{linenumber}</a> {line|escape}</span>'
94 94 diffline = '<span><a class="linenr" href="#{lineid}" id="{lineid}">{linenumber}</a> {line|escape}</span>'
95 95 changelogparent = '
96 96 <tr>
97 97 <th class="parent">parent {rev}:</th>
98 98 <td class="parent">
99 99 <a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a>
100 100 </td>
101 101 </tr>'
102 102 changesetbranch = '<dt>branch</dt><dd>{name}</dd>'
103 103 changesetparent = '
104 104 <dt>parent {rev}</dt>
105 105 <dd><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></dd>'
106 106 filerevbranch = '<dt>branch</dt><dd>{name}</dd>'
107 107 filerevparent = '
108 108 <dt>parent {rev}</dt>
109 109 <dd>
110 110 <a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
111 111 {rename%filerename}{node|short}
112 112 </a>
113 113 </dd>'
114 114 filerename = '{file|escape}@'
115 115 filelogrename = '| <a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">base</a>'
116 116 fileannotateparent = '
117 117 <dt>parent {rev}</dt>
118 118 <dd>
119 119 <a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
120 120 {rename%filerename}{node|short}
121 121 </a>
122 122 </dd>'
123 123 changelogchild = '
124 124 <dt>child {rev}:</dt>
125 125 <dd><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></dd>'
126 126 changesetchild = '
127 127 <dt>child {rev}</dt>
128 128 <dd><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></dd>'
129 129 filerevchild = '
130 130 <dt>child {rev}</dt>
131 131 <dd>
132 132 <a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a>
133 133 </dd>'
134 134 fileannotatechild = '
135 135 <dt>child {rev}</dt>
136 136 <dd>
137 137 <a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a>
138 138 </dd>'
139 139 tags = tags.tmpl
140 140 tagentry = '
141 141 <tr class="parity{parity}">
142 <td class="nowrap">{date|age}</td>
142 <td class="nowrap age">{date|date}</td>
143 143 <td><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{tag|escape}</a></td>
144 144 <td class="nowrap">
145 145 <a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a> |
146 146 <a href="{url}log/{node|short}{sessionvars%urlparameter}">changelog</a> |
147 147 <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>
148 148 </td>
149 149 </tr>'
150 150 bookmarks = bookmarks.tmpl
151 151 bookmarkentry = '
152 152 <tr class="parity{parity}">
153 <td class="nowrap">{date|age}</td>
153 <td class="nowrap date">{date|date}</td>
154 154 <td><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{bookmark|escape}</a></td>
155 155 <td class="nowrap">
156 156 <a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a> |
157 157 <a href="{url}log/{node|short}{sessionvars%urlparameter}">changelog</a> |
158 158 <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>
159 159 </td>
160 160 </tr>'
161 161 branches = branches.tmpl
162 162 branchentry = '
163 163 <tr class="parity{parity}">
164 <td class="nowrap">{date|age}</td>
164 <td class="nowrap age">{date|date}</td>
165 165 <td><a href="{url}shortlog/{node|short}{sessionvars%urlparameter}">{node|short}</a></td>
166 166 <td class="{status}">{branch|escape}</td>
167 167 <td class="nowrap">
168 168 <a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a> |
169 169 <a href="{url}log/{node|short}{sessionvars%urlparameter}">changelog</a> |
170 170 <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>
171 171 </td>
172 172 </tr>'
173 173 diffblock = '<pre>{lines}</pre>'
174 174 filediffparent = '
175 175 <dt>parent {rev}</dt>
176 176 <dd><a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></dd>'
177 177 filelogparent = '
178 178 <tr>
179 179 <td align="right">parent {rev}:&nbsp;</td>
180 180 <td><a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></td>
181 181 </tr>'
182 182 filediffchild = '
183 183 <dt>child {rev}</dt>
184 184 <dd><a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></dd>'
185 185 filelogchild = '
186 186 <tr>
187 187 <td align="right">child {rev}:&nbsp;</td>
188 188 <td><a href="{url}file{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></td>
189 189 </tr>'
190 190 shortlog = shortlog.tmpl
191 191 tagtag = '<span class="tagtag" title="{name}">{name}</span> '
192 192 branchtag = '<span class="branchtag" title="{name}">{name}</span> '
193 193 inbranchtag = '<span class="inbranchtag" title="{name}">{name}</span> '
194 194 bookmarktag = '<span class="bookmarktag" title="{name}">{name}</span> '
195 195 shortlogentry = '
196 196 <tr class="parity{parity}">
197 <td class="nowrap">{date|age}</td>
197 <td class="nowrap age">{date|date}</td>
198 198 <td>{author|person}</td>
199 199 <td>
200 200 <a href="{url}rev/{node|short}{sessionvars%urlparameter}">
201 201 {desc|strip|firstline|escape|nonempty}
202 202 <span class="logtags">{inbranch%inbranchtag}{branches%branchtag}{tags%tagtag}{bookmarks%bookmarktag}</span>
203 203 </a>
204 204 </td>
205 205 <td class="nowrap">
206 206 <a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a> |
207 207 <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>
208 208 </td>
209 209 </tr>'
210 210 filelogentry = '
211 211 <tr class="parity{parity}">
212 <td class="nowrap">{date|age}</td>
212 <td class="nowrap age">{date|date}</td>
213 213 <td><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{desc|strip|firstline|escape|nonempty}</a></td>
214 214 <td class="nowrap">
215 215 <a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a>&nbsp;|&nbsp;<a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a>&nbsp;|&nbsp;<a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a>
216 216 {rename%filelogrename}
217 217 </td>
218 218 </tr>'
219 219 archiveentry = '<li><a href="{url}archive/{node|short}{extension}">{type|escape}</a></li>'
220 220 indexentry = '
221 221 <tr class="parity{parity}">
222 222 <td><a href="{url}{sessionvars%urlparameter}">{name|escape}</a></td>
223 223 <td>{description}</td>
224 224 <td>{contact|obfuscate}</td>
225 <td>{lastchange|age}</td>
225 <td class="age">{lastchange|date}</td>
226 226 <td class="indexlinks">{archives%indexarchiveentry}</td>
227 227 <td>
228 228 <div class="rss_logo">
229 229 <a href="{url}rss-log">RSS</a>
230 230 <a href="{url}atom-log">Atom</a>
231 231 </div>
232 232 </td>
233 233 </tr>\n'
234 234 indexarchiveentry = '<a href="{url}archive/{node|short}{extension}">{type|escape}</a> '
235 235 index = index.tmpl
236 236 urlparameter = '{separator}{name}={value|urlescape}'
237 237 hiddenformentry = '<input type="hidden" name="{name}" value="{value|escape}" />'
238 238 graph = graph.tmpl
@@ -1,75 +1,75 b''
1 1 {header}
2 2 <title>{repo|escape}: {node|short}</title>
3 3 </head>
4 4 <body>
5 5 <div class="container">
6 6 <div class="menu">
7 7 <div class="logo">
8 8 <a href="{logourl}">
9 9 <img src="{staticurl}hglogo.png" alt="mercurial" /></a>
10 10 </div>
11 11 <ul>
12 12 <li><a href="{url}shortlog/{node|short}{sessionvars%urlparameter}">log</a></li>
13 13 <li><a href="{url}graph/{node|short}{sessionvars%urlparameter}">graph</a></li>
14 14 <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
15 15 <li><a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a></li>
16 16 <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
17 17 </ul>
18 18 <ul>
19 19 <li class="active">changeset</li>
20 20 <li><a href="{url}raw-rev/{node|short}{sessionvars%urlparameter}">raw</a></li>
21 21 <li><a href="{url}file/{node|short}{sessionvars%urlparameter}">browse</a></li>
22 22 </ul>
23 23 <ul>
24 24 {archives%archiveentry}
25 25 </ul>
26 26 <ul>
27 27 <li><a href="{url}help{sessionvars%urlparameter}">help</a></li>
28 28 </ul>
29 29 </div>
30 30
31 31 <div class="main">
32 32
33 33 <h2><a href="{url}{sessionvars%urlparameter}">{repo|escape}</a></h2>
34 34 <h3>changeset {rev}:{node|short} {changesetbranch%changelogbranchname} {changesettag} {changesetbookmark}</h3>
35 35
36 36 <form class="search" action="{url}log">
37 37 {sessionvars%hiddenformentry}
38 38 <p><input name="rev" id="search1" type="text" size="30" /></p>
39 39 <div id="hint">find changesets by author, revision,
40 40 files, or words in the commit message</div>
41 41 </form>
42 42
43 43 <div class="description">{desc|strip|escape|nonempty}</div>
44 44
45 45 <table id="changesetEntry">
46 46 <tr>
47 47 <th class="author">author</th>
48 48 <td class="author">{author|obfuscate}</td>
49 49 </tr>
50 50 <tr>
51 51 <th class="date">date</th>
52 <td class="date">{date|date} ({date|age})</td></tr>
52 <td class="date age">{date|date}</td></tr>
53 53 <tr>
54 54 <th class="author">parents</th>
55 55 <td class="author">{parent%changesetparent}</td>
56 56 </tr>
57 57 <tr>
58 58 <th class="author">children</th>
59 59 <td class="author">{child%changesetchild}</td>
60 60 </tr>
61 61 <tr>
62 62 <th class="files">files</th>
63 63 <td class="files">{files}</td>
64 64 </tr>
65 65 </table>
66 66
67 67 <div class="overflow">
68 68 <div class="sourcefirst"> line diff</div>
69 69
70 70 {diff}
71 71 </div>
72 72
73 73 </div>
74 74 </div>
75 75 {footer}
@@ -1,82 +1,82 b''
1 1 {header}
2 2 <title>{repo|escape}: {file|escape} annotate</title>
3 3 </head>
4 4 <body>
5 5
6 6 <div class="container">
7 7 <div class="menu">
8 8 <div class="logo">
9 9 <a href="{logourl}">
10 10 <img src="{staticurl}hglogo.png" alt="mercurial" /></a>
11 11 </div>
12 12 <ul>
13 13 <li><a href="{url}shortlog/{node|short}{sessionvars%urlparameter}">log</a></li>
14 14 <li><a href="{url}graph/{node|short}{sessionvars%urlparameter}">graph</a></li>
15 15 <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
16 16 <li><a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a></li>
17 17 <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
18 18 </ul>
19 19
20 20 <ul>
21 21 <li><a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a></li>
22 22 <li><a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">browse</a></li>
23 23 </ul>
24 24 <ul>
25 25 <li><a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a></li>
26 26 <li><a href="{url}file/tip/{file|urlescape}{sessionvars%urlparameter}">latest</a></li>
27 27 <li><a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a></li>
28 28 <li class="active">annotate</li>
29 29 <li><a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file log</a></li>
30 30 <li><a href="{url}raw-annotate/{node|short}/{file|urlescape}">raw</a></li>
31 31 </ul>
32 32 <ul>
33 33 <li><a href="{url}help{sessionvars%urlparameter}">help</a></li>
34 34 </ul>
35 35 </div>
36 36
37 37 <div class="main">
38 38 <h2><a href="{url}{sessionvars%urlparameter}">{repo|escape}</a></h2>
39 39 <h3>annotate {file|escape} @ {rev}:{node|short}</h3>
40 40
41 41 <form class="search" action="{url}log">
42 42 {sessionvars%hiddenformentry}
43 43 <p><input name="rev" id="search1" type="text" size="30" /></p>
44 44 <div id="hint">find changesets by author, revision,
45 45 files, or words in the commit message</div>
46 46 </form>
47 47
48 48 <div class="description">{desc|strip|escape|nonempty}</div>
49 49
50 50 <table id="changesetEntry">
51 51 <tr>
52 52 <th class="author">author</th>
53 53 <td class="author">{author|obfuscate}</td>
54 54 </tr>
55 55 <tr>
56 56 <th class="date">date</th>
57 <td class="date">{date|date} ({date|age})</td>
57 <td class="date age">{date|date}</td>
58 58 </tr>
59 59 <tr>
60 60 <th class="author">parents</th>
61 61 <td class="author">{parent%filerevparent}</td>
62 62 </tr>
63 63 <tr>
64 64 <th class="author">children</th>
65 65 <td class="author">{child%filerevchild}</td>
66 66 </tr>
67 67 {changesettag}
68 68 </table>
69 69
70 70 <div class="overflow">
71 71 <table class="bigtable">
72 72 <tr>
73 73 <th class="annotate">rev</th>
74 74 <th class="line">&nbsp;&nbsp;line source</th>
75 75 </tr>
76 76 {annotate%annotateline}
77 77 </table>
78 78 </div>
79 79 </div>
80 80 </div>
81 81
82 82 {footer}
@@ -1,77 +1,77 b''
1 1 {header}
2 2 <title>{repo|escape}: {file|escape} diff</title>
3 3 </head>
4 4 <body>
5 5
6 6 <div class="container">
7 7 <div class="menu">
8 8 <div class="logo">
9 9 <a href="{logourl}">
10 10 <img src="{staticurl}hglogo.png" alt="mercurial" /></a>
11 11 </div>
12 12 <ul>
13 13 <li><a href="{url}shortlog/{node|short}{sessionvars%urlparameter}">log</a></li>
14 14 <li><a href="{url}graph/{node|short}{sessionvars%urlparameter}">graph</a></li>
15 15 <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
16 16 <li><a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a></li>
17 17 <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
18 18 </ul>
19 19 <ul>
20 20 <li><a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a></li>
21 21 <li><a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">browse</a></li>
22 22 </ul>
23 23 <ul>
24 24 <li><a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a></li>
25 25 <li><a href="{url}file/tip/{file|urlescape}{sessionvars%urlparameter}">latest</a></li>
26 26 <li class="active">diff</li>
27 27 <li><a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a></li>
28 28 <li><a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file log</a></li>
29 29 <li><a href="{url}raw-file/{node|short}/{file|urlescape}">raw</a></li>
30 30 </ul>
31 31 <ul>
32 32 <li><a href="{url}help{sessionvars%urlparameter}">help</a></li>
33 33 </ul>
34 34 </div>
35 35
36 36 <div class="main">
37 37 <h2><a href="{url}{sessionvars%urlparameter}">{repo|escape}</a></h2>
38 38 <h3>diff {file|escape} @ {rev}:{node|short}</h3>
39 39
40 40 <form class="search" action="{url}log">
41 41 <p>{sessionvars%hiddenformentry}</p>
42 42 <p><input name="rev" id="search1" type="text" size="30" /></p>
43 43 <div id="hint">find changesets by author, revision,
44 44 files, or words in the commit message</div>
45 45 </form>
46 46
47 47 <div class="description">{desc|strip|escape|nonempty}</div>
48 48
49 49 <table id="changesetEntry">
50 50 <tr>
51 51 <th>author</th>
52 52 <td>{author|obfuscate}</td>
53 53 </tr>
54 54 <tr>
55 55 <th>date</th>
56 <td>{date|date} ({date|age})</td>
56 <td class="date age">{date|date}</td>
57 57 </tr>
58 58 <tr>
59 59 <th>parents</th>
60 60 <td>{parent%filerevparent}</td>
61 61 </tr>
62 62 <tr>
63 63 <th>children</th>
64 64 <td>{child%filerevchild}</td>
65 65 </tr>
66 66 {changesettag}
67 67 </table>
68 68
69 69 <div class="overflow">
70 70 <div class="sourcefirst"> line diff</div>
71 71
72 72 {diff}
73 73 </div>
74 74 </div>
75 75 </div>
76 76
77 77 {footer}
@@ -1,5 +1,5 b''
1 1 <tr class="parity{parity}">
2 <td class="age">{date|age}</td>
2 <td class="age">{date|date}</td>
3 3 <td class="author">{author|person}</td>
4 4 <td class="description"><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{desc|strip|firstline|escape|nonempty}</a>{inbranch%changelogbranchname}{branches%changelogbranchhead}{tags%changelogtag}{rename%filelogrename}</td>
5 5 </tr>
@@ -1,76 +1,76 b''
1 1 {header}
2 2 <title>{repo|escape}: {node|short} {file|escape}</title>
3 3 </head>
4 4 <body>
5 5
6 6 <div class="container">
7 7 <div class="menu">
8 8 <div class="logo">
9 9 <a href="{logourl}">
10 10 <img src="{staticurl}hglogo.png" alt="mercurial" /></a>
11 11 </div>
12 12 <ul>
13 13 <li><a href="{url}shortlog/{node|short}{sessionvars%urlparameter}">log</a></li>
14 14 <li><a href="{url}graph/{node|short}{sessionvars%urlparameter}">graph</a></li>
15 15 <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
16 16 <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
17 17 </ul>
18 18 <ul>
19 19 <li><a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a></li>
20 20 <li><a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">browse</a></li>
21 21 </ul>
22 22 <ul>
23 23 <li class="active">file</li>
24 24 <li><a href="{url}file/tip/{file|urlescape}{sessionvars%urlparameter}">latest</a></li>
25 25 <li><a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a></li>
26 26 <li><a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a></li>
27 27 <li><a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file log</a></li>
28 28 <li><a href="{url}raw-file/{node|short}/{file|urlescape}">raw</a></li>
29 29 </ul>
30 30 <ul>
31 31 <li><a href="{url}help{sessionvars%urlparameter}">help</a></li>
32 32 </ul>
33 33 </div>
34 34
35 35 <div class="main">
36 36 <h2><a href="{url}{sessionvars%urlparameter}">{repo|escape}</a></h2>
37 37 <h3>view {file|escape} @ {rev}:{node|short}</h3>
38 38
39 39 <form class="search" action="{url}log">
40 40 {sessionvars%hiddenformentry}
41 41 <p><input name="rev" id="search1" type="text" size="30" /></p>
42 42 <div id="hint">find changesets by author, revision,
43 43 files, or words in the commit message</div>
44 44 </form>
45 45
46 46 <div class="description">{desc|strip|escape|nonempty}</div>
47 47
48 48 <table id="changesetEntry">
49 49 <tr>
50 50 <th class="author">author</th>
51 51 <td class="author">{author|obfuscate}</td>
52 52 </tr>
53 53 <tr>
54 54 <th class="date">date</th>
55 <td class="date">{date|date} ({date|age})</td>
55 <td class="date age">{date|date}</td>
56 56 </tr>
57 57 <tr>
58 58 <th class="author">parents</th>
59 59 <td class="author">{parent%filerevparent}</td>
60 60 </tr>
61 61 <tr>
62 62 <th class="author">children</th>
63 63 <td class="author">{child%filerevchild}</td>
64 64 </tr>
65 65 {changesettag}
66 66 </table>
67 67
68 68 <div class="overflow">
69 69 <div class="sourcefirst"> line source</div>
70 70 {text%fileline}
71 71 <div class="sourcelast"></div>
72 72 </div>
73 73 </div>
74 74 </div>
75 75
76 76 {footer}
@@ -1,4 +1,5 b''
1 <script type="text/javascript">process_dates()</script>
1 2 {motd}
2 3
3 4 </body>
4 5 </html>
@@ -1,142 +1,141 b''
1 1 {header}
2 2 <title>{repo|escape}: revision graph</title>
3 3 <link rel="alternate" type="application/atom+xml"
4 4 href="{url}atom-log" title="Atom feed for {repo|escape}: log" />
5 5 <link rel="alternate" type="application/rss+xml"
6 6 href="{url}rss-log" title="RSS feed for {repo|escape}: log" />
7 7 <!--[if IE]><script type="text/javascript" src="{staticurl}excanvas.js"></script><![endif]-->
8 8 </head>
9 9 <body>
10 10
11 11 <div class="container">
12 12 <div class="menu">
13 13 <div class="logo">
14 14 <a href="{logourl}">
15 15 <img src="{staticurl}hglogo.png" alt="mercurial" /></a>
16 16 </div>
17 17 <ul>
18 18 <li><a href="{url}shortlog/{node|short}{sessionvars%urlparameter}">log</a></li>
19 19 <li class="active">graph</li>
20 20 <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
21 21 <li><a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a></li>
22 22 <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
23 23 </ul>
24 24 <ul>
25 25 <li><a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a></li>
26 26 <li><a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">browse</a></li>
27 27 </ul>
28 28 <ul>
29 29 <li><a href="{url}help{sessionvars%urlparameter}">help</a></li>
30 30 </ul>
31 31 </div>
32 32
33 33 <div class="main">
34 34 <h2><a href="{url}{sessionvars%urlparameter}">{repo|escape}</a></h2>
35 35 <h3>graph</h3>
36 36
37 37 <form class="search" action="{url}log">
38 38 {sessionvars%hiddenformentry}
39 39 <p><input name="rev" id="search1" type="text" size="30" /></p>
40 40 <div id="hint">find changesets by author, revision,
41 41 files, or words in the commit message</div>
42 42 </form>
43 43
44 44 <div class="navigate">
45 45 <a href="{url}graph/{rev}{lessvars%urlparameter}">less</a>
46 46 <a href="{url}graph/{rev}{morevars%urlparameter}">more</a>
47 47 | rev {rev}: {changenav%navgraph}
48 48 </div>
49 49
50 50 <noscript><p>The revision graph only works with JavaScript-enabled browsers.</p></noscript>
51 51
52 52 <div id="wrapper">
53 53 <ul id="nodebgs"></ul>
54 54 <canvas id="graph" width="480" height="{canvasheight}"></canvas>
55 55 <ul id="graphnodes"></ul>
56 56 </div>
57 57
58 <script type="text/javascript" src="{staticurl}graph.js"></script>
59 58 <script type="text/javascript">
60 59 <!-- hide script content
61 60
62 61 var data = {jsdata|json};
63 62 var graph = new Graph();
64 63 graph.scale({bg_height});
65 64
66 65 graph.edge = function(x0, y0, x1, y1, color) \{
67 66
68 67 this.setColor(color, 0.0, 0.65);
69 68 this.ctx.beginPath();
70 69 this.ctx.moveTo(x0, y0);
71 70 this.ctx.lineTo(x1, y1);
72 71 this.ctx.stroke();
73 72
74 73 }
75 74
76 75 var revlink = '<li style="_STYLE"><span class="desc">';
77 76 revlink += '<a href="{url}rev/_NODEID{sessionvars%urlparameter}" title="_NODEID">_DESC</a>';
78 77 revlink += '</span>_TAGS<span class="info">_DATE, by _USER</span></li>';
79 78
80 79 graph.vertex = function(x, y, color, parity, cur) \{
81 80
82 81 this.ctx.beginPath();
83 82 color = this.setColor(color, 0.25, 0.75);
84 83 this.ctx.arc(x, y, radius, 0, Math.PI * 2, true);
85 84 this.ctx.fill();
86 85
87 86 var bg = '<li class="bg parity' + parity + '"></li>';
88 87 var left = (this.columns + 1) * this.bg_height;
89 88 var nstyle = 'padding-left: ' + left + 'px;';
90 89 var item = revlink.replace(/_STYLE/, nstyle);
91 90 item = item.replace(/_PARITY/, 'parity' + parity);
92 91 item = item.replace(/_NODEID/, cur[0]);
93 92 item = item.replace(/_NODEID/, cur[0]);
94 93 item = item.replace(/_DESC/, cur[3]);
95 94 item = item.replace(/_USER/, cur[4]);
96 95 item = item.replace(/_DATE/, cur[5]);
97 96
98 97 var tagspan = '';
99 98 if (cur[7].length || (cur[6][0] != 'default' || cur[6][1])) \{
100 99 tagspan = '<span class="logtags">';
101 100 if (cur[6][1]) \{
102 101 tagspan += '<span class="branchhead" title="' + cur[6][0] + '">';
103 102 tagspan += cur[6][0] + '</span> ';
104 103 } else if (!cur[6][1] && cur[6][0] != 'default') \{
105 104 tagspan += '<span class="branchname" title="' + cur[6][0] + '">';
106 105 tagspan += cur[6][0] + '</span> ';
107 106 }
108 107 if (cur[7].length) \{
109 108 for (var t in cur[7]) \{
110 109 var tag = cur[7][t];
111 110 tagspan += '<span class="tag">' + tag + '</span> ';
112 111 }
113 112 }
114 113 if (cur[8].length) \{
115 114 for (var b in cur[8]) \{
116 115 var bookmark = cur[8][b];
117 116 tagspan += '<span class="tag">' + bookmark + '</span> ';
118 117 }
119 118 }
120 119 tagspan += '</span>';
121 120 }
122 121
123 122 item = item.replace(/_TAGS/, tagspan);
124 123 return [bg, item];
125 124
126 125 }
127 126
128 127 graph.render(data);
129 128
130 129 // stop hiding script -->
131 130 </script>
132 131
133 132 <div class="navigate">
134 133 <a href="{url}graph/{rev}{lessvars%urlparameter}">less</a>
135 134 <a href="{url}graph/{rev}{morevars%urlparameter}">more</a>
136 135 | rev {rev}: {changenav%navgraph}
137 136 </div>
138 137
139 138 </div>
140 139 </div>
141 140
142 141 {footer}
@@ -1,6 +1,7 b''
1 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
2 2 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
3 3 <head>
4 4 <link rel="icon" href="{staticurl}hgicon.png" type="image/png" />
5 5 <meta name="robots" content="index, nofollow" />
6 6 <link rel="stylesheet" href="{staticurl}style-paper.css" type="text/css" />
7 <script type="text/javascript" src="{staticurl}mercurial.js"></script>
@@ -1,211 +1,211 b''
1 1 default = 'shortlog'
2 2
3 3 mimetype = 'text/html; charset={encoding}'
4 4 header = header.tmpl
5 5 footer = footer.tmpl
6 6 search = search.tmpl
7 7
8 8 changelog = shortlog.tmpl
9 9 shortlog = shortlog.tmpl
10 10 shortlogentry = shortlogentry.tmpl
11 11 graph = graph.tmpl
12 12 help = help.tmpl
13 13 helptopics = helptopics.tmpl
14 14
15 15 helpentry = '<tr><td><a href="{url}help/{topic|escape}{sessionvars%urlparameter}">{topic|escape}</a></td><td>{summary|escape}</td></tr>'
16 16
17 17 naventry = '<a href="{url}log/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
18 18 navshortentry = '<a href="{url}shortlog/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
19 19 navgraphentry = '<a href="{url}graph/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
20 20 filenaventry = '<a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{label|escape}</a> '
21 21 filedifflink = '<a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a> '
22 22 filenodelink = '<a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a> '
23 23 filenolink = '{file|escape} '
24 24 fileellipses = '...'
25 25 changelogentry = shortlogentry.tmpl
26 26 searchentry = shortlogentry.tmpl
27 27 changeset = changeset.tmpl
28 28 manifest = manifest.tmpl
29 29
30 30 nav = '{before%naventry} {after%naventry}'
31 31 navshort = '{before%navshortentry}{after%navshortentry}'
32 32 navgraph = '{before%navgraphentry}{after%navgraphentry}'
33 33 filenav = '{before%filenaventry}{after%filenaventry}'
34 34
35 35 direntry = '
36 36 <tr class="fileline parity{parity}">
37 37 <td class="name">
38 38 <a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">
39 39 <img src="{staticurl}coal-folder.png" alt="dir."/> {basename|escape}/
40 40 </a>
41 41 <a href="{url}file/{node|short}{path|urlescape}/{emptydirs|urlescape}{sessionvars%urlparameter}">
42 42 {emptydirs|escape}
43 43 </a>
44 44 </td>
45 45 <td class="size"></td>
46 46 <td class="permissions">drwxr-xr-x</td>
47 47 </tr>'
48 48
49 49 fileentry = '
50 50 <tr class="fileline parity{parity}">
51 51 <td class="filename">
52 52 <a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
53 53 <img src="{staticurl}coal-file.png" alt="file"/> {basename|escape}
54 54 </a>
55 55 </td>
56 56 <td class="size">{size}</td>
57 57 <td class="permissions">{permissions|permissions}</td>
58 58 </tr>'
59 59
60 60 filerevision = filerevision.tmpl
61 61 fileannotate = fileannotate.tmpl
62 62 filediff = filediff.tmpl
63 63 filelog = filelog.tmpl
64 64 fileline = '
65 65 <div class="parity{parity} source"><a href="#{lineid}" id="{lineid}">{linenumber}</a> {line|escape}</div>'
66 66 filelogentry = filelogentry.tmpl
67 67
68 68 annotateline = '
69 69 <tr class="parity{parity}">
70 70 <td class="annotate">
71 71 <a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}#{targetline}"
72 72 title="{node|short}: {desc|escape|firstline}">{author|user}@{rev}</a>
73 73 </td>
74 74 <td class="source"><a href="#{lineid}" id="{lineid}">{linenumber}</a> {line|escape}</td>
75 75 </tr>'
76 76
77 77 diffblock = '<div class="source bottomline parity{parity}"><pre>{lines}</pre></div>'
78 78 difflineplus = '<a href="#{lineid}" id="{lineid}">{linenumber}</a> <span class="plusline">{line|escape}</span>'
79 79 difflineminus = '<a href="#{lineid}" id="{lineid}">{linenumber}</a> <span class="minusline">{line|escape}</span>'
80 80 difflineat = '<a href="#{lineid}" id="{lineid}">{linenumber}</a> <span class="atline">{line|escape}</span>'
81 81 diffline = '<a href="#{lineid}" id="{lineid}">{linenumber}</a> {line|escape}'
82 82
83 83 changelogparent = '
84 84 <tr>
85 85 <th class="parent">parent {rev}:</th>
86 86 <td class="parent"><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td>
87 87 </tr>'
88 88
89 89 changesetparent = '<a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a> '
90 90
91 91 filerevparent = '<a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{rename%filerename}{node|short}</a> '
92 92 filerevchild = '<a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a> '
93 93
94 94 filerename = '{file|escape}@'
95 95 filelogrename = '
96 96 <span class="base">
97 97 base
98 98 <a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
99 99 {file|escape}@{node|short}
100 100 </a>
101 101 </span>'
102 102 fileannotateparent = '
103 103 <tr>
104 104 <td class="metatag">parent:</td>
105 105 <td>
106 106 <a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
107 107 {rename%filerename}{node|short}
108 108 </a>
109 109 </td>
110 110 </tr>'
111 111 changesetchild = ' <a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a>'
112 112 changelogchild = '
113 113 <tr>
114 114 <th class="child">child</th>
115 115 <td class="child">
116 116 <a href="{url}rev/{node|short}{sessionvars%urlparameter}">
117 117 {node|short}
118 118 </a>
119 119 </td>
120 120 </tr>'
121 121 fileannotatechild = '
122 122 <tr>
123 123 <td class="metatag">child:</td>
124 124 <td>
125 125 <a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
126 126 {node|short}
127 127 </a>
128 128 </td>
129 129 </tr>'
130 130 tags = tags.tmpl
131 131 tagentry = '
132 132 <tr class="tagEntry parity{parity}">
133 133 <td>
134 134 <a href="{url}rev/{node|short}{sessionvars%urlparameter}">
135 135 {tag|escape}
136 136 </a>
137 137 </td>
138 138 <td class="node">
139 139 {node|short}
140 140 </td>
141 141 </tr>'
142 142 bookmarks = bookmarks.tmpl
143 143 bookmarkentry = '
144 144 <tr class="tagEntry parity{parity}">
145 145 <td>
146 146 <a href="{url}rev/{node|short}{sessionvars%urlparameter}">
147 147 {bookmark|escape}
148 148 </a>
149 149 </td>
150 150 <td class="node">
151 151 {node|short}
152 152 </td>
153 153 </tr>'
154 154 branches = branches.tmpl
155 155 branchentry = '
156 156 <tr class="tagEntry parity{parity}">
157 157 <td>
158 158 <a href="{url}shortlog/{node|short}{sessionvars%urlparameter}" class="{status}">
159 159 {branch|escape}
160 160 </a>
161 161 </td>
162 162 <td class="node">
163 163 {node|short}
164 164 </td>
165 165 </tr>'
166 166 changelogtag = '<span class="tag">{name|escape}</span> '
167 167 changesettag = '<span class="tag">{tag|escape}</span> '
168 168 changesetbookmark = '<span class="tag">{bookmark|escape}</span> '
169 169 changelogbranchhead = '<span class="branchhead">{name|escape}</span> '
170 170 changelogbranchname = '<span class="branchname">{name|escape}</span> '
171 171
172 172 filediffparent = '
173 173 <tr>
174 174 <th class="parent">parent {rev}:</th>
175 175 <td class="parent"><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td>
176 176 </tr>'
177 177 filelogparent = '
178 178 <tr>
179 179 <th>parent {rev}:</th>
180 180 <td><a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></td>
181 181 </tr>'
182 182 filediffchild = '
183 183 <tr>
184 184 <th class="child">child {rev}:</th>
185 185 <td class="child"><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a>
186 186 </td>
187 187 </tr>'
188 188 filelogchild = '
189 189 <tr>
190 190 <th>child {rev}:</th>
191 191 <td><a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></td>
192 192 </tr>'
193 193
194 194 indexentry = '
195 195 <tr class="parity{parity}">
196 196 <td><a href="{url}{sessionvars%urlparameter}">{name|escape}</a></td>
197 197 <td>{description}</td>
198 198 <td>{contact|obfuscate}</td>
199 <td class="age">{lastchange|age}</td>
199 <td class="age">{lastchange|date}</td>
200 200 <td class="indexlinks">{archives%indexarchiveentry}</td>
201 201 </tr>\n'
202 202 indexarchiveentry = '<a href="{url}archive/{node|short}{extension|urlescape}">&nbsp;&darr;{type|escape}</a>'
203 203 index = index.tmpl
204 204 archiveentry = '
205 205 <li>
206 206 <a href="{url}archive/{node|short}{extension|urlescape}">{type|escape}</a>
207 207 </li>'
208 208 notfound = notfound.tmpl
209 209 error = error.tmpl
210 210 urlparameter = '{separator}{name}={value|urlescape}'
211 211 hiddenformentry = '<input type="hidden" name="{name}" value="{value|escape}" />'
@@ -1,5 +1,5 b''
1 1 <tr class="parity{parity}">
2 <td class="age">{age(date)}</td>
2 <td class="age">{date|date}</td>
3 3 <td class="author">{author|person}</td>
4 4 <td class="description"><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{desc|strip|firstline|escape|nonempty}</a>{inbranch%changelogbranchname}{branches%changelogbranchhead}{tags % '<span class="tag">{name|escape}</span> '}{bookmarks % '<span class="tag">{name|escape}</span> '}</td>
5 5 </tr>
@@ -1,25 +1,25 b''
1 1 <table class="logEntry parity{parity}">
2 2 <tr>
3 <th class="age">{date|age}:</th>
3 <th><span class="age">{date|date}</span>:</th>
4 4 <th class="firstline">{desc|strip|firstline|escape|nonempty}</th>
5 5 </tr>
6 6 <tr>
7 7 <th class="revision">changeset {rev}:</th>
8 8 <td class="node"><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td>
9 9 </tr>
10 10 {parent%changelogparent}
11 11 {child%changelogchild}
12 12 {changelogtag}
13 13 <tr>
14 14 <th class="author">author:</th>
15 15 <td class="author">{author|obfuscate}</td>
16 16 </tr>
17 17 <tr>
18 18 <th class="date">date:</th>
19 19 <td class="date">{date|date}</td>
20 20 </tr>
21 21 <tr>
22 22 <th class="files"><a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>:</th>
23 23 <td class="files">{files}</td>
24 24 </tr>
25 25 </table>
@@ -1,52 +1,52 b''
1 1 {header}
2 2 <title>{repo|escape}: changeset {node|short}</title>
3 3 </head>
4 4 <body>
5 5
6 6 <div class="buttons">
7 7 <a href="{url}log/{rev}{sessionvars%urlparameter}">changelog</a>
8 8 <a href="{url}shortlog/{rev}{sessionvars%urlparameter}">shortlog</a>
9 9 <a href="{url}graph{sessionvars%urlparameter}">graph</a>
10 10 <a href="{url}tags{sessionvars%urlparameter}">tags</a>
11 11 <a href="{url}branches{sessionvars%urlparameter}">branches</a>
12 12 <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>
13 13 <a href="{url}raw-rev/{node|short}">raw</a>
14 14 {archives%archiveentry}
15 15 <a href="{url}help{sessionvars%urlparameter}">help</a>
16 16 </div>
17 17
18 18 <h2>changeset: {desc|strip|escape|firstline|nonempty}</h2>
19 19
20 20 <table id="changesetEntry">
21 21 <tr>
22 22 <th class="changeset">changeset {rev}:</th>
23 23 <td class="changeset"><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td>
24 24 </tr>
25 25 {parent%changesetparent}
26 26 {child%changesetchild}
27 27 {changesettag}
28 28 <tr>
29 29 <th class="author">author:</th>
30 30 <td class="author">{author|obfuscate}</td>
31 31 </tr>
32 32 <tr>
33 33 <th class="date">date:</th>
34 <td class="date">{date|date} ({date|age})</td>
34 <td class="date age">{date|date}</td>
35 35 </tr>
36 36 <tr>
37 37 <th class="files">files:</th>
38 38 <td class="files">{files}</td>
39 39 </tr>
40 40 <tr>
41 41 <th class="description">description:</th>
42 42 <td class="description">{desc|strip|escape|addbreaks|nonempty}</td>
43 43 </tr>
44 44 </table>
45 45
46 46 <div id="changesetDiff">
47 47 {diff}
48 48 </div>
49 49
50 50 {footer}
51 51
52 52
@@ -1,49 +1,49 b''
1 1 {header}
2 2 <title>{repo|escape}: {file|escape} annotate</title>
3 3 </head>
4 4 <body>
5 5
6 6 <div class="buttons">
7 7 <a href="{url}log/{rev}{sessionvars%urlparameter}">changelog</a>
8 8 <a href="{url}shortlog/{rev}{sessionvars%urlparameter}">shortlog</a>
9 9 <a href="{url}graph{sessionvars%urlparameter}">graph</a>
10 10 <a href="{url}tags{sessionvars%urlparameter}">tags</a>
11 11 <a href="{url}branches{sessionvars%urlparameter}">branches</a>
12 12 <a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a>
13 13 <a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">files</a>
14 14 <a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a>
15 15 <a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">revisions</a>
16 16 <a href="{url}raw-annotate/{node|short}/{file|urlescape}">raw</a>
17 17 <a href="{url}help{sessionvars%urlparameter}">help</a>
18 18 </div>
19 19
20 20 <h2>Annotate {file|escape}</h2>
21 21
22 22 <table>
23 23 <tr>
24 24 <td class="metatag">changeset {rev}:</td>
25 25 <td><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td></tr>
26 26 {parent%fileannotateparent}
27 27 {child%fileannotatechild}
28 28 <tr>
29 29 <td class="metatag">author:</td>
30 30 <td>{author|obfuscate}</td></tr>
31 31 <tr>
32 32 <td class="metatag">date:</td>
33 <td>{date|date} ({date|age})</td>
33 <td class="date age">{date|date}</td>
34 34 </tr>
35 35 <tr>
36 36 <td class="metatag">permissions:</td>
37 37 <td>{permissions|permissions}</td>
38 38 </tr>
39 39 <tr>
40 40 <td class="metatag">description:</td>
41 41 <td>{desc|strip|escape|addbreaks|nonempty}</td>
42 42 </tr>
43 43 </table>
44 44
45 45 <table cellspacing="0" cellpadding="0">
46 46 {annotate%annotateline}
47 47 </table>
48 48
49 49 {footer}
@@ -1,25 +1,25 b''
1 1 <table class="logEntry parity{parity}">
2 2 <tr>
3 <th class="age">{date|age}:</th>
3 <th><span class="age">{date|date}</span>:</th>
4 4 <th class="firstline"><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{desc|strip|firstline|escape|nonempty}</a></th>
5 5 </tr>
6 6 <tr>
7 7 <th class="revision">revision {filerev}:</td>
8 8 <td class="node">
9 9 <a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a>
10 10 <a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">(diff)</a>
11 11 <a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">(annotate)</a>
12 12 </td>
13 13 </tr>
14 14 {rename%filelogrename}
15 15 <tr>
16 16 <th class="author">author:</th>
17 17 <td class="author">{author|obfuscate}</td>
18 18 </tr>
19 19 <tr>
20 20 <th class="date">date:</th>
21 21 <td class="date">{date|date}</td>
22 22 </tr>
23 23 </table>
24 24
25 25
@@ -1,47 +1,47 b''
1 1 {header}
2 2 <title>{repo|escape}:{file|escape}</title>
3 3 </head>
4 4 <body>
5 5
6 6 <div class="buttons">
7 7 <a href="{url}log/{rev}{sessionvars%urlparameter}">changelog</a>
8 8 <a href="{url}shortlog/{rev}{sessionvars%urlparameter}">shortlog</a>
9 9 <a href="{url}graph{sessionvars%urlparameter}">graph</a>
10 10 <a href="{url}tags{sessionvars%urlparameter}">tags</a>
11 11 <a href="{url}branches{sessionvars%urlparameter}">branches</a>
12 12 <a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a>
13 13 <a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">files</a>
14 14 <a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">revisions</a>
15 15 <a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a>
16 16 <a href="{url}raw-file/{node|short}/{file|urlescape}">raw</a>
17 17 <a href="{url}help{sessionvars%urlparameter}">help</a>
18 18 </div>
19 19
20 20 <h2>{file|escape}</h2>
21 21
22 22 <table>
23 23 <tr>
24 24 <td class="metatag">changeset {rev}:</td>
25 25 <td><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td></tr>
26 26 {parent%filerevparent}
27 27 {child%filerevchild}
28 28 <tr>
29 29 <td class="metatag">author:</td>
30 30 <td>{author|obfuscate}</td></tr>
31 31 <tr>
32 32 <td class="metatag">date:</td>
33 <td>{date|date} ({date|age})</td></tr>
33 <td class="date age">{date|date}</td></tr>
34 34 <tr>
35 35 <td class="metatag">permissions:</td>
36 36 <td>{permissions|permissions}</td></tr>
37 37 <tr>
38 38 <td class="metatag">description:</td>
39 39 <td>{desc|strip|escape|addbreaks|nonempty}</td>
40 40 </tr>
41 41 </table>
42 42
43 43 <pre>
44 44 {text%fileline}
45 45 </pre>
46 46
47 47 {footer}
@@ -1,8 +1,9 b''
1 <script type="text/javascript">process_dates()</script>
1 2 {motd}
2 3 <div class="logo">
3 4 <a href="{logourl}">
4 5 <img src="{staticurl}hglogo.png" width=75 height=90 border=0 alt="mercurial"></a>
5 6 </div>
6 7
7 8 </body>
8 9 </html>
@@ -1,97 +1,96 b''
1 1 {header}
2 2 <title>{repo|escape}: graph</title>
3 3 <link rel="alternate" type="application/atom+xml"
4 4 href="{url}atom-tags" title="Atom feed for {repo|escape}: tags">
5 5 <link rel="alternate" type="application/rss+xml"
6 6 href="{url}rss-tags" title="RSS feed for {repo|escape}: tags">
7 7 <!--[if IE]><script type="text/javascript" src="{staticurl}excanvas.js"></script><![endif]-->
8 8 </head>
9 9 <body>
10 10
11 11 <div class="buttons">
12 12 <a href="{url}log{sessionvars%urlparameter}">changelog</a>
13 13 <a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a>
14 14 <a href="{url}tags{sessionvars%urlparameter}">tags</a>
15 15 <a href="{url}branches{sessionvars%urlparameter}">branches</a>
16 16 <a href="{url}file/{node|short}/{sessionvars%urlparameter}">files</a>
17 17 <a href="{url}help{sessionvars%urlparameter}">help</a>
18 18 </div>
19 19
20 20 <h2>graph</h2>
21 21
22 22 <form action="{url}log">
23 23 {sessionvars%hiddenformentry}
24 24 <p>
25 25 <label for="search1">search:</label>
26 26 <input name="rev" id="search1" type="text" size="30">
27 27 navigate: <small class="navigate">{changenav%navgraph}</small>
28 28 </p>
29 29 </form>
30 30
31 31 <noscript>The revision graph only works with JavaScript-enabled browsers.</noscript>
32 32
33 33 <div id="wrapper">
34 34 <ul id="nodebgs"></ul>
35 35 <canvas id="graph" width="480" height="{canvasheight}"></canvas>
36 36 <ul id="graphnodes"></ul>
37 37 </div>
38 38
39 <script type="text/javascript" src="{staticurl}graph.js"></script>
40 39 <script type="text/javascript">
41 40 <!-- hide script content
42 41
43 42 var data = {jsdata|json};
44 43 var graph = new Graph();
45 44 graph.scale({bg_height});
46 45
47 46 graph.edge = function(x0, y0, x1, y1, color) \{
48 47
49 48 this.setColor(color, 0.0, 0.65);
50 49 this.ctx.beginPath();
51 50 this.ctx.moveTo(x0, y0);
52 51 this.ctx.lineTo(x1, y1);
53 52 this.ctx.stroke();
54 53
55 54 }
56 55
57 56 var revlink = '<li style="_STYLE"><span class="desc">';
58 57 revlink += '<a href="{url}rev/_NODEID{sessionvars%urlparameter}" title="_NODEID">_DESC</a>';
59 58 revlink += '</span><span class="info">_DATE, by _USER</span></li>';
60 59
61 60 graph.vertex = function(x, y, color, parity, cur) \{
62 61
63 62 this.ctx.beginPath();
64 63 color = this.setColor(color, 0.25, 0.75);
65 64 this.ctx.arc(x, y, radius, 0, Math.PI * 2, true);
66 65 this.ctx.fill();
67 66
68 67 var bg = '<li class="bg parity' + parity + '"></li>';
69 68 var left = (this.columns + 1) * this.bg_height;
70 69 var nstyle = 'padding-left: ' + left + 'px;';
71 70 var item = revlink.replace(/_STYLE/, nstyle);
72 71 item = item.replace(/_PARITY/, 'parity' + parity);
73 72 item = item.replace(/_NODEID/, cur[0]);
74 73 item = item.replace(/_NODEID/, cur[0]);
75 74 item = item.replace(/_DESC/, cur[3]);
76 75 item = item.replace(/_USER/, cur[4]);
77 76 item = item.replace(/_DATE/, cur[5]);
78 77
79 78 return [bg, item];
80 79
81 80 }
82 81
83 82 graph.render(data);
84 83
85 84 // stop hiding script -->
86 85 </script>
87 86
88 87 <form action="{url}log">
89 88 {sessionvars%hiddenformentry}
90 89 <p>
91 90 <label for="search1">search:</label>
92 91 <input name="rev" id="search1" type="text" size="30">
93 92 navigate: <small class="navigate">{changenav%navgraph}</small>
94 93 </p>
95 94 </form>
96 95
97 96 {footer}
@@ -1,6 +1,7 b''
1 1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2 2 <html>
3 3 <head>
4 4 <link rel="icon" href="{staticurl}hgicon.png" type="image/png">
5 5 <meta name="robots" content="index, nofollow" />
6 6 <link rel="stylesheet" href="{staticurl}style.css" type="text/css" />
7 <script type="text/javascript" src="{staticurl}mercurial.js"></script>
@@ -1,183 +1,183 b''
1 1 default = 'shortlog'
2 2 mimetype = 'text/html; charset={encoding}'
3 3 header = header.tmpl
4 4 footer = footer.tmpl
5 5 search = search.tmpl
6 6 changelog = changelog.tmpl
7 7 shortlog = shortlog.tmpl
8 8 shortlogentry = shortlogentry.tmpl
9 9 graph = graph.tmpl
10 10 naventry = '<a href="{url}log/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
11 11 navshortentry = '<a href="{url}shortlog/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
12 12 navgraphentry = '<a href="{url}graph/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
13 13 filenaventry = '<a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{label|escape}</a> '
14 14 filedifflink = '<a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a> '
15 15 filenodelink = '<a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a> '
16 16 filenolink = '{file|escape} '
17 17 fileellipses = '...'
18 18 changelogentry = changelogentry.tmpl
19 19 searchentry = changelogentry.tmpl
20 20 changeset = changeset.tmpl
21 21 manifest = manifest.tmpl
22 22
23 23 nav = '{before%naventry} {after%naventry}'
24 24 navshort = '{before%navshortentry}{after%navshortentry}'
25 25 navgraph = '{before%navgraphentry}{after%navgraphentry}'
26 26 filenav = '{before%filenaventry}{after%filenaventry}'
27 27
28 28 direntry = '
29 29 <tr class="parity{parity}">
30 30 <td><tt>drwxr-xr-x</tt>&nbsp;
31 31 <td>&nbsp;
32 32 <td>&nbsp;
33 33 <td>
34 34 <a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">{basename|escape}/</a>
35 35 <a href="{url}file/{node|short}{path|urlescape}/{emptydirs|urlescape}{sessionvars%urlparameter}">
36 36 {emptydirs|urlescape}
37 37 </a>'
38 38
39 39 fileentry = '
40 40 <tr class="parity{parity}">
41 41 <td><tt>{permissions|permissions}</tt>&nbsp;
42 42 <td align=right><tt class="date">{date|isodate}</tt>&nbsp;
43 43 <td align=right><tt>{size}</tt>&nbsp;
44 44 <td><a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{basename|escape}</a>'
45 45
46 46 filerevision = filerevision.tmpl
47 47 fileannotate = fileannotate.tmpl
48 48 filediff = filediff.tmpl
49 49 filelog = filelog.tmpl
50 50 fileline = '<div class="parity{parity}"><a class="lineno" href="#{lineid}" id="{lineid}">{linenumber}</a>&nbsp;{line|escape}</div>'
51 51 filelogentry = filelogentry.tmpl
52 52
53 53 # The &nbsp; ensures that all table cells have content (even if there
54 54 # is an empty line in the annotated file), which in turn ensures that
55 55 # all table rows have equal height.
56 56 annotateline = '
57 57 <tr class="parity{parity}">
58 58 <td class="annotate">
59 59 <a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}#l{targetline}"
60 60 title="{node|short}: {desc|escape|firstline}">{author|user}@{rev}</a>
61 61 </td>
62 62 <td>
63 63 <a class="lineno" href="#{lineid}" id="{lineid}">{linenumber}</a>
64 64 </td>
65 65 <td><pre>&nbsp;{line|escape}</pre></td>
66 66 </tr>'
67 67 difflineplus = '<span class="plusline"><a class="lineno" href="#{lineid}" id="{lineid}">{linenumber}</a>{line|escape}</span>'
68 68 difflineminus = '<span class="minusline"><a class="lineno" href="#{lineid}" id="{lineid}">{linenumber}</a>{line|escape}</span>'
69 69 difflineat = '<span class="atline"><a class="lineno" href="#{lineid}" id="{lineid}">{linenumber}</a>{line|escape}</span>'
70 70 diffline = '<a class="lineno" href="#{lineid}" id="{lineid}">{linenumber}</a>{line|escape}'
71 71 changelogparent = '
72 72 <tr>
73 73 <th class="parent">parent {rev}:</th>
74 74 <td class="parent">
75 75 <a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a>
76 76 </td>
77 77 </tr>'
78 78 changesetparent = '
79 79 <tr>
80 80 <th class="parent">parent {rev}:</th>
81 81 <td class="parent"><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td>
82 82 </tr>'
83 83 filerevparent = '
84 84 <tr>
85 85 <td class="metatag">parent:</td>
86 86 <td>
87 87 <a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
88 88 {rename%filerename}{node|short}
89 89 </a>
90 90 </td>
91 91 </tr>'
92 92 filerename = '{file|escape}@'
93 93 filelogrename = '
94 94 <tr>
95 95 <th>base:</th>
96 96 <td>
97 97 <a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
98 98 {file|escape}@{node|short}
99 99 </a>
100 100 </td>
101 101 </tr>'
102 102 fileannotateparent = '
103 103 <tr>
104 104 <td class="metatag">parent:</td>
105 105 <td>
106 106 <a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
107 107 {rename%filerename}{node|short}
108 108 </a>
109 109 </td>
110 110 </tr>'
111 111 changesetchild = '
112 112 <tr>
113 113 <th class="child">child {rev}:</th>
114 114 <td class="child"><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td>
115 115 </tr>'
116 116 changelogchild = '
117 117 <tr>
118 118 <th class="child">child {rev}:</th>
119 119 <td class="child"><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td>
120 120 </tr>'
121 121 filerevchild = '
122 122 <tr>
123 123 <td class="metatag">child:</td>
124 124 <td><a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></td>
125 125 </tr>'
126 126 fileannotatechild = '
127 127 <tr>
128 128 <td class="metatag">child:</td>
129 129 <td><a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></td>
130 130 </tr>'
131 131 tags = tags.tmpl
132 132 tagentry = '
133 133 <li class="tagEntry parity{parity}">
134 134 <tt class="node">{node}</tt>
135 135 <a href="{url}rev/{node|short}{sessionvars%urlparameter}">{tag|escape}</a>
136 136 </li>'
137 137 branches = branches.tmpl
138 138 branchentry = '
139 139 <li class="tagEntry parity{parity}">
140 140 <tt class="node">{node}</tt>
141 141 <a href="{url}shortlog/{node|short}{sessionvars%urlparameter}" class="{status}">{branch|escape}</a>
142 142 </li>'
143 143 diffblock = '<pre class="parity{parity}">{lines}</pre>'
144 144 changelogtag = '<tr><th class="tag">tag:</th><td class="tag">{tag|escape}</td></tr>'
145 145 changesettag = '<tr><th class="tag">tag:</th><td class="tag">{tag|escape}</td></tr>'
146 146 filediffparent = '
147 147 <tr>
148 148 <th class="parent">parent {rev}:</th>
149 149 <td class="parent"><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td>
150 150 </tr>'
151 151 filelogparent = '
152 152 <tr>
153 153 <th>parent {rev}:</th>
154 154 <td><a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></td>
155 155 </tr>'
156 156 filediffchild = '
157 157 <tr>
158 158 <th class="child">child {rev}:</th>
159 159 <td class="child"><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td>
160 160 </tr>'
161 161 filelogchild = '
162 162 <tr>
163 163 <th>child {rev}:</th>
164 164 <td><a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></td>
165 165 </tr>'
166 166 indexentry = '
167 167 <tr class="parity{parity}">
168 168 <td><a href="{url}{sessionvars%urlparameter}">{name|escape}</a></td>
169 169 <td>{description}</td>
170 170 <td>{contact|obfuscate}</td>
171 <td class="age">{lastchange|age}</td>
171 <td class="age">{lastchange|date}</td>
172 172 <td class="indexlinks">
173 173 <a href="{url}rss-log">RSS</a>
174 174 <a href="{url}atom-log">Atom</a>
175 175 {archives%archiveentry}
176 176 </td>
177 177 </tr>'
178 178 index = index.tmpl
179 179 archiveentry = '<a href="{url}archive/{node|short}{extension|urlescape}">{type|escape}</a> '
180 180 notfound = notfound.tmpl
181 181 error = error.tmpl
182 182 urlparameter = '{separator}{name}={value|urlescape}'
183 183 hiddenformentry = '<input type="hidden" name="{name}" value="{value|escape}" />'
@@ -1,7 +1,7 b''
1 1 <table class="slogEntry parity{parity}">
2 2 <tr>
3 <td class="age">{date|age}</td>
3 <td class="age">{date|date}</td>
4 4 <td class="author">{author|person}</td>
5 5 <td class="node"><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{desc|strip|firstline|escape|nonempty}</a></td>
6 6 </tr>
7 7 </table>
@@ -1,1119 +1,1128 b''
1 1 An attempt at more fully testing the hgweb web interface.
2 2 The following things are tested elsewhere and are therefore omitted:
3 3 - archive, tested in test-archive
4 4 - unbundle, tested in test-push-http
5 5 - changegroupsubset, tested in test-pull
6 6
7 7 Set up the repo
8 8
9 9 $ hg init test
10 10 $ cd test
11 11 $ mkdir da
12 12 $ echo foo > da/foo
13 13 $ echo foo > foo
14 14 $ hg ci -Ambase
15 15 adding da/foo
16 16 adding foo
17 17 $ hg tag 1.0
18 18 $ hg bookmark something
19 19 $ hg bookmark -r0 anotherthing
20 20 $ echo another > foo
21 21 $ hg branch stable
22 22 marked working directory as branch stable
23 23 $ hg ci -Ambranch
24 24 $ hg serve --config server.uncompressed=False -n test -p $HGPORT -d --pid-file=hg.pid -E errors.log
25 25 $ cat hg.pid >> $DAEMON_PIDS
26 26
27 27 Logs and changes
28 28
29 29 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '/log/?style=atom'
30 30 200 Script output follows
31 31
32 32 <?xml version="1.0" encoding="ascii"?>
33 33 <feed xmlns="http://www.w3.org/2005/Atom">
34 34 <!-- Changelog -->
35 35 <id>http://*:$HGPORT/</id> (glob)
36 36 <link rel="self" href="http://*:$HGPORT/atom-log"/> (glob)
37 37 <link rel="alternate" href="http://*:$HGPORT/"/> (glob)
38 38 <title>test Changelog</title>
39 39 <updated>1970-01-01T00:00:00+00:00</updated>
40 40
41 41 <entry>
42 42 <title>branch</title>
43 43 <id>http://*:$HGPORT/#changeset-1d22e65f027e5a0609357e7d8e7508cd2ba5d2fe</id> (glob)
44 44 <link href="http://*:$HGPORT/rev/1d22e65f027e"/> (glob)
45 45 <author>
46 46 <name>test</name>
47 47 <email>&#116;&#101;&#115;&#116;</email>
48 48 </author>
49 49 <updated>1970-01-01T00:00:00+00:00</updated>
50 50 <published>1970-01-01T00:00:00+00:00</published>
51 51 <content type="xhtml">
52 52 <div xmlns="http://www.w3.org/1999/xhtml">
53 53 <pre xml:space="preserve">branch</pre>
54 54 </div>
55 55 </content>
56 56 </entry>
57 57 <entry>
58 58 <title>Added tag 1.0 for changeset 2ef0ac749a14</title>
59 59 <id>http://*:$HGPORT/#changeset-a4f92ed23982be056b9852de5dfe873eaac7f0de</id> (glob)
60 60 <link href="http://*:$HGPORT/rev/a4f92ed23982"/> (glob)
61 61 <author>
62 62 <name>test</name>
63 63 <email>&#116;&#101;&#115;&#116;</email>
64 64 </author>
65 65 <updated>1970-01-01T00:00:00+00:00</updated>
66 66 <published>1970-01-01T00:00:00+00:00</published>
67 67 <content type="xhtml">
68 68 <div xmlns="http://www.w3.org/1999/xhtml">
69 69 <pre xml:space="preserve">Added tag 1.0 for changeset 2ef0ac749a14</pre>
70 70 </div>
71 71 </content>
72 72 </entry>
73 73 <entry>
74 74 <title>base</title>
75 75 <id>http://*:$HGPORT/#changeset-2ef0ac749a14e4f57a5a822464a0902c6f7f448f</id> (glob)
76 76 <link href="http://*:$HGPORT/rev/2ef0ac749a14"/> (glob)
77 77 <author>
78 78 <name>test</name>
79 79 <email>&#116;&#101;&#115;&#116;</email>
80 80 </author>
81 81 <updated>1970-01-01T00:00:00+00:00</updated>
82 82 <published>1970-01-01T00:00:00+00:00</published>
83 83 <content type="xhtml">
84 84 <div xmlns="http://www.w3.org/1999/xhtml">
85 85 <pre xml:space="preserve">base</pre>
86 86 </div>
87 87 </content>
88 88 </entry>
89 89
90 90 </feed>
91 91 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '/log/1/?style=atom'
92 92 200 Script output follows
93 93
94 94 <?xml version="1.0" encoding="ascii"?>
95 95 <feed xmlns="http://www.w3.org/2005/Atom">
96 96 <!-- Changelog -->
97 97 <id>http://*:$HGPORT/</id> (glob)
98 98 <link rel="self" href="http://*:$HGPORT/atom-log"/> (glob)
99 99 <link rel="alternate" href="http://*:$HGPORT/"/> (glob)
100 100 <title>test Changelog</title>
101 101 <updated>1970-01-01T00:00:00+00:00</updated>
102 102
103 103 <entry>
104 104 <title>branch</title>
105 105 <id>http://*:$HGPORT/#changeset-1d22e65f027e5a0609357e7d8e7508cd2ba5d2fe</id> (glob)
106 106 <link href="http://*:$HGPORT/rev/1d22e65f027e"/> (glob)
107 107 <author>
108 108 <name>test</name>
109 109 <email>&#116;&#101;&#115;&#116;</email>
110 110 </author>
111 111 <updated>1970-01-01T00:00:00+00:00</updated>
112 112 <published>1970-01-01T00:00:00+00:00</published>
113 113 <content type="xhtml">
114 114 <div xmlns="http://www.w3.org/1999/xhtml">
115 115 <pre xml:space="preserve">branch</pre>
116 116 </div>
117 117 </content>
118 118 </entry>
119 119 <entry>
120 120 <title>Added tag 1.0 for changeset 2ef0ac749a14</title>
121 121 <id>http://*:$HGPORT/#changeset-a4f92ed23982be056b9852de5dfe873eaac7f0de</id> (glob)
122 122 <link href="http://*:$HGPORT/rev/a4f92ed23982"/> (glob)
123 123 <author>
124 124 <name>test</name>
125 125 <email>&#116;&#101;&#115;&#116;</email>
126 126 </author>
127 127 <updated>1970-01-01T00:00:00+00:00</updated>
128 128 <published>1970-01-01T00:00:00+00:00</published>
129 129 <content type="xhtml">
130 130 <div xmlns="http://www.w3.org/1999/xhtml">
131 131 <pre xml:space="preserve">Added tag 1.0 for changeset 2ef0ac749a14</pre>
132 132 </div>
133 133 </content>
134 134 </entry>
135 135 <entry>
136 136 <title>base</title>
137 137 <id>http://*:$HGPORT/#changeset-2ef0ac749a14e4f57a5a822464a0902c6f7f448f</id> (glob)
138 138 <link href="http://*:$HGPORT/rev/2ef0ac749a14"/> (glob)
139 139 <author>
140 140 <name>test</name>
141 141 <email>&#116;&#101;&#115;&#116;</email>
142 142 </author>
143 143 <updated>1970-01-01T00:00:00+00:00</updated>
144 144 <published>1970-01-01T00:00:00+00:00</published>
145 145 <content type="xhtml">
146 146 <div xmlns="http://www.w3.org/1999/xhtml">
147 147 <pre xml:space="preserve">base</pre>
148 148 </div>
149 149 </content>
150 150 </entry>
151 151
152 152 </feed>
153 153 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '/log/1/foo/?style=atom'
154 154 200 Script output follows
155 155
156 156 <?xml version="1.0" encoding="ascii"?>
157 157 <feed xmlns="http://www.w3.org/2005/Atom">
158 158 <id>http://*:$HGPORT/atom-log/tip/foo</id> (glob)
159 159 <link rel="self" href="http://*:$HGPORT/atom-log/tip/foo"/> (glob)
160 160 <title>test: foo history</title>
161 161 <updated>1970-01-01T00:00:00+00:00</updated>
162 162
163 163 <entry>
164 164 <title>base</title>
165 165 <id>http://*:$HGPORT/#changeset-2ef0ac749a14e4f57a5a822464a0902c6f7f448f</id> (glob)
166 166 <link href="http://*:$HGPORT/rev/2ef0ac749a14"/> (glob)
167 167 <author>
168 168 <name>test</name>
169 169 <email>&#116;&#101;&#115;&#116;</email>
170 170 </author>
171 171 <updated>1970-01-01T00:00:00+00:00</updated>
172 172 <published>1970-01-01T00:00:00+00:00</published>
173 173 <content type="xhtml">
174 174 <div xmlns="http://www.w3.org/1999/xhtml">
175 175 <pre xml:space="preserve">base</pre>
176 176 </div>
177 177 </content>
178 178 </entry>
179 179
180 180 </feed>
181 181 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '/shortlog/'
182 182 200 Script output follows
183 183
184 184 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
185 185 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
186 186 <head>
187 187 <link rel="icon" href="/static/hgicon.png" type="image/png" />
188 188 <meta name="robots" content="index, nofollow" />
189 189 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
190 <script type="text/javascript" src="/static/mercurial.js"></script>
190 191
191 192 <title>test: log</title>
192 193 <link rel="alternate" type="application/atom+xml"
193 194 href="/atom-log" title="Atom feed for test" />
194 195 <link rel="alternate" type="application/rss+xml"
195 196 href="/rss-log" title="RSS feed for test" />
196 197 </head>
197 198 <body>
198 199
199 200 <div class="container">
200 201 <div class="menu">
201 202 <div class="logo">
202 203 <a href="http://mercurial.selenic.com/">
203 204 <img src="/static/hglogo.png" alt="mercurial" /></a>
204 205 </div>
205 206 <ul>
206 207 <li class="active">log</li>
207 208 <li><a href="/graph/1d22e65f027e">graph</a></li>
208 209 <li><a href="/tags">tags</a></li>
209 210 <li><a href="/bookmarks">bookmarks</a></li>
210 211 <li><a href="/branches">branches</a></li>
211 212 </ul>
212 213 <ul>
213 214 <li><a href="/rev/1d22e65f027e">changeset</a></li>
214 215 <li><a href="/file/1d22e65f027e">browse</a></li>
215 216 </ul>
216 217 <ul>
217 218
218 219 </ul>
219 220 <ul>
220 221 <li><a href="/help">help</a></li>
221 222 </ul>
222 223 </div>
223 224
224 225 <div class="main">
225 226 <h2><a href="/">test</a></h2>
226 227 <h3>log</h3>
227 228
228 229 <form class="search" action="/log">
229 230
230 231 <p><input name="rev" id="search1" type="text" size="30" /></p>
231 232 <div id="hint">find changesets by author, revision,
232 233 files, or words in the commit message</div>
233 234 </form>
234 235
235 236 <div class="navigate">
236 237 <a href="/shortlog/2?revcount=30">less</a>
237 238 <a href="/shortlog/2?revcount=120">more</a>
238 239 | rev 2: <a href="/shortlog/2ef0ac749a14">(0)</a> <a href="/shortlog/tip">tip</a>
239 240 </div>
240 241
241 242 <table class="bigtable">
242 243 <tr>
243 244 <th class="age">age</th>
244 245 <th class="author">author</th>
245 246 <th class="description">description</th>
246 247 </tr>
247 248 <tr class="parity0">
248 <td class="age">1970-01-01</td>
249 <td class="age">Thu Jan 01 00:00:00 1970 +0000</td>
249 250 <td class="author">test</td>
250 251 <td class="description"><a href="/rev/1d22e65f027e">branch</a><span class="branchhead">stable</span> <span class="tag">tip</span> <span class="tag">something</span> </td>
251 252 </tr>
252 253 <tr class="parity1">
253 <td class="age">1970-01-01</td>
254 <td class="age">Thu Jan 01 00:00:00 1970 +0000</td>
254 255 <td class="author">test</td>
255 256 <td class="description"><a href="/rev/a4f92ed23982">Added tag 1.0 for changeset 2ef0ac749a14</a><span class="branchhead">default</span> </td>
256 257 </tr>
257 258 <tr class="parity0">
258 <td class="age">1970-01-01</td>
259 <td class="age">Thu Jan 01 00:00:00 1970 +0000</td>
259 260 <td class="author">test</td>
260 261 <td class="description"><a href="/rev/2ef0ac749a14">base</a><span class="tag">1.0</span> <span class="tag">anotherthing</span> </td>
261 262 </tr>
262 263
263 264 </table>
264 265
265 266 <div class="navigate">
266 267 <a href="/shortlog/2?revcount=30">less</a>
267 268 <a href="/shortlog/2?revcount=120">more</a>
268 269 | rev 2: <a href="/shortlog/2ef0ac749a14">(0)</a> <a href="/shortlog/tip">tip</a>
269 270 </div>
270 271
271 272 </div>
272 273 </div>
273 274
275 <script type="text/javascript">process_dates()</script>
274 276
275 277
276 278 </body>
277 279 </html>
278 280
279 281 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '/rev/0/'
280 282 200 Script output follows
281 283
282 284 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
283 285 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
284 286 <head>
285 287 <link rel="icon" href="/static/hgicon.png" type="image/png" />
286 288 <meta name="robots" content="index, nofollow" />
287 289 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
290 <script type="text/javascript" src="/static/mercurial.js"></script>
288 291
289 292 <title>test: 2ef0ac749a14</title>
290 293 </head>
291 294 <body>
292 295 <div class="container">
293 296 <div class="menu">
294 297 <div class="logo">
295 298 <a href="http://mercurial.selenic.com/">
296 299 <img src="/static/hglogo.png" alt="mercurial" /></a>
297 300 </div>
298 301 <ul>
299 302 <li><a href="/shortlog/2ef0ac749a14">log</a></li>
300 303 <li><a href="/graph/2ef0ac749a14">graph</a></li>
301 304 <li><a href="/tags">tags</a></li>
302 305 <li><a href="/bookmarks">bookmarks</a></li>
303 306 <li><a href="/branches">branches</a></li>
304 307 </ul>
305 308 <ul>
306 309 <li class="active">changeset</li>
307 310 <li><a href="/raw-rev/2ef0ac749a14">raw</a></li>
308 311 <li><a href="/file/2ef0ac749a14">browse</a></li>
309 312 </ul>
310 313 <ul>
311 314
312 315 </ul>
313 316 <ul>
314 317 <li><a href="/help">help</a></li>
315 318 </ul>
316 319 </div>
317 320
318 321 <div class="main">
319 322
320 323 <h2><a href="/">test</a></h2>
321 324 <h3>changeset 0:2ef0ac749a14 <span class="tag">1.0</span> <span class="tag">anotherthing</span> </h3>
322 325
323 326 <form class="search" action="/log">
324 327
325 328 <p><input name="rev" id="search1" type="text" size="30" /></p>
326 329 <div id="hint">find changesets by author, revision,
327 330 files, or words in the commit message</div>
328 331 </form>
329 332
330 333 <div class="description">base</div>
331 334
332 335 <table id="changesetEntry">
333 336 <tr>
334 337 <th class="author">author</th>
335 338 <td class="author">&#116;&#101;&#115;&#116;</td>
336 339 </tr>
337 340 <tr>
338 341 <th class="date">date</th>
339 <td class="date">Thu Jan 01 00:00:00 1970 +0000 (1970-01-01)</td></tr>
342 <td class="date age">Thu Jan 01 00:00:00 1970 +0000</td></tr>
340 343 <tr>
341 344 <th class="author">parents</th>
342 345 <td class="author"></td>
343 346 </tr>
344 347 <tr>
345 348 <th class="author">children</th>
346 349 <td class="author"> <a href="/rev/a4f92ed23982">a4f92ed23982</a></td>
347 350 </tr>
348 351 <tr>
349 352 <th class="files">files</th>
350 353 <td class="files"><a href="/file/2ef0ac749a14/da/foo">da/foo</a> <a href="/file/2ef0ac749a14/foo">foo</a> </td>
351 354 </tr>
352 355 </table>
353 356
354 357 <div class="overflow">
355 358 <div class="sourcefirst"> line diff</div>
356 359
357 360 <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
358 361 </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
359 362 </span><a href="#l1.3" id="l1.3"> 1.3</a> <span class="atline">@@ -0,0 +1,1 @@
360 363 </span><a href="#l1.4" id="l1.4"> 1.4</a> <span class="plusline">+foo
361 364 </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
362 365 </span><a href="#l2.2" id="l2.2"> 2.2</a> <span class="plusline">+++ b/foo Thu Jan 01 00:00:00 1970 +0000
363 366 </span><a href="#l2.3" id="l2.3"> 2.3</a> <span class="atline">@@ -0,0 +1,1 @@
364 367 </span><a href="#l2.4" id="l2.4"> 2.4</a> <span class="plusline">+foo
365 368 </span></pre></div>
366 369 </div>
367 370
368 371 </div>
369 372 </div>
373 <script type="text/javascript">process_dates()</script>
370 374
371 375
372 376 </body>
373 377 </html>
374 378
375 379 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '/rev/1/?style=raw'
376 380 200 Script output follows
377 381
378 382
379 383 # HG changeset patch
380 384 # User test
381 385 # Date 0 0
382 386 # Node ID a4f92ed23982be056b9852de5dfe873eaac7f0de
383 387 # Parent 2ef0ac749a14e4f57a5a822464a0902c6f7f448f
384 388 Added tag 1.0 for changeset 2ef0ac749a14
385 389
386 390 diff -r 2ef0ac749a14 -r a4f92ed23982 .hgtags
387 391 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
388 392 +++ b/.hgtags Thu Jan 01 00:00:00 1970 +0000
389 393 @@ -0,0 +1,1 @@
390 394 +2ef0ac749a14e4f57a5a822464a0902c6f7f448f 1.0
391 395
392 396 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '/log?rev=base'
393 397 200 Script output follows
394 398
395 399 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
396 400 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
397 401 <head>
398 402 <link rel="icon" href="/static/hgicon.png" type="image/png" />
399 403 <meta name="robots" content="index, nofollow" />
400 404 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
405 <script type="text/javascript" src="/static/mercurial.js"></script>
401 406
402 407 <title>test: searching for base</title>
403 408 </head>
404 409 <body>
405 410
406 411 <div class="container">
407 412 <div class="menu">
408 413 <div class="logo">
409 414 <a href="http://mercurial.selenic.com/">
410 415 <img src="/static/hglogo.png" width=75 height=90 border=0 alt="mercurial"></a>
411 416 </div>
412 417 <ul>
413 418 <li><a href="/shortlog">log</a></li>
414 419 <li><a href="/graph">graph</a></li>
415 420 <li><a href="/tags">tags</a></li>
416 421 <li><a href="/bookmarks">bookmarks</a></li>
417 422 <li><a href="/branches">branches</a></li>
418 423 <li><a href="/help">help</a></li>
419 424 </ul>
420 425 </div>
421 426
422 427 <div class="main">
423 428 <h2><a href="/">test</a></h2>
424 429 <h3>searching for 'base'</h3>
425 430
426 431 <form class="search" action="/log">
427 432
428 433 <p><input name="rev" id="search1" type="text" size="30"></p>
429 434 <div id="hint">find changesets by author, revision,
430 435 files, or words in the commit message</div>
431 436 </form>
432 437
433 438 <div class="navigate">
434 439 <a href="/search/?rev=base&revcount=5">less</a>
435 440 <a href="/search/?rev=base&revcount=20">more</a>
436 441 </div>
437 442
438 443 <table class="bigtable">
439 444 <tr>
440 445 <th class="age">age</th>
441 446 <th class="author">author</th>
442 447 <th class="description">description</th>
443 448 </tr>
444 449 <tr class="parity0">
445 <td class="age">1970-01-01</td>
450 <td class="age">Thu Jan 01 00:00:00 1970 +0000</td>
446 451 <td class="author">test</td>
447 452 <td class="description"><a href="/rev/2ef0ac749a14">base</a><span class="tag">1.0</span> <span class="tag">anotherthing</span> </td>
448 453 </tr>
449 454
450 455 </table>
451 456
452 457 <div class="navigate">
453 458 <a href="/search/?rev=base&revcount=5">less</a>
454 459 <a href="/search/?rev=base&revcount=20">more</a>
455 460 </div>
456 461
457 462 </div>
458 463 </div>
459 464
465 <script type="text/javascript">process_dates()</script>
460 466
461 467
462 468 </body>
463 469 </html>
464 470
465 471
466 472 File-related
467 473
468 474 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '/file/1/foo/?style=raw'
469 475 200 Script output follows
470 476
471 477 foo
472 478 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '/annotate/1/foo/?style=raw'
473 479 200 Script output follows
474 480
475 481
476 482 test@0: foo
477 483
478 484
479 485
480 486
481 487 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '/file/1/?style=raw'
482 488 200 Script output follows
483 489
484 490
485 491 drwxr-xr-x da
486 492 -rw-r--r-- 45 .hgtags
487 493 -rw-r--r-- 4 foo
488 494
489 495
490 496 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '/file/1/foo'
491 497 200 Script output follows
492 498
493 499 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
494 500 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
495 501 <head>
496 502 <link rel="icon" href="/static/hgicon.png" type="image/png" />
497 503 <meta name="robots" content="index, nofollow" />
498 504 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
505 <script type="text/javascript" src="/static/mercurial.js"></script>
499 506
500 507 <title>test: a4f92ed23982 foo</title>
501 508 </head>
502 509 <body>
503 510
504 511 <div class="container">
505 512 <div class="menu">
506 513 <div class="logo">
507 514 <a href="http://mercurial.selenic.com/">
508 515 <img src="/static/hglogo.png" alt="mercurial" /></a>
509 516 </div>
510 517 <ul>
511 518 <li><a href="/shortlog/a4f92ed23982">log</a></li>
512 519 <li><a href="/graph/a4f92ed23982">graph</a></li>
513 520 <li><a href="/tags">tags</a></li>
514 521 <li><a href="/branches">branches</a></li>
515 522 </ul>
516 523 <ul>
517 524 <li><a href="/rev/a4f92ed23982">changeset</a></li>
518 525 <li><a href="/file/a4f92ed23982/">browse</a></li>
519 526 </ul>
520 527 <ul>
521 528 <li class="active">file</li>
522 529 <li><a href="/file/tip/foo">latest</a></li>
523 530 <li><a href="/diff/a4f92ed23982/foo">diff</a></li>
524 531 <li><a href="/annotate/a4f92ed23982/foo">annotate</a></li>
525 532 <li><a href="/log/a4f92ed23982/foo">file log</a></li>
526 533 <li><a href="/raw-file/a4f92ed23982/foo">raw</a></li>
527 534 </ul>
528 535 <ul>
529 536 <li><a href="/help">help</a></li>
530 537 </ul>
531 538 </div>
532 539
533 540 <div class="main">
534 541 <h2><a href="/">test</a></h2>
535 542 <h3>view foo @ 1:a4f92ed23982</h3>
536 543
537 544 <form class="search" action="/log">
538 545
539 546 <p><input name="rev" id="search1" type="text" size="30" /></p>
540 547 <div id="hint">find changesets by author, revision,
541 548 files, or words in the commit message</div>
542 549 </form>
543 550
544 551 <div class="description">Added tag 1.0 for changeset 2ef0ac749a14</div>
545 552
546 553 <table id="changesetEntry">
547 554 <tr>
548 555 <th class="author">author</th>
549 556 <td class="author">&#116;&#101;&#115;&#116;</td>
550 557 </tr>
551 558 <tr>
552 559 <th class="date">date</th>
553 <td class="date">Thu Jan 01 00:00:00 1970 +0000 (1970-01-01)</td>
560 <td class="date age">Thu Jan 01 00:00:00 1970 +0000</td>
554 561 </tr>
555 562 <tr>
556 563 <th class="author">parents</th>
557 564 <td class="author"></td>
558 565 </tr>
559 566 <tr>
560 567 <th class="author">children</th>
561 568 <td class="author"><a href="/file/1d22e65f027e/foo">1d22e65f027e</a> </td>
562 569 </tr>
563 570
564 571 </table>
565 572
566 573 <div class="overflow">
567 574 <div class="sourcefirst"> line source</div>
568 575
569 576 <div class="parity0 source"><a href="#l1" id="l1"> 1</a> foo
570 577 </div>
571 578 <div class="sourcelast"></div>
572 579 </div>
573 580 </div>
574 581 </div>
575 582
583 <script type="text/javascript">process_dates()</script>
576 584
577 585
578 586 </body>
579 587 </html>
580 588
581 589 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '/filediff/1/foo/?style=raw'
582 590 200 Script output follows
583 591
584 592
585 593 diff -r 000000000000 -r a4f92ed23982 foo
586 594 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
587 595 +++ b/foo Thu Jan 01 00:00:00 1970 +0000
588 596 @@ -0,0 +1,1 @@
589 597 +foo
590 598
591 599
592 600
593 601
594 602
595 603 Overviews
596 604
597 605 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '/raw-tags'
598 606 200 Script output follows
599 607
600 608 tip 1d22e65f027e5a0609357e7d8e7508cd2ba5d2fe
601 609 1.0 2ef0ac749a14e4f57a5a822464a0902c6f7f448f
602 610 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '/raw-branches'
603 611 200 Script output follows
604 612
605 613 stable 1d22e65f027e5a0609357e7d8e7508cd2ba5d2fe open
606 614 default a4f92ed23982be056b9852de5dfe873eaac7f0de inactive
607 615 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '/raw-bookmarks'
608 616 200 Script output follows
609 617
610 618 anotherthing 2ef0ac749a14e4f57a5a822464a0902c6f7f448f
611 619 something 1d22e65f027e5a0609357e7d8e7508cd2ba5d2fe
612 620 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '/summary/?style=gitweb'
613 621 200 Script output follows
614 622
615 623 <?xml version="1.0" encoding="ascii"?>
616 624 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
617 625 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US" lang="en-US">
618 626 <head>
619 627 <link rel="icon" href="/static/hgicon.png" type="image/png" />
620 628 <meta name="robots" content="index, nofollow"/>
621 629 <link rel="stylesheet" href="/static/style-gitweb.css" type="text/css" />
622
630 <script type="text/javascript" src="/static/mercurial.js"></script>
623 631
624 632 <title>test: Summary</title>
625 633 <link rel="alternate" type="application/atom+xml"
626 634 href="/atom-log" title="Atom feed for test"/>
627 635 <link rel="alternate" type="application/rss+xml"
628 636 href="/rss-log" title="RSS feed for test"/>
629 637 </head>
630 638 <body>
631 639
632 640 <div class="page_header">
633 641 <a href="http://mercurial.selenic.com/" title="Mercurial" style="float: right;">Mercurial</a><a href="/summary?style=gitweb">test</a> / summary
634 642
635 643 <form action="/log">
636 644 <input type="hidden" name="style" value="gitweb" />
637 645 <div class="search">
638 646 <input type="text" name="rev" />
639 647 </div>
640 648 </form>
641 649 </div>
642 650
643 651 <div class="page_nav">
644 652 summary |
645 653 <a href="/shortlog?style=gitweb">shortlog</a> |
646 654 <a href="/log?style=gitweb">changelog</a> |
647 655 <a href="/graph?style=gitweb">graph</a> |
648 656 <a href="/tags?style=gitweb">tags</a> |
649 657 <a href="/bookmarks?style=gitweb">bookmarks</a> |
650 658 <a href="/branches?style=gitweb">branches</a> |
651 659 <a href="/file/1d22e65f027e?style=gitweb">files</a> |
652 660 <a href="/help?style=gitweb">help</a>
653 661 <br/>
654 662 </div>
655 663
656 664 <div class="title">&nbsp;</div>
657 665 <table cellspacing="0">
658 666 <tr><td>description</td><td>unknown</td></tr>
659 667 <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>
660 668 <tr><td>last change</td><td>Thu, 01 Jan 1970 00:00:00 +0000</td></tr>
661 669 </table>
662 670
663 671 <div><a class="title" href="/shortlog?style=gitweb">changes</a></div>
664 672 <table cellspacing="0">
665 673
666 674 <tr class="parity0">
667 <td class="age"><i>1970-01-01</i></td>
675 <td class="age"><i class="age">Thu Jan 01 00:00:00 1970 +0000</i></td>
668 676 <td><i>test</i></td>
669 677 <td>
670 678 <a class="list" href="/rev/1d22e65f027e?style=gitweb">
671 679 <b>branch</b>
672 680 <span class="logtags"><span class="branchtag" title="stable">stable</span> <span class="tagtag" title="tip">tip</span> <span class="bookmarktag" title="something">something</span> </span>
673 681 </a>
674 682 </td>
675 683 <td class="link" nowrap>
676 684 <a href="/rev/1d22e65f027e?style=gitweb">changeset</a> |
677 685 <a href="/file/1d22e65f027e?style=gitweb">files</a>
678 686 </td>
679 687 </tr>
680 688 <tr class="parity1">
681 <td class="age"><i>1970-01-01</i></td>
689 <td class="age"><i class="age">Thu Jan 01 00:00:00 1970 +0000</i></td>
682 690 <td><i>test</i></td>
683 691 <td>
684 692 <a class="list" href="/rev/a4f92ed23982?style=gitweb">
685 693 <b>Added tag 1.0 for changeset 2ef0ac749a14</b>
686 694 <span class="logtags"><span class="branchtag" title="default">default</span> </span>
687 695 </a>
688 696 </td>
689 697 <td class="link" nowrap>
690 698 <a href="/rev/a4f92ed23982?style=gitweb">changeset</a> |
691 699 <a href="/file/a4f92ed23982?style=gitweb">files</a>
692 700 </td>
693 701 </tr>
694 702 <tr class="parity0">
695 <td class="age"><i>1970-01-01</i></td>
703 <td class="age"><i class="age">Thu Jan 01 00:00:00 1970 +0000</i></td>
696 704 <td><i>test</i></td>
697 705 <td>
698 706 <a class="list" href="/rev/2ef0ac749a14?style=gitweb">
699 707 <b>base</b>
700 708 <span class="logtags"><span class="tagtag" title="1.0">1.0</span> <span class="bookmarktag" title="anotherthing">anotherthing</span> </span>
701 709 </a>
702 710 </td>
703 711 <td class="link" nowrap>
704 712 <a href="/rev/2ef0ac749a14?style=gitweb">changeset</a> |
705 713 <a href="/file/2ef0ac749a14?style=gitweb">files</a>
706 714 </td>
707 715 </tr>
708 716 <tr class="light"><td colspan="4"><a class="list" href="/shortlog?style=gitweb">...</a></td></tr>
709 717 </table>
710 718
711 719 <div><a class="title" href="/tags?style=gitweb">tags</a></div>
712 720 <table cellspacing="0">
713 721
714 722 <tr class="parity0">
715 <td class="age"><i>1970-01-01</i></td>
723 <td class="age"><i class="age">Thu Jan 01 00:00:00 1970 +0000</i></td>
716 724 <td><a class="list" href="/rev/2ef0ac749a14?style=gitweb"><b>1.0</b></a></td>
717 725 <td class="link">
718 726 <a href="/rev/2ef0ac749a14?style=gitweb">changeset</a> |
719 727 <a href="/log/2ef0ac749a14?style=gitweb">changelog</a> |
720 728 <a href="/file/2ef0ac749a14?style=gitweb">files</a>
721 729 </td>
722 730 </tr>
723 731 <tr class="light"><td colspan="3"><a class="list" href="/tags?style=gitweb">...</a></td></tr>
724 732 </table>
725 733
726 734 <div><a class="title" href="/bookmarks?style=gitweb">bookmarks</a></div>
727 735 <table cellspacing="0">
728 736
729 737 <tr class="parity0">
730 <td class="age"><i>1970-01-01</i></td>
738 <td class="age"><i class="age">Thu Jan 01 00:00:00 1970 +0000</i></td>
731 739 <td><a class="list" href="/rev/2ef0ac749a14?style=gitweb"><b>anotherthing</b></a></td>
732 740 <td class="link">
733 741 <a href="/rev/2ef0ac749a14?style=gitweb">changeset</a> |
734 742 <a href="/log/2ef0ac749a14?style=gitweb">changelog</a> |
735 743 <a href="/file/2ef0ac749a14?style=gitweb">files</a>
736 744 </td>
737 745 </tr>
738 746 <tr class="parity1">
739 <td class="age"><i>1970-01-01</i></td>
747 <td class="age"><i class="age">Thu Jan 01 00:00:00 1970 +0000</i></td>
740 748 <td><a class="list" href="/rev/1d22e65f027e?style=gitweb"><b>something</b></a></td>
741 749 <td class="link">
742 750 <a href="/rev/1d22e65f027e?style=gitweb">changeset</a> |
743 751 <a href="/log/1d22e65f027e?style=gitweb">changelog</a> |
744 752 <a href="/file/1d22e65f027e?style=gitweb">files</a>
745 753 </td>
746 754 </tr>
747 755 <tr class="light"><td colspan="3"><a class="list" href="/bookmarks?style=gitweb">...</a></td></tr>
748 756 </table>
749 757
750 758 <div><a class="title" href="#">branches</a></div>
751 759 <table cellspacing="0">
752 760
753 761 <tr class="parity0">
754 <td class="age"><i>1970-01-01</i></td>
762 <td class="age"><i class="age">Thu Jan 01 00:00:00 1970 +0000</i></td>
755 763 <td><a class="list" href="/shortlog/1d22e65f027e?style=gitweb"><b>1d22e65f027e</b></a></td>
756 764 <td class="">stable</td>
757 765 <td class="link">
758 766 <a href="/changeset/1d22e65f027e?style=gitweb">changeset</a> |
759 767 <a href="/log/1d22e65f027e?style=gitweb">changelog</a> |
760 768 <a href="/file/1d22e65f027e?style=gitweb">files</a>
761 769 </td>
762 770 </tr>
763 771 <tr class="parity1">
764 <td class="age"><i>1970-01-01</i></td>
772 <td class="age"><i class="age">Thu Jan 01 00:00:00 1970 +0000</i></td>
765 773 <td><a class="list" href="/shortlog/a4f92ed23982?style=gitweb"><b>a4f92ed23982</b></a></td>
766 774 <td class="">default</td>
767 775 <td class="link">
768 776 <a href="/changeset/a4f92ed23982?style=gitweb">changeset</a> |
769 777 <a href="/log/a4f92ed23982?style=gitweb">changelog</a> |
770 778 <a href="/file/a4f92ed23982?style=gitweb">files</a>
771 779 </td>
772 780 </tr>
773 781 <tr class="light">
774 782 <td colspan="4"><a class="list" href="#">...</a></td>
775 783 </tr>
776 784 </table>
785 <script type="text/javascript">process_dates()</script>
777 786 <div class="page_footer">
778 787 <div class="page_footer_text">test</div>
779 788 <div class="rss_logo">
780 789 <a href="/rss-log">RSS</a>
781 790 <a href="/atom-log">Atom</a>
782 791 </div>
783 792 <br />
784 793
785 794 </div>
786 795 </body>
787 796 </html>
788 797
789 798 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '/graph/?style=gitweb'
790 799 200 Script output follows
791 800
792 801 <?xml version="1.0" encoding="ascii"?>
793 802 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
794 803 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US" lang="en-US">
795 804 <head>
796 805 <link rel="icon" href="/static/hgicon.png" type="image/png" />
797 806 <meta name="robots" content="index, nofollow"/>
798 807 <link rel="stylesheet" href="/static/style-gitweb.css" type="text/css" />
799
808 <script type="text/javascript" src="/static/mercurial.js"></script>
800 809
801 810 <title>test: Graph</title>
802 811 <link rel="alternate" type="application/atom+xml"
803 812 href="/atom-log" title="Atom feed for test"/>
804 813 <link rel="alternate" type="application/rss+xml"
805 814 href="/rss-log" title="RSS feed for test"/>
806 815 <!--[if IE]><script type="text/javascript" src="/static/excanvas.js"></script><![endif]-->
807 816 </head>
808 817 <body>
809 818
810 819 <div class="page_header">
811 820 <a href="http://mercurial.selenic.com/" title="Mercurial" style="float: right;">Mercurial</a><a href="/summary?style=gitweb">test</a> / graph
812 821 </div>
813 822
814 823 <form action="/log">
815 824 <input type="hidden" name="style" value="gitweb" />
816 825 <div class="search">
817 826 <input type="text" name="rev" />
818 827 </div>
819 828 </form>
820 829 <div class="page_nav">
821 830 <a href="/summary?style=gitweb">summary</a> |
822 831 <a href="/shortlog?style=gitweb">shortlog</a> |
823 832 <a href="/log/2?style=gitweb">changelog</a> |
824 833 graph |
825 834 <a href="/tags?style=gitweb">tags</a> |
826 835 <a href="/bookmarks?style=gitweb">bookmarks</a> |
827 836 <a href="/branches?style=gitweb">branches</a> |
828 837 <a href="/file/1d22e65f027e?style=gitweb">files</a> |
829 838 <a href="/help?style=gitweb">help</a>
830 839 <br/>
831 840 <a href="/graph/2?style=gitweb&revcount=30">less</a>
832 841 <a href="/graph/2?style=gitweb&revcount=120">more</a>
833 842 | <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/>
834 843 </div>
835 844
836 845 <div class="title">&nbsp;</div>
837 846
838 847 <noscript>The revision graph only works with JavaScript-enabled browsers.</noscript>
839 848
840 849 <div id="wrapper">
841 850 <ul id="nodebgs"></ul>
842 851 <canvas id="graph" width="480" height="129"></canvas>
843 852 <ul id="graphnodes"></ul>
844 853 </div>
845 854
846 <script type="text/javascript" src="/static/graph.js"></script>
847 855 <script>
848 856 <!-- hide script content
849 857
850 858 var data = [["1d22e65f027e", [0, 1], [[0, 0, 1]], "branch", "test", "1970-01-01", ["stable", true], ["tip"], ["something"]], ["a4f92ed23982", [0, 1], [[0, 0, 1]], "Added tag 1.0 for changeset 2ef0ac749a14", "test", "1970-01-01", ["default", true], [], []], ["2ef0ac749a14", [0, 1], [], "base", "test", "1970-01-01", ["default", false], ["1.0"], ["anotherthing"]]];
851 859 var graph = new Graph();
852 860 graph.scale(39);
853 861
854 862 graph.edge = function(x0, y0, x1, y1, color) {
855 863
856 864 this.setColor(color, 0.0, 0.65);
857 865 this.ctx.beginPath();
858 866 this.ctx.moveTo(x0, y0);
859 867 this.ctx.lineTo(x1, y1);
860 868 this.ctx.stroke();
861 869
862 870 }
863 871
864 872 var revlink = '<li style="_STYLE"><span class="desc">';
865 873 revlink += '<a class="list" href="/rev/_NODEID?style=gitweb" title="_NODEID"><b>_DESC</b></a>';
866 874 revlink += '</span> _TAGS';
867 875 revlink += '<span class="info">_DATE, by _USER</span></li>';
868 876
869 877 graph.vertex = function(x, y, color, parity, cur) {
870 878
871 879 this.ctx.beginPath();
872 880 color = this.setColor(color, 0.25, 0.75);
873 881 this.ctx.arc(x, y, radius, 0, Math.PI * 2, true);
874 882 this.ctx.fill();
875 883
876 884 var bg = '<li class="bg parity' + parity + '"></li>';
877 885 var left = (this.columns + 1) * this.bg_height;
878 886 var nstyle = 'padding-left: ' + left + 'px;';
879 887 var item = revlink.replace(/_STYLE/, nstyle);
880 888 item = item.replace(/_PARITY/, 'parity' + parity);
881 889 item = item.replace(/_NODEID/, cur[0]);
882 890 item = item.replace(/_NODEID/, cur[0]);
883 891 item = item.replace(/_DESC/, cur[3]);
884 892 item = item.replace(/_USER/, cur[4]);
885 893 item = item.replace(/_DATE/, cur[5]);
886 894
887 895 var tagspan = '';
888 896 if (cur[7].length || cur[8].length || (cur[6][0] != 'default' || cur[6][1])) {
889 897 tagspan = '<span class="logtags">';
890 898 if (cur[6][1]) {
891 899 tagspan += '<span class="branchtag" title="' + cur[6][0] + '">';
892 900 tagspan += cur[6][0] + '</span> ';
893 901 } else if (!cur[6][1] && cur[6][0] != 'default') {
894 902 tagspan += '<span class="inbranchtag" title="' + cur[6][0] + '">';
895 903 tagspan += cur[6][0] + '</span> ';
896 904 }
897 905 if (cur[7].length) {
898 906 for (var t in cur[7]) {
899 907 var tag = cur[7][t];
900 908 tagspan += '<span class="tagtag">' + tag + '</span> ';
901 909 }
902 910 }
903 911 if (cur[8].length) {
904 912 for (var t in cur[8]) {
905 913 var bookmark = cur[8][t];
906 914 tagspan += '<span class="bookmarktag">' + bookmark + '</span> ';
907 915 }
908 916 }
909 917 tagspan += '</span>';
910 918 }
911 919
912 920 item = item.replace(/_TAGS/, tagspan);
913 921 return [bg, item];
914 922
915 923 }
916 924
917 925 graph.render(data);
918 926
919 927 // stop hiding script -->
920 928 </script>
921 929
922 930 <div class="page_nav">
923 931 <a href="/graph/2?style=gitweb&revcount=30">less</a>
924 932 <a href="/graph/2?style=gitweb&revcount=120">more</a>
925 933 | <a href="/graph/2ef0ac749a14?style=gitweb">(0)</a> <a href="/graph/2ef0ac749a14?style=gitweb">-2</a> <a href="/graph/tip?style=gitweb">tip</a>
926 934 </div>
927 935
936 <script type="text/javascript">process_dates()</script>
928 937 <div class="page_footer">
929 938 <div class="page_footer_text">test</div>
930 939 <div class="rss_logo">
931 940 <a href="/rss-log">RSS</a>
932 941 <a href="/atom-log">Atom</a>
933 942 </div>
934 943 <br />
935 944
936 945 </div>
937 946 </body>
938 947 </html>
939 948
940 949
941 950 capabilities
942 951
943 952 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '?cmd=capabilities'; echo
944 953 200 Script output follows
945 954
946 955 lookup changegroupsubset branchmap pushkey known getbundle unbundlehash unbundle=HG10GZ,HG10BZ,HG10UN
947 956
948 957 heads
949 958
950 959 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '?cmd=heads'
951 960 200 Script output follows
952 961
953 962 1d22e65f027e5a0609357e7d8e7508cd2ba5d2fe
954 963
955 964 branches
956 965
957 966 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '?cmd=branches&nodes=0000000000000000000000000000000000000000'
958 967 200 Script output follows
959 968
960 969 0000000000000000000000000000000000000000 0000000000000000000000000000000000000000 0000000000000000000000000000000000000000 0000000000000000000000000000000000000000
961 970
962 971 changegroup
963 972
964 973 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '?cmd=changegroup&roots=0000000000000000000000000000000000000000'
965 974 200 Script output follows
966 975
967 976 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 (esc)
968 977 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~\\n\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 \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 (esc)
969 978 \xb0\x90\x92\x88\xb9\x14"\x068\xc2\x1e@\x00\xbb\x8a)\xd3'\x859 (esc)
970 979 \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 _\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 (no-eol) (esc)
971 980
972 981 stream_out
973 982
974 983 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '?cmd=stream_out'
975 984 200 Script output follows
976 985
977 986 1
978 987
979 988 failing unbundle, requires POST request
980 989
981 990 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '?cmd=unbundle'
982 991 405 push requires POST request
983 992
984 993 0
985 994 push requires POST request
986 995 [1]
987 996
988 997 Static files
989 998
990 999 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '/static/style.css'
991 1000 200 Script output follows
992 1001
993 1002 a { text-decoration:none; }
994 1003 .age { white-space:nowrap; }
995 1004 .date { white-space:nowrap; }
996 1005 .indexlinks { white-space:nowrap; }
997 1006 .parity0 { background-color: #ddd; }
998 1007 .parity1 { background-color: #eee; }
999 1008 .lineno { width: 60px; color: #aaa; font-size: smaller;
1000 1009 text-align: right; }
1001 1010 .plusline { color: green; }
1002 1011 .minusline { color: red; }
1003 1012 .atline { color: purple; }
1004 1013 .annotate { font-size: smaller; text-align: right; padding-right: 1em; }
1005 1014 .buttons a {
1006 1015 background-color: #666;
1007 1016 padding: 2pt;
1008 1017 color: white;
1009 1018 font-family: sans;
1010 1019 font-weight: bold;
1011 1020 }
1012 1021 .navigate a {
1013 1022 background-color: #ccc;
1014 1023 padding: 2pt;
1015 1024 font-family: sans;
1016 1025 color: black;
1017 1026 }
1018 1027
1019 1028 .metatag {
1020 1029 background-color: #888;
1021 1030 color: white;
1022 1031 text-align: right;
1023 1032 }
1024 1033
1025 1034 /* Common */
1026 1035 pre { margin: 0; }
1027 1036
1028 1037 .logo {
1029 1038 float: right;
1030 1039 clear: right;
1031 1040 }
1032 1041
1033 1042 /* Changelog/Filelog entries */
1034 1043 .logEntry { width: 100%; }
1035 1044 .logEntry .age { width: 15%; }
1036 1045 .logEntry th { font-weight: normal; text-align: right; vertical-align: top; }
1037 1046 .logEntry th.age, .logEntry th.firstline { font-weight: bold; }
1038 1047 .logEntry th.firstline { text-align: left; width: inherit; }
1039 1048
1040 1049 /* Shortlog entries */
1041 1050 .slogEntry { width: 100%; }
1042 1051 .slogEntry .age { width: 8em; }
1043 1052 .slogEntry td { font-weight: normal; text-align: left; vertical-align: top; }
1044 1053 .slogEntry td.author { width: 15em; }
1045 1054
1046 1055 /* Tag entries */
1047 1056 #tagEntries { list-style: none; margin: 0; padding: 0; }
1048 1057 #tagEntries .tagEntry { list-style: none; margin: 0; padding: 0; }
1049 1058
1050 1059 /* Changeset entry */
1051 1060 #changesetEntry { }
1052 1061 #changesetEntry th { font-weight: normal; background-color: #888; color: #fff; text-align: right; }
1053 1062 #changesetEntry th.files, #changesetEntry th.description { vertical-align: top; }
1054 1063
1055 1064 /* File diff view */
1056 1065 #filediffEntry { }
1057 1066 #filediffEntry th { font-weight: normal; background-color: #888; color: #fff; text-align: right; }
1058 1067
1059 1068 /* Graph */
1060 1069 div#wrapper {
1061 1070 position: relative;
1062 1071 margin: 0;
1063 1072 padding: 0;
1064 1073 }
1065 1074
1066 1075 canvas {
1067 1076 position: absolute;
1068 1077 z-index: 5;
1069 1078 top: -0.6em;
1070 1079 margin: 0;
1071 1080 }
1072 1081
1073 1082 ul#nodebgs {
1074 1083 list-style: none inside none;
1075 1084 padding: 0;
1076 1085 margin: 0;
1077 1086 top: -0.7em;
1078 1087 }
1079 1088
1080 1089 ul#graphnodes li, ul#nodebgs li {
1081 1090 height: 39px;
1082 1091 }
1083 1092
1084 1093 ul#graphnodes {
1085 1094 position: absolute;
1086 1095 z-index: 10;
1087 1096 top: -0.85em;
1088 1097 list-style: none inside none;
1089 1098 padding: 0;
1090 1099 }
1091 1100
1092 1101 ul#graphnodes li .info {
1093 1102 display: block;
1094 1103 font-size: 70%;
1095 1104 position: relative;
1096 1105 top: -1px;
1097 1106 }
1098 1107
1099 1108 Stop and restart with HGENCODING=cp932
1100 1109
1101 1110 $ "$TESTDIR/killdaemons.py"
1102 1111 $ HGENCODING=cp932 hg serve --config server.uncompressed=False -n test \
1103 1112 > -p $HGPORT -d --pid-file=hg.pid -E errors.log
1104 1113 $ cat hg.pid >> $DAEMON_PIDS
1105 1114
1106 1115 commit message with Japanese Kanji 'Noh', which ends with '\x5c'
1107 1116
1108 1117 $ echo foo >> foo
1109 1118 $ HGENCODING=cp932 hg ci -m `python -c 'print("\x94\x5c")'`
1110 1119
1111 1120 Graph json escape of multibyte character
1112 1121
1113 1122 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '/graph/' \
1114 1123 > | grep '^var data ='
1115 1124 var data = [["40b4d6888e92", [0, 1], [[0, 0, 1]], "\u80fd", "test", "1970-01-01", ["stable", true], ["tip"], ["something"]], ["1d22e65f027e", [0, 1], [[0, 0, 1]], "branch", "test", "1970-01-01", ["stable", false], [], []], ["a4f92ed23982", [0, 1], [[0, 0, 1]], "Added tag 1.0 for changeset 2ef0ac749a14", "test", "1970-01-01", ["default", true], [], []], ["2ef0ac749a14", [0, 1], [], "base", "test", "1970-01-01", ["default", false], ["1.0"], ["anotherthing"]]];
1116 1125
1117 1126 ERRORS ENCOUNTERED
1118 1127
1119 1128 $ cat errors.log
@@ -1,138 +1,140 b''
1 1 Test chains of near empty directories, terminating 3 different ways:
2 2 - a1: file at level 4 (deepest)
3 3 - b1: two dirs at level 3
4 4 - e1: file at level 2
5 5
6 6 Set up the repo
7 7
8 8 $ hg init test
9 9 $ cd test
10 10 $ mkdir -p a1/a2/a3/a4
11 11 $ mkdir -p b1/b2/b3/b4
12 12 $ mkdir -p b1/b2/c3/c4
13 13 $ mkdir -p d1/d2/d3/d4
14 14 $ echo foo > a1/a2/a3/a4/foo
15 15 $ echo foo > b1/b2/b3/b4/foo
16 16 $ echo foo > b1/b2/c3/c4/foo
17 17 $ echo foo > d1/d2/d3/d4/foo
18 18 $ echo foo > d1/d2/foo
19 19 $ hg ci -Ama
20 20 adding a1/a2/a3/a4/foo
21 21 adding b1/b2/b3/b4/foo
22 22 adding b1/b2/c3/c4/foo
23 23 adding d1/d2/d3/d4/foo
24 24 adding d1/d2/foo
25 25 $ hg serve -n test -p $HGPORT -d --pid-file=hg.pid -E errors.log
26 26 $ cat hg.pid >> $DAEMON_PIDS
27 27
28 28 manifest with descending
29 29
30 30 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '/file'
31 31 200 Script output follows
32 32
33 33 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
34 34 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
35 35 <head>
36 36 <link rel="icon" href="/static/hgicon.png" type="image/png" />
37 37 <meta name="robots" content="index, nofollow" />
38 38 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
39 <script type="text/javascript" src="/static/mercurial.js"></script>
39 40
40 41 <title>test: 9087c84a0f5d /</title>
41 42 </head>
42 43 <body>
43 44
44 45 <div class="container">
45 46 <div class="menu">
46 47 <div class="logo">
47 48 <a href="http://mercurial.selenic.com/">
48 49 <img src="/static/hglogo.png" alt="mercurial" /></a>
49 50 </div>
50 51 <ul>
51 52 <li><a href="/shortlog/9087c84a0f5d">log</a></li>
52 53 <li><a href="/graph/9087c84a0f5d">graph</a></li>
53 54 <li><a href="/tags">tags</a></li>
54 55 <li><a href="/bookmarks">bookmarks</a></li>
55 56 <li><a href="/branches">branches</a></li>
56 57 </ul>
57 58 <ul>
58 59 <li><a href="/rev/9087c84a0f5d">changeset</a></li>
59 60 <li class="active">browse</li>
60 61 </ul>
61 62 <ul>
62 63
63 64 </ul>
64 65 <ul>
65 66 <li><a href="/help">help</a></li>
66 67 </ul>
67 68 </div>
68 69
69 70 <div class="main">
70 71 <h2><a href="/">test</a></h2>
71 72 <h3>directory / @ 0:9087c84a0f5d <span class="tag">tip</span> </h3>
72 73
73 74 <form class="search" action="/log">
74 75
75 76 <p><input name="rev" id="search1" type="text" size="30" /></p>
76 77 <div id="hint">find changesets by author, revision,
77 78 files, or words in the commit message</div>
78 79 </form>
79 80
80 81 <table class="bigtable">
81 82 <tr>
82 83 <th class="name">name</th>
83 84 <th class="size">size</th>
84 85 <th class="permissions">permissions</th>
85 86 </tr>
86 87 <tr class="fileline parity0">
87 88 <td class="name"><a href="/file/9087c84a0f5d/">[up]</a></td>
88 89 <td class="size"></td>
89 90 <td class="permissions">drwxr-xr-x</td>
90 91 </tr>
91 92
92 93 <tr class="fileline parity1">
93 94 <td class="name">
94 95 <a href="/file/9087c84a0f5d/a1">
95 96 <img src="/static/coal-folder.png" alt="dir."/> a1/
96 97 </a>
97 98 <a href="/file/9087c84a0f5d/a1/a2/a3/a4">
98 99 a2/a3/a4
99 100 </a>
100 101 </td>
101 102 <td class="size"></td>
102 103 <td class="permissions">drwxr-xr-x</td>
103 104 </tr>
104 105 <tr class="fileline parity0">
105 106 <td class="name">
106 107 <a href="/file/9087c84a0f5d/b1">
107 108 <img src="/static/coal-folder.png" alt="dir."/> b1/
108 109 </a>
109 110 <a href="/file/9087c84a0f5d/b1/b2">
110 111 b2
111 112 </a>
112 113 </td>
113 114 <td class="size"></td>
114 115 <td class="permissions">drwxr-xr-x</td>
115 116 </tr>
116 117 <tr class="fileline parity1">
117 118 <td class="name">
118 119 <a href="/file/9087c84a0f5d/d1">
119 120 <img src="/static/coal-folder.png" alt="dir."/> d1/
120 121 </a>
121 122 <a href="/file/9087c84a0f5d/d1/d2">
122 123 d2
123 124 </a>
124 125 </td>
125 126 <td class="size"></td>
126 127 <td class="permissions">drwxr-xr-x</td>
127 128 </tr>
128 129
129 130 </table>
130 131 </div>
131 132 </div>
133 <script type="text/javascript">process_dates()</script>
132 134
133 135
134 136 </body>
135 137 </html>
136 138
137 139
138 140 $ cat errors.log
@@ -1,489 +1,497 b''
1 1 setting up repo
2 2
3 3 $ hg init test
4 4 $ cd test
5 5 $ echo a > a
6 6 $ echo b > b
7 7 $ hg ci -Ama
8 8 adding a
9 9 adding b
10 10
11 11 change permissions for git diffs
12 12
13 13 $ chmod 755 a
14 14 $ hg ci -Amb
15 15
16 16 set up hgweb
17 17
18 18 $ hg serve -n test -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
19 19 $ cat hg.pid >> $DAEMON_PIDS
20 20
21 21 revision
22 22
23 23 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT '/rev/0'
24 24 200 Script output follows
25 25
26 26 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
27 27 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
28 28 <head>
29 29 <link rel="icon" href="/static/hgicon.png" type="image/png" />
30 30 <meta name="robots" content="index, nofollow" />
31 31 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
32 <script type="text/javascript" src="/static/mercurial.js"></script>
32 33
33 34 <title>test: 0cd96de13884</title>
34 35 </head>
35 36 <body>
36 37 <div class="container">
37 38 <div class="menu">
38 39 <div class="logo">
39 40 <a href="http://mercurial.selenic.com/">
40 41 <img src="/static/hglogo.png" alt="mercurial" /></a>
41 42 </div>
42 43 <ul>
43 44 <li><a href="/shortlog/0cd96de13884">log</a></li>
44 45 <li><a href="/graph/0cd96de13884">graph</a></li>
45 46 <li><a href="/tags">tags</a></li>
46 47 <li><a href="/bookmarks">bookmarks</a></li>
47 48 <li><a href="/branches">branches</a></li>
48 49 </ul>
49 50 <ul>
50 51 <li class="active">changeset</li>
51 52 <li><a href="/raw-rev/0cd96de13884">raw</a></li>
52 53 <li><a href="/file/0cd96de13884">browse</a></li>
53 54 </ul>
54 55 <ul>
55 56
56 57 </ul>
57 58 <ul>
58 59 <li><a href="/help">help</a></li>
59 60 </ul>
60 61 </div>
61 62
62 63 <div class="main">
63 64
64 65 <h2><a href="/">test</a></h2>
65 66 <h3>changeset 0:0cd96de13884 </h3>
66 67
67 68 <form class="search" action="/log">
68 69
69 70 <p><input name="rev" id="search1" type="text" size="30" /></p>
70 71 <div id="hint">find changesets by author, revision,
71 72 files, or words in the commit message</div>
72 73 </form>
73 74
74 75 <div class="description">a</div>
75 76
76 77 <table id="changesetEntry">
77 78 <tr>
78 79 <th class="author">author</th>
79 80 <td class="author">&#116;&#101;&#115;&#116;</td>
80 81 </tr>
81 82 <tr>
82 83 <th class="date">date</th>
83 <td class="date">Thu Jan 01 00:00:00 1970 +0000 (1970-01-01)</td></tr>
84 <td class="date age">Thu Jan 01 00:00:00 1970 +0000</td></tr>
84 85 <tr>
85 86 <th class="author">parents</th>
86 87 <td class="author"></td>
87 88 </tr>
88 89 <tr>
89 90 <th class="author">children</th>
90 91 <td class="author"> <a href="/rev/78e4ebad7cdf">78e4ebad7cdf</a></td>
91 92 </tr>
92 93 <tr>
93 94 <th class="files">files</th>
94 95 <td class="files"><a href="/file/0cd96de13884/a">a</a> <a href="/file/0cd96de13884/b">b</a> </td>
95 96 </tr>
96 97 </table>
97 98
98 99 <div class="overflow">
99 100 <div class="sourcefirst"> line diff</div>
100 101
101 102 <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
102 103 </span><a href="#l1.2" id="l1.2"> 1.2</a> <span class="plusline">+++ b/a Thu Jan 01 00:00:00 1970 +0000
103 104 </span><a href="#l1.3" id="l1.3"> 1.3</a> <span class="atline">@@ -0,0 +1,1 @@
104 105 </span><a href="#l1.4" id="l1.4"> 1.4</a> <span class="plusline">+a
105 106 </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
106 107 </span><a href="#l2.2" id="l2.2"> 2.2</a> <span class="plusline">+++ b/b Thu Jan 01 00:00:00 1970 +0000
107 108 </span><a href="#l2.3" id="l2.3"> 2.3</a> <span class="atline">@@ -0,0 +1,1 @@
108 109 </span><a href="#l2.4" id="l2.4"> 2.4</a> <span class="plusline">+b
109 110 </span></pre></div>
110 111 </div>
111 112
112 113 </div>
113 114 </div>
115 <script type="text/javascript">process_dates()</script>
114 116
115 117
116 118 </body>
117 119 </html>
118 120
119 121
120 122 raw revision
121 123
122 124 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT '/raw-rev/0'
123 125 200 Script output follows
124 126
125 127
126 128 # HG changeset patch
127 129 # User test
128 130 # Date 0 0
129 131 # Node ID 0cd96de13884b090099512d4794ae87ad067ea8e
130 132
131 133 a
132 134
133 135 diff -r 000000000000 -r 0cd96de13884 a
134 136 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
135 137 +++ b/a Thu Jan 01 00:00:00 1970 +0000
136 138 @@ -0,0 +1,1 @@
137 139 +a
138 140 diff -r 000000000000 -r 0cd96de13884 b
139 141 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
140 142 +++ b/b Thu Jan 01 00:00:00 1970 +0000
141 143 @@ -0,0 +1,1 @@
142 144 +b
143 145
144 146
145 147 diff removed file
146 148
147 149 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT '/diff/tip/a'
148 150 200 Script output follows
149 151
150 152 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
151 153 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
152 154 <head>
153 155 <link rel="icon" href="/static/hgicon.png" type="image/png" />
154 156 <meta name="robots" content="index, nofollow" />
155 157 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
158 <script type="text/javascript" src="/static/mercurial.js"></script>
156 159
157 160 <title>test: a diff</title>
158 161 </head>
159 162 <body>
160 163
161 164 <div class="container">
162 165 <div class="menu">
163 166 <div class="logo">
164 167 <a href="http://mercurial.selenic.com/">
165 168 <img src="/static/hglogo.png" alt="mercurial" /></a>
166 169 </div>
167 170 <ul>
168 171 <li><a href="/shortlog/78e4ebad7cdf">log</a></li>
169 172 <li><a href="/graph/78e4ebad7cdf">graph</a></li>
170 173 <li><a href="/tags">tags</a></li>
171 174 <li><a href="/bookmarks">bookmarks</a></li>
172 175 <li><a href="/branches">branches</a></li>
173 176 </ul>
174 177 <ul>
175 178 <li><a href="/rev/78e4ebad7cdf">changeset</a></li>
176 179 <li><a href="/file/78e4ebad7cdf">browse</a></li>
177 180 </ul>
178 181 <ul>
179 182 <li><a href="/file/78e4ebad7cdf/a">file</a></li>
180 183 <li><a href="/file/tip/a">latest</a></li>
181 184 <li class="active">diff</li>
182 185 <li><a href="/annotate/78e4ebad7cdf/a">annotate</a></li>
183 186 <li><a href="/log/78e4ebad7cdf/a">file log</a></li>
184 187 <li><a href="/raw-file/78e4ebad7cdf/a">raw</a></li>
185 188 </ul>
186 189 <ul>
187 190 <li><a href="/help">help</a></li>
188 191 </ul>
189 192 </div>
190 193
191 194 <div class="main">
192 195 <h2><a href="/">test</a></h2>
193 196 <h3>diff a @ 1:78e4ebad7cdf</h3>
194 197
195 198 <form class="search" action="/log">
196 199 <p></p>
197 200 <p><input name="rev" id="search1" type="text" size="30" /></p>
198 201 <div id="hint">find changesets by author, revision,
199 202 files, or words in the commit message</div>
200 203 </form>
201 204
202 205 <div class="description">b</div>
203 206
204 207 <table id="changesetEntry">
205 208 <tr>
206 209 <th>author</th>
207 210 <td>&#116;&#101;&#115;&#116;</td>
208 211 </tr>
209 212 <tr>
210 213 <th>date</th>
211 <td>Thu Jan 01 00:00:00 1970 +0000 (1970-01-01)</td>
214 <td class="date age">Thu Jan 01 00:00:00 1970 +0000</td>
212 215 </tr>
213 216 <tr>
214 217 <th>parents</th>
215 218 <td></td>
216 219 </tr>
217 220 <tr>
218 221 <th>children</th>
219 222 <td></td>
220 223 </tr>
221 224
222 225 </table>
223 226
224 227 <div class="overflow">
225 228 <div class="sourcefirst"> line diff</div>
226 229
227 230 <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
228 231 </span><a href="#l1.2" id="l1.2"> 1.2</a> <span class="plusline">+++ b/a Thu Jan 01 00:00:00 1970 +0000
229 232 </span><a href="#l1.3" id="l1.3"> 1.3</a> <span class="atline">@@ -0,0 +1,1 @@
230 233 </span><a href="#l1.4" id="l1.4"> 1.4</a> <span class="plusline">+a
231 234 </span></pre></div>
232 235 </div>
233 236 </div>
234 237 </div>
235 238
239 <script type="text/javascript">process_dates()</script>
236 240
237 241
238 242 </body>
239 243 </html>
240 244
241 245
242 246 set up hgweb with git diffs
243 247
244 248 $ "$TESTDIR/killdaemons.py"
245 249 $ hg serve --config 'diff.git=1' -n test -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
246 250 $ cat hg.pid >> $DAEMON_PIDS
247 251
248 252 revision
249 253
250 254 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT '/rev/0'
251 255 200 Script output follows
252 256
253 257 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
254 258 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
255 259 <head>
256 260 <link rel="icon" href="/static/hgicon.png" type="image/png" />
257 261 <meta name="robots" content="index, nofollow" />
258 262 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
263 <script type="text/javascript" src="/static/mercurial.js"></script>
259 264
260 265 <title>test: 0cd96de13884</title>
261 266 </head>
262 267 <body>
263 268 <div class="container">
264 269 <div class="menu">
265 270 <div class="logo">
266 271 <a href="http://mercurial.selenic.com/">
267 272 <img src="/static/hglogo.png" alt="mercurial" /></a>
268 273 </div>
269 274 <ul>
270 275 <li><a href="/shortlog/0cd96de13884">log</a></li>
271 276 <li><a href="/graph/0cd96de13884">graph</a></li>
272 277 <li><a href="/tags">tags</a></li>
273 278 <li><a href="/bookmarks">bookmarks</a></li>
274 279 <li><a href="/branches">branches</a></li>
275 280 </ul>
276 281 <ul>
277 282 <li class="active">changeset</li>
278 283 <li><a href="/raw-rev/0cd96de13884">raw</a></li>
279 284 <li><a href="/file/0cd96de13884">browse</a></li>
280 285 </ul>
281 286 <ul>
282 287
283 288 </ul>
284 289 <ul>
285 290 <li><a href="/help">help</a></li>
286 291 </ul>
287 292 </div>
288 293
289 294 <div class="main">
290 295
291 296 <h2><a href="/">test</a></h2>
292 297 <h3>changeset 0:0cd96de13884 </h3>
293 298
294 299 <form class="search" action="/log">
295 300
296 301 <p><input name="rev" id="search1" type="text" size="30" /></p>
297 302 <div id="hint">find changesets by author, revision,
298 303 files, or words in the commit message</div>
299 304 </form>
300 305
301 306 <div class="description">a</div>
302 307
303 308 <table id="changesetEntry">
304 309 <tr>
305 310 <th class="author">author</th>
306 311 <td class="author">&#116;&#101;&#115;&#116;</td>
307 312 </tr>
308 313 <tr>
309 314 <th class="date">date</th>
310 <td class="date">Thu Jan 01 00:00:00 1970 +0000 (1970-01-01)</td></tr>
315 <td class="date age">Thu Jan 01 00:00:00 1970 +0000</td></tr>
311 316 <tr>
312 317 <th class="author">parents</th>
313 318 <td class="author"></td>
314 319 </tr>
315 320 <tr>
316 321 <th class="author">children</th>
317 322 <td class="author"> <a href="/rev/78e4ebad7cdf">78e4ebad7cdf</a></td>
318 323 </tr>
319 324 <tr>
320 325 <th class="files">files</th>
321 326 <td class="files"><a href="/file/0cd96de13884/a">a</a> <a href="/file/0cd96de13884/b">b</a> </td>
322 327 </tr>
323 328 </table>
324 329
325 330 <div class="overflow">
326 331 <div class="sourcefirst"> line diff</div>
327 332
328 333 <div class="source bottomline parity0"><pre><a href="#l1.1" id="l1.1"> 1.1</a> new file mode 100644
329 334 <a href="#l1.2" id="l1.2"> 1.2</a> <span class="minusline">--- /dev/null
330 335 </span><a href="#l1.3" id="l1.3"> 1.3</a> <span class="plusline">+++ b/a
331 336 </span><a href="#l1.4" id="l1.4"> 1.4</a> <span class="atline">@@ -0,0 +1,1 @@
332 337 </span><a href="#l1.5" id="l1.5"> 1.5</a> <span class="plusline">+a
333 338 </span></pre></div><div class="source bottomline parity1"><pre><a href="#l2.1" id="l2.1"> 2.1</a> new file mode 100644
334 339 <a href="#l2.2" id="l2.2"> 2.2</a> <span class="minusline">--- /dev/null
335 340 </span><a href="#l2.3" id="l2.3"> 2.3</a> <span class="plusline">+++ b/b
336 341 </span><a href="#l2.4" id="l2.4"> 2.4</a> <span class="atline">@@ -0,0 +1,1 @@
337 342 </span><a href="#l2.5" id="l2.5"> 2.5</a> <span class="plusline">+b
338 343 </span></pre></div>
339 344 </div>
340 345
341 346 </div>
342 347 </div>
348 <script type="text/javascript">process_dates()</script>
343 349
344 350
345 351 </body>
346 352 </html>
347 353
348 354
349 355 revision
350 356
351 357 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT '/raw-rev/0'
352 358 200 Script output follows
353 359
354 360
355 361 # HG changeset patch
356 362 # User test
357 363 # Date 0 0
358 364 # Node ID 0cd96de13884b090099512d4794ae87ad067ea8e
359 365
360 366 a
361 367
362 368 diff --git a/a b/a
363 369 new file mode 100644
364 370 --- /dev/null
365 371 +++ b/a
366 372 @@ -0,0 +1,1 @@
367 373 +a
368 374 diff --git a/b b/b
369 375 new file mode 100644
370 376 --- /dev/null
371 377 +++ b/b
372 378 @@ -0,0 +1,1 @@
373 379 +b
374 380
375 381
376 382 diff removed file
377 383
378 384 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT '/diff/tip/a'
379 385 200 Script output follows
380 386
381 387 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
382 388 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
383 389 <head>
384 390 <link rel="icon" href="/static/hgicon.png" type="image/png" />
385 391 <meta name="robots" content="index, nofollow" />
386 392 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
393 <script type="text/javascript" src="/static/mercurial.js"></script>
387 394
388 395 <title>test: a diff</title>
389 396 </head>
390 397 <body>
391 398
392 399 <div class="container">
393 400 <div class="menu">
394 401 <div class="logo">
395 402 <a href="http://mercurial.selenic.com/">
396 403 <img src="/static/hglogo.png" alt="mercurial" /></a>
397 404 </div>
398 405 <ul>
399 406 <li><a href="/shortlog/78e4ebad7cdf">log</a></li>
400 407 <li><a href="/graph/78e4ebad7cdf">graph</a></li>
401 408 <li><a href="/tags">tags</a></li>
402 409 <li><a href="/bookmarks">bookmarks</a></li>
403 410 <li><a href="/branches">branches</a></li>
404 411 </ul>
405 412 <ul>
406 413 <li><a href="/rev/78e4ebad7cdf">changeset</a></li>
407 414 <li><a href="/file/78e4ebad7cdf">browse</a></li>
408 415 </ul>
409 416 <ul>
410 417 <li><a href="/file/78e4ebad7cdf/a">file</a></li>
411 418 <li><a href="/file/tip/a">latest</a></li>
412 419 <li class="active">diff</li>
413 420 <li><a href="/annotate/78e4ebad7cdf/a">annotate</a></li>
414 421 <li><a href="/log/78e4ebad7cdf/a">file log</a></li>
415 422 <li><a href="/raw-file/78e4ebad7cdf/a">raw</a></li>
416 423 </ul>
417 424 <ul>
418 425 <li><a href="/help">help</a></li>
419 426 </ul>
420 427 </div>
421 428
422 429 <div class="main">
423 430 <h2><a href="/">test</a></h2>
424 431 <h3>diff a @ 1:78e4ebad7cdf</h3>
425 432
426 433 <form class="search" action="/log">
427 434 <p></p>
428 435 <p><input name="rev" id="search1" type="text" size="30" /></p>
429 436 <div id="hint">find changesets by author, revision,
430 437 files, or words in the commit message</div>
431 438 </form>
432 439
433 440 <div class="description">b</div>
434 441
435 442 <table id="changesetEntry">
436 443 <tr>
437 444 <th>author</th>
438 445 <td>&#116;&#101;&#115;&#116;</td>
439 446 </tr>
440 447 <tr>
441 448 <th>date</th>
442 <td>Thu Jan 01 00:00:00 1970 +0000 (1970-01-01)</td>
449 <td class="date age">Thu Jan 01 00:00:00 1970 +0000</td>
443 450 </tr>
444 451 <tr>
445 452 <th>parents</th>
446 453 <td></td>
447 454 </tr>
448 455 <tr>
449 456 <th>children</th>
450 457 <td></td>
451 458 </tr>
452 459
453 460 </table>
454 461
455 462 <div class="overflow">
456 463 <div class="sourcefirst"> line diff</div>
457 464
458 465 <div class="source bottomline parity0"><pre><a href="#l1.1" id="l1.1"> 1.1</a> new file mode 100755
459 466 <a href="#l1.2" id="l1.2"> 1.2</a> <span class="minusline">--- /dev/null
460 467 </span><a href="#l1.3" id="l1.3"> 1.3</a> <span class="plusline">+++ b/a
461 468 </span><a href="#l1.4" id="l1.4"> 1.4</a> <span class="atline">@@ -0,0 +1,1 @@
462 469 </span><a href="#l1.5" id="l1.5"> 1.5</a> <span class="plusline">+a
463 470 </span></pre></div>
464 471 </div>
465 472 </div>
466 473 </div>
467 474
475 <script type="text/javascript">process_dates()</script>
468 476
469 477
470 478 </body>
471 479 </html>
472 480
473 481 $ cd ..
474 482
475 483 test import rev as raw-rev
476 484
477 485 $ hg clone -r0 test test1
478 486 adding changesets
479 487 adding manifests
480 488 adding file changes
481 489 added 1 changesets with 2 changes to 2 files
482 490 updating to branch default
483 491 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
484 492 $ cd test1
485 493 $ hg import -q --exact http://localhost:$HGPORT/rev/1
486 494
487 495 errors
488 496
489 497 $ cat ../test/errors.log
@@ -1,398 +1,405 b''
1 1 Some tests for hgweb in an empty repository
2 2
3 3 $ hg init test
4 4 $ cd test
5 5 $ hg serve -n test -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
6 6 $ cat hg.pid >> $DAEMON_PIDS
7 7 $ ("$TESTDIR/get-with-headers.py" localhost:$HGPORT '/shortlog')
8 8 200 Script output follows
9 9
10 10 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
11 11 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
12 12 <head>
13 13 <link rel="icon" href="/static/hgicon.png" type="image/png" />
14 14 <meta name="robots" content="index, nofollow" />
15 15 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
16 <script type="text/javascript" src="/static/mercurial.js"></script>
16 17
17 18 <title>test: log</title>
18 19 <link rel="alternate" type="application/atom+xml"
19 20 href="/atom-log" title="Atom feed for test" />
20 21 <link rel="alternate" type="application/rss+xml"
21 22 href="/rss-log" title="RSS feed for test" />
22 23 </head>
23 24 <body>
24 25
25 26 <div class="container">
26 27 <div class="menu">
27 28 <div class="logo">
28 29 <a href="http://mercurial.selenic.com/">
29 30 <img src="/static/hglogo.png" alt="mercurial" /></a>
30 31 </div>
31 32 <ul>
32 33 <li class="active">log</li>
33 34 <li><a href="/graph/000000000000">graph</a></li>
34 35 <li><a href="/tags">tags</a></li>
35 36 <li><a href="/bookmarks">bookmarks</a></li>
36 37 <li><a href="/branches">branches</a></li>
37 38 </ul>
38 39 <ul>
39 40 <li><a href="/rev/000000000000">changeset</a></li>
40 41 <li><a href="/file/000000000000">browse</a></li>
41 42 </ul>
42 43 <ul>
43 44
44 45 </ul>
45 46 <ul>
46 47 <li><a href="/help">help</a></li>
47 48 </ul>
48 49 </div>
49 50
50 51 <div class="main">
51 52 <h2><a href="/">test</a></h2>
52 53 <h3>log</h3>
53 54
54 55 <form class="search" action="/log">
55 56
56 57 <p><input name="rev" id="search1" type="text" size="30" /></p>
57 58 <div id="hint">find changesets by author, revision,
58 59 files, or words in the commit message</div>
59 60 </form>
60 61
61 62 <div class="navigate">
62 63 <a href="/shortlog/-1?revcount=30">less</a>
63 64 <a href="/shortlog/-1?revcount=120">more</a>
64 65 | rev -1: <a href="/shortlog/000000000000">(0)</a> <a href="/shortlog/tip">tip</a>
65 66 </div>
66 67
67 68 <table class="bigtable">
68 69 <tr>
69 70 <th class="age">age</th>
70 71 <th class="author">author</th>
71 72 <th class="description">description</th>
72 73 </tr>
73 74
74 75 </table>
75 76
76 77 <div class="navigate">
77 78 <a href="/shortlog/-1?revcount=30">less</a>
78 79 <a href="/shortlog/-1?revcount=120">more</a>
79 80 | rev -1: <a href="/shortlog/000000000000">(0)</a> <a href="/shortlog/tip">tip</a>
80 81 </div>
81 82
82 83 </div>
83 84 </div>
84 85
86 <script type="text/javascript">process_dates()</script>
85 87
86 88
87 89 </body>
88 90 </html>
89 91
90 92 $ ("$TESTDIR/get-with-headers.py" localhost:$HGPORT '/log')
91 93 200 Script output follows
92 94
93 95 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
94 96 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
95 97 <head>
96 98 <link rel="icon" href="/static/hgicon.png" type="image/png" />
97 99 <meta name="robots" content="index, nofollow" />
98 100 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
101 <script type="text/javascript" src="/static/mercurial.js"></script>
99 102
100 103 <title>test: log</title>
101 104 <link rel="alternate" type="application/atom+xml"
102 105 href="/atom-log" title="Atom feed for test" />
103 106 <link rel="alternate" type="application/rss+xml"
104 107 href="/rss-log" title="RSS feed for test" />
105 108 </head>
106 109 <body>
107 110
108 111 <div class="container">
109 112 <div class="menu">
110 113 <div class="logo">
111 114 <a href="http://mercurial.selenic.com/">
112 115 <img src="/static/hglogo.png" alt="mercurial" /></a>
113 116 </div>
114 117 <ul>
115 118 <li class="active">log</li>
116 119 <li><a href="/graph/000000000000">graph</a></li>
117 120 <li><a href="/tags">tags</a></li>
118 121 <li><a href="/bookmarks">bookmarks</a></li>
119 122 <li><a href="/branches">branches</a></li>
120 123 </ul>
121 124 <ul>
122 125 <li><a href="/rev/000000000000">changeset</a></li>
123 126 <li><a href="/file/000000000000">browse</a></li>
124 127 </ul>
125 128 <ul>
126 129
127 130 </ul>
128 131 <ul>
129 132 <li><a href="/help">help</a></li>
130 133 </ul>
131 134 </div>
132 135
133 136 <div class="main">
134 137 <h2><a href="/">test</a></h2>
135 138 <h3>log</h3>
136 139
137 140 <form class="search" action="/log">
138 141
139 142 <p><input name="rev" id="search1" type="text" size="30" /></p>
140 143 <div id="hint">find changesets by author, revision,
141 144 files, or words in the commit message</div>
142 145 </form>
143 146
144 147 <div class="navigate">
145 148 <a href="/shortlog/-1?revcount=5">less</a>
146 149 <a href="/shortlog/-1?revcount=20">more</a>
147 150 | rev -1: <a href="/shortlog/000000000000">(0)</a> <a href="/shortlog/tip">tip</a>
148 151 </div>
149 152
150 153 <table class="bigtable">
151 154 <tr>
152 155 <th class="age">age</th>
153 156 <th class="author">author</th>
154 157 <th class="description">description</th>
155 158 </tr>
156 159
157 160 </table>
158 161
159 162 <div class="navigate">
160 163 <a href="/shortlog/-1?revcount=5">less</a>
161 164 <a href="/shortlog/-1?revcount=20">more</a>
162 165 | rev -1: <a href="/shortlog/000000000000">(0)</a> <a href="/shortlog/tip">tip</a>
163 166 </div>
164 167
165 168 </div>
166 169 </div>
167 170
171 <script type="text/javascript">process_dates()</script>
168 172
169 173
170 174 </body>
171 175 </html>
172 176
173 177 $ ("$TESTDIR/get-with-headers.py" localhost:$HGPORT '/graph')
174 178 200 Script output follows
175 179
176 180 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
177 181 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
178 182 <head>
179 183 <link rel="icon" href="/static/hgicon.png" type="image/png" />
180 184 <meta name="robots" content="index, nofollow" />
181 185 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
186 <script type="text/javascript" src="/static/mercurial.js"></script>
182 187
183 188 <title>test: revision graph</title>
184 189 <link rel="alternate" type="application/atom+xml"
185 190 href="/atom-log" title="Atom feed for test: log" />
186 191 <link rel="alternate" type="application/rss+xml"
187 192 href="/rss-log" title="RSS feed for test: log" />
188 193 <!--[if IE]><script type="text/javascript" src="/static/excanvas.js"></script><![endif]-->
189 194 </head>
190 195 <body>
191 196
192 197 <div class="container">
193 198 <div class="menu">
194 199 <div class="logo">
195 200 <a href="http://mercurial.selenic.com/">
196 201 <img src="/static/hglogo.png" alt="mercurial" /></a>
197 202 </div>
198 203 <ul>
199 204 <li><a href="/shortlog/000000000000">log</a></li>
200 205 <li class="active">graph</li>
201 206 <li><a href="/tags">tags</a></li>
202 207 <li><a href="/bookmarks">bookmarks</a></li>
203 208 <li><a href="/branches">branches</a></li>
204 209 </ul>
205 210 <ul>
206 211 <li><a href="/rev/000000000000">changeset</a></li>
207 212 <li><a href="/file/000000000000">browse</a></li>
208 213 </ul>
209 214 <ul>
210 215 <li><a href="/help">help</a></li>
211 216 </ul>
212 217 </div>
213 218
214 219 <div class="main">
215 220 <h2><a href="/">test</a></h2>
216 221 <h3>graph</h3>
217 222
218 223 <form class="search" action="/log">
219 224
220 225 <p><input name="rev" id="search1" type="text" size="30" /></p>
221 226 <div id="hint">find changesets by author, revision,
222 227 files, or words in the commit message</div>
223 228 </form>
224 229
225 230 <div class="navigate">
226 231 <a href="/graph/-1?revcount=30">less</a>
227 232 <a href="/graph/-1?revcount=120">more</a>
228 233 | rev -1: <a href="/graph/000000000000">(0)</a> <a href="/graph/tip">tip</a>
229 234 </div>
230 235
231 236 <noscript><p>The revision graph only works with JavaScript-enabled browsers.</p></noscript>
232 237
233 238 <div id="wrapper">
234 239 <ul id="nodebgs"></ul>
235 240 <canvas id="graph" width="480" height="12"></canvas>
236 241 <ul id="graphnodes"></ul>
237 242 </div>
238 243
239 <script type="text/javascript" src="/static/graph.js"></script>
240 244 <script type="text/javascript">
241 245 <!-- hide script content
242 246
243 247 var data = [];
244 248 var graph = new Graph();
245 249 graph.scale(39);
246 250
247 251 graph.edge = function(x0, y0, x1, y1, color) {
248 252
249 253 this.setColor(color, 0.0, 0.65);
250 254 this.ctx.beginPath();
251 255 this.ctx.moveTo(x0, y0);
252 256 this.ctx.lineTo(x1, y1);
253 257 this.ctx.stroke();
254 258
255 259 }
256 260
257 261 var revlink = '<li style="_STYLE"><span class="desc">';
258 262 revlink += '<a href="/rev/_NODEID" title="_NODEID">_DESC</a>';
259 263 revlink += '</span>_TAGS<span class="info">_DATE, by _USER</span></li>';
260 264
261 265 graph.vertex = function(x, y, color, parity, cur) {
262 266
263 267 this.ctx.beginPath();
264 268 color = this.setColor(color, 0.25, 0.75);
265 269 this.ctx.arc(x, y, radius, 0, Math.PI * 2, true);
266 270 this.ctx.fill();
267 271
268 272 var bg = '<li class="bg parity' + parity + '"></li>';
269 273 var left = (this.columns + 1) * this.bg_height;
270 274 var nstyle = 'padding-left: ' + left + 'px;';
271 275 var item = revlink.replace(/_STYLE/, nstyle);
272 276 item = item.replace(/_PARITY/, 'parity' + parity);
273 277 item = item.replace(/_NODEID/, cur[0]);
274 278 item = item.replace(/_NODEID/, cur[0]);
275 279 item = item.replace(/_DESC/, cur[3]);
276 280 item = item.replace(/_USER/, cur[4]);
277 281 item = item.replace(/_DATE/, cur[5]);
278 282
279 283 var tagspan = '';
280 284 if (cur[7].length || (cur[6][0] != 'default' || cur[6][1])) {
281 285 tagspan = '<span class="logtags">';
282 286 if (cur[6][1]) {
283 287 tagspan += '<span class="branchhead" title="' + cur[6][0] + '">';
284 288 tagspan += cur[6][0] + '</span> ';
285 289 } else if (!cur[6][1] && cur[6][0] != 'default') {
286 290 tagspan += '<span class="branchname" title="' + cur[6][0] + '">';
287 291 tagspan += cur[6][0] + '</span> ';
288 292 }
289 293 if (cur[7].length) {
290 294 for (var t in cur[7]) {
291 295 var tag = cur[7][t];
292 296 tagspan += '<span class="tag">' + tag + '</span> ';
293 297 }
294 298 }
295 299 if (cur[8].length) {
296 300 for (var b in cur[8]) {
297 301 var bookmark = cur[8][b];
298 302 tagspan += '<span class="tag">' + bookmark + '</span> ';
299 303 }
300 304 }
301 305 tagspan += '</span>';
302 306 }
303 307
304 308 item = item.replace(/_TAGS/, tagspan);
305 309 return [bg, item];
306 310
307 311 }
308 312
309 313 graph.render(data);
310 314
311 315 // stop hiding script -->
312 316 </script>
313 317
314 318 <div class="navigate">
315 319 <a href="/graph/-1?revcount=30">less</a>
316 320 <a href="/graph/-1?revcount=120">more</a>
317 321 | rev -1: <a href="/graph/000000000000">(0)</a> <a href="/graph/tip">tip</a>
318 322 </div>
319 323
320 324 </div>
321 325 </div>
322 326
327 <script type="text/javascript">process_dates()</script>
323 328
324 329
325 330 </body>
326 331 </html>
327 332
328 333 $ ("$TESTDIR/get-with-headers.py" localhost:$HGPORT '/file')
329 334 200 Script output follows
330 335
331 336 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
332 337 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
333 338 <head>
334 339 <link rel="icon" href="/static/hgicon.png" type="image/png" />
335 340 <meta name="robots" content="index, nofollow" />
336 341 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
342 <script type="text/javascript" src="/static/mercurial.js"></script>
337 343
338 344 <title>test: 000000000000 /</title>
339 345 </head>
340 346 <body>
341 347
342 348 <div class="container">
343 349 <div class="menu">
344 350 <div class="logo">
345 351 <a href="http://mercurial.selenic.com/">
346 352 <img src="/static/hglogo.png" alt="mercurial" /></a>
347 353 </div>
348 354 <ul>
349 355 <li><a href="/shortlog/000000000000">log</a></li>
350 356 <li><a href="/graph/000000000000">graph</a></li>
351 357 <li><a href="/tags">tags</a></li>
352 358 <li><a href="/bookmarks">bookmarks</a></li>
353 359 <li><a href="/branches">branches</a></li>
354 360 </ul>
355 361 <ul>
356 362 <li><a href="/rev/000000000000">changeset</a></li>
357 363 <li class="active">browse</li>
358 364 </ul>
359 365 <ul>
360 366
361 367 </ul>
362 368 <ul>
363 369 <li><a href="/help">help</a></li>
364 370 </ul>
365 371 </div>
366 372
367 373 <div class="main">
368 374 <h2><a href="/">test</a></h2>
369 375 <h3>directory / @ -1:000000000000 <span class="tag">tip</span> </h3>
370 376
371 377 <form class="search" action="/log">
372 378
373 379 <p><input name="rev" id="search1" type="text" size="30" /></p>
374 380 <div id="hint">find changesets by author, revision,
375 381 files, or words in the commit message</div>
376 382 </form>
377 383
378 384 <table class="bigtable">
379 385 <tr>
380 386 <th class="name">name</th>
381 387 <th class="size">size</th>
382 388 <th class="permissions">permissions</th>
383 389 </tr>
384 390 <tr class="fileline parity0">
385 391 <td class="name"><a href="/file/000000000000/">[up]</a></td>
386 392 <td class="size"></td>
387 393 <td class="permissions">drwxr-xr-x</td>
388 394 </tr>
389 395
390 396
391 397 </table>
392 398 </div>
393 399 </div>
400 <script type="text/javascript">process_dates()</script>
394 401
395 402
396 403 </body>
397 404 </html>
398 405
@@ -1,744 +1,756 b''
1 1
2 2 $ hg init test
3 3 $ cd test
4 4 $ echo b > b
5 5 $ hg ci -Am "b"
6 6 adding b
7 7 $ echo a > a
8 8 $ hg ci -Am "first a"
9 9 adding a
10 10 $ hg rm a
11 11 $ hg ci -m "del a"
12 12 $ echo b > a
13 13 $ hg ci -Am "second a"
14 14 adding a
15 15 $ hg rm a
16 16 $ hg ci -m "del2 a"
17 17 $ hg mv b c
18 18 $ hg ci -m "mv b"
19 19 $ echo c >> c
20 20 $ hg ci -m "change c"
21 21 $ hg log -p
22 22 changeset: 6:b7682196df1c
23 23 tag: tip
24 24 user: test
25 25 date: Thu Jan 01 00:00:00 1970 +0000
26 26 summary: change c
27 27
28 28 diff -r 1a6696706df2 -r b7682196df1c c
29 29 --- a/c Thu Jan 01 00:00:00 1970 +0000
30 30 +++ b/c Thu Jan 01 00:00:00 1970 +0000
31 31 @@ -1,1 +1,2 @@
32 32 b
33 33 +c
34 34
35 35 changeset: 5:1a6696706df2
36 36 user: test
37 37 date: Thu Jan 01 00:00:00 1970 +0000
38 38 summary: mv b
39 39
40 40 diff -r 52e848cdcd88 -r 1a6696706df2 b
41 41 --- a/b Thu Jan 01 00:00:00 1970 +0000
42 42 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
43 43 @@ -1,1 +0,0 @@
44 44 -b
45 45 diff -r 52e848cdcd88 -r 1a6696706df2 c
46 46 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
47 47 +++ b/c Thu Jan 01 00:00:00 1970 +0000
48 48 @@ -0,0 +1,1 @@
49 49 +b
50 50
51 51 changeset: 4:52e848cdcd88
52 52 user: test
53 53 date: Thu Jan 01 00:00:00 1970 +0000
54 54 summary: del2 a
55 55
56 56 diff -r 01de2d66a28d -r 52e848cdcd88 a
57 57 --- a/a Thu Jan 01 00:00:00 1970 +0000
58 58 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
59 59 @@ -1,1 +0,0 @@
60 60 -b
61 61
62 62 changeset: 3:01de2d66a28d
63 63 user: test
64 64 date: Thu Jan 01 00:00:00 1970 +0000
65 65 summary: second a
66 66
67 67 diff -r be3ebcc91739 -r 01de2d66a28d a
68 68 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
69 69 +++ b/a Thu Jan 01 00:00:00 1970 +0000
70 70 @@ -0,0 +1,1 @@
71 71 +b
72 72
73 73 changeset: 2:be3ebcc91739
74 74 user: test
75 75 date: Thu Jan 01 00:00:00 1970 +0000
76 76 summary: del a
77 77
78 78 diff -r 5ed941583260 -r be3ebcc91739 a
79 79 --- a/a Thu Jan 01 00:00:00 1970 +0000
80 80 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
81 81 @@ -1,1 +0,0 @@
82 82 -a
83 83
84 84 changeset: 1:5ed941583260
85 85 user: test
86 86 date: Thu Jan 01 00:00:00 1970 +0000
87 87 summary: first a
88 88
89 89 diff -r 6563da9dcf87 -r 5ed941583260 a
90 90 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
91 91 +++ b/a Thu Jan 01 00:00:00 1970 +0000
92 92 @@ -0,0 +1,1 @@
93 93 +a
94 94
95 95 changeset: 0:6563da9dcf87
96 96 user: test
97 97 date: Thu Jan 01 00:00:00 1970 +0000
98 98 summary: b
99 99
100 100 diff -r 000000000000 -r 6563da9dcf87 b
101 101 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
102 102 +++ b/b Thu Jan 01 00:00:00 1970 +0000
103 103 @@ -0,0 +1,1 @@
104 104 +b
105 105
106 106 $ hg serve -n test -p $HGPORT -d --pid-file=hg.pid -E errors.log
107 107 $ cat hg.pid >> $DAEMON_PIDS
108 108
109 109 tip - two revisions
110 110
111 111 $ ("$TESTDIR/get-with-headers.py" localhost:$HGPORT '/log/tip/a')
112 112 200 Script output follows
113 113
114 114 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
115 115 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
116 116 <head>
117 117 <link rel="icon" href="/static/hgicon.png" type="image/png" />
118 118 <meta name="robots" content="index, nofollow" />
119 119 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
120 <script type="text/javascript" src="/static/mercurial.js"></script>
120 121
121 122 <title>test: a history</title>
122 123 <link rel="alternate" type="application/atom+xml"
123 124 href="/atom-log/tip/a" title="Atom feed for test:a" />
124 125 <link rel="alternate" type="application/rss+xml"
125 126 href="/rss-log/tip/a" title="RSS feed for test:a" />
126 127 </head>
127 128 <body>
128 129
129 130 <div class="container">
130 131 <div class="menu">
131 132 <div class="logo">
132 133 <a href="http://mercurial.selenic.com/">
133 134 <img src="/static/hglogo.png" alt="mercurial" /></a>
134 135 </div>
135 136 <ul>
136 137 <li><a href="/shortlog/01de2d66a28d">log</a></li>
137 138 <li><a href="/graph/01de2d66a28d">graph</a></li>
138 139 <li><a href="/tags">tags</a></li>
139 140 <li><a href="/bookmarks">bookmarks</a></li>
140 141 <li><a href="/branches">branches</a></li>
141 142 </ul>
142 143 <ul>
143 144 <li><a href="/rev/01de2d66a28d">changeset</a></li>
144 145 <li><a href="/file/01de2d66a28d">browse</a></li>
145 146 </ul>
146 147 <ul>
147 148 <li><a href="/file/01de2d66a28d/a">file</a></li>
148 149 <li><a href="/diff/01de2d66a28d/a">diff</a></li>
149 150 <li><a href="/annotate/01de2d66a28d/a">annotate</a></li>
150 151 <li class="active">file log</li>
151 152 <li><a href="/raw-file/01de2d66a28d/a">raw</a></li>
152 153 </ul>
153 154 <ul>
154 155 <li><a href="/help">help</a></li>
155 156 </ul>
156 157 </div>
157 158
158 159 <div class="main">
159 160 <h2><a href="/">test</a></h2>
160 161 <h3>log a</h3>
161 162
162 163 <form class="search" action="/log">
163 164
164 165 <p><input name="rev" id="search1" type="text" size="30" /></p>
165 166 <div id="hint">find changesets by author, revision,
166 167 files, or words in the commit message</div>
167 168 </form>
168 169
169 170 <div class="navigate">
170 171 <a href="/log/01de2d66a28d/a?revcount=30">less</a>
171 172 <a href="/log/01de2d66a28d/a?revcount=120">more</a>
172 173 | <a href="/log/5ed941583260/a">(0)</a> <a href="/log/tip/a">tip</a> </div>
173 174
174 175 <table class="bigtable">
175 176 <tr>
176 177 <th class="age">age</th>
177 178 <th class="author">author</th>
178 179 <th class="description">description</th>
179 180 </tr>
180 181 <tr class="parity0">
181 <td class="age">1970-01-01</td>
182 <td class="age">Thu Jan 01 00:00:00 1970 +0000</td>
182 183 <td class="author">test</td>
183 184 <td class="description"><a href="/rev/01de2d66a28d">second a</a></td>
184 185 </tr>
185 186 <tr class="parity1">
186 <td class="age">1970-01-01</td>
187 <td class="age">Thu Jan 01 00:00:00 1970 +0000</td>
187 188 <td class="author">test</td>
188 189 <td class="description"><a href="/rev/5ed941583260">first a</a></td>
189 190 </tr>
190 191
191 192 </table>
192 193
193 194 <div class="navigate">
194 195 <a href="/log/01de2d66a28d/a?revcount=30">less</a>
195 196 <a href="/log/01de2d66a28d/a?revcount=120">more</a>
196 197 | <a href="/log/5ed941583260/a">(0)</a> <a href="/log/tip/a">tip</a>
197 198 </div>
198 199
199 200 </div>
200 201 </div>
201 202
203 <script type="text/javascript">process_dates()</script>
202 204
203 205
204 206 </body>
205 207 </html>
206 208
207 209
208 210 second version - two revisions
209 211
210 212 $ ("$TESTDIR/get-with-headers.py" localhost:$HGPORT '/log/3/a')
211 213 200 Script output follows
212 214
213 215 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
214 216 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
215 217 <head>
216 218 <link rel="icon" href="/static/hgicon.png" type="image/png" />
217 219 <meta name="robots" content="index, nofollow" />
218 220 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
221 <script type="text/javascript" src="/static/mercurial.js"></script>
219 222
220 223 <title>test: a history</title>
221 224 <link rel="alternate" type="application/atom+xml"
222 225 href="/atom-log/tip/a" title="Atom feed for test:a" />
223 226 <link rel="alternate" type="application/rss+xml"
224 227 href="/rss-log/tip/a" title="RSS feed for test:a" />
225 228 </head>
226 229 <body>
227 230
228 231 <div class="container">
229 232 <div class="menu">
230 233 <div class="logo">
231 234 <a href="http://mercurial.selenic.com/">
232 235 <img src="/static/hglogo.png" alt="mercurial" /></a>
233 236 </div>
234 237 <ul>
235 238 <li><a href="/shortlog/01de2d66a28d">log</a></li>
236 239 <li><a href="/graph/01de2d66a28d">graph</a></li>
237 240 <li><a href="/tags">tags</a></li>
238 241 <li><a href="/bookmarks">bookmarks</a></li>
239 242 <li><a href="/branches">branches</a></li>
240 243 </ul>
241 244 <ul>
242 245 <li><a href="/rev/01de2d66a28d">changeset</a></li>
243 246 <li><a href="/file/01de2d66a28d">browse</a></li>
244 247 </ul>
245 248 <ul>
246 249 <li><a href="/file/01de2d66a28d/a">file</a></li>
247 250 <li><a href="/diff/01de2d66a28d/a">diff</a></li>
248 251 <li><a href="/annotate/01de2d66a28d/a">annotate</a></li>
249 252 <li class="active">file log</li>
250 253 <li><a href="/raw-file/01de2d66a28d/a">raw</a></li>
251 254 </ul>
252 255 <ul>
253 256 <li><a href="/help">help</a></li>
254 257 </ul>
255 258 </div>
256 259
257 260 <div class="main">
258 261 <h2><a href="/">test</a></h2>
259 262 <h3>log a</h3>
260 263
261 264 <form class="search" action="/log">
262 265
263 266 <p><input name="rev" id="search1" type="text" size="30" /></p>
264 267 <div id="hint">find changesets by author, revision,
265 268 files, or words in the commit message</div>
266 269 </form>
267 270
268 271 <div class="navigate">
269 272 <a href="/log/01de2d66a28d/a?revcount=30">less</a>
270 273 <a href="/log/01de2d66a28d/a?revcount=120">more</a>
271 274 | <a href="/log/5ed941583260/a">(0)</a> <a href="/log/tip/a">tip</a> </div>
272 275
273 276 <table class="bigtable">
274 277 <tr>
275 278 <th class="age">age</th>
276 279 <th class="author">author</th>
277 280 <th class="description">description</th>
278 281 </tr>
279 282 <tr class="parity0">
280 <td class="age">1970-01-01</td>
283 <td class="age">Thu Jan 01 00:00:00 1970 +0000</td>
281 284 <td class="author">test</td>
282 285 <td class="description"><a href="/rev/01de2d66a28d">second a</a></td>
283 286 </tr>
284 287 <tr class="parity1">
285 <td class="age">1970-01-01</td>
288 <td class="age">Thu Jan 01 00:00:00 1970 +0000</td>
286 289 <td class="author">test</td>
287 290 <td class="description"><a href="/rev/5ed941583260">first a</a></td>
288 291 </tr>
289 292
290 293 </table>
291 294
292 295 <div class="navigate">
293 296 <a href="/log/01de2d66a28d/a?revcount=30">less</a>
294 297 <a href="/log/01de2d66a28d/a?revcount=120">more</a>
295 298 | <a href="/log/5ed941583260/a">(0)</a> <a href="/log/tip/a">tip</a>
296 299 </div>
297 300
298 301 </div>
299 302 </div>
300 303
304 <script type="text/javascript">process_dates()</script>
301 305
302 306
303 307 </body>
304 308 </html>
305 309
306 310
307 311 first deleted - one revision
308 312
309 313 $ ("$TESTDIR/get-with-headers.py" localhost:$HGPORT '/log/2/a')
310 314 200 Script output follows
311 315
312 316 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
313 317 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
314 318 <head>
315 319 <link rel="icon" href="/static/hgicon.png" type="image/png" />
316 320 <meta name="robots" content="index, nofollow" />
317 321 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
322 <script type="text/javascript" src="/static/mercurial.js"></script>
318 323
319 324 <title>test: a history</title>
320 325 <link rel="alternate" type="application/atom+xml"
321 326 href="/atom-log/tip/a" title="Atom feed for test:a" />
322 327 <link rel="alternate" type="application/rss+xml"
323 328 href="/rss-log/tip/a" title="RSS feed for test:a" />
324 329 </head>
325 330 <body>
326 331
327 332 <div class="container">
328 333 <div class="menu">
329 334 <div class="logo">
330 335 <a href="http://mercurial.selenic.com/">
331 336 <img src="/static/hglogo.png" alt="mercurial" /></a>
332 337 </div>
333 338 <ul>
334 339 <li><a href="/shortlog/5ed941583260">log</a></li>
335 340 <li><a href="/graph/5ed941583260">graph</a></li>
336 341 <li><a href="/tags">tags</a></li>
337 342 <li><a href="/bookmarks">bookmarks</a></li>
338 343 <li><a href="/branches">branches</a></li>
339 344 </ul>
340 345 <ul>
341 346 <li><a href="/rev/5ed941583260">changeset</a></li>
342 347 <li><a href="/file/5ed941583260">browse</a></li>
343 348 </ul>
344 349 <ul>
345 350 <li><a href="/file/5ed941583260/a">file</a></li>
346 351 <li><a href="/diff/5ed941583260/a">diff</a></li>
347 352 <li><a href="/annotate/5ed941583260/a">annotate</a></li>
348 353 <li class="active">file log</li>
349 354 <li><a href="/raw-file/5ed941583260/a">raw</a></li>
350 355 </ul>
351 356 <ul>
352 357 <li><a href="/help">help</a></li>
353 358 </ul>
354 359 </div>
355 360
356 361 <div class="main">
357 362 <h2><a href="/">test</a></h2>
358 363 <h3>log a</h3>
359 364
360 365 <form class="search" action="/log">
361 366
362 367 <p><input name="rev" id="search1" type="text" size="30" /></p>
363 368 <div id="hint">find changesets by author, revision,
364 369 files, or words in the commit message</div>
365 370 </form>
366 371
367 372 <div class="navigate">
368 373 <a href="/log/5ed941583260/a?revcount=30">less</a>
369 374 <a href="/log/5ed941583260/a?revcount=120">more</a>
370 375 | <a href="/log/5ed941583260/a">(0)</a> <a href="/log/tip/a">tip</a> </div>
371 376
372 377 <table class="bigtable">
373 378 <tr>
374 379 <th class="age">age</th>
375 380 <th class="author">author</th>
376 381 <th class="description">description</th>
377 382 </tr>
378 383 <tr class="parity0">
379 <td class="age">1970-01-01</td>
384 <td class="age">Thu Jan 01 00:00:00 1970 +0000</td>
380 385 <td class="author">test</td>
381 386 <td class="description"><a href="/rev/5ed941583260">first a</a></td>
382 387 </tr>
383 388
384 389 </table>
385 390
386 391 <div class="navigate">
387 392 <a href="/log/5ed941583260/a?revcount=30">less</a>
388 393 <a href="/log/5ed941583260/a?revcount=120">more</a>
389 394 | <a href="/log/5ed941583260/a">(0)</a> <a href="/log/tip/a">tip</a>
390 395 </div>
391 396
392 397 </div>
393 398 </div>
394 399
400 <script type="text/javascript">process_dates()</script>
395 401
396 402
397 403 </body>
398 404 </html>
399 405
400 406
401 407 first version - one revision
402 408
403 409 $ ("$TESTDIR/get-with-headers.py" localhost:$HGPORT '/log/1/a')
404 410 200 Script output follows
405 411
406 412 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
407 413 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
408 414 <head>
409 415 <link rel="icon" href="/static/hgicon.png" type="image/png" />
410 416 <meta name="robots" content="index, nofollow" />
411 417 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
418 <script type="text/javascript" src="/static/mercurial.js"></script>
412 419
413 420 <title>test: a history</title>
414 421 <link rel="alternate" type="application/atom+xml"
415 422 href="/atom-log/tip/a" title="Atom feed for test:a" />
416 423 <link rel="alternate" type="application/rss+xml"
417 424 href="/rss-log/tip/a" title="RSS feed for test:a" />
418 425 </head>
419 426 <body>
420 427
421 428 <div class="container">
422 429 <div class="menu">
423 430 <div class="logo">
424 431 <a href="http://mercurial.selenic.com/">
425 432 <img src="/static/hglogo.png" alt="mercurial" /></a>
426 433 </div>
427 434 <ul>
428 435 <li><a href="/shortlog/5ed941583260">log</a></li>
429 436 <li><a href="/graph/5ed941583260">graph</a></li>
430 437 <li><a href="/tags">tags</a></li>
431 438 <li><a href="/bookmarks">bookmarks</a></li>
432 439 <li><a href="/branches">branches</a></li>
433 440 </ul>
434 441 <ul>
435 442 <li><a href="/rev/5ed941583260">changeset</a></li>
436 443 <li><a href="/file/5ed941583260">browse</a></li>
437 444 </ul>
438 445 <ul>
439 446 <li><a href="/file/5ed941583260/a">file</a></li>
440 447 <li><a href="/diff/5ed941583260/a">diff</a></li>
441 448 <li><a href="/annotate/5ed941583260/a">annotate</a></li>
442 449 <li class="active">file log</li>
443 450 <li><a href="/raw-file/5ed941583260/a">raw</a></li>
444 451 </ul>
445 452 <ul>
446 453 <li><a href="/help">help</a></li>
447 454 </ul>
448 455 </div>
449 456
450 457 <div class="main">
451 458 <h2><a href="/">test</a></h2>
452 459 <h3>log a</h3>
453 460
454 461 <form class="search" action="/log">
455 462
456 463 <p><input name="rev" id="search1" type="text" size="30" /></p>
457 464 <div id="hint">find changesets by author, revision,
458 465 files, or words in the commit message</div>
459 466 </form>
460 467
461 468 <div class="navigate">
462 469 <a href="/log/5ed941583260/a?revcount=30">less</a>
463 470 <a href="/log/5ed941583260/a?revcount=120">more</a>
464 471 | <a href="/log/5ed941583260/a">(0)</a> <a href="/log/tip/a">tip</a> </div>
465 472
466 473 <table class="bigtable">
467 474 <tr>
468 475 <th class="age">age</th>
469 476 <th class="author">author</th>
470 477 <th class="description">description</th>
471 478 </tr>
472 479 <tr class="parity0">
473 <td class="age">1970-01-01</td>
480 <td class="age">Thu Jan 01 00:00:00 1970 +0000</td>
474 481 <td class="author">test</td>
475 482 <td class="description"><a href="/rev/5ed941583260">first a</a></td>
476 483 </tr>
477 484
478 485 </table>
479 486
480 487 <div class="navigate">
481 488 <a href="/log/5ed941583260/a?revcount=30">less</a>
482 489 <a href="/log/5ed941583260/a?revcount=120">more</a>
483 490 | <a href="/log/5ed941583260/a">(0)</a> <a href="/log/tip/a">tip</a>
484 491 </div>
485 492
486 493 </div>
487 494 </div>
488 495
496 <script type="text/javascript">process_dates()</script>
489 497
490 498
491 499 </body>
492 500 </html>
493 501
494 502
495 503 before addition - error
496 504
497 505 $ ("$TESTDIR/get-with-headers.py" localhost:$HGPORT '/log/0/a')
498 506 404 Not Found
499 507
500 508 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
501 509 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
502 510 <head>
503 511 <link rel="icon" href="/static/hgicon.png" type="image/png" />
504 512 <meta name="robots" content="index, nofollow" />
505 513 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
514 <script type="text/javascript" src="/static/mercurial.js"></script>
506 515
507 516 <title>test: error</title>
508 517 </head>
509 518 <body>
510 519
511 520 <div class="container">
512 521 <div class="menu">
513 522 <div class="logo">
514 523 <a href="http://mercurial.selenic.com/">
515 524 <img src="/static/hglogo.png" width=75 height=90 border=0 alt="mercurial" /></a>
516 525 </div>
517 526 <ul>
518 527 <li><a href="/shortlog">log</a></li>
519 528 <li><a href="/graph">graph</a></li>
520 529 <li><a href="/tags">tags</a></li>
521 530 <li><a href="/bookmarks">bookmarks</a></li>
522 531 <li><a href="/branches">branches</a></li>
523 532 <li><a href="/help">help</a></li>
524 533 </ul>
525 534 </div>
526 535
527 536 <div class="main">
528 537
529 538 <h2><a href="/">test</a></h2>
530 539 <h3>error</h3>
531 540
532 541 <form class="search" action="/log">
533 542
534 543 <p><input name="rev" id="search1" type="text" size="30"></p>
535 544 <div id="hint">find changesets by author, revision,
536 545 files, or words in the commit message</div>
537 546 </form>
538 547
539 548 <div class="description">
540 549 <p>
541 550 An error occurred while processing your request:
542 551 </p>
543 552 <p>
544 553 a@6563da9dcf87: not found in manifest
545 554 </p>
546 555 </div>
547 556 </div>
548 557 </div>
549 558
559 <script type="text/javascript">process_dates()</script>
550 560
551 561
552 562 </body>
553 563 </html>
554 564
555 565 [1]
556 566
557 567 should show base link, use spartan because it shows it
558 568
559 569 $ ("$TESTDIR/get-with-headers.py" localhost:$HGPORT '/log/tip/c?style=spartan')
560 570 200 Script output follows
561 571
562 572 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
563 573 <html>
564 574 <head>
565 575 <link rel="icon" href="/static/hgicon.png" type="image/png">
566 576 <meta name="robots" content="index, nofollow" />
567 577 <link rel="stylesheet" href="/static/style.css" type="text/css" />
578 <script type="text/javascript" src="/static/mercurial.js"></script>
568 579
569 580 <title>test: c history</title>
570 581 <link rel="alternate" type="application/atom+xml"
571 582 href="/atom-log/tip/c" title="Atom feed for test:c">
572 583 <link rel="alternate" type="application/rss+xml"
573 584 href="/rss-log/tip/c" title="RSS feed for test:c">
574 585 </head>
575 586 <body>
576 587
577 588 <div class="buttons">
578 589 <a href="/log?style=spartan">changelog</a>
579 590 <a href="/shortlog?style=spartan">shortlog</a>
580 591 <a href="/graph?style=spartan">graph</a>
581 592 <a href="/tags?style=spartan">tags</a>
582 593 <a href="/branches?style=spartan">branches</a>
583 594 <a href="/file/b7682196df1c/c?style=spartan">file</a>
584 595 <a href="/annotate/b7682196df1c/c?style=spartan">annotate</a>
585 596 <a href="/help?style=spartan">help</a>
586 597 <a type="application/rss+xml" href="/rss-log/tip/c">rss</a>
587 598 <a type="application/atom+xml" href="/atom-log/tip/c" title="Atom feed for test:c">atom</a>
588 599 </div>
589 600
590 601 <h2>c revision history</h2>
591 602
592 603 <p>navigate: <small class="navigate"><a href="/log/1a6696706df2/c?style=spartan">(0)</a> <a href="/log/tip/c?style=spartan">tip</a> </small></p>
593 604
594 605 <table class="logEntry parity0">
595 606 <tr>
596 <th class="age">1970-01-01:</th>
607 <th><span class="age">Thu Jan 01 00:00:00 1970 +0000</span>:</th>
597 608 <th class="firstline"><a href="/rev/b7682196df1c?style=spartan">change c</a></th>
598 609 </tr>
599 610 <tr>
600 611 <th class="revision">revision 1:</td>
601 612 <td class="node">
602 613 <a href="/file/b7682196df1c/c?style=spartan">b7682196df1c</a>
603 614 <a href="/diff/b7682196df1c/c?style=spartan">(diff)</a>
604 615 <a href="/annotate/b7682196df1c/c?style=spartan">(annotate)</a>
605 616 </td>
606 617 </tr>
607 618
608 619 <tr>
609 620 <th class="author">author:</th>
610 621 <td class="author">&#116;&#101;&#115;&#116;</td>
611 622 </tr>
612 623 <tr>
613 624 <th class="date">date:</th>
614 625 <td class="date">Thu Jan 01 00:00:00 1970 +0000</td>
615 626 </tr>
616 627 </table>
617 628
618 629
619 630 <table class="logEntry parity1">
620 631 <tr>
621 <th class="age">1970-01-01:</th>
632 <th><span class="age">Thu Jan 01 00:00:00 1970 +0000</span>:</th>
622 633 <th class="firstline"><a href="/rev/1a6696706df2?style=spartan">mv b</a></th>
623 634 </tr>
624 635 <tr>
625 636 <th class="revision">revision 0:</td>
626 637 <td class="node">
627 638 <a href="/file/1a6696706df2/c?style=spartan">1a6696706df2</a>
628 639 <a href="/diff/1a6696706df2/c?style=spartan">(diff)</a>
629 640 <a href="/annotate/1a6696706df2/c?style=spartan">(annotate)</a>
630 641 </td>
631 642 </tr>
632 643
633 644 <tr>
634 645 <th>base:</th>
635 646 <td>
636 647 <a href="/file/1e88685f5dde/b?style=spartan">
637 648 b@1e88685f5dde
638 649 </a>
639 650 </td>
640 651 </tr>
641 652 <tr>
642 653 <th class="author">author:</th>
643 654 <td class="author">&#116;&#101;&#115;&#116;</td>
644 655 </tr>
645 656 <tr>
646 657 <th class="date">date:</th>
647 658 <td class="date">Thu Jan 01 00:00:00 1970 +0000</td>
648 659 </tr>
649 660 </table>
650 661
651 662
652 663
653 664
665 <script type="text/javascript">process_dates()</script>
654 666
655 667 <div class="logo">
656 668 <a href="http://mercurial.selenic.com/">
657 669 <img src="/static/hglogo.png" width=75 height=90 border=0 alt="mercurial"></a>
658 670 </div>
659 671
660 672 </body>
661 673 </html>
662 674
663 675
664 676 rss log
665 677
666 678 $ ("$TESTDIR/get-with-headers.py" localhost:$HGPORT '/rss-log/tip/a')
667 679 200 Script output follows
668 680
669 681 <?xml version="1.0" encoding="ascii"?>
670 682 <rss version="2.0">
671 683 <channel>
672 684 <link>http://*:$HGPORT/</link> (glob)
673 685 <language>en-us</language>
674 686
675 687 <title>test: a history</title>
676 688 <description>a revision history</description>
677 689 <item>
678 690 <title>second a</title>
679 691 <link>http://*:$HGPORT/log01de2d66a28d/a</link> (glob)
680 692 <description><![CDATA[second a]]></description>
681 693 <author>&#116;&#101;&#115;&#116;</author>
682 694 <pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate>
683 695 </item>
684 696 <item>
685 697 <title>first a</title>
686 698 <link>http://*:$HGPORT/log5ed941583260/a</link> (glob)
687 699 <description><![CDATA[first a]]></description>
688 700 <author>&#116;&#101;&#115;&#116;</author>
689 701 <pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate>
690 702 </item>
691 703
692 704 </channel>
693 705 </rss>
694 706
695 707 atom log
696 708
697 709 $ ("$TESTDIR/get-with-headers.py" localhost:$HGPORT '/atom-log/tip/a')
698 710 200 Script output follows
699 711
700 712 <?xml version="1.0" encoding="ascii"?>
701 713 <feed xmlns="http://www.w3.org/2005/Atom">
702 714 <id>http://*:$HGPORT/atom-log/tip/a</id> (glob)
703 715 <link rel="self" href="http://*:$HGPORT/atom-log/tip/a"/> (glob)
704 716 <title>test: a history</title>
705 717 <updated>1970-01-01T00:00:00+00:00</updated>
706 718
707 719 <entry>
708 720 <title>second a</title>
709 721 <id>http://*:$HGPORT/#changeset-01de2d66a28df5549090991dccda788726948517</id> (glob)
710 722 <link href="http://*:$HGPORT/rev/01de2d66a28d"/> (glob)
711 723 <author>
712 724 <name>test</name>
713 725 <email>&#116;&#101;&#115;&#116;</email>
714 726 </author>
715 727 <updated>1970-01-01T00:00:00+00:00</updated>
716 728 <published>1970-01-01T00:00:00+00:00</published>
717 729 <content type="xhtml">
718 730 <div xmlns="http://www.w3.org/1999/xhtml">
719 731 <pre xml:space="preserve">second a</pre>
720 732 </div>
721 733 </content>
722 734 </entry>
723 735 <entry>
724 736 <title>first a</title>
725 737 <id>http://*:$HGPORT/#changeset-5ed941583260248620985524192fdc382ef57c36</id> (glob)
726 738 <link href="http://*:$HGPORT/rev/5ed941583260"/> (glob)
727 739 <author>
728 740 <name>test</name>
729 741 <email>&#116;&#101;&#115;&#116;</email>
730 742 </author>
731 743 <updated>1970-01-01T00:00:00+00:00</updated>
732 744 <published>1970-01-01T00:00:00+00:00</published>
733 745 <content type="xhtml">
734 746 <div xmlns="http://www.w3.org/1999/xhtml">
735 747 <pre xml:space="preserve">first a</pre>
736 748 </div>
737 749 </content>
738 750 </entry>
739 751
740 752 </feed>
741 753
742 754 errors
743 755
744 756 $ cat errors.log
@@ -1,206 +1,210 b''
1 1 setting up repo
2 2
3 3 $ hg init test
4 4 $ cd test
5 5 $ echo a > a
6 6 $ hg ci -Ama
7 7 adding a
8 8 $ hg rm a
9 9 $ hg ci -mdel
10 10
11 11 set up hgweb
12 12
13 13 $ hg serve -n test -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
14 14 $ cat hg.pid >> $DAEMON_PIDS
15 15
16 16 revision
17 17
18 18 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT '/rev/tip'
19 19 200 Script output follows
20 20
21 21 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
22 22 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
23 23 <head>
24 24 <link rel="icon" href="/static/hgicon.png" type="image/png" />
25 25 <meta name="robots" content="index, nofollow" />
26 26 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
27 <script type="text/javascript" src="/static/mercurial.js"></script>
27 28
28 29 <title>test: c78f6c5cbea9</title>
29 30 </head>
30 31 <body>
31 32 <div class="container">
32 33 <div class="menu">
33 34 <div class="logo">
34 35 <a href="http://mercurial.selenic.com/">
35 36 <img src="/static/hglogo.png" alt="mercurial" /></a>
36 37 </div>
37 38 <ul>
38 39 <li><a href="/shortlog/c78f6c5cbea9">log</a></li>
39 40 <li><a href="/graph/c78f6c5cbea9">graph</a></li>
40 41 <li><a href="/tags">tags</a></li>
41 42 <li><a href="/bookmarks">bookmarks</a></li>
42 43 <li><a href="/branches">branches</a></li>
43 44 </ul>
44 45 <ul>
45 46 <li class="active">changeset</li>
46 47 <li><a href="/raw-rev/c78f6c5cbea9">raw</a></li>
47 48 <li><a href="/file/c78f6c5cbea9">browse</a></li>
48 49 </ul>
49 50 <ul>
50 51
51 52 </ul>
52 53 <ul>
53 54 <li><a href="/help">help</a></li>
54 55 </ul>
55 56 </div>
56 57
57 58 <div class="main">
58 59
59 60 <h2><a href="/">test</a></h2>
60 61 <h3>changeset 1:c78f6c5cbea9 <span class="tag">tip</span> </h3>
61 62
62 63 <form class="search" action="/log">
63 64
64 65 <p><input name="rev" id="search1" type="text" size="30" /></p>
65 66 <div id="hint">find changesets by author, revision,
66 67 files, or words in the commit message</div>
67 68 </form>
68 69
69 70 <div class="description">del</div>
70 71
71 72 <table id="changesetEntry">
72 73 <tr>
73 74 <th class="author">author</th>
74 75 <td class="author">&#116;&#101;&#115;&#116;</td>
75 76 </tr>
76 77 <tr>
77 78 <th class="date">date</th>
78 <td class="date">Thu Jan 01 00:00:00 1970 +0000 (1970-01-01)</td></tr>
79 <td class="date age">Thu Jan 01 00:00:00 1970 +0000</td></tr>
79 80 <tr>
80 81 <th class="author">parents</th>
81 82 <td class="author"><a href="/rev/cb9a9f314b8b">cb9a9f314b8b</a> </td>
82 83 </tr>
83 84 <tr>
84 85 <th class="author">children</th>
85 86 <td class="author"></td>
86 87 </tr>
87 88 <tr>
88 89 <th class="files">files</th>
89 90 <td class="files">a </td>
90 91 </tr>
91 92 </table>
92 93
93 94 <div class="overflow">
94 95 <div class="sourcefirst"> line diff</div>
95 96
96 97 <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
97 98 </span><a href="#l1.2" id="l1.2"> 1.2</a> <span class="plusline">+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
98 99 </span><a href="#l1.3" id="l1.3"> 1.3</a> <span class="atline">@@ -1,1 +0,0 @@
99 100 </span><a href="#l1.4" id="l1.4"> 1.4</a> <span class="minusline">-a
100 101 </span></pre></div>
101 102 </div>
102 103
103 104 </div>
104 105 </div>
106 <script type="text/javascript">process_dates()</script>
105 107
106 108
107 109 </body>
108 110 </html>
109 111
110 112
111 113 diff removed file
112 114
113 115 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT '/diff/tip/a'
114 116 200 Script output follows
115 117
116 118 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
117 119 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
118 120 <head>
119 121 <link rel="icon" href="/static/hgicon.png" type="image/png" />
120 122 <meta name="robots" content="index, nofollow" />
121 123 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
124 <script type="text/javascript" src="/static/mercurial.js"></script>
122 125
123 126 <title>test: a diff</title>
124 127 </head>
125 128 <body>
126 129
127 130 <div class="container">
128 131 <div class="menu">
129 132 <div class="logo">
130 133 <a href="http://mercurial.selenic.com/">
131 134 <img src="/static/hglogo.png" alt="mercurial" /></a>
132 135 </div>
133 136 <ul>
134 137 <li><a href="/shortlog/c78f6c5cbea9">log</a></li>
135 138 <li><a href="/graph/c78f6c5cbea9">graph</a></li>
136 139 <li><a href="/tags">tags</a></li>
137 140 <li><a href="/bookmarks">bookmarks</a></li>
138 141 <li><a href="/branches">branches</a></li>
139 142 </ul>
140 143 <ul>
141 144 <li><a href="/rev/c78f6c5cbea9">changeset</a></li>
142 145 <li><a href="/file/c78f6c5cbea9">browse</a></li>
143 146 </ul>
144 147 <ul>
145 148 <li><a href="/file/c78f6c5cbea9/a">file</a></li>
146 149 <li><a href="/file/tip/a">latest</a></li>
147 150 <li class="active">diff</li>
148 151 <li><a href="/annotate/c78f6c5cbea9/a">annotate</a></li>
149 152 <li><a href="/log/c78f6c5cbea9/a">file log</a></li>
150 153 <li><a href="/raw-file/c78f6c5cbea9/a">raw</a></li>
151 154 </ul>
152 155 <ul>
153 156 <li><a href="/help">help</a></li>
154 157 </ul>
155 158 </div>
156 159
157 160 <div class="main">
158 161 <h2><a href="/">test</a></h2>
159 162 <h3>diff a @ 1:c78f6c5cbea9</h3>
160 163
161 164 <form class="search" action="/log">
162 165 <p></p>
163 166 <p><input name="rev" id="search1" type="text" size="30" /></p>
164 167 <div id="hint">find changesets by author, revision,
165 168 files, or words in the commit message</div>
166 169 </form>
167 170
168 171 <div class="description">del</div>
169 172
170 173 <table id="changesetEntry">
171 174 <tr>
172 175 <th>author</th>
173 176 <td>&#116;&#101;&#115;&#116;</td>
174 177 </tr>
175 178 <tr>
176 179 <th>date</th>
177 <td>Thu Jan 01 00:00:00 1970 +0000 (1970-01-01)</td>
180 <td class="date age">Thu Jan 01 00:00:00 1970 +0000</td>
178 181 </tr>
179 182 <tr>
180 183 <th>parents</th>
181 184 <td><a href="/file/cb9a9f314b8b/a">cb9a9f314b8b</a> </td>
182 185 </tr>
183 186 <tr>
184 187 <th>children</th>
185 188 <td></td>
186 189 </tr>
187 190
188 191 </table>
189 192
190 193 <div class="overflow">
191 194 <div class="sourcefirst"> line diff</div>
192 195
193 196 <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
194 197 </span><a href="#l1.2" id="l1.2"> 1.2</a> <span class="plusline">+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
195 198 </span><a href="#l1.3" id="l1.3"> 1.3</a> <span class="atline">@@ -1,1 +0,0 @@
196 199 </span><a href="#l1.4" id="l1.4"> 1.4</a> <span class="minusline">-a
197 200 </span></pre></div>
198 201 </div>
199 202 </div>
200 203 </div>
201 204
205 <script type="text/javascript">process_dates()</script>
202 206
203 207
204 208 </body>
205 209 </html>
206 210
@@ -1,437 +1,443 b''
1 1 Some tests for hgweb. Tests static files, plain files and different 404's.
2 2
3 3 $ hg init test
4 4 $ cd test
5 5 $ mkdir da
6 6 $ echo foo > da/foo
7 7 $ echo foo > foo
8 8 $ hg ci -Ambase
9 9 adding da/foo
10 10 adding foo
11 11 $ hg serve -n test -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
12 12 $ cat hg.pid >> $DAEMON_PIDS
13 13
14 14 manifest
15 15
16 16 $ ("$TESTDIR/get-with-headers.py" localhost:$HGPORT '/file/tip/?style=raw')
17 17 200 Script output follows
18 18
19 19
20 20 drwxr-xr-x da
21 21 -rw-r--r-- 4 foo
22 22
23 23
24 24 $ ("$TESTDIR/get-with-headers.py" localhost:$HGPORT '/file/tip/da?style=raw')
25 25 200 Script output follows
26 26
27 27
28 28 -rw-r--r-- 4 foo
29 29
30 30
31 31
32 32 plain file
33 33
34 34 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT '/file/tip/foo?style=raw'
35 35 200 Script output follows
36 36
37 37 foo
38 38
39 39 should give a 404 - static file that does not exist
40 40
41 41 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT '/static/bogus'
42 42 404 Not Found
43 43
44 44 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
45 45 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
46 46 <head>
47 47 <link rel="icon" href="/static/hgicon.png" type="image/png" />
48 48 <meta name="robots" content="index, nofollow" />
49 49 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
50 <script type="text/javascript" src="/static/mercurial.js"></script>
50 51
51 52 <title>test: error</title>
52 53 </head>
53 54 <body>
54 55
55 56 <div class="container">
56 57 <div class="menu">
57 58 <div class="logo">
58 59 <a href="http://mercurial.selenic.com/">
59 60 <img src="/static/hglogo.png" width=75 height=90 border=0 alt="mercurial" /></a>
60 61 </div>
61 62 <ul>
62 63 <li><a href="/shortlog">log</a></li>
63 64 <li><a href="/graph">graph</a></li>
64 65 <li><a href="/tags">tags</a></li>
65 66 <li><a href="/bookmarks">bookmarks</a></li>
66 67 <li><a href="/branches">branches</a></li>
67 68 <li><a href="/help">help</a></li>
68 69 </ul>
69 70 </div>
70 71
71 72 <div class="main">
72 73
73 74 <h2><a href="/">test</a></h2>
74 75 <h3>error</h3>
75 76
76 77 <form class="search" action="/log">
77 78
78 79 <p><input name="rev" id="search1" type="text" size="30"></p>
79 80 <div id="hint">find changesets by author, revision,
80 81 files, or words in the commit message</div>
81 82 </form>
82 83
83 84 <div class="description">
84 85 <p>
85 86 An error occurred while processing your request:
86 87 </p>
87 88 <p>
88 89 Not Found
89 90 </p>
90 91 </div>
91 92 </div>
92 93 </div>
93 94
95 <script type="text/javascript">process_dates()</script>
94 96
95 97
96 98 </body>
97 99 </html>
98 100
99 101 [1]
100 102
101 103 should give a 404 - bad revision
102 104
103 105 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT '/file/spam/foo?style=raw'
104 106 404 Not Found
105 107
106 108
107 109 error: revision not found: spam
108 110 [1]
109 111
110 112 should give a 400 - bad command
111 113
112 114 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT '/file/tip/foo?cmd=spam&style=raw'
113 115 400* (glob)
114 116
115 117
116 118 error: no such method: spam
117 119 [1]
118 120
119 121 should give a 404 - file does not exist
120 122
121 123 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT '/file/tip/bork?style=raw'
122 124 404 Not Found
123 125
124 126
125 127 error: bork@2ef0ac749a14: not found in manifest
126 128 [1]
127 129 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT '/file/tip/bork'
128 130 404 Not Found
129 131
130 132 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
131 133 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
132 134 <head>
133 135 <link rel="icon" href="/static/hgicon.png" type="image/png" />
134 136 <meta name="robots" content="index, nofollow" />
135 137 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
138 <script type="text/javascript" src="/static/mercurial.js"></script>
136 139
137 140 <title>test: error</title>
138 141 </head>
139 142 <body>
140 143
141 144 <div class="container">
142 145 <div class="menu">
143 146 <div class="logo">
144 147 <a href="http://mercurial.selenic.com/">
145 148 <img src="/static/hglogo.png" width=75 height=90 border=0 alt="mercurial" /></a>
146 149 </div>
147 150 <ul>
148 151 <li><a href="/shortlog">log</a></li>
149 152 <li><a href="/graph">graph</a></li>
150 153 <li><a href="/tags">tags</a></li>
151 154 <li><a href="/bookmarks">bookmarks</a></li>
152 155 <li><a href="/branches">branches</a></li>
153 156 <li><a href="/help">help</a></li>
154 157 </ul>
155 158 </div>
156 159
157 160 <div class="main">
158 161
159 162 <h2><a href="/">test</a></h2>
160 163 <h3>error</h3>
161 164
162 165 <form class="search" action="/log">
163 166
164 167 <p><input name="rev" id="search1" type="text" size="30"></p>
165 168 <div id="hint">find changesets by author, revision,
166 169 files, or words in the commit message</div>
167 170 </form>
168 171
169 172 <div class="description">
170 173 <p>
171 174 An error occurred while processing your request:
172 175 </p>
173 176 <p>
174 177 bork@2ef0ac749a14: not found in manifest
175 178 </p>
176 179 </div>
177 180 </div>
178 181 </div>
179 182
183 <script type="text/javascript">process_dates()</script>
180 184
181 185
182 186 </body>
183 187 </html>
184 188
185 189 [1]
186 190 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT '/diff/tip/bork?style=raw'
187 191 404 Not Found
188 192
189 193
190 194 error: bork@2ef0ac749a14: not found in manifest
191 195 [1]
192 196
193 197 try bad style
194 198
195 199 $ ("$TESTDIR/get-with-headers.py" localhost:$HGPORT '/file/tip/?style=foobar')
196 200 200 Script output follows
197 201
198 202 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
199 203 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
200 204 <head>
201 205 <link rel="icon" href="/static/hgicon.png" type="image/png" />
202 206 <meta name="robots" content="index, nofollow" />
203 207 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
208 <script type="text/javascript" src="/static/mercurial.js"></script>
204 209
205 210 <title>test: 2ef0ac749a14 /</title>
206 211 </head>
207 212 <body>
208 213
209 214 <div class="container">
210 215 <div class="menu">
211 216 <div class="logo">
212 217 <a href="http://mercurial.selenic.com/">
213 218 <img src="/static/hglogo.png" alt="mercurial" /></a>
214 219 </div>
215 220 <ul>
216 221 <li><a href="/shortlog/2ef0ac749a14">log</a></li>
217 222 <li><a href="/graph/2ef0ac749a14">graph</a></li>
218 223 <li><a href="/tags">tags</a></li>
219 224 <li><a href="/bookmarks">bookmarks</a></li>
220 225 <li><a href="/branches">branches</a></li>
221 226 </ul>
222 227 <ul>
223 228 <li><a href="/rev/2ef0ac749a14">changeset</a></li>
224 229 <li class="active">browse</li>
225 230 </ul>
226 231 <ul>
227 232
228 233 </ul>
229 234 <ul>
230 235 <li><a href="/help">help</a></li>
231 236 </ul>
232 237 </div>
233 238
234 239 <div class="main">
235 240 <h2><a href="/">test</a></h2>
236 241 <h3>directory / @ 0:2ef0ac749a14 <span class="tag">tip</span> </h3>
237 242
238 243 <form class="search" action="/log">
239 244
240 245 <p><input name="rev" id="search1" type="text" size="30" /></p>
241 246 <div id="hint">find changesets by author, revision,
242 247 files, or words in the commit message</div>
243 248 </form>
244 249
245 250 <table class="bigtable">
246 251 <tr>
247 252 <th class="name">name</th>
248 253 <th class="size">size</th>
249 254 <th class="permissions">permissions</th>
250 255 </tr>
251 256 <tr class="fileline parity0">
252 257 <td class="name"><a href="/file/2ef0ac749a14/">[up]</a></td>
253 258 <td class="size"></td>
254 259 <td class="permissions">drwxr-xr-x</td>
255 260 </tr>
256 261
257 262 <tr class="fileline parity1">
258 263 <td class="name">
259 264 <a href="/file/2ef0ac749a14/da">
260 265 <img src="/static/coal-folder.png" alt="dir."/> da/
261 266 </a>
262 267 <a href="/file/2ef0ac749a14/da/">
263 268
264 269 </a>
265 270 </td>
266 271 <td class="size"></td>
267 272 <td class="permissions">drwxr-xr-x</td>
268 273 </tr>
269 274
270 275 <tr class="fileline parity0">
271 276 <td class="filename">
272 277 <a href="/file/2ef0ac749a14/foo">
273 278 <img src="/static/coal-file.png" alt="file"/> foo
274 279 </a>
275 280 </td>
276 281 <td class="size">4</td>
277 282 <td class="permissions">-rw-r--r--</td>
278 283 </tr>
279 284 </table>
280 285 </div>
281 286 </div>
287 <script type="text/javascript">process_dates()</script>
282 288
283 289
284 290 </body>
285 291 </html>
286 292
287 293
288 294 stop and restart
289 295
290 296 $ "$TESTDIR/killdaemons.py"
291 297 $ hg serve -p $HGPORT -d --pid-file=hg.pid -A access.log
292 298 $ cat hg.pid >> $DAEMON_PIDS
293 299
294 300 Test the access/error files are opened in append mode
295 301
296 302 $ python -c "print len(file('access.log').readlines()), 'log lines written'"
297 303 10 log lines written
298 304
299 305 static file
300 306
301 307 $ "$TESTDIR/get-with-headers.py" --twice localhost:$HGPORT '/static/style-gitweb.css'
302 308 200 Script output follows
303 309
304 310 body { font-family: sans-serif; font-size: 12px; margin:0px; border:solid #d9d8d1; border-width:1px; margin:10px; }
305 311 a { color:#0000cc; }
306 312 a:hover, a:visited, a:active { color:#880000; }
307 313 div.page_header { height:25px; padding:8px; font-size:18px; font-weight:bold; background-color:#d9d8d1; }
308 314 div.page_header a:visited { color:#0000cc; }
309 315 div.page_header a:hover { color:#880000; }
310 316 div.page_nav { padding:8px; }
311 317 div.page_nav a:visited { color:#0000cc; }
312 318 div.page_path { padding:8px; border:solid #d9d8d1; border-width:0px 0px 1px}
313 319 div.page_footer { padding:4px 8px; background-color: #d9d8d1; }
314 320 div.page_footer_text { float:left; color:#555555; font-style:italic; }
315 321 div.page_body { padding:8px; }
316 322 div.title, a.title {
317 323 display:block; padding:6px 8px;
318 324 font-weight:bold; background-color:#edece6; text-decoration:none; color:#000000;
319 325 }
320 326 a.title:hover { background-color: #d9d8d1; }
321 327 div.title_text { padding:6px 0px; border: solid #d9d8d1; border-width:0px 0px 1px; }
322 328 div.log_body { padding:8px 8px 8px 150px; }
323 329 .age { white-space:nowrap; }
324 330 span.age { position:relative; float:left; width:142px; font-style:italic; }
325 331 div.log_link {
326 332 padding:0px 8px;
327 333 font-size:10px; font-family:sans-serif; font-style:normal;
328 334 position:relative; float:left; width:136px;
329 335 }
330 336 div.list_head { padding:6px 8px 4px; border:solid #d9d8d1; border-width:1px 0px 0px; font-style:italic; }
331 337 a.list { text-decoration:none; color:#000000; }
332 338 a.list:hover { text-decoration:underline; color:#880000; }
333 339 table { padding:8px 4px; }
334 340 th { padding:2px 5px; font-size:12px; text-align:left; }
335 341 tr.light:hover, .parity0:hover { background-color:#edece6; }
336 342 tr.dark, .parity1 { background-color:#f6f6f0; }
337 343 tr.dark:hover, .parity1:hover { background-color:#edece6; }
338 344 td { padding:2px 5px; font-size:12px; vertical-align:top; }
339 345 td.closed { background-color: #99f; }
340 346 td.link { padding:2px 5px; font-family:sans-serif; font-size:10px; }
341 347 td.indexlinks { white-space: nowrap; }
342 348 td.indexlinks a {
343 349 padding: 2px 5px; line-height: 10px;
344 350 border: 1px solid;
345 351 color: #ffffff; background-color: #7777bb;
346 352 border-color: #aaaadd #333366 #333366 #aaaadd;
347 353 font-weight: bold; text-align: center; text-decoration: none;
348 354 font-size: 10px;
349 355 }
350 356 td.indexlinks a:hover { background-color: #6666aa; }
351 357 div.pre { font-family:monospace; font-size:12px; white-space:pre; }
352 358 div.diff_info { font-family:monospace; color:#000099; background-color:#edece6; font-style:italic; }
353 359 div.index_include { border:solid #d9d8d1; border-width:0px 0px 1px; padding:12px 8px; }
354 360 div.search { margin:4px 8px; position:absolute; top:56px; right:12px }
355 361 .linenr { color:#999999; text-decoration:none }
356 362 div.rss_logo { float: right; white-space: nowrap; }
357 363 div.rss_logo a {
358 364 padding:3px 6px; line-height:10px;
359 365 border:1px solid; border-color:#fcc7a5 #7d3302 #3e1a01 #ff954e;
360 366 color:#ffffff; background-color:#ff6600;
361 367 font-weight:bold; font-family:sans-serif; font-size:10px;
362 368 text-align:center; text-decoration:none;
363 369 }
364 370 div.rss_logo a:hover { background-color:#ee5500; }
365 371 pre { margin: 0; }
366 372 span.logtags span {
367 373 padding: 0px 4px;
368 374 font-size: 10px;
369 375 font-weight: normal;
370 376 border: 1px solid;
371 377 background-color: #ffaaff;
372 378 border-color: #ffccff #ff00ee #ff00ee #ffccff;
373 379 }
374 380 span.logtags span.tagtag {
375 381 background-color: #ffffaa;
376 382 border-color: #ffffcc #ffee00 #ffee00 #ffffcc;
377 383 }
378 384 span.logtags span.branchtag {
379 385 background-color: #aaffaa;
380 386 border-color: #ccffcc #00cc33 #00cc33 #ccffcc;
381 387 }
382 388 span.logtags span.inbranchtag {
383 389 background-color: #d5dde6;
384 390 border-color: #e3ecf4 #9398f4 #9398f4 #e3ecf4;
385 391 }
386 392 span.logtags span.bookmarktag {
387 393 background-color: #afdffa;
388 394 border-color: #ccecff #46ace6 #46ace6 #ccecff;
389 395 }
390 396
391 397 /* Graph */
392 398 div#wrapper {
393 399 position: relative;
394 400 margin: 0;
395 401 padding: 0;
396 402 margin-top: 3px;
397 403 }
398 404
399 405 canvas {
400 406 position: absolute;
401 407 z-index: 5;
402 408 top: -0.9em;
403 409 margin: 0;
404 410 }
405 411
406 412 ul#nodebgs {
407 413 list-style: none inside none;
408 414 padding: 0;
409 415 margin: 0;
410 416 top: -0.7em;
411 417 }
412 418
413 419 ul#graphnodes li, ul#nodebgs li {
414 420 height: 39px;
415 421 }
416 422
417 423 ul#graphnodes {
418 424 position: absolute;
419 425 z-index: 10;
420 426 top: -0.8em;
421 427 list-style: none inside none;
422 428 padding: 0;
423 429 }
424 430
425 431 ul#graphnodes li .info {
426 432 display: block;
427 433 font-size: 100%;
428 434 position: relative;
429 435 top: -3px;
430 436 font-style: italic;
431 437 }
432 438 304 Not Modified
433 439
434 440
435 441 errors
436 442
437 443 $ cat errors.log
@@ -1,673 +1,679 b''
1 1 Tests some basic hgwebdir functionality. Tests setting up paths and
2 2 collection, different forms of 404s and the subdirectory support.
3 3
4 4 $ mkdir webdir
5 5 $ cd webdir
6 6 $ hg init a
7 7 $ echo a > a/a
8 8 $ hg --cwd a ci -Ama -d'1 0'
9 9 adding a
10 10
11 11 create a mercurial queue repository
12 12
13 13 $ hg --cwd a qinit --config extensions.hgext.mq= -c
14 14 $ hg init b
15 15 $ echo b > b/b
16 16 $ hg --cwd b ci -Amb -d'2 0'
17 17 adding b
18 18
19 19 create a nested repository
20 20
21 21 $ cd b
22 22 $ hg init d
23 23 $ echo d > d/d
24 24 $ hg --cwd d ci -Amd -d'3 0'
25 25 adding d
26 26 $ cd ..
27 27 $ hg init c
28 28 $ echo c > c/c
29 29 $ hg --cwd c ci -Amc -d'3 0'
30 30 adding c
31 31
32 32 create repository without .hg/store
33 33
34 34 $ hg init nostore
35 35 $ rm -R nostore/.hg/store
36 36 $ root=`pwd`
37 37 $ cd ..
38 38 $ cat > paths.conf <<EOF
39 39 > [paths]
40 40 > a=$root/a
41 41 > b=$root/b
42 42 > EOF
43 43 $ hg serve -p $HGPORT -d --pid-file=hg.pid --webdir-conf paths.conf \
44 44 > -A access-paths.log -E error-paths-1.log
45 45 $ cat hg.pid >> $DAEMON_PIDS
46 46
47 47 should give a 404 - file does not exist
48 48
49 49 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT '/a/file/tip/bork?style=raw'
50 50 404 Not Found
51 51
52 52
53 53 error: bork@8580ff50825a: not found in manifest
54 54 [1]
55 55
56 56 should succeed
57 57
58 58 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT '/?style=raw'
59 59 200 Script output follows
60 60
61 61
62 62 /a/
63 63 /b/
64 64
65 65 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT '/a/file/tip/a?style=raw'
66 66 200 Script output follows
67 67
68 68 a
69 69 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT '/b/file/tip/b?style=raw'
70 70 200 Script output follows
71 71
72 72 b
73 73
74 74 should give a 404 - repo is not published
75 75
76 76 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT '/c/file/tip/c?style=raw'
77 77 404 Not Found
78 78
79 79
80 80 error: repository c/file/tip/c not found
81 81 [1]
82 82
83 83 atom-log without basedir
84 84
85 85 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT '/a/atom-log' | grep '<link'
86 86 <link rel="self" href="http://*:$HGPORT/a/atom-log"/> (glob)
87 87 <link rel="alternate" href="http://*:$HGPORT/a/"/> (glob)
88 88 <link href="http://*:$HGPORT/a/rev/8580ff50825a"/> (glob)
89 89
90 90 rss-log without basedir
91 91
92 92 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT '/a/rss-log' | grep '<guid'
93 93 <guid isPermaLink="true">http://*:$HGPORT/a/rev/8580ff50825a</guid> (glob)
94 94 $ cat > paths.conf <<EOF
95 95 > [paths]
96 96 > t/a/=$root/a
97 97 > b=$root/b
98 98 > coll=$root/*
99 99 > rcoll=$root/**
100 100 > star=*
101 101 > starstar=**
102 102 > astar=webdir/a/*
103 103 > EOF
104 104 $ hg serve -p $HGPORT1 -d --pid-file=hg.pid --webdir-conf paths.conf \
105 105 > -A access-paths.log -E error-paths-2.log
106 106 $ cat hg.pid >> $DAEMON_PIDS
107 107
108 108 should succeed, slashy names
109 109
110 110 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT1 '/?style=raw'
111 111 200 Script output follows
112 112
113 113
114 114 /t/a/
115 115 /b/
116 116 /coll/a/
117 117 /coll/a/.hg/patches/
118 118 /coll/b/
119 119 /coll/c/
120 120 /rcoll/a/
121 121 /rcoll/a/.hg/patches/
122 122 /rcoll/b/
123 123 /rcoll/b/d/
124 124 /rcoll/c/
125 125 /star/webdir/a/
126 126 /star/webdir/a/.hg/patches/
127 127 /star/webdir/b/
128 128 /star/webdir/c/
129 129 /starstar/webdir/a/
130 130 /starstar/webdir/a/.hg/patches/
131 131 /starstar/webdir/b/
132 132 /starstar/webdir/b/d/
133 133 /starstar/webdir/c/
134 134 /astar/
135 135 /astar/.hg/patches/
136 136
137 137 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT1 '/?style=paper'
138 138 200 Script output follows
139 139
140 140 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
141 141 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
142 142 <head>
143 143 <link rel="icon" href="/static/hgicon.png" type="image/png" />
144 144 <meta name="robots" content="index, nofollow" />
145 145 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
146 <script type="text/javascript" src="/static/mercurial.js"></script>
146 147
147 148 <title>Mercurial repositories index</title>
148 149 </head>
149 150 <body>
150 151
151 152 <div class="container">
152 153 <div class="menu">
153 154 <a href="http://mercurial.selenic.com/">
154 155 <img src="/static/hglogo.png" width=75 height=90 border=0 alt="mercurial" /></a>
155 156 </div>
156 157 <div class="main">
157 158 <h2>Mercurial Repositories</h2>
158 159
159 160 <table class="bigtable">
160 161 <tr>
161 162 <th><a href="?sort=name">Name</a></th>
162 163 <th><a href="?sort=description">Description</a></th>
163 164 <th><a href="?sort=contact">Contact</a></th>
164 165 <th><a href="?sort=lastchange">Last modified</a></th>
165 166 <th>&nbsp;</th>
166 167 </tr>
167 168
168 169 <tr class="parity0">
169 170 <td><a href="/t/a/?style=paper">t/a</a></td>
170 171 <td>unknown</td>
171 172 <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>
172 <td class="age">* ago</td> (glob)
173 <td class="age">*</td> (glob)
173 174 <td class="indexlinks"></td>
174 175 </tr>
175 176
176 177 <tr class="parity1">
177 178 <td><a href="/b/?style=paper">b</a></td>
178 179 <td>unknown</td>
179 180 <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>
180 <td class="age">* ago</td> (glob)
181 <td class="age">*</td> (glob)
181 182 <td class="indexlinks"></td>
182 183 </tr>
183 184
184 185 <tr class="parity0">
185 186 <td><a href="/coll/a/?style=paper">coll/a</a></td>
186 187 <td>unknown</td>
187 188 <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>
188 <td class="age">* ago</td> (glob)
189 <td class="age">*</td> (glob)
189 190 <td class="indexlinks"></td>
190 191 </tr>
191 192
192 193 <tr class="parity1">
193 194 <td><a href="/coll/a/.hg/patches/?style=paper">coll/a/.hg/patches</a></td>
194 195 <td>unknown</td>
195 196 <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>
196 <td class="age">* ago</td> (glob)
197 <td class="age">*</td> (glob)
197 198 <td class="indexlinks"></td>
198 199 </tr>
199 200
200 201 <tr class="parity0">
201 202 <td><a href="/coll/b/?style=paper">coll/b</a></td>
202 203 <td>unknown</td>
203 204 <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>
204 <td class="age">* ago</td> (glob)
205 <td class="age">*</td> (glob)
205 206 <td class="indexlinks"></td>
206 207 </tr>
207 208
208 209 <tr class="parity1">
209 210 <td><a href="/coll/c/?style=paper">coll/c</a></td>
210 211 <td>unknown</td>
211 212 <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>
212 <td class="age">* ago</td> (glob)
213 <td class="age">*</td> (glob)
213 214 <td class="indexlinks"></td>
214 215 </tr>
215 216
216 217 <tr class="parity0">
217 218 <td><a href="/rcoll/a/?style=paper">rcoll/a</a></td>
218 219 <td>unknown</td>
219 220 <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>
220 <td class="age">* ago</td> (glob)
221 <td class="age">*</td> (glob)
221 222 <td class="indexlinks"></td>
222 223 </tr>
223 224
224 225 <tr class="parity1">
225 226 <td><a href="/rcoll/a/.hg/patches/?style=paper">rcoll/a/.hg/patches</a></td>
226 227 <td>unknown</td>
227 228 <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>
228 <td class="age">* ago</td> (glob)
229 <td class="age">*</td> (glob)
229 230 <td class="indexlinks"></td>
230 231 </tr>
231 232
232 233 <tr class="parity0">
233 234 <td><a href="/rcoll/b/?style=paper">rcoll/b</a></td>
234 235 <td>unknown</td>
235 236 <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>
236 <td class="age">* ago</td> (glob)
237 <td class="age">*</td> (glob)
237 238 <td class="indexlinks"></td>
238 239 </tr>
239 240
240 241 <tr class="parity1">
241 242 <td><a href="/rcoll/b/d/?style=paper">rcoll/b/d</a></td>
242 243 <td>unknown</td>
243 244 <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>
244 <td class="age">* ago</td> (glob)
245 <td class="age">*</td> (glob)
245 246 <td class="indexlinks"></td>
246 247 </tr>
247 248
248 249 <tr class="parity0">
249 250 <td><a href="/rcoll/c/?style=paper">rcoll/c</a></td>
250 251 <td>unknown</td>
251 252 <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>
252 <td class="age">* ago</td> (glob)
253 <td class="age">*</td> (glob)
253 254 <td class="indexlinks"></td>
254 255 </tr>
255 256
256 257 <tr class="parity1">
257 258 <td><a href="/star/webdir/a/?style=paper">star/webdir/a</a></td>
258 259 <td>unknown</td>
259 260 <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>
260 <td class="age">* ago</td> (glob)
261 <td class="age">*</td> (glob)
261 262 <td class="indexlinks"></td>
262 263 </tr>
263 264
264 265 <tr class="parity0">
265 266 <td><a href="/star/webdir/a/.hg/patches/?style=paper">star/webdir/a/.hg/patches</a></td>
266 267 <td>unknown</td>
267 268 <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>
268 <td class="age">* ago</td> (glob)
269 <td class="age">*</td> (glob)
269 270 <td class="indexlinks"></td>
270 271 </tr>
271 272
272 273 <tr class="parity1">
273 274 <td><a href="/star/webdir/b/?style=paper">star/webdir/b</a></td>
274 275 <td>unknown</td>
275 276 <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>
276 <td class="age">* ago</td> (glob)
277 <td class="age">*</td> (glob)
277 278 <td class="indexlinks"></td>
278 279 </tr>
279 280
280 281 <tr class="parity0">
281 282 <td><a href="/star/webdir/c/?style=paper">star/webdir/c</a></td>
282 283 <td>unknown</td>
283 284 <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>
284 <td class="age">* ago</td> (glob)
285 <td class="age">*</td> (glob)
285 286 <td class="indexlinks"></td>
286 287 </tr>
287 288
288 289 <tr class="parity1">
289 290 <td><a href="/starstar/webdir/a/?style=paper">starstar/webdir/a</a></td>
290 291 <td>unknown</td>
291 292 <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>
292 <td class="age">* ago</td> (glob)
293 <td class="age">*</td> (glob)
293 294 <td class="indexlinks"></td>
294 295 </tr>
295 296
296 297 <tr class="parity0">
297 298 <td><a href="/starstar/webdir/a/.hg/patches/?style=paper">starstar/webdir/a/.hg/patches</a></td>
298 299 <td>unknown</td>
299 300 <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>
300 <td class="age">* ago</td> (glob)
301 <td class="age">*</td> (glob)
301 302 <td class="indexlinks"></td>
302 303 </tr>
303 304
304 305 <tr class="parity1">
305 306 <td><a href="/starstar/webdir/b/?style=paper">starstar/webdir/b</a></td>
306 307 <td>unknown</td>
307 308 <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>
308 <td class="age">* ago</td> (glob)
309 <td class="age">*</td> (glob)
309 310 <td class="indexlinks"></td>
310 311 </tr>
311 312
312 313 <tr class="parity0">
313 314 <td><a href="/starstar/webdir/b/d/?style=paper">starstar/webdir/b/d</a></td>
314 315 <td>unknown</td>
315 316 <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>
316 <td class="age">* ago</td> (glob)
317 <td class="age">*</td> (glob)
317 318 <td class="indexlinks"></td>
318 319 </tr>
319 320
320 321 <tr class="parity1">
321 322 <td><a href="/starstar/webdir/c/?style=paper">starstar/webdir/c</a></td>
322 323 <td>unknown</td>
323 324 <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>
324 <td class="age">* ago</td> (glob)
325 <td class="age">*</td> (glob)
325 326 <td class="indexlinks"></td>
326 327 </tr>
327 328
328 329 <tr class="parity0">
329 330 <td><a href="/astar/?style=paper">astar</a></td>
330 331 <td>unknown</td>
331 332 <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>
332 <td class="age">* ago</td> (glob)
333 <td class="age">*</td> (glob)
333 334 <td class="indexlinks"></td>
334 335 </tr>
335 336
336 337 <tr class="parity1">
337 338 <td><a href="/astar/.hg/patches/?style=paper">astar/.hg/patches</a></td>
338 339 <td>unknown</td>
339 340 <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>
340 <td class="age">* ago</td> (glob)
341 <td class="age">*</td> (glob)
341 342 <td class="indexlinks"></td>
342 343 </tr>
343 344
344 345 </table>
345 346 </div>
346 347 </div>
348 <script type="text/javascript">process_dates()</script>
347 349
348 350
349 351 </body>
350 352 </html>
351 353
352 354 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT1 '/t?style=raw'
353 355 200 Script output follows
354 356
355 357
356 358 /t/a/
357 359
358 360 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT1 '/t/?style=raw'
359 361 200 Script output follows
360 362
361 363
362 364 /t/a/
363 365
364 366 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT1 '/t/?style=paper'
365 367 200 Script output follows
366 368
367 369 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
368 370 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
369 371 <head>
370 372 <link rel="icon" href="/static/hgicon.png" type="image/png" />
371 373 <meta name="robots" content="index, nofollow" />
372 374 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
375 <script type="text/javascript" src="/static/mercurial.js"></script>
373 376
374 377 <title>Mercurial repositories index</title>
375 378 </head>
376 379 <body>
377 380
378 381 <div class="container">
379 382 <div class="menu">
380 383 <a href="http://mercurial.selenic.com/">
381 384 <img src="/static/hglogo.png" width=75 height=90 border=0 alt="mercurial" /></a>
382 385 </div>
383 386 <div class="main">
384 387 <h2>Mercurial Repositories</h2>
385 388
386 389 <table class="bigtable">
387 390 <tr>
388 391 <th><a href="?sort=name">Name</a></th>
389 392 <th><a href="?sort=description">Description</a></th>
390 393 <th><a href="?sort=contact">Contact</a></th>
391 394 <th><a href="?sort=lastchange">Last modified</a></th>
392 395 <th>&nbsp;</th>
393 396 </tr>
394 397
395 398 <tr class="parity0">
396 399 <td><a href="/t/a/?style=paper">a</a></td>
397 400 <td>unknown</td>
398 401 <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>
399 <td class="age">* ago</td> (glob)
402 <td class="age">*</td> (glob)
400 403 <td class="indexlinks"></td>
401 404 </tr>
402 405
403 406 </table>
404 407 </div>
405 408 </div>
409 <script type="text/javascript">process_dates()</script>
406 410
407 411
408 412 </body>
409 413 </html>
410 414
411 415 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT1 '/t/a?style=atom'
412 416 200 Script output follows
413 417
414 418 <?xml version="1.0" encoding="ascii"?>
415 419 <feed xmlns="http://www.w3.org/2005/Atom">
416 420 <!-- Changelog -->
417 421 <id>http://*:$HGPORT1/t/a/</id> (glob)
418 422 <link rel="self" href="http://*:$HGPORT1/t/a/atom-log"/> (glob)
419 423 <link rel="alternate" href="http://*:$HGPORT1/t/a/"/> (glob)
420 424 <title>t/a Changelog</title>
421 425 <updated>1970-01-01T00:00:01+00:00</updated>
422 426
423 427 <entry>
424 428 <title>a</title>
425 429 <id>http://*:$HGPORT1/t/a/#changeset-8580ff50825a50c8f716709acdf8de0deddcd6ab</id> (glob)
426 430 <link href="http://*:$HGPORT1/t/a/rev/8580ff50825a"/> (glob)
427 431 <author>
428 432 <name>test</name>
429 433 <email>&#116;&#101;&#115;&#116;</email>
430 434 </author>
431 435 <updated>1970-01-01T00:00:01+00:00</updated>
432 436 <published>1970-01-01T00:00:01+00:00</published>
433 437 <content type="xhtml">
434 438 <div xmlns="http://www.w3.org/1999/xhtml">
435 439 <pre xml:space="preserve">a</pre>
436 440 </div>
437 441 </content>
438 442 </entry>
439 443
440 444 </feed>
441 445 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT1 '/t/a/?style=atom'
442 446 200 Script output follows
443 447
444 448 <?xml version="1.0" encoding="ascii"?>
445 449 <feed xmlns="http://www.w3.org/2005/Atom">
446 450 <!-- Changelog -->
447 451 <id>http://*:$HGPORT1/t/a/</id> (glob)
448 452 <link rel="self" href="http://*:$HGPORT1/t/a/atom-log"/> (glob)
449 453 <link rel="alternate" href="http://*:$HGPORT1/t/a/"/> (glob)
450 454 <title>t/a Changelog</title>
451 455 <updated>1970-01-01T00:00:01+00:00</updated>
452 456
453 457 <entry>
454 458 <title>a</title>
455 459 <id>http://*:$HGPORT1/t/a/#changeset-8580ff50825a50c8f716709acdf8de0deddcd6ab</id> (glob)
456 460 <link href="http://*:$HGPORT1/t/a/rev/8580ff50825a"/> (glob)
457 461 <author>
458 462 <name>test</name>
459 463 <email>&#116;&#101;&#115;&#116;</email>
460 464 </author>
461 465 <updated>1970-01-01T00:00:01+00:00</updated>
462 466 <published>1970-01-01T00:00:01+00:00</published>
463 467 <content type="xhtml">
464 468 <div xmlns="http://www.w3.org/1999/xhtml">
465 469 <pre xml:space="preserve">a</pre>
466 470 </div>
467 471 </content>
468 472 </entry>
469 473
470 474 </feed>
471 475 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT1 '/t/a/file/tip/a?style=raw'
472 476 200 Script output follows
473 477
474 478 a
475 479
476 480 Test [paths] '*' extension
477 481
478 482 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT1 '/coll/?style=raw'
479 483 200 Script output follows
480 484
481 485
482 486 /coll/a/
483 487 /coll/a/.hg/patches/
484 488 /coll/b/
485 489 /coll/c/
486 490
487 491 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT1 '/coll/a/file/tip/a?style=raw'
488 492 200 Script output follows
489 493
490 494 a
491 495
492 496 Test [paths] '**' extension
493 497
494 498 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT1 '/rcoll/?style=raw'
495 499 200 Script output follows
496 500
497 501
498 502 /rcoll/a/
499 503 /rcoll/a/.hg/patches/
500 504 /rcoll/b/
501 505 /rcoll/b/d/
502 506 /rcoll/c/
503 507
504 508 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT1 '/rcoll/b/d/file/tip/d?style=raw'
505 509 200 Script output follows
506 510
507 511 d
508 512
509 513 Test [paths] '*' in a repo root
510 514
511 515 $ hg id http://localhost:$HGPORT1/astar
512 516 8580ff50825a
513 517
514 518 $ "$TESTDIR/killdaemons.py"
515 519 $ cat > paths.conf <<EOF
516 520 > [paths]
517 521 > t/a = $root/a
518 522 > t/b = $root/b
519 523 > c = $root/c
520 524 > [web]
521 525 > descend=false
522 526 > EOF
523 527 $ hg serve -p $HGPORT1 -d --pid-file=hg.pid --webdir-conf paths.conf \
524 528 > -A access-paths.log -E error-paths-3.log
525 529 $ cat hg.pid >> $DAEMON_PIDS
526 530
527 531 test descend = False
528 532
529 533 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT1 '/?style=raw'
530 534 200 Script output follows
531 535
532 536
533 537 /c/
534 538
535 539 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT1 '/t/?style=raw'
536 540 200 Script output follows
537 541
538 542
539 543 /t/a/
540 544 /t/b/
541 545
542 546 $ "$TESTDIR/killdaemons.py"
543 547 $ cat > paths.conf <<EOF
544 548 > [paths]
545 549 > nostore = $root/nostore
546 550 > inexistent = $root/inexistent
547 551 > EOF
548 552 $ hg serve -p $HGPORT1 -d --pid-file=hg.pid --webdir-conf paths.conf \
549 553 > -A access-paths.log -E error-paths-4.log
550 554 $ cat hg.pid >> $DAEMON_PIDS
551 555
552 556 test inexistent and inaccessible repo should be ignored silently
553 557
554 558 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT1 '/'
555 559 200 Script output follows
556 560
557 561 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
558 562 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
559 563 <head>
560 564 <link rel="icon" href="/static/hgicon.png" type="image/png" />
561 565 <meta name="robots" content="index, nofollow" />
562 566 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
567 <script type="text/javascript" src="/static/mercurial.js"></script>
563 568
564 569 <title>Mercurial repositories index</title>
565 570 </head>
566 571 <body>
567 572
568 573 <div class="container">
569 574 <div class="menu">
570 575 <a href="http://mercurial.selenic.com/">
571 576 <img src="/static/hglogo.png" width=75 height=90 border=0 alt="mercurial" /></a>
572 577 </div>
573 578 <div class="main">
574 579 <h2>Mercurial Repositories</h2>
575 580
576 581 <table class="bigtable">
577 582 <tr>
578 583 <th><a href="?sort=name">Name</a></th>
579 584 <th><a href="?sort=description">Description</a></th>
580 585 <th><a href="?sort=contact">Contact</a></th>
581 586 <th><a href="?sort=lastchange">Last modified</a></th>
582 587 <th>&nbsp;</th>
583 588 </tr>
584 589
585 590 </table>
586 591 </div>
587 592 </div>
593 <script type="text/javascript">process_dates()</script>
588 594
589 595
590 596 </body>
591 597 </html>
592 598
593 599 $ cat > collections.conf <<EOF
594 600 > [collections]
595 601 > $root=$root
596 602 > EOF
597 603 $ hg serve --config web.baseurl=http://hg.example.com:8080/ -p $HGPORT2 -d \
598 604 > --pid-file=hg.pid --webdir-conf collections.conf \
599 605 > -A access-collections.log -E error-collections.log
600 606 $ cat hg.pid >> $DAEMON_PIDS
601 607
602 608 collections: should succeed
603 609
604 610 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT2 '/?style=raw'
605 611 200 Script output follows
606 612
607 613
608 614 /a/
609 615 /a/.hg/patches/
610 616 /b/
611 617 /c/
612 618
613 619 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT2 '/a/file/tip/a?style=raw'
614 620 200 Script output follows
615 621
616 622 a
617 623 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT2 '/b/file/tip/b?style=raw'
618 624 200 Script output follows
619 625
620 626 b
621 627 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT2 '/c/file/tip/c?style=raw'
622 628 200 Script output follows
623 629
624 630 c
625 631
626 632 atom-log with basedir /
627 633
628 634 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT2 '/a/atom-log' | grep '<link'
629 635 <link rel="self" href="http://hg.example.com:8080/a/atom-log"/>
630 636 <link rel="alternate" href="http://hg.example.com:8080/a/"/>
631 637 <link href="http://hg.example.com:8080/a/rev/8580ff50825a"/>
632 638
633 639 rss-log with basedir /
634 640
635 641 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT2 '/a/rss-log' | grep '<guid'
636 642 <guid isPermaLink="true">http://hg.example.com:8080/a/rev/8580ff50825a</guid>
637 643 $ "$TESTDIR/killdaemons.py"
638 644 $ hg serve --config web.baseurl=http://hg.example.com:8080/foo/ -p $HGPORT2 -d \
639 645 > --pid-file=hg.pid --webdir-conf collections.conf \
640 646 > -A access-collections-2.log -E error-collections-2.log
641 647 $ cat hg.pid >> $DAEMON_PIDS
642 648
643 649 atom-log with basedir /foo/
644 650
645 651 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT2 '/a/atom-log' | grep '<link'
646 652 <link rel="self" href="http://hg.example.com:8080/foo/a/atom-log"/>
647 653 <link rel="alternate" href="http://hg.example.com:8080/foo/a/"/>
648 654 <link href="http://hg.example.com:8080/foo/a/rev/8580ff50825a"/>
649 655
650 656 rss-log with basedir /foo/
651 657
652 658 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT2 '/a/rss-log' | grep '<guid'
653 659 <guid isPermaLink="true">http://hg.example.com:8080/foo/a/rev/8580ff50825a</guid>
654 660
655 661 paths errors 1
656 662
657 663 $ cat error-paths-1.log
658 664
659 665 paths errors 2
660 666
661 667 $ cat error-paths-2.log
662 668
663 669 paths errors 3
664 670
665 671 $ cat error-paths-3.log
666 672
667 673 collections errors
668 674
669 675 $ cat error-collections.log
670 676
671 677 collections errors 2
672 678
673 679 $ cat error-collections-2.log
1 NO CONTENT: file was removed
General Comments 0
You need to be logged in to leave comments. Login now