##// END OF EJS Templates
hgweb: show instabilities of a commit...
av6 -
r35093:38fe3fe4 default
parent child Browse files
Show More
@@ -1,354 +1,355 b''
1 default = 'summary'
1 default = 'summary'
2 mimetype = 'text/html; charset={encoding}'
2 mimetype = 'text/html; charset={encoding}'
3 header = header.tmpl
3 header = header.tmpl
4 footer = footer.tmpl
4 footer = footer.tmpl
5 search = search.tmpl
5 search = search.tmpl
6 changelog = changelog.tmpl
6 changelog = changelog.tmpl
7 summary = summary.tmpl
7 summary = summary.tmpl
8 error = error.tmpl
8 error = error.tmpl
9 notfound = notfound.tmpl
9 notfound = notfound.tmpl
10
10
11 help = help.tmpl
11 help = help.tmpl
12 helptopics = helptopics.tmpl
12 helptopics = helptopics.tmpl
13
13
14 helpentry = '
14 helpentry = '
15 <tr><td>
15 <tr><td>
16 <a href="{url|urlescape}help/{topic|escape}{sessionvars%urlparameter}">
16 <a href="{url|urlescape}help/{topic|escape}{sessionvars%urlparameter}">
17 {if(basename, '{basename|escape}', '{topic|escape}')}
17 {if(basename, '{basename|escape}', '{topic|escape}')}
18 </a>
18 </a>
19 </td><td>
19 </td><td>
20 {summary|escape}
20 {summary|escape}
21 </td></tr>'
21 </td></tr>'
22
22
23 naventry = '<a href="{url|urlescape}log/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
23 naventry = '<a href="{url|urlescape}log/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
24 navshortentry = '<a href="{url|urlescape}shortlog/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
24 navshortentry = '<a href="{url|urlescape}shortlog/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
25 navgraphentry = '<a href="{url|urlescape}graph/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
25 navgraphentry = '<a href="{url|urlescape}graph/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
26 filenaventry = '<a href="{url|urlescape}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{label|escape}</a> '
26 filenaventry = '<a href="{url|urlescape}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{label|escape}</a> '
27 filedifflink = '<a href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a> '
27 filedifflink = '<a href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a> '
28 filenodelink = '
28 filenodelink = '
29 <tr class="parity{parity}">
29 <tr class="parity{parity}">
30 <td><a class="list" href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a></td>
30 <td><a class="list" href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a></td>
31 <td></td>
31 <td></td>
32 <td class="link">
32 <td class="link">
33 <a href="{url|urlescape}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a> |
33 <a href="{url|urlescape}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a> |
34 <a href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a> |
34 <a href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a> |
35 <a href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a> |
35 <a href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a> |
36 <a href="{url|urlescape}comparison/{node|short}/{file|urlescape}{sessionvars%urlparameter}">comparison</a> |
36 <a href="{url|urlescape}comparison/{node|short}/{file|urlescape}{sessionvars%urlparameter}">comparison</a> |
37 <a href="{url|urlescape}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">revisions</a>
37 <a href="{url|urlescape}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">revisions</a>
38 </td>
38 </td>
39 </tr>'
39 </tr>'
40 filenolink = '
40 filenolink = '
41 <tr class="parity{parity}">
41 <tr class="parity{parity}">
42 <td><a class="list" href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a></td>
42 <td><a class="list" href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a></td>
43 <td></td>
43 <td></td>
44 <td class="link">
44 <td class="link">
45 file |
45 file |
46 annotate |
46 annotate |
47 <a href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a> |
47 <a href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a> |
48 <a href="{url|urlescape}comparison/{node|short}/{file|urlescape}{sessionvars%urlparameter}">comparison</a> |
48 <a href="{url|urlescape}comparison/{node|short}/{file|urlescape}{sessionvars%urlparameter}">comparison</a> |
49 <a href="{url|urlescape}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">revisions</a>
49 <a href="{url|urlescape}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">revisions</a>
50 </td>
50 </td>
51 </tr>'
51 </tr>'
52
52
53 nav = '{before%naventry} {after%naventry}'
53 nav = '{before%naventry} {after%naventry}'
54 navshort = '{before%navshortentry}{after%navshortentry}'
54 navshort = '{before%navshortentry}{after%navshortentry}'
55 navgraph = '{before%navgraphentry}{after%navgraphentry}'
55 navgraph = '{before%navgraphentry}{after%navgraphentry}'
56 filenav = '{before%filenaventry}{after%filenaventry}'
56 filenav = '{before%filenaventry}{after%filenaventry}'
57
57
58 fileellipses = '...'
58 fileellipses = '...'
59 changelogentry = changelogentry.tmpl
59 changelogentry = changelogentry.tmpl
60 searchentry = changelogentry.tmpl
60 searchentry = changelogentry.tmpl
61 changeset = changeset.tmpl
61 changeset = changeset.tmpl
62 manifest = manifest.tmpl
62 manifest = manifest.tmpl
63 direntry = '
63 direntry = '
64 <tr class="parity{parity}">
64 <tr class="parity{parity}">
65 <td style="font-family:monospace">drwxr-xr-x</td>
65 <td style="font-family:monospace">drwxr-xr-x</td>
66 <td style="font-family:monospace"></td>
66 <td style="font-family:monospace"></td>
67 <td style="font-family:monospace"></td>
67 <td style="font-family:monospace"></td>
68 <td>
68 <td>
69 <a href="{url|urlescape}file/{symrev}{path|urlescape}{sessionvars%urlparameter}">{basename|escape}</a>
69 <a href="{url|urlescape}file/{symrev}{path|urlescape}{sessionvars%urlparameter}">{basename|escape}</a>
70 <a href="{url|urlescape}file/{symrev}{path|urlescape}/{emptydirs|urlescape}{sessionvars%urlparameter}">{emptydirs|escape}</a>
70 <a href="{url|urlescape}file/{symrev}{path|urlescape}/{emptydirs|urlescape}{sessionvars%urlparameter}">{emptydirs|escape}</a>
71 </td>
71 </td>
72 <td class="link">
72 <td class="link">
73 <a href="{url|urlescape}file/{symrev}{path|urlescape}{sessionvars%urlparameter}">files</a>
73 <a href="{url|urlescape}file/{symrev}{path|urlescape}{sessionvars%urlparameter}">files</a>
74 </td>
74 </td>
75 </tr>'
75 </tr>'
76 fileentry = '
76 fileentry = '
77 <tr class="parity{parity}">
77 <tr class="parity{parity}">
78 <td style="font-family:monospace">{permissions|permissions}</td>
78 <td style="font-family:monospace">{permissions|permissions}</td>
79 <td style="font-family:monospace" align=right>{date|isodate}</td>
79 <td style="font-family:monospace" align=right>{date|isodate}</td>
80 <td style="font-family:monospace" align=right>{size}</td>
80 <td style="font-family:monospace" align=right>{size}</td>
81 <td class="list">
81 <td class="list">
82 <a class="list" href="{url|urlescape}file/{symrev}/{file|urlescape}{sessionvars%urlparameter}">{basename|escape}</a>
82 <a class="list" href="{url|urlescape}file/{symrev}/{file|urlescape}{sessionvars%urlparameter}">{basename|escape}</a>
83 </td>
83 </td>
84 <td class="link">
84 <td class="link">
85 <a href="{url|urlescape}file/{symrev}/{file|urlescape}{sessionvars%urlparameter}">file</a> |
85 <a href="{url|urlescape}file/{symrev}/{file|urlescape}{sessionvars%urlparameter}">file</a> |
86 <a href="{url|urlescape}log/{symrev}/{file|urlescape}{sessionvars%urlparameter}">revisions</a> |
86 <a href="{url|urlescape}log/{symrev}/{file|urlescape}{sessionvars%urlparameter}">revisions</a> |
87 <a href="{url|urlescape}annotate/{symrev}/{file|urlescape}{sessionvars%urlparameter}">annotate</a>
87 <a href="{url|urlescape}annotate/{symrev}/{file|urlescape}{sessionvars%urlparameter}">annotate</a>
88 </td>
88 </td>
89 </tr>'
89 </tr>'
90 filerevision = filerevision.tmpl
90 filerevision = filerevision.tmpl
91 fileannotate = fileannotate.tmpl
91 fileannotate = fileannotate.tmpl
92 filediff = filediff.tmpl
92 filediff = filediff.tmpl
93 filecomparison = filecomparison.tmpl
93 filecomparison = filecomparison.tmpl
94 filelog = filelog.tmpl
94 filelog = filelog.tmpl
95 fileline = '
95 fileline = '
96 <a href="#{lineid}"></a><span id="{lineid}">{strip(line|escape, '\r\n')}</span>'
96 <a href="#{lineid}"></a><span id="{lineid}">{strip(line|escape, '\r\n')}</span>'
97 annotateline = '
97 annotateline = '
98 <tr id="{lineid}" style="font-family:monospace" class="parity{parity}{ifeq(node, originalnode, ' thisrev')}">
98 <tr id="{lineid}" style="font-family:monospace" class="parity{parity}{ifeq(node, originalnode, ' thisrev')}">
99 <td class="annotate linenr parity{blockparity}" style="text-align: right;">
99 <td class="annotate linenr parity{blockparity}" style="text-align: right;">
100 {if(blockhead,
100 {if(blockhead,
101 '<a href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}#l{targetline}">
101 '<a href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}#l{targetline}">
102 {rev}
102 {rev}
103 </a>')}
103 </a>')}
104 <div class="annotate-info">
104 <div class="annotate-info">
105 <div>
105 <div>
106 <a href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}#l{targetline}">
106 <a href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}#l{targetline}">
107 {node|short}</a>
107 {node|short}</a>
108 {desc|escape|firstline}
108 {desc|escape|firstline}
109 </div>
109 </div>
110 <div><em>{author|obfuscate}</em></div>
110 <div><em>{author|obfuscate}</em></div>
111 <div>parents: {parents%annotateparent}</div>
111 <div>parents: {parents%annotateparent}</div>
112 <a href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a>
112 <a href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a>
113 <a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">changeset</a>
113 <a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">changeset</a>
114 </div>
114 </div>
115 </td>
115 </td>
116 <td class="followlines-btn-parent"><pre><a class="linenr" href="#{lineid}">{linenumber}</a></pre></td>
116 <td class="followlines-btn-parent"><pre><a class="linenr" href="#{lineid}">{linenumber}</a></pre></td>
117 <td><pre>{line|escape}</pre></td>
117 <td><pre>{line|escape}</pre></td>
118 </tr>'
118 </tr>'
119 annotateparent = '
119 annotateparent = '
120 <a href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{rev}</a>'
120 <a href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{rev}</a>'
121 difflineplus = '
121 difflineplus = '
122 <a href="#{lineid}"></a><span id="{lineid}" class="difflineplus">{strip(line|escape, '\r\n')}</span>'
122 <a href="#{lineid}"></a><span id="{lineid}" class="difflineplus">{strip(line|escape, '\r\n')}</span>'
123 difflineminus = '
123 difflineminus = '
124 <a href="#{lineid}"></a><span id="{lineid}" class="difflineminus">{strip(line|escape, '\r\n')}</span>'
124 <a href="#{lineid}"></a><span id="{lineid}" class="difflineminus">{strip(line|escape, '\r\n')}</span>'
125 difflineat = '
125 difflineat = '
126 <a href="#{lineid}"></a><span id="{lineid}" class="difflineat">{strip(line|escape, '\r\n')}</span>'
126 <a href="#{lineid}"></a><span id="{lineid}" class="difflineat">{strip(line|escape, '\r\n')}</span>'
127 diffline = '
127 diffline = '
128 <a href="#{lineid}"></a><span id="{lineid}">{strip(line|escape, '\r\n')}</span>'
128 <a href="#{lineid}"></a><span id="{lineid}">{strip(line|escape, '\r\n')}</span>'
129
129
130 comparisonblock ='
130 comparisonblock ='
131 <tbody class="block">
131 <tbody class="block">
132 {lines}
132 {lines}
133 </tbody>'
133 </tbody>'
134 comparisonline = '
134 comparisonline = '
135 <tr id="{lineid}" style="font-family:monospace">
135 <tr id="{lineid}" style="font-family:monospace">
136 <td class="{type}"><pre><a class="linenr" href="#{lineid}">{leftlinenumber}</a> {leftline|escape}</pre></td>
136 <td class="{type}"><pre><a class="linenr" href="#{lineid}">{leftlinenumber}</a> {leftline|escape}</pre></td>
137 <td class="{type}"><pre><a class="linenr" href="#{lineid}">{rightlinenumber}</a> {rightline|escape}</pre></td>
137 <td class="{type}"><pre><a class="linenr" href="#{lineid}">{rightlinenumber}</a> {rightline|escape}</pre></td>
138 </tr>'
138 </tr>'
139
139
140 changesetlink = '<a class="list" href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a>'
140 changesetlink = '<a class="list" href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a>'
141 changesetbranch = '<tr><td>branch</td><td>{name|escape}</td></tr>'
141 changesetbranch = '<tr><td>branch</td><td>{name|escape}</td></tr>'
142 changesetparent = '
142 changesetparent = '
143 <tr>
143 <tr>
144 <td>parent {rev}</td>
144 <td>parent {rev}</td>
145 <td style="font-family:monospace">
145 <td style="font-family:monospace">
146 {changesetlink}
146 {changesetlink}
147 </td>
147 </td>
148 </tr>'
148 </tr>'
149 changesetparentdiff = '
149 changesetparentdiff = '
150 <tr>
150 <tr>
151 <td>parent {rev}</td>
151 <td>parent {rev}</td>
152 <td style="font-family:monospace">
152 <td style="font-family:monospace">
153 {changesetlink} {ifeq(node, basenode, '(current diff)', '({difffrom})')}
153 {changesetlink} {ifeq(node, basenode, '(current diff)', '({difffrom})')}
154 </td>
154 </td>
155 </tr>'
155 </tr>'
156 difffrom = '<a href="{url|urlescape}rev/{node|short}:{originalnode|short}{sessionvars%urlparameter}">diff</a>'
156 difffrom = '<a href="{url|urlescape}rev/{node|short}:{originalnode|short}{sessionvars%urlparameter}">diff</a>'
157 filerevbranch = '<tr><td>branch</td><td>{name|escape}</td></tr>'
157 filerevbranch = '<tr><td>branch</td><td>{name|escape}</td></tr>'
158 filerevparent = '
158 filerevparent = '
159 <tr>
159 <tr>
160 <td>parent {rev}</td>
160 <td>parent {rev}</td>
161 <td style="font-family:monospace">
161 <td style="font-family:monospace">
162 <a class="list" href="{url|urlescape}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
162 <a class="list" href="{url|urlescape}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
163 {rename%filerename}{node|short}
163 {rename%filerename}{node|short}
164 </a>
164 </a>
165 </td>
165 </td>
166 </tr>'
166 </tr>'
167 filerename = '{file|escape}@'
167 filerename = '{file|escape}@'
168 filelogrename = '| <a href="{url|urlescape}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">base</a>'
168 filelogrename = '| <a href="{url|urlescape}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">base</a>'
169 fileannotateparent = '
169 fileannotateparent = '
170 <tr>
170 <tr>
171 <td>parent {rev}</td>
171 <td>parent {rev}</td>
172 <td style="font-family:monospace">
172 <td style="font-family:monospace">
173 <a class="list" href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
173 <a class="list" href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
174 {rename%filerename}{node|short}
174 {rename%filerename}{node|short}
175 </a>
175 </a>
176 </td>
176 </td>
177 </tr>'
177 </tr>'
178 changesetchild = '
178 changesetchild = '
179 <tr>
179 <tr>
180 <td>child {rev}</td>
180 <td>child {rev}</td>
181 <td style="font-family:monospace">
181 <td style="font-family:monospace">
182 <a class="list" href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a>
182 <a class="list" href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a>
183 </td>
183 </td>
184 </tr>'
184 </tr>'
185 filerevchild = '
185 filerevchild = '
186 <tr>
186 <tr>
187 <td>child {rev}</td>
187 <td>child {rev}</td>
188 <td style="font-family:monospace">
188 <td style="font-family:monospace">
189 <a class="list" href="{url|urlescape}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></td>
189 <a class="list" href="{url|urlescape}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></td>
190 </tr>'
190 </tr>'
191 fileannotatechild = '
191 fileannotatechild = '
192 <tr>
192 <tr>
193 <td>child {rev}</td>
193 <td>child {rev}</td>
194 <td style="font-family:monospace">
194 <td style="font-family:monospace">
195 <a class="list" href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></td>
195 <a class="list" href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></td>
196 </tr>'
196 </tr>'
197 tags = tags.tmpl
197 tags = tags.tmpl
198 tagentry = '
198 tagentry = '
199 <tr class="parity{parity}">
199 <tr class="parity{parity}">
200 <td class="age"><i class="age">{date|rfc822date}</i></td>
200 <td class="age"><i class="age">{date|rfc822date}</i></td>
201 <td><a class="list" href="{url|urlescape}rev/{tag|revescape}{sessionvars%urlparameter}"><b>{tag|escape}</b></a></td>
201 <td><a class="list" href="{url|urlescape}rev/{tag|revescape}{sessionvars%urlparameter}"><b>{tag|escape}</b></a></td>
202 <td class="link">
202 <td class="link">
203 <a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">changeset</a> |
203 <a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">changeset</a> |
204 <a href="{url|urlescape}log/{node|short}{sessionvars%urlparameter}">changelog</a> |
204 <a href="{url|urlescape}log/{node|short}{sessionvars%urlparameter}">changelog</a> |
205 <a href="{url|urlescape}file/{node|short}{sessionvars%urlparameter}">files</a>
205 <a href="{url|urlescape}file/{node|short}{sessionvars%urlparameter}">files</a>
206 </td>
206 </td>
207 </tr>'
207 </tr>'
208 bookmarks = bookmarks.tmpl
208 bookmarks = bookmarks.tmpl
209 bookmarkentry = '
209 bookmarkentry = '
210 <tr class="parity{parity}">
210 <tr class="parity{parity}">
211 <td class="age"><i class="age">{date|rfc822date}</i></td>
211 <td class="age"><i class="age">{date|rfc822date}</i></td>
212 <td><a class="list" href="{url|urlescape}rev/{bookmark|revescape}{sessionvars%urlparameter}"><b>{bookmark|escape}</b></a></td>
212 <td><a class="list" href="{url|urlescape}rev/{bookmark|revescape}{sessionvars%urlparameter}"><b>{bookmark|escape}</b></a></td>
213 <td class="link">
213 <td class="link">
214 <a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">changeset</a> |
214 <a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">changeset</a> |
215 <a href="{url|urlescape}log/{node|short}{sessionvars%urlparameter}">changelog</a> |
215 <a href="{url|urlescape}log/{node|short}{sessionvars%urlparameter}">changelog</a> |
216 <a href="{url|urlescape}file/{node|short}{sessionvars%urlparameter}">files</a>
216 <a href="{url|urlescape}file/{node|short}{sessionvars%urlparameter}">files</a>
217 </td>
217 </td>
218 </tr>'
218 </tr>'
219 branches = branches.tmpl
219 branches = branches.tmpl
220 branchentry = '
220 branchentry = '
221 <tr class="parity{parity}">
221 <tr class="parity{parity}">
222 <td class="age"><i class="age">{date|rfc822date}</i></td>
222 <td class="age"><i class="age">{date|rfc822date}</i></td>
223 <td class="{status}"><a class="list" href="{url|urlescape}shortlog/{branch|revescape}{sessionvars%urlparameter}"><b>{branch|escape}</b></a></td>
223 <td class="{status}"><a class="list" href="{url|urlescape}shortlog/{branch|revescape}{sessionvars%urlparameter}"><b>{branch|escape}</b></a></td>
224 <td class="link">
224 <td class="link">
225 <a href="{url|urlescape}changeset/{node|short}{sessionvars%urlparameter}">changeset</a> |
225 <a href="{url|urlescape}changeset/{node|short}{sessionvars%urlparameter}">changeset</a> |
226 <a href="{url|urlescape}log/{node|short}{sessionvars%urlparameter}">changelog</a> |
226 <a href="{url|urlescape}log/{node|short}{sessionvars%urlparameter}">changelog</a> |
227 <a href="{url|urlescape}file/{node|short}{sessionvars%urlparameter}">files</a>
227 <a href="{url|urlescape}file/{node|short}{sessionvars%urlparameter}">files</a>
228 </td>
228 </td>
229 </tr>'
229 </tr>'
230 diffblock = '<div class="diffblock"><pre class="sourcelines">{lines}</pre></div>'
230 diffblock = '<div class="diffblock"><pre class="sourcelines">{lines}</pre></div>'
231 filediffparent = '
231 filediffparent = '
232 <tr>
232 <tr>
233 <td>parent {rev}</td>
233 <td>parent {rev}</td>
234 <td style="font-family:monospace">
234 <td style="font-family:monospace">
235 <a class="list" href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
235 <a class="list" href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
236 {node|short}
236 {node|short}
237 </a>
237 </a>
238 </td>
238 </td>
239 </tr>'
239 </tr>'
240 filecompparent = '
240 filecompparent = '
241 <tr>
241 <tr>
242 <td>parent {rev}</td>
242 <td>parent {rev}</td>
243 <td style="font-family:monospace">
243 <td style="font-family:monospace">
244 <a class="list" href="{url|urlescape}comparison/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
244 <a class="list" href="{url|urlescape}comparison/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
245 {node|short}
245 {node|short}
246 </a>
246 </a>
247 </td>
247 </td>
248 </tr>'
248 </tr>'
249 filediffchild = '
249 filediffchild = '
250 <tr>
250 <tr>
251 <td>child {rev}</td>
251 <td>child {rev}</td>
252 <td style="font-family:monospace">
252 <td style="font-family:monospace">
253 <a class="list" href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a>
253 <a class="list" href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a>
254 </td>
254 </td>
255 </tr>'
255 </tr>'
256 filecompchild = '
256 filecompchild = '
257 <tr>
257 <tr>
258 <td>child {rev}</td>
258 <td>child {rev}</td>
259 <td style="font-family:monospace">
259 <td style="font-family:monospace">
260 <a class="list" href="{url|urlescape}comparison/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a>
260 <a class="list" href="{url|urlescape}comparison/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a>
261 </td>
261 </td>
262 </tr>'
262 </tr>'
263 shortlog = shortlog.tmpl
263 shortlog = shortlog.tmpl
264 graph = graph.tmpl
264 graph = graph.tmpl
265 phasetag = '{ifeq(phase, 'public', '', '<span class="phasetag" title="{phase|escape}">{phase|escape}</span> ')}'
265 phasetag = '{ifeq(phase, 'public', '', '<span class="phasetag" title="{phase|escape}">{phase|escape}</span> ')}'
266 obsoletetag = '{if(obsolete, '<span class="obsoletetag" title="obsolete">obsolete</span> ')}'
266 obsoletetag = '{if(obsolete, '<span class="obsoletetag" title="obsolete">obsolete</span> ')}'
267 instabilitytag = '<span class="instabilitytag" title="{name|escape}">{name|escape}</span> '
267 tagtag = '<span class="tagtag" title="{name|escape}">{name|escape}</span> '
268 tagtag = '<span class="tagtag" title="{name|escape}">{name|escape}</span> '
268 branchtag = '<span class="branchtag" title="{name|escape}">{name|escape}</span> '
269 branchtag = '<span class="branchtag" title="{name|escape}">{name|escape}</span> '
269 inbranchtag = '<span class="inbranchtag" title="{name|escape}">{name|escape}</span> '
270 inbranchtag = '<span class="inbranchtag" title="{name|escape}">{name|escape}</span> '
270 bookmarktag = '<span class="bookmarktag" title="{name|escape}">{name|escape}</span> '
271 bookmarktag = '<span class="bookmarktag" title="{name|escape}">{name|escape}</span> '
271 alltags = '<span class="logtags">{phasetag}{obsoletetag}{inbranch%inbranchtag}{branches%branchtag}{tags%tagtag}{bookmarks%bookmarktag}</span>'
272 alltags = '<span class="logtags">{phasetag}{obsoletetag}{instabilities%instabilitytag}{inbranch%inbranchtag}{branches%branchtag}{tags%tagtag}{bookmarks%bookmarktag}</span>'
272 shortlogentry = '
273 shortlogentry = '
273 <tr class="parity{parity}">
274 <tr class="parity{parity}">
274 <td class="age"><i class="age">{date|rfc822date}</i></td>
275 <td class="age"><i class="age">{date|rfc822date}</i></td>
275 <td><i>{author|person}</i></td>
276 <td><i>{author|person}</i></td>
276 <td>
277 <td>
277 <a class="list" href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">
278 <a class="list" href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">
278 <b>{desc|strip|firstline|escape|nonempty}</b>
279 <b>{desc|strip|firstline|escape|nonempty}</b>
279 {alltags}
280 {alltags}
280 </a>
281 </a>
281 </td>
282 </td>
282 <td class="link" nowrap>
283 <td class="link" nowrap>
283 <a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">changeset</a> |
284 <a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">changeset</a> |
284 <a href="{url|urlescape}file/{node|short}{sessionvars%urlparameter}">files</a>
285 <a href="{url|urlescape}file/{node|short}{sessionvars%urlparameter}">files</a>
285 </td>
286 </td>
286 </tr>'
287 </tr>'
287 filelogentry = '
288 filelogentry = '
288 <tr class="parity{if(patch, '1', '{parity}')}">
289 <tr class="parity{if(patch, '1', '{parity}')}">
289 <td class="age"><i class="age">{date|rfc822date}</i></td>
290 <td class="age"><i class="age">{date|rfc822date}</i></td>
290 <td><i>{author|person}</i></td>
291 <td><i>{author|person}</i></td>
291 <td>
292 <td>
292 <a class="list" href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">
293 <a class="list" href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">
293 <b>{desc|strip|firstline|escape|nonempty}</b>
294 <b>{desc|strip|firstline|escape|nonempty}</b>
294 {alltags}
295 {alltags}
295 </a>
296 </a>
296 </td>
297 </td>
297 <td class="link">
298 <td class="link">
298 <a href="{url|urlescape}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a> |
299 <a href="{url|urlescape}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a> |
299 <a href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a> |
300 <a href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a> |
300 <a href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a>
301 <a href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a>
301 {rename%filelogrename}
302 {rename%filelogrename}
302 </td>
303 </td>
303 </tr>
304 </tr>
304 {if(patch, '<tr><td colspan="4">{diff}</td></tr>')}'
305 {if(patch, '<tr><td colspan="4">{diff}</td></tr>')}'
305 archiveentry = ' | <a href="{url|urlescape}archive/{symrev}{extension}{ifeq(path,'/','',path|urlescape)}">{type|escape}</a> '
306 archiveentry = ' | <a href="{url|urlescape}archive/{symrev}{extension}{ifeq(path,'/','',path|urlescape)}">{type|escape}</a> '
306 indexentry = '
307 indexentry = '
307 <tr class="parity{parity}">
308 <tr class="parity{parity}">
308 <td>
309 <td>
309 <a class="list" href="{url|urlescape}{sessionvars%urlparameter}">
310 <a class="list" href="{url|urlescape}{sessionvars%urlparameter}">
310 <b>{name|escape}</b>
311 <b>{name|escape}</b>
311 </a>
312 </a>
312 </td>
313 </td>
313 <td>{description}</td>
314 <td>{description}</td>
314 <td>{contact|obfuscate}</td>
315 <td>{contact|obfuscate}</td>
315 <td class="age">{lastchange|rfc822date}</td>
316 <td class="age">{lastchange|rfc822date}</td>
316 <td class="indexlinks">{archives%indexarchiveentry}</td>
317 <td class="indexlinks">{archives%indexarchiveentry}</td>
317 <td>{if(isdirectory, '',
318 <td>{if(isdirectory, '',
318 '<div class="rss_logo">
319 '<div class="rss_logo">
319 <a href="{url|urlescape}rss-log">RSS</a> <a href="{url|urlescape}atom-log">Atom</a>
320 <a href="{url|urlescape}rss-log">RSS</a> <a href="{url|urlescape}atom-log">Atom</a>
320 </div>'
321 </div>'
321 )}
322 )}
322 </td>
323 </td>
323 </tr>\n'
324 </tr>\n'
324 indexarchiveentry = ' <a href="{url|urlescape}archive/{node|short}{extension}">{type|escape}</a> '
325 indexarchiveentry = ' <a href="{url|urlescape}archive/{node|short}{extension}">{type|escape}</a> '
325 index = index.tmpl
326 index = index.tmpl
326 urlparameter = '{separator}{name}={value|urlescape}'
327 urlparameter = '{separator}{name}={value|urlescape}'
327 hiddenformentry = '<input type="hidden" name="{name}" value="{value|escape}" />'
328 hiddenformentry = '<input type="hidden" name="{name}" value="{value|escape}" />'
328 breadcrumb = '&gt; <a href="{url|urlescape}">{name|escape}</a> '
329 breadcrumb = '&gt; <a href="{url|urlescape}">{name|escape}</a> '
329
330
330 searchform = '
331 searchform = '
331 <div class="search">
332 <div class="search">
332 <form id="searchform" action="{url|urlescape}log">
333 <form id="searchform" action="{url|urlescape}log">
333 {sessionvars%hiddenformentry}
334 {sessionvars%hiddenformentry}
334 <input name="rev" type="text" value="{query|escape}" size="40" />
335 <input name="rev" type="text" value="{query|escape}" size="40" />
335 <div id="hint">{searchhint}</div>
336 <div id="hint">{searchhint}</div>
336 </form>
337 </form>
337 </div>'
338 </div>'
338 searchhint = 'Find changesets by keywords (author, files, the commit message), revision
339 searchhint = 'Find changesets by keywords (author, files, the commit message), revision
339 number or hash, or <a href="{url|urlescape}help/revsets">revset expression</a>.'
340 number or hash, or <a href="{url|urlescape}help/revsets">revset expression</a>.'
340
341
341 diffoptsform = '
342 diffoptsform = '
342 <form id="diffopts-form"
343 <form id="diffopts-form"
343 data-ignorews="{if(get(diffopts, 'ignorews'), '1', '0')}"
344 data-ignorews="{if(get(diffopts, 'ignorews'), '1', '0')}"
344 data-ignorewsamount="{if(get(diffopts, 'ignorewsamount'), '1', '0')}"
345 data-ignorewsamount="{if(get(diffopts, 'ignorewsamount'), '1', '0')}"
345 data-ignorewseol="{if(get(diffopts, 'ignorewseol'), '1', '0')}"
346 data-ignorewseol="{if(get(diffopts, 'ignorewseol'), '1', '0')}"
346 data-ignoreblanklines="{if(get(diffopts, 'ignoreblanklines'), '1', '0')}">
347 data-ignoreblanklines="{if(get(diffopts, 'ignoreblanklines'), '1', '0')}">
347 <span>Ignore whitespace changes - </span>
348 <span>Ignore whitespace changes - </span>
348 <span>Everywhere:</span>
349 <span>Everywhere:</span>
349 <input id="ignorews-checkbox" type="checkbox" />
350 <input id="ignorews-checkbox" type="checkbox" />
350 <span>Within whitespace:</span>
351 <span>Within whitespace:</span>
351 <input id="ignorewsamount-checkbox" type="checkbox" />
352 <input id="ignorewsamount-checkbox" type="checkbox" />
352 <span>At end of lines:</span>
353 <span>At end of lines:</span>
353 <input id="ignorewseol-checkbox" type="checkbox" />
354 <input id="ignorewseol-checkbox" type="checkbox" />
354 </form>'
355 </form>'
@@ -1,293 +1,294 b''
1 default = 'summary'
1 default = 'summary'
2 mimetype = 'text/html; charset={encoding}'
2 mimetype = 'text/html; charset={encoding}'
3 header = header.tmpl
3 header = header.tmpl
4 footer = footer.tmpl
4 footer = footer.tmpl
5 search = search.tmpl
5 search = search.tmpl
6 changelog = changelog.tmpl
6 changelog = changelog.tmpl
7 summary = summary.tmpl
7 summary = summary.tmpl
8 error = error.tmpl
8 error = error.tmpl
9 notfound = notfound.tmpl
9 notfound = notfound.tmpl
10
10
11 help = help.tmpl
11 help = help.tmpl
12 helptopics = helptopics.tmpl
12 helptopics = helptopics.tmpl
13
13
14 helpentry = '
14 helpentry = '
15 <tr><td>
15 <tr><td>
16 <a href="{url|urlescape}help/{topic|escape}{sessionvars%urlparameter}">
16 <a href="{url|urlescape}help/{topic|escape}{sessionvars%urlparameter}">
17 {if(basename, '{basename|escape}', '{topic|escape}')}
17 {if(basename, '{basename|escape}', '{topic|escape}')}
18 </a>
18 </a>
19 </td><td>
19 </td><td>
20 {summary|escape}
20 {summary|escape}
21 </td></tr>'
21 </td></tr>'
22
22
23 naventry = '<a href="{url|urlescape}log/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
23 naventry = '<a href="{url|urlescape}log/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
24 navshortentry = '<a href="{url|urlescape}shortlog/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
24 navshortentry = '<a href="{url|urlescape}shortlog/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
25 navgraphentry = '<a href="{url|urlescape}graph/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
25 navgraphentry = '<a href="{url|urlescape}graph/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
26 filenaventry = '<a href="{url|urlescape}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{label|escape}</a> '
26 filenaventry = '<a href="{url|urlescape}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{label|escape}</a> '
27 filedifflink = '<a href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a> '
27 filedifflink = '<a href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a> '
28 filenodelink = '
28 filenodelink = '
29 <tr class="parity{parity}">
29 <tr class="parity{parity}">
30 <td><a href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a></td>
30 <td><a href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a></td>
31 <td></td>
31 <td></td>
32 <td>
32 <td>
33 <a href="{url|urlescape}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a> |
33 <a href="{url|urlescape}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a> |
34 <a href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a> |
34 <a href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a> |
35 <a href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a> |
35 <a href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a> |
36 <a href="{url|urlescape}comparison/{node|short}/{file|urlescape}{sessionvars%urlparameter}">comparison</a> |
36 <a href="{url|urlescape}comparison/{node|short}/{file|urlescape}{sessionvars%urlparameter}">comparison</a> |
37 <a href="{url|urlescape}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">revisions</a>
37 <a href="{url|urlescape}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">revisions</a>
38 </td>
38 </td>
39 </tr>'
39 </tr>'
40 filenolink = '
40 filenolink = '
41 <tr class="parity{parity}">
41 <tr class="parity{parity}">
42 <td><a href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a></td>
42 <td><a href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a></td>
43 <td></td>
43 <td></td>
44 <td>
44 <td>
45 file |
45 file |
46 annotate |
46 annotate |
47 <a href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a> |
47 <a href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a> |
48 <a href="{url|urlescape}comparison/{node|short}/{file|urlescape}{sessionvars%urlparameter}">comparison</a> |
48 <a href="{url|urlescape}comparison/{node|short}/{file|urlescape}{sessionvars%urlparameter}">comparison</a> |
49 <a href="{url|urlescape}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">revisions</a>
49 <a href="{url|urlescape}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">revisions</a>
50 </td>
50 </td>
51 </tr>'
51 </tr>'
52
52
53 nav = '{before%naventry} {after%naventry}'
53 nav = '{before%naventry} {after%naventry}'
54 navshort = '{before%navshortentry}{after%navshortentry}'
54 navshort = '{before%navshortentry}{after%navshortentry}'
55 navgraph = '{before%navgraphentry}{after%navgraphentry}'
55 navgraph = '{before%navgraphentry}{after%navgraphentry}'
56 filenav = '{before%filenaventry}{after%filenaventry}'
56 filenav = '{before%filenaventry}{after%filenaventry}'
57
57
58 fileellipses = '...'
58 fileellipses = '...'
59 changelogentry = changelogentry.tmpl
59 changelogentry = changelogentry.tmpl
60 searchentry = changelogentry.tmpl
60 searchentry = changelogentry.tmpl
61 changeset = changeset.tmpl
61 changeset = changeset.tmpl
62 manifest = manifest.tmpl
62 manifest = manifest.tmpl
63 direntry = '
63 direntry = '
64 <tr class="parity{parity}">
64 <tr class="parity{parity}">
65 <td>drwxr-xr-x</td>
65 <td>drwxr-xr-x</td>
66 <td></td>
66 <td></td>
67 <td></td>
67 <td></td>
68 <td>
68 <td>
69 <a href="{url|urlescape}file/{symrev}{path|urlescape}{sessionvars%urlparameter}">{basename|escape}</a>
69 <a href="{url|urlescape}file/{symrev}{path|urlescape}{sessionvars%urlparameter}">{basename|escape}</a>
70 <a href="{url|urlescape}file/{symrev}{path|urlescape}/{emptydirs|urlescape}{sessionvars%urlparameter}">{emptydirs|escape}</a>
70 <a href="{url|urlescape}file/{symrev}{path|urlescape}/{emptydirs|urlescape}{sessionvars%urlparameter}">{emptydirs|escape}</a>
71 </td>
71 </td>
72 <td><a href="{url|urlescape}file/{symrev}{path|urlescape}{sessionvars%urlparameter}">files</a></td>
72 <td><a href="{url|urlescape}file/{symrev}{path|urlescape}{sessionvars%urlparameter}">files</a></td>
73 </tr>'
73 </tr>'
74 fileentry = '
74 fileentry = '
75 <tr class="parity{parity}">
75 <tr class="parity{parity}">
76 <td>{permissions|permissions}</td>
76 <td>{permissions|permissions}</td>
77 <td>{date|isodate}</td>
77 <td>{date|isodate}</td>
78 <td>{size}</td>
78 <td>{size}</td>
79 <td><a href="{url|urlescape}file/{symrev}/{file|urlescape}{sessionvars%urlparameter}">{basename|escape}</a></td>
79 <td><a href="{url|urlescape}file/{symrev}/{file|urlescape}{sessionvars%urlparameter}">{basename|escape}</a></td>
80 <td>
80 <td>
81 <a href="{url|urlescape}file/{symrev}/{file|urlescape}{sessionvars%urlparameter}">file</a> |
81 <a href="{url|urlescape}file/{symrev}/{file|urlescape}{sessionvars%urlparameter}">file</a> |
82 <a href="{url|urlescape}log/{symrev}/{file|urlescape}{sessionvars%urlparameter}">revisions</a> |
82 <a href="{url|urlescape}log/{symrev}/{file|urlescape}{sessionvars%urlparameter}">revisions</a> |
83 <a href="{url|urlescape}annotate/{symrev}/{file|urlescape}{sessionvars%urlparameter}">annotate</a>
83 <a href="{url|urlescape}annotate/{symrev}/{file|urlescape}{sessionvars%urlparameter}">annotate</a>
84 </td>
84 </td>
85 </tr>'
85 </tr>'
86 filerevision = filerevision.tmpl
86 filerevision = filerevision.tmpl
87 fileannotate = fileannotate.tmpl
87 fileannotate = fileannotate.tmpl
88 filediff = filediff.tmpl
88 filediff = filediff.tmpl
89 filecomparison = filecomparison.tmpl
89 filecomparison = filecomparison.tmpl
90 filelog = filelog.tmpl
90 filelog = filelog.tmpl
91 fileline = '
91 fileline = '
92 <a href="#{lineid}"></a><span id="{lineid}">{strip(line|escape, '\r\n')}</span>'
92 <a href="#{lineid}"></a><span id="{lineid}">{strip(line|escape, '\r\n')}</span>'
93 annotateline = '
93 annotateline = '
94 <tr id="{lineid}" class="parity{parity}{ifeq(node, originalnode, ' thisrev')}">
94 <tr id="{lineid}" class="parity{parity}{ifeq(node, originalnode, ' thisrev')}">
95 <td class="annotate linenr parity{blockparity}">
95 <td class="annotate linenr parity{blockparity}">
96 {if(blockhead,
96 {if(blockhead,
97 '<a href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}#l{targetline}">
97 '<a href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}#l{targetline}">
98 {rev}
98 {rev}
99 </a>')}
99 </a>')}
100 <div class="annotate-info">
100 <div class="annotate-info">
101 <div>
101 <div>
102 <a href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}#l{targetline}">
102 <a href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}#l{targetline}">
103 {node|short}</a>
103 {node|short}</a>
104 {desc|escape|firstline}
104 {desc|escape|firstline}
105 </div>
105 </div>
106 <div><em>{author|obfuscate}</em></div>
106 <div><em>{author|obfuscate}</em></div>
107 <div>parents: {parents%annotateparent}</div>
107 <div>parents: {parents%annotateparent}</div>
108 <a href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a>
108 <a href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a>
109 <a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">changeset</a>
109 <a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">changeset</a>
110 </div>
110 </div>
111 </td>
111 </td>
112 <td class="lineno">
112 <td class="lineno">
113 <a href="#{lineid}">{linenumber}</a>
113 <a href="#{lineid}">{linenumber}</a>
114 </td>
114 </td>
115 <td class="source">{line|escape}</td>
115 <td class="source">{line|escape}</td>
116 </tr>'
116 </tr>'
117 annotateparent = '
117 annotateparent = '
118 <a href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{rev}</a>'
118 <a href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{rev}</a>'
119 difflineplus = '
119 difflineplus = '
120 <a href="#{lineid}"></a><span id="{lineid}" class="difflineplus">{strip(line|escape, '\r\n')}</span>'
120 <a href="#{lineid}"></a><span id="{lineid}" class="difflineplus">{strip(line|escape, '\r\n')}</span>'
121 difflineminus = '
121 difflineminus = '
122 <a href="#{lineid}"></a><span id="{lineid}" class="difflineminus">{strip(line|escape, '\r\n')}</span>'
122 <a href="#{lineid}"></a><span id="{lineid}" class="difflineminus">{strip(line|escape, '\r\n')}</span>'
123 difflineat = '
123 difflineat = '
124 <a href="#{lineid}"></a><span id="{lineid}" class="difflineat">{strip(line|escape, '\r\n')}</span>'
124 <a href="#{lineid}"></a><span id="{lineid}" class="difflineat">{strip(line|escape, '\r\n')}</span>'
125 diffline = '
125 diffline = '
126 <a href="#{lineid}"></a><span id="{lineid}">{strip(line|escape, '\r\n')}</span>'
126 <a href="#{lineid}"></a><span id="{lineid}">{strip(line|escape, '\r\n')}</span>'
127
127
128 comparisonblock ='
128 comparisonblock ='
129 <tbody class="block">
129 <tbody class="block">
130 {lines}
130 {lines}
131 </tbody>'
131 </tbody>'
132 comparisonline = '
132 comparisonline = '
133 <tr id="{lineid}">
133 <tr id="{lineid}">
134 <td class="source {type}"><a class="linenr" href="#{lineid}">{leftlinenumber}</a> {leftline|escape}</td>
134 <td class="source {type}"><a class="linenr" href="#{lineid}">{leftlinenumber}</a> {leftline|escape}</td>
135 <td class="source {type}"><a class="linenr" href="#{lineid}">{rightlinenumber}</a> {rightline|escape}</td>
135 <td class="source {type}"><a class="linenr" href="#{lineid}">{rightlinenumber}</a> {rightline|escape}</td>
136 </tr>'
136 </tr>'
137
137
138 changesetlink = '<a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a>'
138 changesetlink = '<a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a>'
139 changesetbranch = '<dt>branch</dt><dd>{name|escape}</dd>'
139 changesetbranch = '<dt>branch</dt><dd>{name|escape}</dd>'
140 changesetparent = '
140 changesetparent = '
141 <dt>parent {rev}</dt>
141 <dt>parent {rev}</dt>
142 <dd>{changesetlink}</dd>'
142 <dd>{changesetlink}</dd>'
143 changesetparentdiff = '
143 changesetparentdiff = '
144 <dt>parent {rev}</dt>
144 <dt>parent {rev}</dt>
145 <dd>{changesetlink} {ifeq(node, basenode, '(current diff)', '({difffrom})')}</dd>'
145 <dd>{changesetlink} {ifeq(node, basenode, '(current diff)', '({difffrom})')}</dd>'
146 difffrom = '<a href="{url|urlescape}rev/{node|short}:{originalnode|short}{sessionvars%urlparameter}">diff</a>'
146 difffrom = '<a href="{url|urlescape}rev/{node|short}:{originalnode|short}{sessionvars%urlparameter}">diff</a>'
147 filerevbranch = '<dt>branch</dt><dd>{name|escape}</dd>'
147 filerevbranch = '<dt>branch</dt><dd>{name|escape}</dd>'
148 filerevparent = '
148 filerevparent = '
149 <dt>parent {rev}</dt>
149 <dt>parent {rev}</dt>
150 <dd>
150 <dd>
151 <a href="{url|urlescape}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
151 <a href="{url|urlescape}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
152 {rename%filerename}{node|short}
152 {rename%filerename}{node|short}
153 </a>
153 </a>
154 </dd>'
154 </dd>'
155 filerename = '{file|escape}@'
155 filerename = '{file|escape}@'
156 filelogrename = '| <a href="{url|urlescape}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">base</a>'
156 filelogrename = '| <a href="{url|urlescape}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">base</a>'
157 fileannotateparent = '
157 fileannotateparent = '
158 <dt>parent {rev}</dt>
158 <dt>parent {rev}</dt>
159 <dd>
159 <dd>
160 <a href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
160 <a href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
161 {rename%filerename}{node|short}
161 {rename%filerename}{node|short}
162 </a>
162 </a>
163 </dd>'
163 </dd>'
164 changesetchild = '
164 changesetchild = '
165 <dt>child {rev}</dt>
165 <dt>child {rev}</dt>
166 <dd><a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></dd>'
166 <dd><a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></dd>'
167 filerevchild = '
167 filerevchild = '
168 <dt>child {rev}</dt>
168 <dt>child {rev}</dt>
169 <dd>
169 <dd>
170 <a href="{url|urlescape}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a>
170 <a href="{url|urlescape}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a>
171 </dd>'
171 </dd>'
172 fileannotatechild = '
172 fileannotatechild = '
173 <dt>child {rev}</dt>
173 <dt>child {rev}</dt>
174 <dd>
174 <dd>
175 <a href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a>
175 <a href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a>
176 </dd>'
176 </dd>'
177 tags = tags.tmpl
177 tags = tags.tmpl
178 tagentry = '
178 tagentry = '
179 <tr class="parity{parity}">
179 <tr class="parity{parity}">
180 <td class="nowrap age">{date|rfc822date}</td>
180 <td class="nowrap age">{date|rfc822date}</td>
181 <td><a href="{url|urlescape}rev/{tag|revescape}{sessionvars%urlparameter}">{tag|escape}</a></td>
181 <td><a href="{url|urlescape}rev/{tag|revescape}{sessionvars%urlparameter}">{tag|escape}</a></td>
182 <td class="nowrap">
182 <td class="nowrap">
183 <a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">changeset</a> |
183 <a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">changeset</a> |
184 <a href="{url|urlescape}log/{node|short}{sessionvars%urlparameter}">changelog</a> |
184 <a href="{url|urlescape}log/{node|short}{sessionvars%urlparameter}">changelog</a> |
185 <a href="{url|urlescape}file/{node|short}{sessionvars%urlparameter}">files</a>
185 <a href="{url|urlescape}file/{node|short}{sessionvars%urlparameter}">files</a>
186 </td>
186 </td>
187 </tr>'
187 </tr>'
188 bookmarks = bookmarks.tmpl
188 bookmarks = bookmarks.tmpl
189 bookmarkentry = '
189 bookmarkentry = '
190 <tr class="parity{parity}">
190 <tr class="parity{parity}">
191 <td class="nowrap age">{date|rfc822date}</td>
191 <td class="nowrap age">{date|rfc822date}</td>
192 <td><a href="{url|urlescape}rev/{bookmark|revescape}{sessionvars%urlparameter}">{bookmark|escape}</a></td>
192 <td><a href="{url|urlescape}rev/{bookmark|revescape}{sessionvars%urlparameter}">{bookmark|escape}</a></td>
193 <td class="nowrap">
193 <td class="nowrap">
194 <a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">changeset</a> |
194 <a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">changeset</a> |
195 <a href="{url|urlescape}log/{node|short}{sessionvars%urlparameter}">changelog</a> |
195 <a href="{url|urlescape}log/{node|short}{sessionvars%urlparameter}">changelog</a> |
196 <a href="{url|urlescape}file/{node|short}{sessionvars%urlparameter}">files</a>
196 <a href="{url|urlescape}file/{node|short}{sessionvars%urlparameter}">files</a>
197 </td>
197 </td>
198 </tr>'
198 </tr>'
199 branches = branches.tmpl
199 branches = branches.tmpl
200 branchentry = '
200 branchentry = '
201 <tr class="parity{parity}">
201 <tr class="parity{parity}">
202 <td class="nowrap age">{date|rfc822date}</td>
202 <td class="nowrap age">{date|rfc822date}</td>
203 <td class="{status}"><a href="{url|urlescape}shortlog/{branch|revescape}{sessionvars%urlparameter}">{branch|escape}</a></td>
203 <td class="{status}"><a href="{url|urlescape}shortlog/{branch|revescape}{sessionvars%urlparameter}">{branch|escape}</a></td>
204 <td class="nowrap">
204 <td class="nowrap">
205 <a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">changeset</a> |
205 <a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">changeset</a> |
206 <a href="{url|urlescape}log/{node|short}{sessionvars%urlparameter}">changelog</a> |
206 <a href="{url|urlescape}log/{node|short}{sessionvars%urlparameter}">changelog</a> |
207 <a href="{url|urlescape}file/{node|short}{sessionvars%urlparameter}">files</a>
207 <a href="{url|urlescape}file/{node|short}{sessionvars%urlparameter}">files</a>
208 </td>
208 </td>
209 </tr>'
209 </tr>'
210 diffblock = '<div class="diffblock"><pre class="sourcelines">{lines}</pre></div>'
210 diffblock = '<div class="diffblock"><pre class="sourcelines">{lines}</pre></div>'
211 filediffparent = '
211 filediffparent = '
212 <dt>parent {rev}</dt>
212 <dt>parent {rev}</dt>
213 <dd><a href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></dd>'
213 <dd><a href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></dd>'
214 filecompparent = '
214 filecompparent = '
215 <dt>parent {rev}</dt>
215 <dt>parent {rev}</dt>
216 <dd><a href="{url|urlescape}comparison/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></dd>'
216 <dd><a href="{url|urlescape}comparison/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></dd>'
217 filediffchild = '
217 filediffchild = '
218 <dt>child {rev}</dt>
218 <dt>child {rev}</dt>
219 <dd><a href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></dd>'
219 <dd><a href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></dd>'
220 filecompchild = '
220 filecompchild = '
221 <dt>child {rev}</dt>
221 <dt>child {rev}</dt>
222 <dd><a href="{url|urlescape}comparison/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></dd>'
222 <dd><a href="{url|urlescape}comparison/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></dd>'
223 shortlog = shortlog.tmpl
223 shortlog = shortlog.tmpl
224 phasetag = '{ifeq(phase, 'public', '', '<span class="phasetag" title="{phase|escape}">{phase|escape}</span> ')}'
224 phasetag = '{ifeq(phase, 'public', '', '<span class="phasetag" title="{phase|escape}">{phase|escape}</span> ')}'
225 obsoletetag = '{if(obsolete, '<span class="obsoletetag" title="obsolete">obsolete</span> ')}'
225 obsoletetag = '{if(obsolete, '<span class="obsoletetag" title="obsolete">obsolete</span> ')}'
226 instabilitytag = '<span class="instabilitytag" title="{name|escape}">{name|escape}</span> '
226 tagtag = '<span class="tagtag" title="{name|escape}">{name|escape}</span> '
227 tagtag = '<span class="tagtag" title="{name|escape}">{name|escape}</span> '
227 branchtag = '<span class="branchtag" title="{name|escape}">{name|escape}</span> '
228 branchtag = '<span class="branchtag" title="{name|escape}">{name|escape}</span> '
228 inbranchtag = '<span class="inbranchtag" title="{name|escape}">{name|escape}</span> '
229 inbranchtag = '<span class="inbranchtag" title="{name|escape}">{name|escape}</span> '
229 bookmarktag = '<span class="bookmarktag" title="{name|escape}">{name|escape}</span> '
230 bookmarktag = '<span class="bookmarktag" title="{name|escape}">{name|escape}</span> '
230 alltags = '<span class="logtags">{phasetag}{obsoletetag}{inbranch%inbranchtag}{branches%branchtag}{tags%tagtag}{bookmarks%bookmarktag}</span>'
231 alltags = '<span class="logtags">{phasetag}{obsoletetag}{instabilities%instabilitytag}{inbranch%inbranchtag}{branches%branchtag}{tags%tagtag}{bookmarks%bookmarktag}</span>'
231 shortlogentry = '
232 shortlogentry = '
232 <tr class="parity{parity}">
233 <tr class="parity{parity}">
233 <td class="nowrap age">{date|rfc822date}</td>
234 <td class="nowrap age">{date|rfc822date}</td>
234 <td>{author|person}</td>
235 <td>{author|person}</td>
235 <td>
236 <td>
236 <a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">
237 <a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">
237 {desc|strip|firstline|escape|nonempty}
238 {desc|strip|firstline|escape|nonempty}
238 {alltags}
239 {alltags}
239 </a>
240 </a>
240 </td>
241 </td>
241 <td class="nowrap">
242 <td class="nowrap">
242 <a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">changeset</a> |
243 <a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">changeset</a> |
243 <a href="{url|urlescape}file/{node|short}{sessionvars%urlparameter}">files</a>
244 <a href="{url|urlescape}file/{node|short}{sessionvars%urlparameter}">files</a>
244 </td>
245 </td>
245 </tr>'
246 </tr>'
246 filelogentry = '
247 filelogentry = '
247 <tr class="parity{parity}">
248 <tr class="parity{parity}">
248 <td class="nowrap age">{date|rfc822date}</td>
249 <td class="nowrap age">{date|rfc822date}</td>
249 <td>{author|person}</td>
250 <td>{author|person}</td>
250 <td>
251 <td>
251 <a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">
252 <a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">
252 {desc|strip|firstline|escape|nonempty}
253 {desc|strip|firstline|escape|nonempty}
253 {alltags}
254 {alltags}
254 </a>
255 </a>
255 </td>
256 </td>
256 <td class="nowrap">
257 <td class="nowrap">
257 <a href="{url|urlescape}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a> |
258 <a href="{url|urlescape}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a> |
258 <a href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a> |
259 <a href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a> |
259 <a href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a>
260 <a href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a>
260 {rename%filelogrename}
261 {rename%filelogrename}
261 </td>
262 </td>
262 </tr>'
263 </tr>'
263 archiveentry = '<li><a href="{url|urlescape}archive/{symrev}{extension}{ifeq(path,'/','',path|urlescape)}">{type|escape}</a></li>'
264 archiveentry = '<li><a href="{url|urlescape}archive/{symrev}{extension}{ifeq(path,'/','',path|urlescape)}">{type|escape}</a></li>'
264 indexentry = '
265 indexentry = '
265 <tr class="parity{parity}">
266 <tr class="parity{parity}">
266 <td><a href="{url|urlescape}{sessionvars%urlparameter}">{name|escape}</a></td>
267 <td><a href="{url|urlescape}{sessionvars%urlparameter}">{name|escape}</a></td>
267 <td>{description}</td>
268 <td>{description}</td>
268 <td>{contact|obfuscate}</td>
269 <td>{contact|obfuscate}</td>
269 <td class="age">{lastchange|rfc822date}</td>
270 <td class="age">{lastchange|rfc822date}</td>
270 <td class="indexlinks">{archives%indexarchiveentry}</td>
271 <td class="indexlinks">{archives%indexarchiveentry}</td>
271 <td>
272 <td>
272 {if(isdirectory, '',
273 {if(isdirectory, '',
273 '<div class="rss_logo">
274 '<div class="rss_logo">
274 <a href="{url|urlescape}rss-log">RSS</a> <a href="{url|urlescape}atom-log">Atom</a>
275 <a href="{url|urlescape}rss-log">RSS</a> <a href="{url|urlescape}atom-log">Atom</a>
275 </div>'
276 </div>'
276 )}
277 )}
277 </td>
278 </td>
278 </tr>\n'
279 </tr>\n'
279 indexarchiveentry = '<a href="{url|urlescape}archive/{node|short}{extension}">{type|escape}</a> '
280 indexarchiveentry = '<a href="{url|urlescape}archive/{node|short}{extension}">{type|escape}</a> '
280 index = index.tmpl
281 index = index.tmpl
281 urlparameter = '{separator}{name}={value|urlescape}'
282 urlparameter = '{separator}{name}={value|urlescape}'
282 hiddenformentry = '<input type="hidden" name="{name}" value="{value|escape}" />'
283 hiddenformentry = '<input type="hidden" name="{name}" value="{value|escape}" />'
283 graph = graph.tmpl
284 graph = graph.tmpl
284 breadcrumb = '&gt; <a href="{url|urlescape}">{name|escape}</a> '
285 breadcrumb = '&gt; <a href="{url|urlescape}">{name|escape}</a> '
285
286
286 searchform = '
287 searchform = '
287 <form action="{url|urlescape}log">
288 <form action="{url|urlescape}log">
288 {sessionvars%hiddenformentry}
289 {sessionvars%hiddenformentry}
289 <dl class="search">
290 <dl class="search">
290 <dt><label>Search: </label></dt>
291 <dt><label>Search: </label></dt>
291 <dd><input type="text" name="rev" value="{query|escape}" /></dd>
292 <dd><input type="text" name="rev" value="{query|escape}" /></dd>
292 </dl>
293 </dl>
293 </form>'
294 </form>'
@@ -1,271 +1,272 b''
1 default = 'shortlog'
1 default = 'shortlog'
2
2
3 mimetype = 'text/html; charset={encoding}'
3 mimetype = 'text/html; charset={encoding}'
4 header = header.tmpl
4 header = header.tmpl
5 footer = footer.tmpl
5 footer = footer.tmpl
6 search = search.tmpl
6 search = search.tmpl
7
7
8 changelog = shortlog.tmpl
8 changelog = shortlog.tmpl
9 shortlog = shortlog.tmpl
9 shortlog = shortlog.tmpl
10 shortlogentry = shortlogentry.tmpl
10 shortlogentry = shortlogentry.tmpl
11 graph = graph.tmpl
11 graph = graph.tmpl
12 help = help.tmpl
12 help = help.tmpl
13 helptopics = helptopics.tmpl
13 helptopics = helptopics.tmpl
14
14
15 helpentry = '
15 helpentry = '
16 <tr><td>
16 <tr><td>
17 <a href="{url|urlescape}help/{topic|escape}{sessionvars%urlparameter}">
17 <a href="{url|urlescape}help/{topic|escape}{sessionvars%urlparameter}">
18 {if(basename, '{basename|escape}', '{topic|escape}')}
18 {if(basename, '{basename|escape}', '{topic|escape}')}
19 </a>
19 </a>
20 </td><td>
20 </td><td>
21 {summary|escape}
21 {summary|escape}
22 </td></tr>'
22 </td></tr>'
23
23
24 naventry = '<a href="{url|urlescape}log/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
24 naventry = '<a href="{url|urlescape}log/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
25 navshortentry = '<a href="{url|urlescape}shortlog/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
25 navshortentry = '<a href="{url|urlescape}shortlog/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
26 navgraphentry = '<a href="{url|urlescape}graph/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
26 navgraphentry = '<a href="{url|urlescape}graph/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
27 filenaventry = '<a href="{url|urlescape}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{label|escape}</a> '
27 filenaventry = '<a href="{url|urlescape}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{label|escape}</a> '
28 filedifflink = '<a href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a> '
28 filedifflink = '<a href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a> '
29 filenodelink = '<a href="{url|urlescape}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a> '
29 filenodelink = '<a href="{url|urlescape}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a> '
30 filenolink = '{file|escape} '
30 filenolink = '{file|escape} '
31 fileellipses = '...'
31 fileellipses = '...'
32 diffstatlink = diffstat.tmpl
32 diffstatlink = diffstat.tmpl
33 diffstatnolink = diffstat.tmpl
33 diffstatnolink = diffstat.tmpl
34 changelogentry = shortlogentry.tmpl
34 changelogentry = shortlogentry.tmpl
35 searchentry = shortlogentry.tmpl
35 searchentry = shortlogentry.tmpl
36 changeset = changeset.tmpl
36 changeset = changeset.tmpl
37 manifest = manifest.tmpl
37 manifest = manifest.tmpl
38
38
39 nav = '{before%naventry} {after%naventry}'
39 nav = '{before%naventry} {after%naventry}'
40 navshort = '{before%navshortentry}{after%navshortentry}'
40 navshort = '{before%navshortentry}{after%navshortentry}'
41 navgraph = '{before%navgraphentry}{after%navgraphentry}'
41 navgraph = '{before%navgraphentry}{after%navgraphentry}'
42 filenav = '{before%filenaventry}{after%filenaventry}'
42 filenav = '{before%filenaventry}{after%filenaventry}'
43
43
44 direntry = '
44 direntry = '
45 <tr class="fileline">
45 <tr class="fileline">
46 <td class="name">
46 <td class="name">
47 <a href="{url|urlescape}file/{symrev}{path|urlescape}{sessionvars%urlparameter}">
47 <a href="{url|urlescape}file/{symrev}{path|urlescape}{sessionvars%urlparameter}">
48 <img src="{staticurl|urlescape}coal-folder.png" alt="dir."/> {basename|escape}/
48 <img src="{staticurl|urlescape}coal-folder.png" alt="dir."/> {basename|escape}/
49 </a>
49 </a>
50 <a href="{url|urlescape}file/{symrev}{path|urlescape}/{emptydirs|urlescape}{sessionvars%urlparameter}">
50 <a href="{url|urlescape}file/{symrev}{path|urlescape}/{emptydirs|urlescape}{sessionvars%urlparameter}">
51 {emptydirs|escape}
51 {emptydirs|escape}
52 </a>
52 </a>
53 </td>
53 </td>
54 <td class="size"></td>
54 <td class="size"></td>
55 <td class="permissions">drwxr-xr-x</td>
55 <td class="permissions">drwxr-xr-x</td>
56 </tr>'
56 </tr>'
57
57
58 fileentry = '
58 fileentry = '
59 <tr class="fileline">
59 <tr class="fileline">
60 <td class="filename">
60 <td class="filename">
61 <a href="{url|urlescape}file/{symrev}/{file|urlescape}{sessionvars%urlparameter}">
61 <a href="{url|urlescape}file/{symrev}/{file|urlescape}{sessionvars%urlparameter}">
62 <img src="{staticurl|urlescape}coal-file.png" alt="file"/> {basename|escape}
62 <img src="{staticurl|urlescape}coal-file.png" alt="file"/> {basename|escape}
63 </a>
63 </a>
64 </td>
64 </td>
65 <td class="size">{size}</td>
65 <td class="size">{size}</td>
66 <td class="permissions">{permissions|permissions}</td>
66 <td class="permissions">{permissions|permissions}</td>
67 </tr>'
67 </tr>'
68
68
69 filerevision = filerevision.tmpl
69 filerevision = filerevision.tmpl
70 fileannotate = fileannotate.tmpl
70 fileannotate = fileannotate.tmpl
71 filediff = filediff.tmpl
71 filediff = filediff.tmpl
72 filecomparison = filecomparison.tmpl
72 filecomparison = filecomparison.tmpl
73 filelog = filelog.tmpl
73 filelog = filelog.tmpl
74 fileline = '
74 fileline = '
75 <span id="{lineid}">{strip(line|escape, '\r\n')}</span><a href="#{lineid}"></a>'
75 <span id="{lineid}">{strip(line|escape, '\r\n')}</span><a href="#{lineid}"></a>'
76 filelogentry = filelogentry.tmpl
76 filelogentry = filelogentry.tmpl
77
77
78 annotateline = '
78 annotateline = '
79 <tr id="{lineid}"{ifeq(node, originalnode, ' class="thisrev"')}>
79 <tr id="{lineid}"{ifeq(node, originalnode, ' class="thisrev"')}>
80 <td class="annotate parity{blockparity}">
80 <td class="annotate parity{blockparity}">
81 {if(blockhead,
81 {if(blockhead,
82 '<a href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}#l{targetline}">
82 '<a href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}#l{targetline}">
83 {rev}
83 {rev}
84 </a>')}
84 </a>')}
85 <div class="annotate-info">
85 <div class="annotate-info">
86 <div>
86 <div>
87 <a href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}#l{targetline}">
87 <a href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}#l{targetline}">
88 {node|short}</a>
88 {node|short}</a>
89 {desc|escape|firstline}
89 {desc|escape|firstline}
90 </div>
90 </div>
91 <div><em>{author|obfuscate}</em></div>
91 <div><em>{author|obfuscate}</em></div>
92 <div>parents: {parents%annotateparent}</div>
92 <div>parents: {parents%annotateparent}</div>
93 <a href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a>
93 <a href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a>
94 <a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">changeset</a>
94 <a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">changeset</a>
95 </div>
95 </div>
96 </td>
96 </td>
97 <td class="source followlines-btn-parent"><a href="#{lineid}">{linenumber}</a> {line|escape}</td>
97 <td class="source followlines-btn-parent"><a href="#{lineid}">{linenumber}</a> {line|escape}</td>
98 </tr>'
98 </tr>'
99 annotateparent = '
99 annotateparent = '
100 <a href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{rev}</a>'
100 <a href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{rev}</a>'
101 diffblock = '<div class="bottomline inc-lineno"><pre class="sourcelines wrap">{lines}</pre></div>'
101 diffblock = '<div class="bottomline inc-lineno"><pre class="sourcelines wrap">{lines}</pre></div>'
102 difflineplus = '
102 difflineplus = '
103 <span id="{lineid}" class="plusline">{strip(line|escape, '\r\n')}</span><a href="#{lineid}"></a>'
103 <span id="{lineid}" class="plusline">{strip(line|escape, '\r\n')}</span><a href="#{lineid}"></a>'
104 difflineminus = '
104 difflineminus = '
105 <span id="{lineid}" class="minusline">{strip(line|escape, '\r\n')}</span><a href="#{lineid}"></a>'
105 <span id="{lineid}" class="minusline">{strip(line|escape, '\r\n')}</span><a href="#{lineid}"></a>'
106 difflineat = '
106 difflineat = '
107 <span id="{lineid}" class="atline">{strip(line|escape, '\r\n')}</span><a href="#{lineid}"></a>'
107 <span id="{lineid}" class="atline">{strip(line|escape, '\r\n')}</span><a href="#{lineid}"></a>'
108 diffline = '
108 diffline = '
109 <span id="{lineid}">{strip(line|escape, '\r\n')}</span><a href="#{lineid}"></a>'
109 <span id="{lineid}">{strip(line|escape, '\r\n')}</span><a href="#{lineid}"></a>'
110
110
111 comparisonblock ='
111 comparisonblock ='
112 <tbody class="block">
112 <tbody class="block">
113 {lines}
113 {lines}
114 </tbody>'
114 </tbody>'
115 comparisonline = '
115 comparisonline = '
116 <tr id="{lineid}">
116 <tr id="{lineid}">
117 <td class="source {type}"><a href="#{lineid}">{leftlinenumber}</a> {leftline|escape}</td>
117 <td class="source {type}"><a href="#{lineid}">{leftlinenumber}</a> {leftline|escape}</td>
118 <td class="source {type}"><a href="#{lineid}">{rightlinenumber}</a> {rightline|escape}</td>
118 <td class="source {type}"><a href="#{lineid}">{rightlinenumber}</a> {rightline|escape}</td>
119 </tr>'
119 </tr>'
120
120
121 changesetparent = '<a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a> '
121 changesetparent = '<a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a> '
122
122
123 changesetparentdiff = '
123 changesetparentdiff = '
124 {changesetparent}
124 {changesetparent}
125 {ifeq(node, basenode, '(current diff)', '({difffrom})')}'
125 {ifeq(node, basenode, '(current diff)', '({difffrom})')}'
126
126
127 difffrom = '<a href="{url|urlescape}rev/{node|short}:{originalnode|short}{sessionvars%urlparameter}">diff</a>'
127 difffrom = '<a href="{url|urlescape}rev/{node|short}:{originalnode|short}{sessionvars%urlparameter}">diff</a>'
128
128
129 filerevparent = '<a href="{url|urlescape}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{rename%filerename}{node|short}</a> '
129 filerevparent = '<a href="{url|urlescape}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{rename%filerename}{node|short}</a> '
130 filerevchild = '<a href="{url|urlescape}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a> '
130 filerevchild = '<a href="{url|urlescape}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a> '
131
131
132 filerename = '{file|escape}@'
132 filerename = '{file|escape}@'
133 filelogrename = '
133 filelogrename = '
134 <span class="base">
134 <span class="base">
135 base
135 base
136 <a href="{url|urlescape}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
136 <a href="{url|urlescape}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
137 {file|escape}@{node|short}
137 {file|escape}@{node|short}
138 </a>
138 </a>
139 </span>'
139 </span>'
140 fileannotateparent = '
140 fileannotateparent = '
141 <tr>
141 <tr>
142 <td class="metatag">parent:</td>
142 <td class="metatag">parent:</td>
143 <td>
143 <td>
144 <a href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
144 <a href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
145 {rename%filerename}{node|short}
145 {rename%filerename}{node|short}
146 </a>
146 </a>
147 </td>
147 </td>
148 </tr>'
148 </tr>'
149 changesetchild = ' <a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a>'
149 changesetchild = ' <a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a>'
150 fileannotatechild = '
150 fileannotatechild = '
151 <tr>
151 <tr>
152 <td class="metatag">child:</td>
152 <td class="metatag">child:</td>
153 <td>
153 <td>
154 <a href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
154 <a href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
155 {node|short}
155 {node|short}
156 </a>
156 </a>
157 </td>
157 </td>
158 </tr>'
158 </tr>'
159 tags = tags.tmpl
159 tags = tags.tmpl
160 tagentry = '
160 tagentry = '
161 <tr class="tagEntry">
161 <tr class="tagEntry">
162 <td>
162 <td>
163 <a href="{url|urlescape}rev/{tag|revescape}{sessionvars%urlparameter}">
163 <a href="{url|urlescape}rev/{tag|revescape}{sessionvars%urlparameter}">
164 {tag|escape}
164 {tag|escape}
165 </a>
165 </a>
166 </td>
166 </td>
167 <td class="node">
167 <td class="node">
168 <a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">
168 <a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">
169 {node|short}
169 {node|short}
170 </a>
170 </a>
171 </td>
171 </td>
172 </tr>'
172 </tr>'
173 bookmarks = bookmarks.tmpl
173 bookmarks = bookmarks.tmpl
174 bookmarkentry = '
174 bookmarkentry = '
175 <tr class="tagEntry">
175 <tr class="tagEntry">
176 <td>
176 <td>
177 <a href="{url|urlescape}rev/{bookmark|revescape}{sessionvars%urlparameter}">
177 <a href="{url|urlescape}rev/{bookmark|revescape}{sessionvars%urlparameter}">
178 {bookmark|escape}
178 {bookmark|escape}
179 </a>
179 </a>
180 </td>
180 </td>
181 <td class="node">
181 <td class="node">
182 <a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">
182 <a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">
183 {node|short}
183 {node|short}
184 </a>
184 </a>
185 </td>
185 </td>
186 </tr>'
186 </tr>'
187 branches = branches.tmpl
187 branches = branches.tmpl
188 branchentry = '
188 branchentry = '
189 <tr class="tagEntry">
189 <tr class="tagEntry">
190 <td>
190 <td>
191 <a href="{url|urlescape}shortlog/{branch|revescape}{sessionvars%urlparameter}" class="{status}">
191 <a href="{url|urlescape}shortlog/{branch|revescape}{sessionvars%urlparameter}" class="{status}">
192 {branch|escape}
192 {branch|escape}
193 </a>
193 </a>
194 </td>
194 </td>
195 <td class="node">
195 <td class="node">
196 <a href="{url|urlescape}shortlog/{node|short}{sessionvars%urlparameter}" class="{status}">
196 <a href="{url|urlescape}shortlog/{node|short}{sessionvars%urlparameter}" class="{status}">
197 {node|short}
197 {node|short}
198 </a>
198 </a>
199 </td>
199 </td>
200 </tr>'
200 </tr>'
201 phasetag = '{ifeq(phase, 'public', '', '<span class="phase">{phase|escape}</span> ')}'
201 phasetag = '{ifeq(phase, 'public', '', '<span class="phase">{phase|escape}</span> ')}'
202 obsoletetag = '{if(obsolete, '<span class="obsolete">obsolete</span> ')}'
202 obsoletetag = '{if(obsolete, '<span class="obsolete">obsolete</span> ')}'
203 instabilitytag = '<span class="instability">{name|escape}</span> '
203 changelogtag = '<span class="tag">{name|escape}</span> '
204 changelogtag = '<span class="tag">{name|escape}</span> '
204 changesettag = '<span class="tag">{tag|escape}</span> '
205 changesettag = '<span class="tag">{tag|escape}</span> '
205 changesetbookmark = '<span class="tag">{bookmark|escape}</span> '
206 changesetbookmark = '<span class="tag">{bookmark|escape}</span> '
206 changelogbranchhead = '<span class="branchhead">{name|escape}</span> '
207 changelogbranchhead = '<span class="branchhead">{name|escape}</span> '
207 changelogbranchname = '<span class="branchname">{name|escape}</span> '
208 changelogbranchname = '<span class="branchname">{name|escape}</span> '
208 alltags = '{phasetag}{obsoletetag}{inbranch%changelogbranchname}{branches%changelogbranchhead}{tags%changelogtag}{bookmarks%changelogtag}'
209 alltags = '{phasetag}{obsoletetag}{instabilities%instabilitytag}{inbranch%changelogbranchname}{branches%changelogbranchhead}{tags%changelogtag}{bookmarks%changelogtag}'
209
210
210 filediffparent = '
211 filediffparent = '
211 <tr>
212 <tr>
212 <th class="parent">parent {rev}:</th>
213 <th class="parent">parent {rev}:</th>
213 <td class="parent"><a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td>
214 <td class="parent"><a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td>
214 </tr>'
215 </tr>'
215 filediffchild = '
216 filediffchild = '
216 <tr>
217 <tr>
217 <th class="child">child {rev}:</th>
218 <th class="child">child {rev}:</th>
218 <td class="child"><a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a>
219 <td class="child"><a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a>
219 </td>
220 </td>
220 </tr>'
221 </tr>'
221
222
222 indexentry = '
223 indexentry = '
223 <tr>
224 <tr>
224 <td><a href="{url|urlescape}{sessionvars%urlparameter}">{name|escape}</a></td>
225 <td><a href="{url|urlescape}{sessionvars%urlparameter}">{name|escape}</a></td>
225 <td>{description}</td>
226 <td>{description}</td>
226 <td>{contact|obfuscate}</td>
227 <td>{contact|obfuscate}</td>
227 <td class="age">{lastchange|rfc822date}</td>
228 <td class="age">{lastchange|rfc822date}</td>
228 <td class="indexlinks">{archives%indexarchiveentry}</td>
229 <td class="indexlinks">{archives%indexarchiveentry}</td>
229 <td>
230 <td>
230 {if(isdirectory, '',
231 {if(isdirectory, '',
231 '<a href="{url|urlescape}atom-log" title="subscribe to repository atom feed">
232 '<a href="{url|urlescape}atom-log" title="subscribe to repository atom feed">
232 <img class="atom-logo" src="{staticurl|urlescape}feed-icon-14x14.png" alt="subscribe to repository atom feed">
233 <img class="atom-logo" src="{staticurl|urlescape}feed-icon-14x14.png" alt="subscribe to repository atom feed">
233 </a>'
234 </a>'
234 )}
235 )}
235 </td>
236 </td>
236 </tr>\n'
237 </tr>\n'
237 indexarchiveentry = '<a href="{url|urlescape}archive/{node|short}{extension|urlescape}">&nbsp;&darr;{type|escape}</a>'
238 indexarchiveentry = '<a href="{url|urlescape}archive/{node|short}{extension|urlescape}">&nbsp;&darr;{type|escape}</a>'
238 index = index.tmpl
239 index = index.tmpl
239 archiveentry = '
240 archiveentry = '
240 <li>
241 <li>
241 <a href="{url|urlescape}archive/{symrev}{extension|urlescape}{ifeq(path,'/','',path|urlescape)}">{type|escape}</a>
242 <a href="{url|urlescape}archive/{symrev}{extension|urlescape}{ifeq(path,'/','',path|urlescape)}">{type|escape}</a>
242 </li>'
243 </li>'
243 notfound = notfound.tmpl
244 notfound = notfound.tmpl
244 error = error.tmpl
245 error = error.tmpl
245 urlparameter = '{separator}{name}={value|urlescape}'
246 urlparameter = '{separator}{name}={value|urlescape}'
246 hiddenformentry = '<input type="hidden" name="{name}" value="{value|escape}" />'
247 hiddenformentry = '<input type="hidden" name="{name}" value="{value|escape}" />'
247 breadcrumb = '&gt; <a href="{url|urlescape}">{name|escape}</a> '
248 breadcrumb = '&gt; <a href="{url|urlescape}">{name|escape}</a> '
248
249
249 searchform = '
250 searchform = '
250 <form class="search" action="{url|urlescape}log">
251 <form class="search" action="{url|urlescape}log">
251 {sessionvars%hiddenformentry}
252 {sessionvars%hiddenformentry}
252 <p><input name="rev" id="search1" type="text" size="30" value="{query|escape}" /></p>
253 <p><input name="rev" id="search1" type="text" size="30" value="{query|escape}" /></p>
253 <div id="hint">{searchhint}</div>
254 <div id="hint">{searchhint}</div>
254 </form>'
255 </form>'
255 searchhint = 'Find changesets by keywords (author, files, the commit message), revision
256 searchhint = 'Find changesets by keywords (author, files, the commit message), revision
256 number or hash, or <a href="{url|urlescape}help/revsets">revset expression</a>.'
257 number or hash, or <a href="{url|urlescape}help/revsets">revset expression</a>.'
257
258
258 diffoptsform = '
259 diffoptsform = '
259 <form id="diffopts-form"
260 <form id="diffopts-form"
260 data-ignorews="{if(get(diffopts, 'ignorews'), '1', '0')}"
261 data-ignorews="{if(get(diffopts, 'ignorews'), '1', '0')}"
261 data-ignorewsamount="{if(get(diffopts, 'ignorewsamount'), '1', '0')}"
262 data-ignorewsamount="{if(get(diffopts, 'ignorewsamount'), '1', '0')}"
262 data-ignorewseol="{if(get(diffopts, 'ignorewseol'), '1', '0')}"
263 data-ignorewseol="{if(get(diffopts, 'ignorewseol'), '1', '0')}"
263 data-ignoreblanklines="{if(get(diffopts, 'ignoreblanklines'), '1', '0')}">
264 data-ignoreblanklines="{if(get(diffopts, 'ignoreblanklines'), '1', '0')}">
264 <span>Ignore whitespace changes - </span>
265 <span>Ignore whitespace changes - </span>
265 <span>Everywhere:</span>
266 <span>Everywhere:</span>
266 <input id="ignorews-checkbox" type="checkbox" />
267 <input id="ignorews-checkbox" type="checkbox" />
267 <span>Within whitespace:</span>
268 <span>Within whitespace:</span>
268 <input id="ignorewsamount-checkbox" type="checkbox" />
269 <input id="ignorewsamount-checkbox" type="checkbox" />
269 <span>At end of lines:</span>
270 <span>At end of lines:</span>
270 <input id="ignorewseol-checkbox" type="checkbox" />
271 <input id="ignorewseol-checkbox" type="checkbox" />
271 </form>'
272 </form>'
@@ -1,33 +1,37 b''
1 <table class="logEntry parity{parity}">
1 <table class="logEntry parity{parity}">
2 <tr>
2 <tr>
3 <th class="label"><span class="age">{date|rfc822date}</span>:</th>
3 <th class="label"><span class="age">{date|rfc822date}</span>:</th>
4 <th class="firstline">{desc|strip|firstline|escape|nonempty}</th>
4 <th class="firstline">{desc|strip|firstline|escape|nonempty}</th>
5 </tr>
5 </tr>
6 <tr>
6 <tr>
7 <th class="revision">changeset {rev}:</th>
7 <th class="revision">changeset {rev}:</th>
8 <td class="node"><a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td>
8 <td class="node"><a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td>
9 </tr>
9 </tr>
10 {parent%changelogparent}
10 {parent%changelogparent}
11 {child%changelogchild}
11 {child%changelogchild}
12 {changelogtag}
12 {changelogtag}
13 <tr>
13 <tr>
14 <th class="author">author:</th>
14 <th class="author">author:</th>
15 <td class="author">{author|obfuscate}</td>
15 <td class="author">{author|obfuscate}</td>
16 </tr>
16 </tr>
17 <tr>
17 <tr>
18 <th class="date">date:</th>
18 <th class="date">date:</th>
19 <td class="date">{date|rfc822date}</td>
19 <td class="date">{date|rfc822date}</td>
20 </tr>
20 </tr>
21 {ifeq(phase, 'public', '', '<tr>
21 {ifeq(phase, 'public', '', '<tr>
22 <th class="phase">phase:</th>
22 <th class="phase">phase:</th>
23 <td class="phase">{phase|escape}</td>
23 <td class="phase">{phase|escape}</td>
24 </tr>')}
24 </tr>')}
25 {if(obsolete, '<tr>
25 {if(obsolete, '<tr>
26 <th class="obsolete">obsolete:</th>
26 <th class="obsolete">obsolete:</th>
27 <td class="obsolete">yes</td>
27 <td class="obsolete">yes</td>
28 </tr>')}
28 </tr>')}
29 {ifeq(count(instabilities), '0', '', '<tr>
30 <th class="instabilities">instabilities:</th>
31 <td class="instabilities">{instabilities%"{name} "|escape}</td>
32 </tr>')}
29 <tr>
33 <tr>
30 <th class="files"><a href="{url|urlescape}file/{node|short}{sessionvars%urlparameter}">files</a>:</th>
34 <th class="files"><a href="{url|urlescape}file/{node|short}{sessionvars%urlparameter}">files</a>:</th>
31 <td class="files">{files}</td>
35 <td class="files">{files}</td>
32 </tr>
36 </tr>
33 </table>
37 </table>
@@ -1,60 +1,64 b''
1 {header}
1 {header}
2 <title>{repo|escape}: changeset {node|short}</title>
2 <title>{repo|escape}: changeset {node|short}</title>
3 </head>
3 </head>
4 <body>
4 <body>
5
5
6 <div class="buttons">
6 <div class="buttons">
7 <a href="{url|urlescape}log/{symrev}{sessionvars%urlparameter}">changelog</a>
7 <a href="{url|urlescape}log/{symrev}{sessionvars%urlparameter}">changelog</a>
8 <a href="{url|urlescape}shortlog/{symrev}{sessionvars%urlparameter}">shortlog</a>
8 <a href="{url|urlescape}shortlog/{symrev}{sessionvars%urlparameter}">shortlog</a>
9 <a href="{url|urlescape}graph/{symrev}{sessionvars%urlparameter}">graph</a>
9 <a href="{url|urlescape}graph/{symrev}{sessionvars%urlparameter}">graph</a>
10 <a href="{url|urlescape}tags{sessionvars%urlparameter}">tags</a>
10 <a href="{url|urlescape}tags{sessionvars%urlparameter}">tags</a>
11 <a href="{url|urlescape}branches{sessionvars%urlparameter}">branches</a>
11 <a href="{url|urlescape}branches{sessionvars%urlparameter}">branches</a>
12 <a href="{url|urlescape}file/{symrev}{sessionvars%urlparameter}">files</a>
12 <a href="{url|urlescape}file/{symrev}{sessionvars%urlparameter}">files</a>
13 <a href="{url|urlescape}raw-rev/{symrev}">raw</a>
13 <a href="{url|urlescape}raw-rev/{symrev}">raw</a>
14 {archives%archiveentry}
14 {archives%archiveentry}
15 <a href="{url|urlescape}help{sessionvars%urlparameter}">help</a>
15 <a href="{url|urlescape}help{sessionvars%urlparameter}">help</a>
16 </div>
16 </div>
17
17
18 <h2><a href="/">Mercurial</a> {pathdef%breadcrumb} / changeset: {desc|strip|escape|firstline|nonempty}</h2>
18 <h2><a href="/">Mercurial</a> {pathdef%breadcrumb} / changeset: {desc|strip|escape|firstline|nonempty}</h2>
19
19
20 <table id="changesetEntry">
20 <table id="changesetEntry">
21 <tr>
21 <tr>
22 <th class="changeset">changeset {rev}:</th>
22 <th class="changeset">changeset {rev}:</th>
23 <td class="changeset"><a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td>
23 <td class="changeset"><a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td>
24 </tr>
24 </tr>
25 {ifeq(count(parent), '2', parent%changesetparentdiff, parent%changesetparent)}
25 {ifeq(count(parent), '2', parent%changesetparentdiff, parent%changesetparent)}
26 {child%changesetchild}
26 {child%changesetchild}
27 {changesettag}
27 {changesettag}
28 <tr>
28 <tr>
29 <th class="author">author:</th>
29 <th class="author">author:</th>
30 <td class="author">{author|obfuscate}</td>
30 <td class="author">{author|obfuscate}</td>
31 </tr>
31 </tr>
32 <tr>
32 <tr>
33 <th class="date">date:</th>
33 <th class="date">date:</th>
34 <td class="date age">{date|rfc822date}</td>
34 <td class="date age">{date|rfc822date}</td>
35 </tr>
35 </tr>
36 {ifeq(phase, 'public', '', '<tr>
36 {ifeq(phase, 'public', '', '<tr>
37 <th class="phase">phase:</th>
37 <th class="phase">phase:</th>
38 <td class="phase">{phase|escape}</td>
38 <td class="phase">{phase|escape}</td>
39 </tr>')}
39 </tr>')}
40 {if(obsolete, '<tr>
40 {if(obsolete, '<tr>
41 <th class="obsolete">obsolete:</th>
41 <th class="obsolete">obsolete:</th>
42 <td class="obsolete">yes</td>
42 <td class="obsolete">yes</td>
43 </tr>')}
43 </tr>')}
44 {ifeq(count(instabilities), '0', '', '<tr>
45 <th class="instabilities">instabilities:</th>
46 <td class="instabilities">{instabilities%"{name} "|escape}</td>
47 </tr>')}
44 <tr>
48 <tr>
45 <th class="files">files:</th>
49 <th class="files">files:</th>
46 <td class="files">{files}</td>
50 <td class="files">{files}</td>
47 </tr>
51 </tr>
48 <tr>
52 <tr>
49 <th class="description">description:</th>
53 <th class="description">description:</th>
50 <td class="description">{desc|strip|escape|websub|addbreaks|nonempty}</td>
54 <td class="description">{desc|strip|escape|websub|addbreaks|nonempty}</td>
51 </tr>
55 </tr>
52 </table>
56 </table>
53
57
54 <div id="changesetDiff">
58 <div id="changesetDiff">
55 {diff}
59 {diff}
56 </div>
60 </div>
57
61
58 {footer}
62 {footer}
59
63
60
64
@@ -1,397 +1,401 b''
1 body { font-family: sans-serif; font-size: 12px; border:solid #d9d8d1; border-width:1px; margin:10px; background: white; color: black; }
1 body { font-family: sans-serif; font-size: 12px; border:solid #d9d8d1; border-width:1px; margin:10px; background: white; color: black; }
2 a { color:#0000cc; }
2 a { color:#0000cc; }
3 a:hover, a:visited, a:active { color:#880000; }
3 a:hover, a:visited, a:active { color:#880000; }
4 div.page_header { height:25px; padding:8px; font-size:18px; font-weight:bold; background-color:#d9d8d1; }
4 div.page_header { height:25px; padding:8px; font-size:18px; font-weight:bold; background-color:#d9d8d1; }
5 div.page_header a:visited { color:#0000cc; }
5 div.page_header a:visited { color:#0000cc; }
6 div.page_header a:hover { color:#880000; }
6 div.page_header a:hover { color:#880000; }
7 div.page_nav {
7 div.page_nav {
8 padding:8px;
8 padding:8px;
9 display: flex;
9 display: flex;
10 justify-content: space-between;
10 justify-content: space-between;
11 align-items: center;
11 align-items: center;
12 }
12 }
13 div.page_nav a:visited { color:#0000cc; }
13 div.page_nav a:visited { color:#0000cc; }
14 div.extra_nav {
14 div.extra_nav {
15 padding: 8px;
15 padding: 8px;
16 }
16 }
17 div.extra_nav a:visited {
17 div.extra_nav a:visited {
18 color: #0000cc;
18 color: #0000cc;
19 }
19 }
20 div.page_path { padding:8px; border:solid #d9d8d1; border-width:0px 0px 1px}
20 div.page_path { padding:8px; border:solid #d9d8d1; border-width:0px 0px 1px}
21 div.page_footer { padding:4px 8px; background-color: #d9d8d1; }
21 div.page_footer { padding:4px 8px; background-color: #d9d8d1; }
22 div.page_footer_text { float:left; color:#555555; font-style:italic; }
22 div.page_footer_text { float:left; color:#555555; font-style:italic; }
23 div.page_body { padding:8px; }
23 div.page_body { padding:8px; }
24 div.title, a.title {
24 div.title, a.title {
25 display:block; padding:6px 8px;
25 display:block; padding:6px 8px;
26 font-weight:bold; background-color:#edece6; text-decoration:none; color:#000000;
26 font-weight:bold; background-color:#edece6; text-decoration:none; color:#000000;
27 }
27 }
28 a.title:hover { background-color: #d9d8d1; }
28 a.title:hover { background-color: #d9d8d1; }
29 div.title_text { padding:6px 0px; border: solid #d9d8d1; border-width:0px 0px 1px; }
29 div.title_text { padding:6px 0px; border: solid #d9d8d1; border-width:0px 0px 1px; }
30 div.log_body { padding:8px 8px 8px 150px; }
30 div.log_body { padding:8px 8px 8px 150px; }
31 .age { white-space:nowrap; }
31 .age { white-space:nowrap; }
32 span.age { position:relative; float:left; width:142px; font-style:italic; }
32 span.age { position:relative; float:left; width:142px; font-style:italic; }
33 div.log_link {
33 div.log_link {
34 padding:0px 8px;
34 padding:0px 8px;
35 font-size:10px; font-family:sans-serif; font-style:normal;
35 font-size:10px; font-family:sans-serif; font-style:normal;
36 position:relative; float:left; width:136px;
36 position:relative; float:left; width:136px;
37 }
37 }
38 div.list_head { padding:6px 8px 4px; border:solid #d9d8d1; border-width:1px 0px 0px; font-style:italic; }
38 div.list_head { padding:6px 8px 4px; border:solid #d9d8d1; border-width:1px 0px 0px; font-style:italic; }
39 a.list { text-decoration:none; color:#000000; }
39 a.list { text-decoration:none; color:#000000; }
40 a.list:hover { text-decoration:underline; color:#880000; }
40 a.list:hover { text-decoration:underline; color:#880000; }
41 table { padding:8px 4px; }
41 table { padding:8px 4px; }
42 th { padding:2px 5px; font-size:12px; text-align:left; }
42 th { padding:2px 5px; font-size:12px; text-align:left; }
43 .parity0 { background-color:#ffffff; }
43 .parity0 { background-color:#ffffff; }
44 tr.dark, .parity1, pre.sourcelines.stripes > :nth-child(4n+4) { background-color:#f6f6f0; }
44 tr.dark, .parity1, pre.sourcelines.stripes > :nth-child(4n+4) { background-color:#f6f6f0; }
45 tr.light:hover, .parity0:hover, tr.dark:hover, .parity1:hover,
45 tr.light:hover, .parity0:hover, tr.dark:hover, .parity1:hover,
46 pre.sourcelines.stripes > :nth-child(4n+2):hover,
46 pre.sourcelines.stripes > :nth-child(4n+2):hover,
47 pre.sourcelines.stripes > :nth-child(4n+4):hover,
47 pre.sourcelines.stripes > :nth-child(4n+4):hover,
48 pre.sourcelines.stripes > :nth-child(4n+1):hover + :nth-child(4n+2),
48 pre.sourcelines.stripes > :nth-child(4n+1):hover + :nth-child(4n+2),
49 pre.sourcelines.stripes > :nth-child(4n+3):hover + :nth-child(4n+4) { background-color:#edece6; }
49 pre.sourcelines.stripes > :nth-child(4n+3):hover + :nth-child(4n+4) { background-color:#edece6; }
50 td { padding:2px 5px; font-size:12px; vertical-align:top; }
50 td { padding:2px 5px; font-size:12px; vertical-align:top; }
51 td.closed { background-color: #99f; }
51 td.closed { background-color: #99f; }
52 td.link { padding:2px 5px; font-family:sans-serif; font-size:10px; }
52 td.link { padding:2px 5px; font-family:sans-serif; font-size:10px; }
53 td.indexlinks { white-space: nowrap; }
53 td.indexlinks { white-space: nowrap; }
54 td.indexlinks a {
54 td.indexlinks a {
55 padding: 2px 5px; line-height: 10px;
55 padding: 2px 5px; line-height: 10px;
56 border: 1px solid;
56 border: 1px solid;
57 color: #ffffff; background-color: #7777bb;
57 color: #ffffff; background-color: #7777bb;
58 border-color: #aaaadd #333366 #333366 #aaaadd;
58 border-color: #aaaadd #333366 #333366 #aaaadd;
59 font-weight: bold; text-align: center; text-decoration: none;
59 font-weight: bold; text-align: center; text-decoration: none;
60 font-size: 10px;
60 font-size: 10px;
61 }
61 }
62 td.indexlinks a:hover { background-color: #6666aa; }
62 td.indexlinks a:hover { background-color: #6666aa; }
63 div.pre { font-family:monospace; font-size:12px; white-space:pre; }
63 div.pre { font-family:monospace; font-size:12px; white-space:pre; }
64 div.diff_info { font-family:monospace; color:#000099; background-color:#edece6; font-style:italic; }
64 div.diff_info { font-family:monospace; color:#000099; background-color:#edece6; font-style:italic; }
65 div.index_include { border:solid #d9d8d1; border-width:0px 0px 1px; padding:12px 8px; }
65 div.index_include { border:solid #d9d8d1; border-width:0px 0px 1px; padding:12px 8px; }
66
66
67 .search {
67 .search {
68 margin-right: 8px;
68 margin-right: 8px;
69 }
69 }
70
70
71 div#hint {
71 div#hint {
72 position: absolute;
72 position: absolute;
73 display: none;
73 display: none;
74 width: 250px;
74 width: 250px;
75 padding: 5px;
75 padding: 5px;
76 background: #ffc;
76 background: #ffc;
77 border: 1px solid yellow;
77 border: 1px solid yellow;
78 border-radius: 5px;
78 border-radius: 5px;
79 }
79 }
80
80
81 #searchform:hover div#hint { display: block; }
81 #searchform:hover div#hint { display: block; }
82
82
83 tr.thisrev a { color:#999999; text-decoration: none; }
83 tr.thisrev a { color:#999999; text-decoration: none; }
84 tr.thisrev pre { color:#009900; }
84 tr.thisrev pre { color:#009900; }
85 td.annotate {
85 td.annotate {
86 white-space: nowrap;
86 white-space: nowrap;
87 }
87 }
88 div.annotate-info {
88 div.annotate-info {
89 z-index: 5;
89 z-index: 5;
90 display: none;
90 display: none;
91 position: absolute;
91 position: absolute;
92 background-color: #FFFFFF;
92 background-color: #FFFFFF;
93 border: 1px solid #d9d8d1;
93 border: 1px solid #d9d8d1;
94 text-align: left;
94 text-align: left;
95 color: #000000;
95 color: #000000;
96 padding: 5px;
96 padding: 5px;
97 }
97 }
98 div.annotate-info a { color: #0000FF; text-decoration: underline; }
98 div.annotate-info a { color: #0000FF; text-decoration: underline; }
99 td.annotate:hover div.annotate-info { display: inline; }
99 td.annotate:hover div.annotate-info { display: inline; }
100
100
101 #diffopts-form {
101 #diffopts-form {
102 padding-left: 8px;
102 padding-left: 8px;
103 display: none;
103 display: none;
104 }
104 }
105
105
106 .linenr { color:#999999; text-decoration:none }
106 .linenr { color:#999999; text-decoration:none }
107 div.rss_logo { float: right; white-space: nowrap; }
107 div.rss_logo { float: right; white-space: nowrap; }
108 div.rss_logo a {
108 div.rss_logo a {
109 padding:3px 6px; line-height:10px;
109 padding:3px 6px; line-height:10px;
110 border:1px solid; border-color:#fcc7a5 #7d3302 #3e1a01 #ff954e;
110 border:1px solid; border-color:#fcc7a5 #7d3302 #3e1a01 #ff954e;
111 color:#ffffff; background-color:#ff6600;
111 color:#ffffff; background-color:#ff6600;
112 font-weight:bold; font-family:sans-serif; font-size:10px;
112 font-weight:bold; font-family:sans-serif; font-size:10px;
113 text-align:center; text-decoration:none;
113 text-align:center; text-decoration:none;
114 }
114 }
115 div.rss_logo a:hover { background-color:#ee5500; }
115 div.rss_logo a:hover { background-color:#ee5500; }
116 pre { margin: 0; }
116 pre { margin: 0; }
117 span.logtags span {
117 span.logtags span {
118 padding: 0px 4px;
118 padding: 0px 4px;
119 font-size: 10px;
119 font-size: 10px;
120 font-weight: normal;
120 font-weight: normal;
121 border: 1px solid;
121 border: 1px solid;
122 background-color: #ffaaff;
122 background-color: #ffaaff;
123 border-color: #ffccff #ff00ee #ff00ee #ffccff;
123 border-color: #ffccff #ff00ee #ff00ee #ffccff;
124 }
124 }
125 span.logtags span.phasetag {
125 span.logtags span.phasetag {
126 background-color: #dfafff;
126 background-color: #dfafff;
127 border-color: #e2b8ff #ce48ff #ce48ff #e2b8ff;
127 border-color: #e2b8ff #ce48ff #ce48ff #e2b8ff;
128 }
128 }
129 span.logtags span.obsoletetag {
129 span.logtags span.obsoletetag {
130 background-color: #dddddd;
130 background-color: #dddddd;
131 border-color: #e4e4e4 #a3a3a3 #a3a3a3 #e4e4e4;
131 border-color: #e4e4e4 #a3a3a3 #a3a3a3 #e4e4e4;
132 }
132 }
133 span.logtags span.instabilitytag {
134 background-color: #ffb1c0;
135 border-color: #ffbbc8 #ff4476 #ff4476 #ffbbc8;
136 }
133 span.logtags span.tagtag {
137 span.logtags span.tagtag {
134 background-color: #ffffaa;
138 background-color: #ffffaa;
135 border-color: #ffffcc #ffee00 #ffee00 #ffffcc;
139 border-color: #ffffcc #ffee00 #ffee00 #ffffcc;
136 }
140 }
137 span.logtags span.branchtag {
141 span.logtags span.branchtag {
138 background-color: #aaffaa;
142 background-color: #aaffaa;
139 border-color: #ccffcc #00cc33 #00cc33 #ccffcc;
143 border-color: #ccffcc #00cc33 #00cc33 #ccffcc;
140 }
144 }
141 span.logtags span.inbranchtag {
145 span.logtags span.inbranchtag {
142 background-color: #d5dde6;
146 background-color: #d5dde6;
143 border-color: #e3ecf4 #9398f4 #9398f4 #e3ecf4;
147 border-color: #e3ecf4 #9398f4 #9398f4 #e3ecf4;
144 }
148 }
145 span.logtags span.bookmarktag {
149 span.logtags span.bookmarktag {
146 background-color: #afdffa;
150 background-color: #afdffa;
147 border-color: #ccecff #46ace6 #46ace6 #ccecff;
151 border-color: #ccecff #46ace6 #46ace6 #ccecff;
148 }
152 }
149 span.difflineplus { color:#008800; }
153 span.difflineplus { color:#008800; }
150 span.difflineminus { color:#cc0000; }
154 span.difflineminus { color:#cc0000; }
151 span.difflineat { color:#990099; }
155 span.difflineat { color:#990099; }
152 div.diffblocks { counter-reset: lineno; }
156 div.diffblocks { counter-reset: lineno; }
153 div.diffblock { counter-increment: lineno; }
157 div.diffblock { counter-increment: lineno; }
154 pre.sourcelines { position: relative; counter-reset: lineno; }
158 pre.sourcelines { position: relative; counter-reset: lineno; }
155 pre.sourcelines > span {
159 pre.sourcelines > span {
156 display: inline-block;
160 display: inline-block;
157 box-sizing: border-box;
161 box-sizing: border-box;
158 width: 100%;
162 width: 100%;
159 padding: 0 0 0 5em;
163 padding: 0 0 0 5em;
160 counter-increment: lineno;
164 counter-increment: lineno;
161 vertical-align: top;
165 vertical-align: top;
162 }
166 }
163 pre.sourcelines > span:before {
167 pre.sourcelines > span:before {
164 -moz-user-select: -moz-none;
168 -moz-user-select: -moz-none;
165 -khtml-user-select: none;
169 -khtml-user-select: none;
166 -webkit-user-select: none;
170 -webkit-user-select: none;
167 -ms-user-select: none;
171 -ms-user-select: none;
168 user-select: none;
172 user-select: none;
169 display: inline-block;
173 display: inline-block;
170 margin-left: -6em;
174 margin-left: -6em;
171 width: 4em;
175 width: 4em;
172 color: #999;
176 color: #999;
173 text-align: right;
177 text-align: right;
174 content: counters(lineno,".");
178 content: counters(lineno,".");
175 float: left;
179 float: left;
176 }
180 }
177 pre.sourcelines > a {
181 pre.sourcelines > a {
178 display: inline-block;
182 display: inline-block;
179 position: absolute;
183 position: absolute;
180 left: 0px;
184 left: 0px;
181 width: 4em;
185 width: 4em;
182 height: 1em;
186 height: 1em;
183 }
187 }
184 tr:target td,
188 tr:target td,
185 pre.sourcelines > span:target,
189 pre.sourcelines > span:target,
186 pre.sourcelines.stripes > span:target {
190 pre.sourcelines.stripes > span:target {
187 background-color: #bfdfff;
191 background-color: #bfdfff;
188 }
192 }
189
193
190 .description {
194 .description {
191 font-family: monospace;
195 font-family: monospace;
192 white-space: pre;
196 white-space: pre;
193 }
197 }
194
198
195 /* Followlines */
199 /* Followlines */
196 tbody.sourcelines > tr.followlines-selected,
200 tbody.sourcelines > tr.followlines-selected,
197 pre.sourcelines > span.followlines-selected {
201 pre.sourcelines > span.followlines-selected {
198 background-color: #99C7E9 !important;
202 background-color: #99C7E9 !important;
199 }
203 }
200
204
201 div#followlines {
205 div#followlines {
202 background-color: #FFF;
206 background-color: #FFF;
203 border: 1px solid #d9d8d1;
207 border: 1px solid #d9d8d1;
204 padding: 5px;
208 padding: 5px;
205 position: fixed;
209 position: fixed;
206 }
210 }
207
211
208 div.followlines-cancel {
212 div.followlines-cancel {
209 text-align: right;
213 text-align: right;
210 }
214 }
211
215
212 div.followlines-cancel > button {
216 div.followlines-cancel > button {
213 line-height: 80%;
217 line-height: 80%;
214 padding: 0;
218 padding: 0;
215 border: 0;
219 border: 0;
216 border-radius: 2px;
220 border-radius: 2px;
217 background-color: inherit;
221 background-color: inherit;
218 font-weight: bold;
222 font-weight: bold;
219 }
223 }
220
224
221 div.followlines-cancel > button:hover {
225 div.followlines-cancel > button:hover {
222 color: #FFFFFF;
226 color: #FFFFFF;
223 background-color: #CF1F1F;
227 background-color: #CF1F1F;
224 }
228 }
225
229
226 div.followlines-link {
230 div.followlines-link {
227 margin: 2px;
231 margin: 2px;
228 margin-top: 4px;
232 margin-top: 4px;
229 font-family: sans-serif;
233 font-family: sans-serif;
230 }
234 }
231
235
232 .btn-followlines {
236 .btn-followlines {
233 display: none;
237 display: none;
234 cursor: pointer;
238 cursor: pointer;
235 box-sizing: content-box;
239 box-sizing: content-box;
236 font-size: 11px;
240 font-size: 11px;
237 width: 13px;
241 width: 13px;
238 height: 13px;
242 height: 13px;
239 border-radius: 3px;
243 border-radius: 3px;
240 margin: 0px;
244 margin: 0px;
241 margin-top: -2px;
245 margin-top: -2px;
242 padding: 0px;
246 padding: 0px;
243 background-color: #E5FDE5;
247 background-color: #E5FDE5;
244 border: 1px solid #9BC19B;
248 border: 1px solid #9BC19B;
245 font-family: monospace;
249 font-family: monospace;
246 text-align: center;
250 text-align: center;
247 line-height: 5px;
251 line-height: 5px;
248 }
252 }
249
253
250 tr .btn-followlines {
254 tr .btn-followlines {
251 position: absolute;
255 position: absolute;
252 }
256 }
253
257
254 span .btn-followlines {
258 span .btn-followlines {
255 float: left;
259 float: left;
256 }
260 }
257
261
258 span.followlines-select .btn-followlines {
262 span.followlines-select .btn-followlines {
259 margin-left: -1.6em;
263 margin-left: -1.6em;
260 }
264 }
261
265
262 .btn-followlines:hover {
266 .btn-followlines:hover {
263 transform: scale(1.1, 1.1);
267 transform: scale(1.1, 1.1);
264 }
268 }
265
269
266 .btn-followlines .followlines-plus {
270 .btn-followlines .followlines-plus {
267 color: green;
271 color: green;
268 }
272 }
269
273
270 .btn-followlines .followlines-minus {
274 .btn-followlines .followlines-minus {
271 color: red;
275 color: red;
272 }
276 }
273
277
274 .btn-followlines-end {
278 .btn-followlines-end {
275 background-color: #ffdcdc;
279 background-color: #ffdcdc;
276 }
280 }
277
281
278 .sourcelines tr:hover .btn-followlines,
282 .sourcelines tr:hover .btn-followlines,
279 .sourcelines span.followlines-select:hover > .btn-followlines {
283 .sourcelines span.followlines-select:hover > .btn-followlines {
280 display: inline;
284 display: inline;
281 }
285 }
282
286
283 .btn-followlines-hidden,
287 .btn-followlines-hidden,
284 .sourcelines tr:hover .btn-followlines-hidden {
288 .sourcelines tr:hover .btn-followlines-hidden {
285 display: none;
289 display: none;
286 }
290 }
287
291
288 /* Graph */
292 /* Graph */
289 div#wrapper {
293 div#wrapper {
290 position: relative;
294 position: relative;
291 margin: 0;
295 margin: 0;
292 padding: 0;
296 padding: 0;
293 margin-top: 3px;
297 margin-top: 3px;
294 }
298 }
295
299
296 canvas {
300 canvas {
297 position: absolute;
301 position: absolute;
298 z-index: 5;
302 z-index: 5;
299 top: -0.9em;
303 top: -0.9em;
300 margin: 0;
304 margin: 0;
301 }
305 }
302
306
303 ul#nodebgs {
307 ul#nodebgs {
304 list-style: none inside none;
308 list-style: none inside none;
305 padding: 0;
309 padding: 0;
306 margin: 0;
310 margin: 0;
307 top: -0.7em;
311 top: -0.7em;
308 }
312 }
309
313
310 ul#graphnodes li, ul#nodebgs li {
314 ul#graphnodes li, ul#nodebgs li {
311 height: 39px;
315 height: 39px;
312 }
316 }
313
317
314 ul#graphnodes {
318 ul#graphnodes {
315 position: absolute;
319 position: absolute;
316 z-index: 10;
320 z-index: 10;
317 top: -0.8em;
321 top: -0.8em;
318 list-style: none inside none;
322 list-style: none inside none;
319 padding: 0;
323 padding: 0;
320 }
324 }
321
325
322 ul#graphnodes li .info {
326 ul#graphnodes li .info {
323 display: block;
327 display: block;
324 font-size: 100%;
328 font-size: 100%;
325 position: relative;
329 position: relative;
326 top: -3px;
330 top: -3px;
327 font-style: italic;
331 font-style: italic;
328 }
332 }
329
333
330 /* Comparison */
334 /* Comparison */
331 .legend {
335 .legend {
332 padding: 1.5% 0 1.5% 0;
336 padding: 1.5% 0 1.5% 0;
333 }
337 }
334
338
335 .legendinfo {
339 .legendinfo {
336 border: 1px solid #d9d8d1;
340 border: 1px solid #d9d8d1;
337 font-size: 80%;
341 font-size: 80%;
338 text-align: center;
342 text-align: center;
339 padding: 0.5%;
343 padding: 0.5%;
340 }
344 }
341
345
342 .equal {
346 .equal {
343 background-color: #ffffff;
347 background-color: #ffffff;
344 }
348 }
345
349
346 .delete {
350 .delete {
347 background-color: #faa;
351 background-color: #faa;
348 color: #333;
352 color: #333;
349 }
353 }
350
354
351 .insert {
355 .insert {
352 background-color: #ffa;
356 background-color: #ffa;
353 }
357 }
354
358
355 .replace {
359 .replace {
356 background-color: #e8e8e8;
360 background-color: #e8e8e8;
357 }
361 }
358
362
359 .comparison {
363 .comparison {
360 overflow-x: auto;
364 overflow-x: auto;
361 }
365 }
362
366
363 .header th {
367 .header th {
364 text-align: center;
368 text-align: center;
365 }
369 }
366
370
367 .block {
371 .block {
368 border-top: 1px solid #d9d8d1;
372 border-top: 1px solid #d9d8d1;
369 }
373 }
370
374
371 .scroll-loading {
375 .scroll-loading {
372 -webkit-animation: change_color 1s linear 0s infinite alternate;
376 -webkit-animation: change_color 1s linear 0s infinite alternate;
373 -moz-animation: change_color 1s linear 0s infinite alternate;
377 -moz-animation: change_color 1s linear 0s infinite alternate;
374 -o-animation: change_color 1s linear 0s infinite alternate;
378 -o-animation: change_color 1s linear 0s infinite alternate;
375 animation: change_color 1s linear 0s infinite alternate;
379 animation: change_color 1s linear 0s infinite alternate;
376 }
380 }
377
381
378 @-webkit-keyframes change_color {
382 @-webkit-keyframes change_color {
379 from { background-color: #A0CEFF; } to { }
383 from { background-color: #A0CEFF; } to { }
380 }
384 }
381 @-moz-keyframes change_color {
385 @-moz-keyframes change_color {
382 from { background-color: #A0CEFF; } to { }
386 from { background-color: #A0CEFF; } to { }
383 }
387 }
384 @-o-keyframes change_color {
388 @-o-keyframes change_color {
385 from { background-color: #A0CEFF; } to { }
389 from { background-color: #A0CEFF; } to { }
386 }
390 }
387 @keyframes change_color {
391 @keyframes change_color {
388 from { background-color: #A0CEFF; } to { }
392 from { background-color: #A0CEFF; } to { }
389 }
393 }
390
394
391 .scroll-loading-error {
395 .scroll-loading-error {
392 background-color: #FFCCCC !important;
396 background-color: #FFCCCC !important;
393 }
397 }
394
398
395 #doc {
399 #doc {
396 margin: 0 8px;
400 margin: 0 8px;
397 }
401 }
@@ -1,582 +1,586 b''
1 /*** Initial Settings ***/
1 /*** Initial Settings ***/
2 * {
2 * {
3 margin: 0;
3 margin: 0;
4 padding: 0;
4 padding: 0;
5 font-weight: normal;
5 font-weight: normal;
6 font-style: normal;
6 font-style: normal;
7 }
7 }
8
8
9 html {
9 html {
10 font-size: 100%;
10 font-size: 100%;
11 font-family: sans-serif;
11 font-family: sans-serif;
12 }
12 }
13
13
14 body {
14 body {
15 font-size: 77%;
15 font-size: 77%;
16 margin: 15px 50px;
16 margin: 15px 50px;
17 background: #4B4B4C;
17 background: #4B4B4C;
18 }
18 }
19
19
20 a {
20 a {
21 color:#0000cc;
21 color:#0000cc;
22 text-decoration: none;
22 text-decoration: none;
23 }
23 }
24 /*** end of Initial Settings ***/
24 /*** end of Initial Settings ***/
25
25
26
26
27 /** common settings **/
27 /** common settings **/
28 div#container {
28 div#container {
29 background: #FFFFFF;
29 background: #FFFFFF;
30 position: relative;
30 position: relative;
31 color: #666;
31 color: #666;
32 }
32 }
33
33
34 div.page-header {
34 div.page-header {
35 padding: 50px 20px 0;
35 padding: 50px 20px 0;
36 background: #006699 top left repeat-x;
36 background: #006699 top left repeat-x;
37 position: relative;
37 position: relative;
38 }
38 }
39 div.page-header h1 {
39 div.page-header h1 {
40 margin: 10px 0 30px;
40 margin: 10px 0 30px;
41 font-size: 1.8em;
41 font-size: 1.8em;
42 font-weight: bold;
42 font-weight: bold;
43 font-family: osaka,'MS P Gothic', Georgia, serif;
43 font-family: osaka,'MS P Gothic', Georgia, serif;
44 letter-spacing: 1px;
44 letter-spacing: 1px;
45 color: #DDD;
45 color: #DDD;
46 }
46 }
47 div.page-header h1 a {
47 div.page-header h1 a {
48 font-weight: bold;
48 font-weight: bold;
49 color: #FFF;
49 color: #FFF;
50 }
50 }
51 div.page-header a {
51 div.page-header a {
52 text-decoration: none;
52 text-decoration: none;
53 }
53 }
54
54
55 div.page-header form {
55 div.page-header form {
56 float: right;
56 float: right;
57 margin-top: -2px;
57 margin-top: -2px;
58 }
58 }
59 div.page-header form label {
59 div.page-header form label {
60 color: #DDD;
60 color: #DDD;
61 }
61 }
62 div.page-header form input {
62 div.page-header form input {
63 padding: 2px;
63 padding: 2px;
64 border: solid 1px #DDD;
64 border: solid 1px #DDD;
65 }
65 }
66 div.page-header form dl {
66 div.page-header form dl {
67 overflow: hidden;
67 overflow: hidden;
68 }
68 }
69 div.page-header form dl dt {
69 div.page-header form dl dt {
70 font-size: 1.2em;
70 font-size: 1.2em;
71 }
71 }
72 div.page-header form dl dt,
72 div.page-header form dl dt,
73 div.page-header form dl dd {
73 div.page-header form dl dd {
74 margin: 0 0 0 5px;
74 margin: 0 0 0 5px;
75 float: left;
75 float: left;
76 height: 24px;
76 height: 24px;
77 line-height: 20px;
77 line-height: 20px;
78 }
78 }
79
79
80 ul.page-nav {
80 ul.page-nav {
81 margin: 10px 0 0 0;
81 margin: 10px 0 0 0;
82 list-style-type: none;
82 list-style-type: none;
83 overflow: hidden;
83 overflow: hidden;
84 }
84 }
85 ul.page-nav li {
85 ul.page-nav li {
86 margin: 0 2px 0 0;
86 margin: 0 2px 0 0;
87 float: left;
87 float: left;
88 width: 80px;
88 width: 80px;
89 height: 24px;
89 height: 24px;
90 font-size: 1.1em;
90 font-size: 1.1em;
91 line-height: 24px;
91 line-height: 24px;
92 text-align: center;
92 text-align: center;
93 }
93 }
94 ul.page-nav li.current {
94 ul.page-nav li.current {
95 background: #FFF;
95 background: #FFF;
96 }
96 }
97 ul.page-nav li a {
97 ul.page-nav li a {
98 height: 24px;
98 height: 24px;
99 color: #666;
99 color: #666;
100 background: #DDD;
100 background: #DDD;
101 display: block;
101 display: block;
102 text-decoration: none;
102 text-decoration: none;
103 }
103 }
104 ul.page-nav li a:hover {
104 ul.page-nav li a:hover {
105 color:#333;
105 color:#333;
106 background: #FFF;
106 background: #FFF;
107 }
107 }
108
108
109 ul.submenu {
109 ul.submenu {
110 margin: 10px 0 -10px 20px;
110 margin: 10px 0 -10px 20px;
111 list-style-type: none;
111 list-style-type: none;
112 }
112 }
113 ul.submenu li {
113 ul.submenu li {
114 margin: 0 10px 0 0;
114 margin: 0 10px 0 0;
115 font-size: 1.2em;
115 font-size: 1.2em;
116 display: inline;
116 display: inline;
117 }
117 }
118
118
119 h2 {
119 h2 {
120 margin: 20px 0 10px;
120 margin: 20px 0 10px;
121 height: 30px;
121 height: 30px;
122 line-height: 30px;
122 line-height: 30px;
123 text-indent: 20px;
123 text-indent: 20px;
124 background: #FFF;
124 background: #FFF;
125 font-size: 1.2em;
125 font-size: 1.2em;
126 border-top: dotted 1px #D5E1E6;
126 border-top: dotted 1px #D5E1E6;
127 font-weight: bold;
127 font-weight: bold;
128 }
128 }
129 h2.no-link {
129 h2.no-link {
130 color:#006699;
130 color:#006699;
131 }
131 }
132 h2.no-border {
132 h2.no-border {
133 color: #FFF;
133 color: #FFF;
134 background: #006699;
134 background: #006699;
135 border: 0;
135 border: 0;
136 }
136 }
137 h2 a {
137 h2 a {
138 font-weight:bold;
138 font-weight:bold;
139 color:#006699;
139 color:#006699;
140 }
140 }
141
141
142 div.page-path {
142 div.page-path {
143 text-align: right;
143 text-align: right;
144 padding: 20px 30px 10px 0;
144 padding: 20px 30px 10px 0;
145 border:solid #d9d8d1;
145 border:solid #d9d8d1;
146 border-width:0px 0px 1px;
146 border-width:0px 0px 1px;
147 font-size: 1.2em;
147 font-size: 1.2em;
148 }
148 }
149
149
150 div.page-footer {
150 div.page-footer {
151 margin: 50px 0 0;
151 margin: 50px 0 0;
152 position: relative;
152 position: relative;
153 }
153 }
154 div.page-footer p {
154 div.page-footer p {
155 position: relative;
155 position: relative;
156 padding-left: 20px;
156 padding-left: 20px;
157 bottom: 5px;
157 bottom: 5px;
158 font-size: 1.2em;
158 font-size: 1.2em;
159 }
159 }
160
160
161 ul.rss-logo {
161 ul.rss-logo {
162 position: absolute;
162 position: absolute;
163 top: -10px;
163 top: -10px;
164 right: 20px;
164 right: 20px;
165 height: 20px;
165 height: 20px;
166 list-style-type: none;
166 list-style-type: none;
167 }
167 }
168 ul.rss-logo li {
168 ul.rss-logo li {
169 display: inline;
169 display: inline;
170 }
170 }
171 ul.rss-logo li a {
171 ul.rss-logo li a {
172 padding: 3px 6px;
172 padding: 3px 6px;
173 line-height: 10px;
173 line-height: 10px;
174 border:1px solid;
174 border:1px solid;
175 border-color:#fcc7a5 #7d3302 #3e1a01 #ff954e;
175 border-color:#fcc7a5 #7d3302 #3e1a01 #ff954e;
176 color:#ffffff;
176 color:#ffffff;
177 background-color:#ff6600;
177 background-color:#ff6600;
178 font-weight:bold;
178 font-weight:bold;
179 font-family:sans-serif;
179 font-family:sans-serif;
180 font-size:10px;
180 font-size:10px;
181 text-align:center;
181 text-align:center;
182 text-decoration:none;
182 text-decoration:none;
183 }
183 }
184 div.rss-logo li a:hover {
184 div.rss-logo li a:hover {
185 background-color:#ee5500;
185 background-color:#ee5500;
186 }
186 }
187
187
188 p.normal {
188 p.normal {
189 margin: 20px 0 20px 30px;
189 margin: 20px 0 20px 30px;
190 font-size: 1.2em;
190 font-size: 1.2em;
191 }
191 }
192
192
193 table {
193 table {
194 margin: 10px 0 0 20px;
194 margin: 10px 0 0 20px;
195 width: 95%;
195 width: 95%;
196 border-collapse: collapse;
196 border-collapse: collapse;
197 }
197 }
198 table tr td {
198 table tr td {
199 font-size: 1.1em;
199 font-size: 1.1em;
200 }
200 }
201 table tr td.nowrap {
201 table tr td.nowrap {
202 white-space: nowrap;
202 white-space: nowrap;
203 }
203 }
204 table tr td.closed {
204 table tr td.closed {
205 background-color: #99f;
205 background-color: #99f;
206 }
206 }
207 /*
207 /*
208 table tr.parity0:hover,
208 table tr.parity0:hover,
209 table tr.parity1:hover {
209 table tr.parity1:hover {
210 background: #D5E1E6;
210 background: #D5E1E6;
211 }
211 }
212 */
212 */
213 table tr.parity0,
213 table tr.parity0,
214 table td.annotate.parity0 {
214 table td.annotate.parity0 {
215 background: #F1F6F7;
215 background: #F1F6F7;
216 }
216 }
217 table tr.parity1,
217 table tr.parity1,
218 table td.annotate.parity1 {
218 table td.annotate.parity1 {
219 background: #FFFFFF;
219 background: #FFFFFF;
220 }
220 }
221 table tr td {
221 table tr td {
222 padding: 5px 5px;
222 padding: 5px 5px;
223 }
223 }
224 table.annotated tr td {
224 table.annotated tr td {
225 padding: 0px 5px;
225 padding: 0px 5px;
226 }
226 }
227
227
228 span.logtags span {
228 span.logtags span {
229 padding: 2px 6px;
229 padding: 2px 6px;
230 font-weight: normal;
230 font-weight: normal;
231 font-size: 11px;
231 font-size: 11px;
232 border: 1px solid;
232 border: 1px solid;
233 background-color: #ffaaff;
233 background-color: #ffaaff;
234 border-color: #ffccff #ff00ee #ff00ee #ffccff;
234 border-color: #ffccff #ff00ee #ff00ee #ffccff;
235 }
235 }
236 span.logtags span.phasetag {
236 span.logtags span.phasetag {
237 background-color: #dfafff;
237 background-color: #dfafff;
238 border-color: #e2b8ff #ce48ff #ce48ff #e2b8ff;
238 border-color: #e2b8ff #ce48ff #ce48ff #e2b8ff;
239 }
239 }
240 span.logtags span.obsoletetag {
240 span.logtags span.obsoletetag {
241 background-color: #dddddd;
241 background-color: #dddddd;
242 border-color: #e4e4e4 #a3a3a3 #a3a3a3 #e4e4e4;
242 border-color: #e4e4e4 #a3a3a3 #a3a3a3 #e4e4e4;
243 }
243 }
244 span.logtags span.instabilitytag {
245 background-color: #ffb1c0;
246 border-color: #ffbbc8 #ff4476 #ff4476 #ffbbc8;
247 }
244 span.logtags span.tagtag {
248 span.logtags span.tagtag {
245 background-color: #ffffaa;
249 background-color: #ffffaa;
246 border-color: #ffffcc #ffee00 #ffee00 #ffffcc;
250 border-color: #ffffcc #ffee00 #ffee00 #ffffcc;
247 }
251 }
248 span.logtags span.branchtag {
252 span.logtags span.branchtag {
249 background-color: #aaffaa;
253 background-color: #aaffaa;
250 border-color: #ccffcc #00cc33 #00cc33 #ccffcc;
254 border-color: #ccffcc #00cc33 #00cc33 #ccffcc;
251 }
255 }
252 span.logtags span.inbranchtag {
256 span.logtags span.inbranchtag {
253 background-color: #d5dde6;
257 background-color: #d5dde6;
254 border-color: #e3ecf4 #9398f4 #9398f4 #e3ecf4;
258 border-color: #e3ecf4 #9398f4 #9398f4 #e3ecf4;
255 }
259 }
256 span.logtags span.bookmarktag {
260 span.logtags span.bookmarktag {
257 background-color: #afdffa;
261 background-color: #afdffa;
258 border-color: #ccecff #46ace6 #46ace6 #ccecff;
262 border-color: #ccecff #46ace6 #46ace6 #ccecff;
259 }
263 }
260
264
261 div.diff pre {
265 div.diff pre {
262 margin: 10px 0 0 0;
266 margin: 10px 0 0 0;
263 }
267 }
264 div.diff pre span {
268 div.diff pre span {
265 font-family: monospace;
269 font-family: monospace;
266 white-space: pre;
270 white-space: pre;
267 font-size: 1.2em;
271 font-size: 1.2em;
268 }
272 }
269 div.diffblocks { counter-reset: lineno; }
273 div.diffblocks { counter-reset: lineno; }
270 div.diffblock { counter-increment: lineno; }
274 div.diffblock { counter-increment: lineno; }
271 span.difflineplus { color:#008800; }
275 span.difflineplus { color:#008800; }
272 span.difflineminus { color:#cc0000; }
276 span.difflineminus { color:#cc0000; }
273 span.difflineat { color:#990099; }
277 span.difflineat { color:#990099; }
274
278
275 pre.sourcelines {
279 pre.sourcelines {
276 position: relative;
280 position: relative;
277 counter-reset: lineno;
281 counter-reset: lineno;
278 font-size: 1.2em;
282 font-size: 1.2em;
279 }
283 }
280 pre.sourcelines > span {
284 pre.sourcelines > span {
281 display: inline-block;
285 display: inline-block;
282 box-sizing: border-box;
286 box-sizing: border-box;
283 width: 100%;
287 width: 100%;
284 padding: 0 0 0 5em;
288 padding: 0 0 0 5em;
285 counter-increment: lineno;
289 counter-increment: lineno;
286 vertical-align: top;
290 vertical-align: top;
287 }
291 }
288 div.source > pre.sourcelines > span {
292 div.source > pre.sourcelines > span {
289 padding: 1px 1px 1px 5em;
293 padding: 1px 1px 1px 5em;
290 }
294 }
291 pre.sourcelines > span:before {
295 pre.sourcelines > span:before {
292 -moz-user-select: -moz-none;
296 -moz-user-select: -moz-none;
293 -khtml-user-select: none;
297 -khtml-user-select: none;
294 -webkit-user-select: none;
298 -webkit-user-select: none;
295 -ms-user-select: none;
299 -ms-user-select: none;
296 user-select: none;
300 user-select: none;
297 display: inline-block;
301 display: inline-block;
298 margin-left: -5em;
302 margin-left: -5em;
299 width: 4em;
303 width: 4em;
300 color: #999;
304 color: #999;
301 text-align: right;
305 text-align: right;
302 content: counters(lineno,".");
306 content: counters(lineno,".");
303 float: left;
307 float: left;
304 }
308 }
305 pre.sourcelines > a {
309 pre.sourcelines > a {
306 display: inline-block;
310 display: inline-block;
307 position: absolute;
311 position: absolute;
308 left: 0px;
312 left: 0px;
309 width: 4em;
313 width: 4em;
310 height: 1em;
314 height: 1em;
311 padding: 0.15em;
315 padding: 0.15em;
312 }
316 }
313 pre.sourcelines.stripes > :nth-child(4n+2) { background-color: #F1F6F7; }
317 pre.sourcelines.stripes > :nth-child(4n+2) { background-color: #F1F6F7; }
314 pre.sourcelines.stripes > :nth-child(4n+4) { background-color: #FFFFFF; }
318 pre.sourcelines.stripes > :nth-child(4n+4) { background-color: #FFFFFF; }
315 pre.sourcelines.stripes > :nth-child(4n+2):hover,
319 pre.sourcelines.stripes > :nth-child(4n+2):hover,
316 pre.sourcelines.stripes > :nth-child(4n+4):hover,
320 pre.sourcelines.stripes > :nth-child(4n+4):hover,
317 pre.sourcelines.stripes > :nth-child(4n+1):hover + :nth-child(4n+2),
321 pre.sourcelines.stripes > :nth-child(4n+1):hover + :nth-child(4n+2),
318 pre.sourcelines.stripes > :nth-child(4n+3):hover + :nth-child(4n+4) { background-color: #D5E1E6; }
322 pre.sourcelines.stripes > :nth-child(4n+3):hover + :nth-child(4n+4) { background-color: #D5E1E6; }
319
323
320 pre.sourcelines > span:target,
324 pre.sourcelines > span:target,
321 pre.sourcelines.stripes > span:target {
325 pre.sourcelines.stripes > span:target {
322 background-color: #bfdfff;
326 background-color: #bfdfff;
323 }
327 }
324
328
325 td.source {
329 td.source {
326 white-space: pre;
330 white-space: pre;
327 margin: 10px 30px 0;
331 margin: 10px 30px 0;
328 font-size: 1.2em;
332 font-size: 1.2em;
329 font-family: monospace;
333 font-family: monospace;
330 }
334 }
331 .linenr {
335 .linenr {
332 color: #999;
336 color: #999;
333 text-align: right;
337 text-align: right;
334 }
338 }
335 .lineno {
339 .lineno {
336 text-align: right;
340 text-align: right;
337 }
341 }
338 .lineno a {
342 .lineno a {
339 color: #999;
343 color: #999;
340 }
344 }
341 td.linenr {
345 td.linenr {
342 width: 60px;
346 width: 60px;
343 }
347 }
344 tr.thisrev a { color:#999999; text-decoration: none; }
348 tr.thisrev a { color:#999999; text-decoration: none; }
345 tr.thisrev td.source { color:#009900; }
349 tr.thisrev td.source { color:#009900; }
346 td.annotate {
350 td.annotate {
347 white-space: nowrap;
351 white-space: nowrap;
348 }
352 }
349 div.annotate-info {
353 div.annotate-info {
350 display: none;
354 display: none;
351 position: absolute;
355 position: absolute;
352 background-color: #FFFFFF;
356 background-color: #FFFFFF;
353 border: solid 1px #CCC;
357 border: solid 1px #CCC;
354 text-align: left;
358 text-align: left;
355 color: #666;
359 color: #666;
356 padding: 5px;
360 padding: 5px;
357 }
361 }
358 div.annotate-info a { color: #0000FF; }
362 div.annotate-info a { color: #0000FF; }
359 td.annotate:hover div.annotate-info { display: inline; }
363 td.annotate:hover div.annotate-info { display: inline; }
360
364
361 div#powered-by {
365 div#powered-by {
362 position: absolute;
366 position: absolute;
363 width: 75px;
367 width: 75px;
364 top: 15px;
368 top: 15px;
365 right: 20px;
369 right: 20px;
366 font-size: 1.2em;
370 font-size: 1.2em;
367 }
371 }
368 div#powered-by a {
372 div#powered-by a {
369 color: #EEE;
373 color: #EEE;
370 text-decoration: none;
374 text-decoration: none;
371 }
375 }
372 div#powered-by a:hover {
376 div#powered-by a:hover {
373 text-decoration: underline;
377 text-decoration: underline;
374 }
378 }
375 /** end of common settings **/
379 /** end of common settings **/
376
380
377 /** summary **/
381 /** summary **/
378 dl.overview {
382 dl.overview {
379 margin: 0 0 0 30px;
383 margin: 0 0 0 30px;
380 font-size: 1.1em;
384 font-size: 1.1em;
381 overflow: hidden;
385 overflow: hidden;
382 }
386 }
383 dl.overview dt,
387 dl.overview dt,
384 dl.overview dd {
388 dl.overview dd {
385 margin: 5px 0;
389 margin: 5px 0;
386 float: left;
390 float: left;
387 }
391 }
388 dl.overview dt {
392 dl.overview dt {
389 clear: left;
393 clear: left;
390 font-weight: bold;
394 font-weight: bold;
391 width: 150px;
395 width: 150px;
392 }
396 }
393 /** end of summary **/
397 /** end of summary **/
394
398
395 /** chagelog **/
399 /** chagelog **/
396 h3.changelog {
400 h3.changelog {
397 margin: 20px 0 5px 30px;
401 margin: 20px 0 5px 30px;
398 padding: 0 0 2px;
402 padding: 0 0 2px;
399 font-size: 1.4em;
403 font-size: 1.4em;
400 border-bottom: dotted 1px #D5E1E6;
404 border-bottom: dotted 1px #D5E1E6;
401 }
405 }
402 ul.changelog-entry {
406 ul.changelog-entry {
403 margin: 0 0 10px 30px;
407 margin: 0 0 10px 30px;
404 list-style-type: none;
408 list-style-type: none;
405 position: relative;
409 position: relative;
406 }
410 }
407 ul.changelog-entry li span.revdate {
411 ul.changelog-entry li span.revdate {
408 font-size: 1.1em;
412 font-size: 1.1em;
409 }
413 }
410 ul.changelog-entry li.age {
414 ul.changelog-entry li.age {
411 position: absolute;
415 position: absolute;
412 top: -25px;
416 top: -25px;
413 right: 10px;
417 right: 10px;
414 font-size: 1.4em;
418 font-size: 1.4em;
415 color: #CCC;
419 color: #CCC;
416 font-weight: bold;
420 font-weight: bold;
417 font-style: italic;
421 font-style: italic;
418 }
422 }
419 ul.changelog-entry li span.name {
423 ul.changelog-entry li span.name {
420 font-size: 1.2em;
424 font-size: 1.2em;
421 font-weight: bold;
425 font-weight: bold;
422 }
426 }
423 ul.changelog-entry li.description {
427 ul.changelog-entry li.description {
424 margin: 10px 0 0;
428 margin: 10px 0 0;
425 font-size: 1.1em;
429 font-size: 1.1em;
426 }
430 }
427 /** end of changelog **/
431 /** end of changelog **/
428
432
429 /** file **/
433 /** file **/
430 p.files {
434 p.files {
431 margin: 0 0 0 20px;
435 margin: 0 0 0 20px;
432 font-size: 2.0em;
436 font-size: 2.0em;
433 font-weight: bold;
437 font-weight: bold;
434 }
438 }
435 /** end of file **/
439 /** end of file **/
436
440
437 /** changeset **/
441 /** changeset **/
438 h3.changeset {
442 h3.changeset {
439 margin: 20px 0 5px 20px;
443 margin: 20px 0 5px 20px;
440 padding: 0 0 2px;
444 padding: 0 0 2px;
441 font-size: 1.6em;
445 font-size: 1.6em;
442 border-bottom: dotted 1px #D5E1E6;
446 border-bottom: dotted 1px #D5E1E6;
443 }
447 }
444 p.changeset-age {
448 p.changeset-age {
445 position: relative;
449 position: relative;
446 }
450 }
447 p.changeset-age span {
451 p.changeset-age span {
448 position: absolute;
452 position: absolute;
449 top: -25px;
453 top: -25px;
450 right: 10px;
454 right: 10px;
451 font-size: 1.4em;
455 font-size: 1.4em;
452 color: #CCC;
456 color: #CCC;
453 font-weight: bold;
457 font-weight: bold;
454 font-style: italic;
458 font-style: italic;
455 }
459 }
456 p.description {
460 p.description {
457 margin: 10px 30px 0 30px;
461 margin: 10px 30px 0 30px;
458 padding: 10px;
462 padding: 10px;
459 border: solid 1px #CCC;
463 border: solid 1px #CCC;
460 font-size: 1.2em;
464 font-size: 1.2em;
461 }
465 }
462 /** end of changeset **/
466 /** end of changeset **/
463
467
464 /** canvas **/
468 /** canvas **/
465 div#wrapper {
469 div#wrapper {
466 position: relative;
470 position: relative;
467 font-size: 1.2em;
471 font-size: 1.2em;
468 }
472 }
469
473
470 canvas {
474 canvas {
471 position: absolute;
475 position: absolute;
472 z-index: 5;
476 z-index: 5;
473 top: -0.7em;
477 top: -0.7em;
474 }
478 }
475
479
476 ul#nodebgs li.parity0 {
480 ul#nodebgs li.parity0 {
477 background: #F1F6F7;
481 background: #F1F6F7;
478 }
482 }
479
483
480 ul#nodebgs li.parity1 {
484 ul#nodebgs li.parity1 {
481 background: #FFFFFF;
485 background: #FFFFFF;
482 }
486 }
483
487
484 ul#graphnodes {
488 ul#graphnodes {
485 position: absolute;
489 position: absolute;
486 z-index: 10;
490 z-index: 10;
487 top: 7px;
491 top: 7px;
488 list-style: none inside none;
492 list-style: none inside none;
489 }
493 }
490
494
491 ul#nodebgs {
495 ul#nodebgs {
492 list-style: none inside none;
496 list-style: none inside none;
493 }
497 }
494
498
495 ul#graphnodes li, ul#nodebgs li {
499 ul#graphnodes li, ul#nodebgs li {
496 height: 39px;
500 height: 39px;
497 }
501 }
498
502
499 ul#graphnodes li .info {
503 ul#graphnodes li .info {
500 display: block;
504 display: block;
501 position: relative;
505 position: relative;
502 }
506 }
503 /** end of canvas **/
507 /** end of canvas **/
504
508
505 /** comparison **/
509 /** comparison **/
506 .legend {
510 .legend {
507 margin-left: 20px;
511 margin-left: 20px;
508 padding: 1.5% 0 1.5% 0;
512 padding: 1.5% 0 1.5% 0;
509 }
513 }
510
514
511 .legendinfo {
515 .legendinfo {
512 border: 1px solid #999;
516 border: 1px solid #999;
513 font-size: 80%;
517 font-size: 80%;
514 text-align: center;
518 text-align: center;
515 padding: 0.5%;
519 padding: 0.5%;
516 }
520 }
517
521
518 .equal {
522 .equal {
519 background-color: #ffffff;
523 background-color: #ffffff;
520 }
524 }
521
525
522 .delete {
526 .delete {
523 background-color: #faa;
527 background-color: #faa;
524 color: #333;
528 color: #333;
525 }
529 }
526
530
527 .insert {
531 .insert {
528 background-color: #ffa;
532 background-color: #ffa;
529 }
533 }
530
534
531 .replace {
535 .replace {
532 background-color: #e8e8e8;
536 background-color: #e8e8e8;
533 }
537 }
534
538
535 .comparison {
539 .comparison {
536 overflow-x: auto;
540 overflow-x: auto;
537 }
541 }
538
542
539 .comparison table td {
543 .comparison table td {
540 padding: 0px 5px;
544 padding: 0px 5px;
541 }
545 }
542
546
543 .header th {
547 .header th {
544 font-weight: bold;
548 font-weight: bold;
545 }
549 }
546
550
547 .block {
551 .block {
548 border-top: 1px solid #999;
552 border-top: 1px solid #999;
549 }
553 }
550 /** end of comparison **/
554 /** end of comparison **/
551
555
552 .breadcrumb a:hover {
556 .breadcrumb a:hover {
553 text-decoration:underline;
557 text-decoration:underline;
554 }
558 }
555
559
556 .scroll-loading {
560 .scroll-loading {
557 -webkit-animation: change_color 1s linear 0s infinite alternate;
561 -webkit-animation: change_color 1s linear 0s infinite alternate;
558 -moz-animation: change_color 1s linear 0s infinite alternate;
562 -moz-animation: change_color 1s linear 0s infinite alternate;
559 -o-animation: change_color 1s linear 0s infinite alternate;
563 -o-animation: change_color 1s linear 0s infinite alternate;
560 animation: change_color 1s linear 0s infinite alternate;
564 animation: change_color 1s linear 0s infinite alternate;
561 }
565 }
562
566
563 @-webkit-keyframes change_color {
567 @-webkit-keyframes change_color {
564 from { background-color: #A0CEFF; } to { }
568 from { background-color: #A0CEFF; } to { }
565 }
569 }
566 @-moz-keyframes change_color {
570 @-moz-keyframes change_color {
567 from { background-color: #A0CEFF; } to { }
571 from { background-color: #A0CEFF; } to { }
568 }
572 }
569 @-o-keyframes change_color {
573 @-o-keyframes change_color {
570 from { background-color: #A0CEFF; } to { }
574 from { background-color: #A0CEFF; } to { }
571 }
575 }
572 @keyframes change_color {
576 @keyframes change_color {
573 from { background-color: #A0CEFF; } to { }
577 from { background-color: #A0CEFF; } to { }
574 }
578 }
575
579
576 .scroll-loading-error {
580 .scroll-loading-error {
577 background-color: #FFCCCC !important;
581 background-color: #FFCCCC !important;
578 }
582 }
579
583
580 #doc {
584 #doc {
581 margin: 0 30px;
585 margin: 0 30px;
582 }
586 }
@@ -1,550 +1,559 b''
1 body {
1 body {
2 margin: 0;
2 margin: 0;
3 padding: 0;
3 padding: 0;
4 background: white;
4 background: white;
5 color: black;
5 color: black;
6 font-family: sans-serif;
6 font-family: sans-serif;
7 }
7 }
8
8
9 .container {
9 .container {
10 padding-left: 115px;
10 padding-left: 115px;
11 }
11 }
12
12
13 .main {
13 .main {
14 position: relative;
14 position: relative;
15 background: white;
15 background: white;
16 padding: 2em 2em 2em 0;
16 padding: 2em 2em 2em 0;
17 }
17 }
18
18
19 #.main {
19 #.main {
20 width: 98%;
20 width: 98%;
21 }
21 }
22
22
23 .overflow {
23 .overflow {
24 width: 100%;
24 width: 100%;
25 overflow: auto;
25 overflow: auto;
26 }
26 }
27
27
28 .menu {
28 .menu {
29 width: 90px;
29 width: 90px;
30 margin: 0;
30 margin: 0;
31 font-size: 80%;
31 font-size: 80%;
32 text-align: left;
32 text-align: left;
33 position: absolute;
33 position: absolute;
34 top: 20px;
34 top: 20px;
35 left: 20px;
35 left: 20px;
36 right: auto;
36 right: auto;
37 }
37 }
38
38
39 .menu ul {
39 .menu ul {
40 list-style: none;
40 list-style: none;
41 padding: 0;
41 padding: 0;
42 margin: 10px 0 0 0;
42 margin: 10px 0 0 0;
43 border-left: 2px solid #999;
43 border-left: 2px solid #999;
44 }
44 }
45
45
46 .menu li {
46 .menu li {
47 margin-bottom: 3px;
47 margin-bottom: 3px;
48 padding: 2px 4px;
48 padding: 2px 4px;
49 background: white;
49 background: white;
50 color: black;
50 color: black;
51 font-weight: normal;
51 font-weight: normal;
52 }
52 }
53
53
54 .menu li.active {
54 .menu li.active {
55 font-weight: bold;
55 font-weight: bold;
56 }
56 }
57
57
58 .menu img {
58 .menu img {
59 width: 75px;
59 width: 75px;
60 height: 90px;
60 height: 90px;
61 border: 0;
61 border: 0;
62 }
62 }
63
63
64 div.atom-logo {
64 div.atom-logo {
65 margin-top: 10px;
65 margin-top: 10px;
66 }
66 }
67
67
68 .atom-logo img{
68 .atom-logo img{
69 width: 14px;
69 width: 14px;
70 height: 14px;
70 height: 14px;
71 border: 0;
71 border: 0;
72 }
72 }
73
73
74 .menu a { color: black; display: block; }
74 .menu a { color: black; display: block; }
75
75
76 .search {
76 .search {
77 position: absolute;
77 position: absolute;
78 top: .7em;
78 top: .7em;
79 right: 2em;
79 right: 2em;
80 }
80 }
81
81
82 form.search div#hint {
82 form.search div#hint {
83 display: none;
83 display: none;
84 position: absolute;
84 position: absolute;
85 top: 40px;
85 top: 40px;
86 right: 0px;
86 right: 0px;
87 width: 190px;
87 width: 190px;
88 padding: 5px;
88 padding: 5px;
89 background: #ffc;
89 background: #ffc;
90 font-size: 70%;
90 font-size: 70%;
91 border: 1px solid yellow;
91 border: 1px solid yellow;
92 border-radius: 5px;
92 border-radius: 5px;
93 }
93 }
94
94
95 form.search:hover div#hint { display: block; }
95 form.search:hover div#hint { display: block; }
96
96
97 a { text-decoration:none; }
97 a { text-decoration:none; }
98 .age { white-space:nowrap; }
98 .age { white-space:nowrap; }
99 .date { white-space:nowrap; }
99 .date { white-space:nowrap; }
100 .indexlinks { white-space:nowrap; }
100 .indexlinks { white-space:nowrap; }
101 .parity0,
101 .parity0,
102 .stripes4 > :nth-child(4n+1),
102 .stripes4 > :nth-child(4n+1),
103 .stripes2 > :nth-child(2n+1) { background-color: #f0f0f0; }
103 .stripes2 > :nth-child(2n+1) { background-color: #f0f0f0; }
104 .parity1,
104 .parity1,
105 .stripes4 > :nth-child(4n+3),
105 .stripes4 > :nth-child(4n+3),
106 .stripes2 > :nth-child(2n+2) { background-color: white; }
106 .stripes2 > :nth-child(2n+2) { background-color: white; }
107 .plusline { color: green; }
107 .plusline { color: green; }
108 .minusline { color: #dc143c; } /* crimson */
108 .minusline { color: #dc143c; } /* crimson */
109 .atline { color: purple; }
109 .atline { color: purple; }
110
110
111 .diffstat-table {
111 .diffstat-table {
112 margin-top: 1em;
112 margin-top: 1em;
113 }
113 }
114 .diffstat-file {
114 .diffstat-file {
115 white-space: nowrap;
115 white-space: nowrap;
116 font-size: 90%;
116 font-size: 90%;
117 }
117 }
118 .diffstat-total {
118 .diffstat-total {
119 white-space: nowrap;
119 white-space: nowrap;
120 font-size: 90%;
120 font-size: 90%;
121 }
121 }
122 .diffstat-graph {
122 .diffstat-graph {
123 width: 100%;
123 width: 100%;
124 }
124 }
125 .diffstat-add {
125 .diffstat-add {
126 background-color: green;
126 background-color: green;
127 float: left;
127 float: left;
128 }
128 }
129 .diffstat-remove {
129 .diffstat-remove {
130 background-color: red;
130 background-color: red;
131 float: left;
131 float: left;
132 }
132 }
133
133
134 .navigate {
134 .navigate {
135 text-align: right;
135 text-align: right;
136 font-size: 60%;
136 font-size: 60%;
137 margin: 1em 0;
137 margin: 1em 0;
138 }
138 }
139
139
140 .phase {
140 .phase {
141 color: #999;
141 color: #999;
142 font-size: 70%;
142 font-size: 70%;
143 border-bottom: 1px dotted #999;
143 border-bottom: 1px dotted #999;
144 font-weight: normal;
144 font-weight: normal;
145 margin-left: .5em;
145 margin-left: .5em;
146 vertical-align: baseline;
146 vertical-align: baseline;
147 }
147 }
148
148
149 .obsolete {
149 .obsolete {
150 color: #999;
150 color: #999;
151 font-size: 70%;
151 font-size: 70%;
152 border-bottom: 1px dashed #999;
152 border-bottom: 1px dashed #999;
153 font-weight: normal;
153 font-weight: normal;
154 margin-left: .5em;
154 margin-left: .5em;
155 vertical-align: baseline;
155 vertical-align: baseline;
156 }
156 }
157
157
158 .instability {
159 color: #000;
160 font-size: 70%;
161 border-bottom: 1px solid #000;
162 font-weight: normal;
163 margin-left: .5em;
164 vertical-align: baseline;
165 }
166
158 .tag {
167 .tag {
159 color: #999;
168 color: #999;
160 font-size: 70%;
169 font-size: 70%;
161 font-weight: normal;
170 font-weight: normal;
162 margin-left: .5em;
171 margin-left: .5em;
163 vertical-align: baseline;
172 vertical-align: baseline;
164 }
173 }
165
174
166 .branchhead {
175 .branchhead {
167 color: #000;
176 color: #000;
168 font-size: 80%;
177 font-size: 80%;
169 font-weight: normal;
178 font-weight: normal;
170 margin-left: .5em;
179 margin-left: .5em;
171 vertical-align: baseline;
180 vertical-align: baseline;
172 }
181 }
173
182
174 ul#graphnodes .branchhead {
183 ul#graphnodes .branchhead {
175 font-size: 75%;
184 font-size: 75%;
176 }
185 }
177
186
178 .branchname {
187 .branchname {
179 color: #000;
188 color: #000;
180 font-size: 60%;
189 font-size: 60%;
181 font-weight: normal;
190 font-weight: normal;
182 margin-left: .5em;
191 margin-left: .5em;
183 vertical-align: baseline;
192 vertical-align: baseline;
184 }
193 }
185
194
186 h3 .branchname {
195 h3 .branchname {
187 font-size: 80%;
196 font-size: 80%;
188 }
197 }
189
198
190 /* Common */
199 /* Common */
191 pre { margin: 0; }
200 pre { margin: 0; }
192
201
193 h2 { font-size: 120%; border-bottom: 1px solid #999; }
202 h2 { font-size: 120%; border-bottom: 1px solid #999; }
194 h2 a { color: #000; }
203 h2 a { color: #000; }
195 h3 {
204 h3 {
196 margin-top: +.7em;
205 margin-top: +.7em;
197 font-size: 100%;
206 font-size: 100%;
198 }
207 }
199
208
200 /* log and tags tables */
209 /* log and tags tables */
201 .bigtable {
210 .bigtable {
202 border-bottom: 1px solid #999;
211 border-bottom: 1px solid #999;
203 border-collapse: collapse;
212 border-collapse: collapse;
204 font-size: 90%;
213 font-size: 90%;
205 width: 100%;
214 width: 100%;
206 font-weight: normal;
215 font-weight: normal;
207 text-align: left;
216 text-align: left;
208 }
217 }
209
218
210 .bigtable td {
219 .bigtable td {
211 vertical-align: top;
220 vertical-align: top;
212 }
221 }
213
222
214 .bigtable th {
223 .bigtable th {
215 padding: 1px 4px;
224 padding: 1px 4px;
216 border-bottom: 1px solid #999;
225 border-bottom: 1px solid #999;
217 }
226 }
218 .bigtable tr { border: none; }
227 .bigtable tr { border: none; }
219 .bigtable .age { width: 7em; }
228 .bigtable .age { width: 7em; }
220 .bigtable .author { width: 15em; }
229 .bigtable .author { width: 15em; }
221 .bigtable .description { }
230 .bigtable .description { }
222 .bigtable .description .base { font-size: 70%; float: right; line-height: 1.66; }
231 .bigtable .description .base { font-size: 70%; float: right; line-height: 1.66; }
223 .bigtable .node { width: 5em; font-family: monospace;}
232 .bigtable .node { width: 5em; font-family: monospace;}
224 .bigtable .permissions { width: 8em; text-align: left;}
233 .bigtable .permissions { width: 8em; text-align: left;}
225 .bigtable .size { width: 5em; text-align: right; }
234 .bigtable .size { width: 5em; text-align: right; }
226 .bigtable .annotate { text-align: right; }
235 .bigtable .annotate { text-align: right; }
227 .bigtable td.annotate { font-size: smaller; }
236 .bigtable td.annotate { font-size: smaller; }
228 .bigtable td.source { font-size: inherit; }
237 .bigtable td.source { font-size: inherit; }
229 tr.thisrev a { color:#999999; text-decoration: none; }
238 tr.thisrev a { color:#999999; text-decoration: none; }
230 tr.thisrev td.source { color:#009900; }
239 tr.thisrev td.source { color:#009900; }
231 td.annotate {
240 td.annotate {
232 white-space: nowrap;
241 white-space: nowrap;
233 }
242 }
234 div.annotate-info {
243 div.annotate-info {
235 z-index: 5;
244 z-index: 5;
236 display: none;
245 display: none;
237 position: absolute;
246 position: absolute;
238 background-color: #FFFFFF;
247 background-color: #FFFFFF;
239 border: 1px solid #999;
248 border: 1px solid #999;
240 text-align: left;
249 text-align: left;
241 color: #000000;
250 color: #000000;
242 padding: 5px;
251 padding: 5px;
243 }
252 }
244 div.annotate-info a { color: #0000FF; }
253 div.annotate-info a { color: #0000FF; }
245 td.annotate:hover div.annotate-info { display: inline; }
254 td.annotate:hover div.annotate-info { display: inline; }
246
255
247 #diffopts-form {
256 #diffopts-form {
248 font-size: smaller;
257 font-size: smaller;
249 color: #424242;
258 color: #424242;
250 padding-bottom: 10px;
259 padding-bottom: 10px;
251 display: none;
260 display: none;
252 }
261 }
253
262
254 .source, .sourcefirst {
263 .source, .sourcefirst {
255 font-family: monospace;
264 font-family: monospace;
256 white-space: pre;
265 white-space: pre;
257 padding: 1px 4px;
266 padding: 1px 4px;
258 font-size: 90%;
267 font-size: 90%;
259 }
268 }
260 .sourcefirst { border-bottom: 1px solid #999; font-weight: bold; }
269 .sourcefirst { border-bottom: 1px solid #999; font-weight: bold; }
261 .source a { color: #999; font-size: smaller; font-family: monospace;}
270 .source a { color: #999; font-size: smaller; font-family: monospace;}
262 .bottomline { border-bottom: 1px solid #999; }
271 .bottomline { border-bottom: 1px solid #999; }
263
272
264 .sourcelines {
273 .sourcelines {
265 font-size: 90%;
274 font-size: 90%;
266 position: relative;
275 position: relative;
267 counter-reset: lineno;
276 counter-reset: lineno;
268 }
277 }
269
278
270 .wrap > span {
279 .wrap > span {
271 white-space: pre-wrap;
280 white-space: pre-wrap;
272 }
281 }
273
282
274 .linewraptoggle {
283 .linewraptoggle {
275 float: right;
284 float: right;
276 }
285 }
277
286
278 .diffblocks { counter-reset: lineno; }
287 .diffblocks { counter-reset: lineno; }
279 .diffblocks > div { counter-increment: lineno; }
288 .diffblocks > div { counter-increment: lineno; }
280
289
281 .sourcelines > span {
290 .sourcelines > span {
282 display: inline-block;
291 display: inline-block;
283 box-sizing: border-box;
292 box-sizing: border-box;
284 width: 100%;
293 width: 100%;
285 padding: 1px 0px 1px 5em;
294 padding: 1px 0px 1px 5em;
286 counter-increment: lineno;
295 counter-increment: lineno;
287 }
296 }
288
297
289 .sourcelines > span:before {
298 .sourcelines > span:before {
290 -moz-user-select: -moz-none;
299 -moz-user-select: -moz-none;
291 -khtml-user-select: none;
300 -khtml-user-select: none;
292 -webkit-user-select: none;
301 -webkit-user-select: none;
293 -ms-user-select: none;
302 -ms-user-select: none;
294 user-select: none;
303 user-select: none;
295 display: inline-block;
304 display: inline-block;
296 margin-left: -6em;
305 margin-left: -6em;
297 width: 4em;
306 width: 4em;
298 font-size: smaller;
307 font-size: smaller;
299 color: #999;
308 color: #999;
300 text-align: right;
309 text-align: right;
301 content: counters(lineno, ".");
310 content: counters(lineno, ".");
302 float: left;
311 float: left;
303 }
312 }
304
313
305 .sourcelines > span:target, tr:target td {
314 .sourcelines > span:target, tr:target td {
306 background-color: #bfdfff;
315 background-color: #bfdfff;
307 }
316 }
308
317
309 /* Followlines */
318 /* Followlines */
310 tbody.sourcelines > tr.followlines-selected,
319 tbody.sourcelines > tr.followlines-selected,
311 pre.sourcelines > span.followlines-selected {
320 pre.sourcelines > span.followlines-selected {
312 background-color: #99C7E9;
321 background-color: #99C7E9;
313 }
322 }
314
323
315 div#followlines {
324 div#followlines {
316 background-color: #FFF;
325 background-color: #FFF;
317 border: 1px solid #999;
326 border: 1px solid #999;
318 padding: 5px;
327 padding: 5px;
319 position: fixed;
328 position: fixed;
320 }
329 }
321
330
322 div.followlines-cancel {
331 div.followlines-cancel {
323 text-align: right;
332 text-align: right;
324 }
333 }
325
334
326 div.followlines-cancel > button {
335 div.followlines-cancel > button {
327 line-height: 80%;
336 line-height: 80%;
328 padding: 0;
337 padding: 0;
329 border: 0;
338 border: 0;
330 border-radius: 2px;
339 border-radius: 2px;
331 background-color: inherit;
340 background-color: inherit;
332 font-weight: bold;
341 font-weight: bold;
333 }
342 }
334
343
335 div.followlines-cancel > button:hover {
344 div.followlines-cancel > button:hover {
336 color: #FFFFFF;
345 color: #FFFFFF;
337 background-color: #CF1F1F;
346 background-color: #CF1F1F;
338 }
347 }
339
348
340 div.followlines-link {
349 div.followlines-link {
341 margin: 2px;
350 margin: 2px;
342 margin-top: 4px;
351 margin-top: 4px;
343 font-family: sans-serif;
352 font-family: sans-serif;
344 }
353 }
345
354
346 .btn-followlines {
355 .btn-followlines {
347 display: none;
356 display: none;
348 cursor: pointer;
357 cursor: pointer;
349 box-sizing: content-box;
358 box-sizing: content-box;
350 font-size: 12px;
359 font-size: 12px;
351 width: 13px;
360 width: 13px;
352 height: 13px;
361 height: 13px;
353 border-radius: 3px;
362 border-radius: 3px;
354 margin: 0px;
363 margin: 0px;
355 margin-top: -2px;
364 margin-top: -2px;
356 padding: 0px;
365 padding: 0px;
357 background-color: #E5FDE5;
366 background-color: #E5FDE5;
358 border: 1px solid #9BC19B;
367 border: 1px solid #9BC19B;
359 font-family: monospace;
368 font-family: monospace;
360 text-align: center;
369 text-align: center;
361 line-height: 5px;
370 line-height: 5px;
362 }
371 }
363
372
364 tr .btn-followlines {
373 tr .btn-followlines {
365 position: absolute;
374 position: absolute;
366 }
375 }
367
376
368 span .btn-followlines {
377 span .btn-followlines {
369 float: left;
378 float: left;
370 }
379 }
371
380
372 span.followlines-select .btn-followlines {
381 span.followlines-select .btn-followlines {
373 margin-left: -1.5em;
382 margin-left: -1.5em;
374 }
383 }
375
384
376 .btn-followlines:hover {
385 .btn-followlines:hover {
377 transform: scale(1.2, 1.2);
386 transform: scale(1.2, 1.2);
378 }
387 }
379
388
380 .btn-followlines .followlines-plus {
389 .btn-followlines .followlines-plus {
381 color: green;
390 color: green;
382 }
391 }
383
392
384 .btn-followlines .followlines-minus {
393 .btn-followlines .followlines-minus {
385 color: red;
394 color: red;
386 }
395 }
387
396
388 .btn-followlines-end {
397 .btn-followlines-end {
389 background-color: #ffdcdc;
398 background-color: #ffdcdc;
390 }
399 }
391
400
392 .sourcelines tr:hover .btn-followlines,
401 .sourcelines tr:hover .btn-followlines,
393 .sourcelines span.followlines-select:hover > .btn-followlines {
402 .sourcelines span.followlines-select:hover > .btn-followlines {
394 display: inline;
403 display: inline;
395 }
404 }
396
405
397 .btn-followlines-hidden,
406 .btn-followlines-hidden,
398 .sourcelines tr:hover .btn-followlines-hidden {
407 .sourcelines tr:hover .btn-followlines-hidden {
399 display: none;
408 display: none;
400 }
409 }
401
410
402 .sourcelines > a {
411 .sourcelines > a {
403 display: inline-block;
412 display: inline-block;
404 position: absolute;
413 position: absolute;
405 left: 0px;
414 left: 0px;
406 width: 4em;
415 width: 4em;
407 height: 1em;
416 height: 1em;
408 }
417 }
409
418
410 .fileline { font-family: monospace; }
419 .fileline { font-family: monospace; }
411 .fileline img { border: 0; }
420 .fileline img { border: 0; }
412
421
413 .tagEntry .closed { color: #99f; }
422 .tagEntry .closed { color: #99f; }
414
423
415 /* Changeset entry */
424 /* Changeset entry */
416 #changesetEntry {
425 #changesetEntry {
417 border-collapse: collapse;
426 border-collapse: collapse;
418 font-size: 90%;
427 font-size: 90%;
419 width: 100%;
428 width: 100%;
420 margin-bottom: 1em;
429 margin-bottom: 1em;
421 }
430 }
422
431
423 #changesetEntry th {
432 #changesetEntry th {
424 padding: 1px 4px;
433 padding: 1px 4px;
425 width: 4em;
434 width: 4em;
426 text-align: right;
435 text-align: right;
427 font-weight: normal;
436 font-weight: normal;
428 color: #999;
437 color: #999;
429 margin-right: .5em;
438 margin-right: .5em;
430 vertical-align: top;
439 vertical-align: top;
431 }
440 }
432
441
433 div.description {
442 div.description {
434 border-left: 2px solid #999;
443 border-left: 2px solid #999;
435 margin: 1em 0 1em 0;
444 margin: 1em 0 1em 0;
436 padding: .3em;
445 padding: .3em;
437 white-space: pre;
446 white-space: pre;
438 font-family: monospace;
447 font-family: monospace;
439 }
448 }
440
449
441 /* Graph */
450 /* Graph */
442 div#wrapper {
451 div#wrapper {
443 position: relative;
452 position: relative;
444 border-top: 1px solid black;
453 border-top: 1px solid black;
445 border-bottom: 1px solid black;
454 border-bottom: 1px solid black;
446 margin: 0;
455 margin: 0;
447 padding: 0;
456 padding: 0;
448 }
457 }
449
458
450 canvas {
459 canvas {
451 position: absolute;
460 position: absolute;
452 z-index: 5;
461 z-index: 5;
453 top: -0.7em;
462 top: -0.7em;
454 margin: 0;
463 margin: 0;
455 }
464 }
456
465
457 ul#graphnodes {
466 ul#graphnodes {
458 position: absolute;
467 position: absolute;
459 z-index: 10;
468 z-index: 10;
460 top: -1.0em;
469 top: -1.0em;
461 list-style: none inside none;
470 list-style: none inside none;
462 padding: 0;
471 padding: 0;
463 }
472 }
464
473
465 ul#nodebgs {
474 ul#nodebgs {
466 list-style: none inside none;
475 list-style: none inside none;
467 padding: 0;
476 padding: 0;
468 margin: 0;
477 margin: 0;
469 top: -0.7em;
478 top: -0.7em;
470 }
479 }
471
480
472 ul#graphnodes li, ul#nodebgs li {
481 ul#graphnodes li, ul#nodebgs li {
473 height: 39px;
482 height: 39px;
474 }
483 }
475
484
476 ul#graphnodes li .info {
485 ul#graphnodes li .info {
477 display: block;
486 display: block;
478 font-size: 70%;
487 font-size: 70%;
479 position: relative;
488 position: relative;
480 top: -3px;
489 top: -3px;
481 }
490 }
482
491
483 /* Comparison */
492 /* Comparison */
484 .legend {
493 .legend {
485 padding: 1.5% 0 1.5% 0;
494 padding: 1.5% 0 1.5% 0;
486 }
495 }
487
496
488 .legendinfo {
497 .legendinfo {
489 border: 1px solid #999;
498 border: 1px solid #999;
490 font-size: 80%;
499 font-size: 80%;
491 text-align: center;
500 text-align: center;
492 padding: 0.5%;
501 padding: 0.5%;
493 }
502 }
494
503
495 .equal {
504 .equal {
496 background-color: #ffffff;
505 background-color: #ffffff;
497 }
506 }
498
507
499 .delete {
508 .delete {
500 background-color: #faa;
509 background-color: #faa;
501 color: #333;
510 color: #333;
502 }
511 }
503
512
504 .insert {
513 .insert {
505 background-color: #ffa;
514 background-color: #ffa;
506 }
515 }
507
516
508 .replace {
517 .replace {
509 background-color: #e8e8e8;
518 background-color: #e8e8e8;
510 }
519 }
511
520
512 .header {
521 .header {
513 text-align: center;
522 text-align: center;
514 }
523 }
515
524
516 .block {
525 .block {
517 border-top: 1px solid #999;
526 border-top: 1px solid #999;
518 }
527 }
519
528
520 .breadcrumb {
529 .breadcrumb {
521 color: gray;
530 color: gray;
522 }
531 }
523
532
524 .breadcrumb a {
533 .breadcrumb a {
525 color: blue;
534 color: blue;
526 }
535 }
527
536
528 .scroll-loading {
537 .scroll-loading {
529 -webkit-animation: change_color 1s linear 0s infinite alternate;
538 -webkit-animation: change_color 1s linear 0s infinite alternate;
530 -moz-animation: change_color 1s linear 0s infinite alternate;
539 -moz-animation: change_color 1s linear 0s infinite alternate;
531 -o-animation: change_color 1s linear 0s infinite alternate;
540 -o-animation: change_color 1s linear 0s infinite alternate;
532 animation: change_color 1s linear 0s infinite alternate;
541 animation: change_color 1s linear 0s infinite alternate;
533 }
542 }
534
543
535 @-webkit-keyframes change_color {
544 @-webkit-keyframes change_color {
536 from { background-color: #A0CEFF; } to { }
545 from { background-color: #A0CEFF; } to { }
537 }
546 }
538 @-moz-keyframes change_color {
547 @-moz-keyframes change_color {
539 from { background-color: #A0CEFF; } to { }
548 from { background-color: #A0CEFF; } to { }
540 }
549 }
541 @-o-keyframes change_color {
550 @-o-keyframes change_color {
542 from { background-color: #A0CEFF; } to { }
551 from { background-color: #A0CEFF; } to { }
543 }
552 }
544 @keyframes change_color {
553 @keyframes change_color {
545 from { background-color: #A0CEFF; } to { }
554 from { background-color: #A0CEFF; } to { }
546 }
555 }
547
556
548 .scroll-loading-error {
557 .scroll-loading-error {
549 background-color: #FFCCCC !important;
558 background-color: #FFCCCC !important;
550 }
559 }
@@ -1,887 +1,891 b''
1 #require serve
1 #require serve
2
2
3 Some tests for hgweb. Tests static files, plain files and different 404's.
3 Some tests for hgweb. Tests static files, plain files and different 404's.
4
4
5 $ hg init test
5 $ hg init test
6 $ cd test
6 $ cd test
7 $ mkdir da
7 $ mkdir da
8 $ echo foo > da/foo
8 $ echo foo > da/foo
9 $ echo foo > foo
9 $ echo foo > foo
10 $ hg ci -Ambase
10 $ hg ci -Ambase
11 adding da/foo
11 adding da/foo
12 adding foo
12 adding foo
13 $ hg bookmark -r0 '@'
13 $ hg bookmark -r0 '@'
14 $ hg bookmark -r0 'a b c'
14 $ hg bookmark -r0 'a b c'
15 $ hg bookmark -r0 'd/e/f'
15 $ hg bookmark -r0 'd/e/f'
16 $ hg serve -n test -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
16 $ hg serve -n test -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
17 $ cat hg.pid >> $DAEMON_PIDS
17 $ cat hg.pid >> $DAEMON_PIDS
18
18
19 manifest
19 manifest
20
20
21 $ (get-with-headers.py localhost:$HGPORT 'file/tip/?style=raw')
21 $ (get-with-headers.py localhost:$HGPORT 'file/tip/?style=raw')
22 200 Script output follows
22 200 Script output follows
23
23
24
24
25 drwxr-xr-x da
25 drwxr-xr-x da
26 -rw-r--r-- 4 foo
26 -rw-r--r-- 4 foo
27
27
28
28
29 $ (get-with-headers.py localhost:$HGPORT 'file/tip/da?style=raw')
29 $ (get-with-headers.py localhost:$HGPORT 'file/tip/da?style=raw')
30 200 Script output follows
30 200 Script output follows
31
31
32
32
33 -rw-r--r-- 4 foo
33 -rw-r--r-- 4 foo
34
34
35
35
36
36
37 plain file
37 plain file
38
38
39 $ get-with-headers.py localhost:$HGPORT 'file/tip/foo?style=raw'
39 $ get-with-headers.py localhost:$HGPORT 'file/tip/foo?style=raw'
40 200 Script output follows
40 200 Script output follows
41
41
42 foo
42 foo
43
43
44 should give a 404 - static file that does not exist
44 should give a 404 - static file that does not exist
45
45
46 $ get-with-headers.py localhost:$HGPORT 'static/bogus'
46 $ get-with-headers.py localhost:$HGPORT 'static/bogus'
47 404 Not Found
47 404 Not Found
48
48
49 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
49 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
50 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
50 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
51 <head>
51 <head>
52 <link rel="icon" href="/static/hgicon.png" type="image/png" />
52 <link rel="icon" href="/static/hgicon.png" type="image/png" />
53 <meta name="robots" content="index, nofollow" />
53 <meta name="robots" content="index, nofollow" />
54 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
54 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
55 <script type="text/javascript" src="/static/mercurial.js"></script>
55 <script type="text/javascript" src="/static/mercurial.js"></script>
56
56
57 <title>test: error</title>
57 <title>test: error</title>
58 </head>
58 </head>
59 <body>
59 <body>
60
60
61 <div class="container">
61 <div class="container">
62 <div class="menu">
62 <div class="menu">
63 <div class="logo">
63 <div class="logo">
64 <a href="https://mercurial-scm.org/">
64 <a href="https://mercurial-scm.org/">
65 <img src="/static/hglogo.png" width=75 height=90 border=0 alt="mercurial" /></a>
65 <img src="/static/hglogo.png" width=75 height=90 border=0 alt="mercurial" /></a>
66 </div>
66 </div>
67 <ul>
67 <ul>
68 <li><a href="/shortlog">log</a></li>
68 <li><a href="/shortlog">log</a></li>
69 <li><a href="/graph">graph</a></li>
69 <li><a href="/graph">graph</a></li>
70 <li><a href="/tags">tags</a></li>
70 <li><a href="/tags">tags</a></li>
71 <li><a href="/bookmarks">bookmarks</a></li>
71 <li><a href="/bookmarks">bookmarks</a></li>
72 <li><a href="/branches">branches</a></li>
72 <li><a href="/branches">branches</a></li>
73 </ul>
73 </ul>
74 <ul>
74 <ul>
75 <li><a href="/help">help</a></li>
75 <li><a href="/help">help</a></li>
76 </ul>
76 </ul>
77 </div>
77 </div>
78
78
79 <div class="main">
79 <div class="main">
80
80
81 <h2 class="breadcrumb"><a href="/">Mercurial</a> </h2>
81 <h2 class="breadcrumb"><a href="/">Mercurial</a> </h2>
82 <h3>error</h3>
82 <h3>error</h3>
83
83
84
84
85 <form class="search" action="/log">
85 <form class="search" action="/log">
86
86
87 <p><input name="rev" id="search1" type="text" size="30" value="" /></p>
87 <p><input name="rev" id="search1" type="text" size="30" value="" /></p>
88 <div id="hint">Find changesets by keywords (author, files, the commit message), revision
88 <div id="hint">Find changesets by keywords (author, files, the commit message), revision
89 number or hash, or <a href="/help/revsets">revset expression</a>.</div>
89 number or hash, or <a href="/help/revsets">revset expression</a>.</div>
90 </form>
90 </form>
91
91
92 <div class="description">
92 <div class="description">
93 <p>
93 <p>
94 An error occurred while processing your request:
94 An error occurred while processing your request:
95 </p>
95 </p>
96 <p>
96 <p>
97 Not Found
97 Not Found
98 </p>
98 </p>
99 </div>
99 </div>
100 </div>
100 </div>
101 </div>
101 </div>
102
102
103
103
104
104
105 </body>
105 </body>
106 </html>
106 </html>
107
107
108 [1]
108 [1]
109
109
110 should give a 404 - bad revision
110 should give a 404 - bad revision
111
111
112 $ get-with-headers.py localhost:$HGPORT 'file/spam/foo?style=raw'
112 $ get-with-headers.py localhost:$HGPORT 'file/spam/foo?style=raw'
113 404 Not Found
113 404 Not Found
114
114
115
115
116 error: revision not found: spam
116 error: revision not found: spam
117 [1]
117 [1]
118
118
119 should give a 400 - bad command
119 should give a 400 - bad command
120
120
121 $ get-with-headers.py localhost:$HGPORT 'file/tip/foo?cmd=spam&style=raw'
121 $ get-with-headers.py localhost:$HGPORT 'file/tip/foo?cmd=spam&style=raw'
122 400* (glob)
122 400* (glob)
123
123
124
124
125 error: no such method: spam
125 error: no such method: spam
126 [1]
126 [1]
127
127
128 $ get-with-headers.py --headeronly localhost:$HGPORT '?cmd=spam'
128 $ get-with-headers.py --headeronly localhost:$HGPORT '?cmd=spam'
129 400 no such method: spam
129 400 no such method: spam
130 [1]
130 [1]
131
131
132 should give a 400 - bad command as a part of url path (issue4071)
132 should give a 400 - bad command as a part of url path (issue4071)
133
133
134 $ get-with-headers.py --headeronly localhost:$HGPORT 'spam'
134 $ get-with-headers.py --headeronly localhost:$HGPORT 'spam'
135 400 no such method: spam
135 400 no such method: spam
136 [1]
136 [1]
137
137
138 $ get-with-headers.py --headeronly localhost:$HGPORT 'raw-spam'
138 $ get-with-headers.py --headeronly localhost:$HGPORT 'raw-spam'
139 400 no such method: spam
139 400 no such method: spam
140 [1]
140 [1]
141
141
142 $ get-with-headers.py --headeronly localhost:$HGPORT 'spam/tip/foo'
142 $ get-with-headers.py --headeronly localhost:$HGPORT 'spam/tip/foo'
143 400 no such method: spam
143 400 no such method: spam
144 [1]
144 [1]
145
145
146 should give a 404 - file does not exist
146 should give a 404 - file does not exist
147
147
148 $ get-with-headers.py localhost:$HGPORT 'file/tip/bork?style=raw'
148 $ get-with-headers.py localhost:$HGPORT 'file/tip/bork?style=raw'
149 404 Not Found
149 404 Not Found
150
150
151
151
152 error: bork@2ef0ac749a14: not found in manifest
152 error: bork@2ef0ac749a14: not found in manifest
153 [1]
153 [1]
154 $ get-with-headers.py localhost:$HGPORT 'file/tip/bork'
154 $ get-with-headers.py localhost:$HGPORT 'file/tip/bork'
155 404 Not Found
155 404 Not Found
156
156
157 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
157 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
158 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
158 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
159 <head>
159 <head>
160 <link rel="icon" href="/static/hgicon.png" type="image/png" />
160 <link rel="icon" href="/static/hgicon.png" type="image/png" />
161 <meta name="robots" content="index, nofollow" />
161 <meta name="robots" content="index, nofollow" />
162 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
162 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
163 <script type="text/javascript" src="/static/mercurial.js"></script>
163 <script type="text/javascript" src="/static/mercurial.js"></script>
164
164
165 <title>test: error</title>
165 <title>test: error</title>
166 </head>
166 </head>
167 <body>
167 <body>
168
168
169 <div class="container">
169 <div class="container">
170 <div class="menu">
170 <div class="menu">
171 <div class="logo">
171 <div class="logo">
172 <a href="https://mercurial-scm.org/">
172 <a href="https://mercurial-scm.org/">
173 <img src="/static/hglogo.png" width=75 height=90 border=0 alt="mercurial" /></a>
173 <img src="/static/hglogo.png" width=75 height=90 border=0 alt="mercurial" /></a>
174 </div>
174 </div>
175 <ul>
175 <ul>
176 <li><a href="/shortlog">log</a></li>
176 <li><a href="/shortlog">log</a></li>
177 <li><a href="/graph">graph</a></li>
177 <li><a href="/graph">graph</a></li>
178 <li><a href="/tags">tags</a></li>
178 <li><a href="/tags">tags</a></li>
179 <li><a href="/bookmarks">bookmarks</a></li>
179 <li><a href="/bookmarks">bookmarks</a></li>
180 <li><a href="/branches">branches</a></li>
180 <li><a href="/branches">branches</a></li>
181 </ul>
181 </ul>
182 <ul>
182 <ul>
183 <li><a href="/help">help</a></li>
183 <li><a href="/help">help</a></li>
184 </ul>
184 </ul>
185 </div>
185 </div>
186
186
187 <div class="main">
187 <div class="main">
188
188
189 <h2 class="breadcrumb"><a href="/">Mercurial</a> </h2>
189 <h2 class="breadcrumb"><a href="/">Mercurial</a> </h2>
190 <h3>error</h3>
190 <h3>error</h3>
191
191
192
192
193 <form class="search" action="/log">
193 <form class="search" action="/log">
194
194
195 <p><input name="rev" id="search1" type="text" size="30" value="" /></p>
195 <p><input name="rev" id="search1" type="text" size="30" value="" /></p>
196 <div id="hint">Find changesets by keywords (author, files, the commit message), revision
196 <div id="hint">Find changesets by keywords (author, files, the commit message), revision
197 number or hash, or <a href="/help/revsets">revset expression</a>.</div>
197 number or hash, or <a href="/help/revsets">revset expression</a>.</div>
198 </form>
198 </form>
199
199
200 <div class="description">
200 <div class="description">
201 <p>
201 <p>
202 An error occurred while processing your request:
202 An error occurred while processing your request:
203 </p>
203 </p>
204 <p>
204 <p>
205 bork@2ef0ac749a14: not found in manifest
205 bork@2ef0ac749a14: not found in manifest
206 </p>
206 </p>
207 </div>
207 </div>
208 </div>
208 </div>
209 </div>
209 </div>
210
210
211
211
212
212
213 </body>
213 </body>
214 </html>
214 </html>
215
215
216 [1]
216 [1]
217 $ get-with-headers.py localhost:$HGPORT 'diff/tip/bork?style=raw'
217 $ get-with-headers.py localhost:$HGPORT 'diff/tip/bork?style=raw'
218 404 Not Found
218 404 Not Found
219
219
220
220
221 error: bork@2ef0ac749a14: not found in manifest
221 error: bork@2ef0ac749a14: not found in manifest
222 [1]
222 [1]
223
223
224 try bad style
224 try bad style
225
225
226 $ (get-with-headers.py localhost:$HGPORT 'file/tip/?style=foobar')
226 $ (get-with-headers.py localhost:$HGPORT 'file/tip/?style=foobar')
227 200 Script output follows
227 200 Script output follows
228
228
229 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
229 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
230 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
230 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
231 <head>
231 <head>
232 <link rel="icon" href="/static/hgicon.png" type="image/png" />
232 <link rel="icon" href="/static/hgicon.png" type="image/png" />
233 <meta name="robots" content="index, nofollow" />
233 <meta name="robots" content="index, nofollow" />
234 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
234 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
235 <script type="text/javascript" src="/static/mercurial.js"></script>
235 <script type="text/javascript" src="/static/mercurial.js"></script>
236
236
237 <title>test: 2ef0ac749a14 /</title>
237 <title>test: 2ef0ac749a14 /</title>
238 </head>
238 </head>
239 <body>
239 <body>
240
240
241 <div class="container">
241 <div class="container">
242 <div class="menu">
242 <div class="menu">
243 <div class="logo">
243 <div class="logo">
244 <a href="https://mercurial-scm.org/">
244 <a href="https://mercurial-scm.org/">
245 <img src="/static/hglogo.png" alt="mercurial" /></a>
245 <img src="/static/hglogo.png" alt="mercurial" /></a>
246 </div>
246 </div>
247 <ul>
247 <ul>
248 <li><a href="/shortlog/tip">log</a></li>
248 <li><a href="/shortlog/tip">log</a></li>
249 <li><a href="/graph/tip">graph</a></li>
249 <li><a href="/graph/tip">graph</a></li>
250 <li><a href="/tags">tags</a></li>
250 <li><a href="/tags">tags</a></li>
251 <li><a href="/bookmarks">bookmarks</a></li>
251 <li><a href="/bookmarks">bookmarks</a></li>
252 <li><a href="/branches">branches</a></li>
252 <li><a href="/branches">branches</a></li>
253 </ul>
253 </ul>
254 <ul>
254 <ul>
255 <li><a href="/rev/tip">changeset</a></li>
255 <li><a href="/rev/tip">changeset</a></li>
256 <li class="active">browse</li>
256 <li class="active">browse</li>
257 </ul>
257 </ul>
258 <ul>
258 <ul>
259
259
260 </ul>
260 </ul>
261 <ul>
261 <ul>
262 <li><a href="/help">help</a></li>
262 <li><a href="/help">help</a></li>
263 </ul>
263 </ul>
264 </div>
264 </div>
265
265
266 <div class="main">
266 <div class="main">
267 <h2 class="breadcrumb"><a href="/">Mercurial</a> </h2>
267 <h2 class="breadcrumb"><a href="/">Mercurial</a> </h2>
268 <h3>
268 <h3>
269 directory / @ 0:<a href="/rev/2ef0ac749a14">2ef0ac749a14</a>
269 directory / @ 0:<a href="/rev/2ef0ac749a14">2ef0ac749a14</a>
270 <span class="phase">draft</span> <span class="branchhead">default</span> <span class="tag">tip</span> <span class="tag">@</span> <span class="tag">a b c</span> <span class="tag">d/e/f</span>
270 <span class="phase">draft</span> <span class="branchhead">default</span> <span class="tag">tip</span> <span class="tag">@</span> <span class="tag">a b c</span> <span class="tag">d/e/f</span>
271 </h3>
271 </h3>
272
272
273
273
274 <form class="search" action="/log">
274 <form class="search" action="/log">
275
275
276 <p><input name="rev" id="search1" type="text" size="30" value="" /></p>
276 <p><input name="rev" id="search1" type="text" size="30" value="" /></p>
277 <div id="hint">Find changesets by keywords (author, files, the commit message), revision
277 <div id="hint">Find changesets by keywords (author, files, the commit message), revision
278 number or hash, or <a href="/help/revsets">revset expression</a>.</div>
278 number or hash, or <a href="/help/revsets">revset expression</a>.</div>
279 </form>
279 </form>
280
280
281 <table class="bigtable">
281 <table class="bigtable">
282 <thead>
282 <thead>
283 <tr>
283 <tr>
284 <th class="name">name</th>
284 <th class="name">name</th>
285 <th class="size">size</th>
285 <th class="size">size</th>
286 <th class="permissions">permissions</th>
286 <th class="permissions">permissions</th>
287 </tr>
287 </tr>
288 </thead>
288 </thead>
289 <tbody class="stripes2">
289 <tbody class="stripes2">
290 <tr class="fileline">
290 <tr class="fileline">
291 <td class="name"><a href="/file/tip/">[up]</a></td>
291 <td class="name"><a href="/file/tip/">[up]</a></td>
292 <td class="size"></td>
292 <td class="size"></td>
293 <td class="permissions">drwxr-xr-x</td>
293 <td class="permissions">drwxr-xr-x</td>
294 </tr>
294 </tr>
295
295
296 <tr class="fileline">
296 <tr class="fileline">
297 <td class="name">
297 <td class="name">
298 <a href="/file/tip/da">
298 <a href="/file/tip/da">
299 <img src="/static/coal-folder.png" alt="dir."/> da/
299 <img src="/static/coal-folder.png" alt="dir."/> da/
300 </a>
300 </a>
301 <a href="/file/tip/da/">
301 <a href="/file/tip/da/">
302
302
303 </a>
303 </a>
304 </td>
304 </td>
305 <td class="size"></td>
305 <td class="size"></td>
306 <td class="permissions">drwxr-xr-x</td>
306 <td class="permissions">drwxr-xr-x</td>
307 </tr>
307 </tr>
308
308
309 <tr class="fileline">
309 <tr class="fileline">
310 <td class="filename">
310 <td class="filename">
311 <a href="/file/tip/foo">
311 <a href="/file/tip/foo">
312 <img src="/static/coal-file.png" alt="file"/> foo
312 <img src="/static/coal-file.png" alt="file"/> foo
313 </a>
313 </a>
314 </td>
314 </td>
315 <td class="size">4</td>
315 <td class="size">4</td>
316 <td class="permissions">-rw-r--r--</td>
316 <td class="permissions">-rw-r--r--</td>
317 </tr>
317 </tr>
318 </tbody>
318 </tbody>
319 </table>
319 </table>
320 </div>
320 </div>
321 </div>
321 </div>
322
322
323
323
324 </body>
324 </body>
325 </html>
325 </html>
326
326
327
327
328 stop and restart
328 stop and restart
329
329
330 $ killdaemons.py
330 $ killdaemons.py
331 $ hg serve -p $HGPORT -d --pid-file=hg.pid -A access.log
331 $ hg serve -p $HGPORT -d --pid-file=hg.pid -A access.log
332 $ cat hg.pid >> $DAEMON_PIDS
332 $ cat hg.pid >> $DAEMON_PIDS
333
333
334 Test the access/error files are opened in append mode
334 Test the access/error files are opened in append mode
335
335
336 $ $PYTHON -c "print len(file('access.log').readlines()), 'log lines written'"
336 $ $PYTHON -c "print len(file('access.log').readlines()), 'log lines written'"
337 14 log lines written
337 14 log lines written
338
338
339 static file
339 static file
340
340
341 $ get-with-headers.py --twice localhost:$HGPORT 'static/style-gitweb.css' - date etag server
341 $ get-with-headers.py --twice localhost:$HGPORT 'static/style-gitweb.css' - date etag server
342 200 Script output follows
342 200 Script output follows
343 content-length: 9261
343 content-length: 9374
344 content-type: text/css
344 content-type: text/css
345
345
346 body { font-family: sans-serif; font-size: 12px; border:solid #d9d8d1; border-width:1px; margin:10px; background: white; color: black; }
346 body { font-family: sans-serif; font-size: 12px; border:solid #d9d8d1; border-width:1px; margin:10px; background: white; color: black; }
347 a { color:#0000cc; }
347 a { color:#0000cc; }
348 a:hover, a:visited, a:active { color:#880000; }
348 a:hover, a:visited, a:active { color:#880000; }
349 div.page_header { height:25px; padding:8px; font-size:18px; font-weight:bold; background-color:#d9d8d1; }
349 div.page_header { height:25px; padding:8px; font-size:18px; font-weight:bold; background-color:#d9d8d1; }
350 div.page_header a:visited { color:#0000cc; }
350 div.page_header a:visited { color:#0000cc; }
351 div.page_header a:hover { color:#880000; }
351 div.page_header a:hover { color:#880000; }
352 div.page_nav {
352 div.page_nav {
353 padding:8px;
353 padding:8px;
354 display: flex;
354 display: flex;
355 justify-content: space-between;
355 justify-content: space-between;
356 align-items: center;
356 align-items: center;
357 }
357 }
358 div.page_nav a:visited { color:#0000cc; }
358 div.page_nav a:visited { color:#0000cc; }
359 div.extra_nav {
359 div.extra_nav {
360 padding: 8px;
360 padding: 8px;
361 }
361 }
362 div.extra_nav a:visited {
362 div.extra_nav a:visited {
363 color: #0000cc;
363 color: #0000cc;
364 }
364 }
365 div.page_path { padding:8px; border:solid #d9d8d1; border-width:0px 0px 1px}
365 div.page_path { padding:8px; border:solid #d9d8d1; border-width:0px 0px 1px}
366 div.page_footer { padding:4px 8px; background-color: #d9d8d1; }
366 div.page_footer { padding:4px 8px; background-color: #d9d8d1; }
367 div.page_footer_text { float:left; color:#555555; font-style:italic; }
367 div.page_footer_text { float:left; color:#555555; font-style:italic; }
368 div.page_body { padding:8px; }
368 div.page_body { padding:8px; }
369 div.title, a.title {
369 div.title, a.title {
370 display:block; padding:6px 8px;
370 display:block; padding:6px 8px;
371 font-weight:bold; background-color:#edece6; text-decoration:none; color:#000000;
371 font-weight:bold; background-color:#edece6; text-decoration:none; color:#000000;
372 }
372 }
373 a.title:hover { background-color: #d9d8d1; }
373 a.title:hover { background-color: #d9d8d1; }
374 div.title_text { padding:6px 0px; border: solid #d9d8d1; border-width:0px 0px 1px; }
374 div.title_text { padding:6px 0px; border: solid #d9d8d1; border-width:0px 0px 1px; }
375 div.log_body { padding:8px 8px 8px 150px; }
375 div.log_body { padding:8px 8px 8px 150px; }
376 .age { white-space:nowrap; }
376 .age { white-space:nowrap; }
377 span.age { position:relative; float:left; width:142px; font-style:italic; }
377 span.age { position:relative; float:left; width:142px; font-style:italic; }
378 div.log_link {
378 div.log_link {
379 padding:0px 8px;
379 padding:0px 8px;
380 font-size:10px; font-family:sans-serif; font-style:normal;
380 font-size:10px; font-family:sans-serif; font-style:normal;
381 position:relative; float:left; width:136px;
381 position:relative; float:left; width:136px;
382 }
382 }
383 div.list_head { padding:6px 8px 4px; border:solid #d9d8d1; border-width:1px 0px 0px; font-style:italic; }
383 div.list_head { padding:6px 8px 4px; border:solid #d9d8d1; border-width:1px 0px 0px; font-style:italic; }
384 a.list { text-decoration:none; color:#000000; }
384 a.list { text-decoration:none; color:#000000; }
385 a.list:hover { text-decoration:underline; color:#880000; }
385 a.list:hover { text-decoration:underline; color:#880000; }
386 table { padding:8px 4px; }
386 table { padding:8px 4px; }
387 th { padding:2px 5px; font-size:12px; text-align:left; }
387 th { padding:2px 5px; font-size:12px; text-align:left; }
388 .parity0 { background-color:#ffffff; }
388 .parity0 { background-color:#ffffff; }
389 tr.dark, .parity1, pre.sourcelines.stripes > :nth-child(4n+4) { background-color:#f6f6f0; }
389 tr.dark, .parity1, pre.sourcelines.stripes > :nth-child(4n+4) { background-color:#f6f6f0; }
390 tr.light:hover, .parity0:hover, tr.dark:hover, .parity1:hover,
390 tr.light:hover, .parity0:hover, tr.dark:hover, .parity1:hover,
391 pre.sourcelines.stripes > :nth-child(4n+2):hover,
391 pre.sourcelines.stripes > :nth-child(4n+2):hover,
392 pre.sourcelines.stripes > :nth-child(4n+4):hover,
392 pre.sourcelines.stripes > :nth-child(4n+4):hover,
393 pre.sourcelines.stripes > :nth-child(4n+1):hover + :nth-child(4n+2),
393 pre.sourcelines.stripes > :nth-child(4n+1):hover + :nth-child(4n+2),
394 pre.sourcelines.stripes > :nth-child(4n+3):hover + :nth-child(4n+4) { background-color:#edece6; }
394 pre.sourcelines.stripes > :nth-child(4n+3):hover + :nth-child(4n+4) { background-color:#edece6; }
395 td { padding:2px 5px; font-size:12px; vertical-align:top; }
395 td { padding:2px 5px; font-size:12px; vertical-align:top; }
396 td.closed { background-color: #99f; }
396 td.closed { background-color: #99f; }
397 td.link { padding:2px 5px; font-family:sans-serif; font-size:10px; }
397 td.link { padding:2px 5px; font-family:sans-serif; font-size:10px; }
398 td.indexlinks { white-space: nowrap; }
398 td.indexlinks { white-space: nowrap; }
399 td.indexlinks a {
399 td.indexlinks a {
400 padding: 2px 5px; line-height: 10px;
400 padding: 2px 5px; line-height: 10px;
401 border: 1px solid;
401 border: 1px solid;
402 color: #ffffff; background-color: #7777bb;
402 color: #ffffff; background-color: #7777bb;
403 border-color: #aaaadd #333366 #333366 #aaaadd;
403 border-color: #aaaadd #333366 #333366 #aaaadd;
404 font-weight: bold; text-align: center; text-decoration: none;
404 font-weight: bold; text-align: center; text-decoration: none;
405 font-size: 10px;
405 font-size: 10px;
406 }
406 }
407 td.indexlinks a:hover { background-color: #6666aa; }
407 td.indexlinks a:hover { background-color: #6666aa; }
408 div.pre { font-family:monospace; font-size:12px; white-space:pre; }
408 div.pre { font-family:monospace; font-size:12px; white-space:pre; }
409 div.diff_info { font-family:monospace; color:#000099; background-color:#edece6; font-style:italic; }
409 div.diff_info { font-family:monospace; color:#000099; background-color:#edece6; font-style:italic; }
410 div.index_include { border:solid #d9d8d1; border-width:0px 0px 1px; padding:12px 8px; }
410 div.index_include { border:solid #d9d8d1; border-width:0px 0px 1px; padding:12px 8px; }
411
411
412 .search {
412 .search {
413 margin-right: 8px;
413 margin-right: 8px;
414 }
414 }
415
415
416 div#hint {
416 div#hint {
417 position: absolute;
417 position: absolute;
418 display: none;
418 display: none;
419 width: 250px;
419 width: 250px;
420 padding: 5px;
420 padding: 5px;
421 background: #ffc;
421 background: #ffc;
422 border: 1px solid yellow;
422 border: 1px solid yellow;
423 border-radius: 5px;
423 border-radius: 5px;
424 }
424 }
425
425
426 #searchform:hover div#hint { display: block; }
426 #searchform:hover div#hint { display: block; }
427
427
428 tr.thisrev a { color:#999999; text-decoration: none; }
428 tr.thisrev a { color:#999999; text-decoration: none; }
429 tr.thisrev pre { color:#009900; }
429 tr.thisrev pre { color:#009900; }
430 td.annotate {
430 td.annotate {
431 white-space: nowrap;
431 white-space: nowrap;
432 }
432 }
433 div.annotate-info {
433 div.annotate-info {
434 z-index: 5;
434 z-index: 5;
435 display: none;
435 display: none;
436 position: absolute;
436 position: absolute;
437 background-color: #FFFFFF;
437 background-color: #FFFFFF;
438 border: 1px solid #d9d8d1;
438 border: 1px solid #d9d8d1;
439 text-align: left;
439 text-align: left;
440 color: #000000;
440 color: #000000;
441 padding: 5px;
441 padding: 5px;
442 }
442 }
443 div.annotate-info a { color: #0000FF; text-decoration: underline; }
443 div.annotate-info a { color: #0000FF; text-decoration: underline; }
444 td.annotate:hover div.annotate-info { display: inline; }
444 td.annotate:hover div.annotate-info { display: inline; }
445
445
446 #diffopts-form {
446 #diffopts-form {
447 padding-left: 8px;
447 padding-left: 8px;
448 display: none;
448 display: none;
449 }
449 }
450
450
451 .linenr { color:#999999; text-decoration:none }
451 .linenr { color:#999999; text-decoration:none }
452 div.rss_logo { float: right; white-space: nowrap; }
452 div.rss_logo { float: right; white-space: nowrap; }
453 div.rss_logo a {
453 div.rss_logo a {
454 padding:3px 6px; line-height:10px;
454 padding:3px 6px; line-height:10px;
455 border:1px solid; border-color:#fcc7a5 #7d3302 #3e1a01 #ff954e;
455 border:1px solid; border-color:#fcc7a5 #7d3302 #3e1a01 #ff954e;
456 color:#ffffff; background-color:#ff6600;
456 color:#ffffff; background-color:#ff6600;
457 font-weight:bold; font-family:sans-serif; font-size:10px;
457 font-weight:bold; font-family:sans-serif; font-size:10px;
458 text-align:center; text-decoration:none;
458 text-align:center; text-decoration:none;
459 }
459 }
460 div.rss_logo a:hover { background-color:#ee5500; }
460 div.rss_logo a:hover { background-color:#ee5500; }
461 pre { margin: 0; }
461 pre { margin: 0; }
462 span.logtags span {
462 span.logtags span {
463 padding: 0px 4px;
463 padding: 0px 4px;
464 font-size: 10px;
464 font-size: 10px;
465 font-weight: normal;
465 font-weight: normal;
466 border: 1px solid;
466 border: 1px solid;
467 background-color: #ffaaff;
467 background-color: #ffaaff;
468 border-color: #ffccff #ff00ee #ff00ee #ffccff;
468 border-color: #ffccff #ff00ee #ff00ee #ffccff;
469 }
469 }
470 span.logtags span.phasetag {
470 span.logtags span.phasetag {
471 background-color: #dfafff;
471 background-color: #dfafff;
472 border-color: #e2b8ff #ce48ff #ce48ff #e2b8ff;
472 border-color: #e2b8ff #ce48ff #ce48ff #e2b8ff;
473 }
473 }
474 span.logtags span.obsoletetag {
474 span.logtags span.obsoletetag {
475 background-color: #dddddd;
475 background-color: #dddddd;
476 border-color: #e4e4e4 #a3a3a3 #a3a3a3 #e4e4e4;
476 border-color: #e4e4e4 #a3a3a3 #a3a3a3 #e4e4e4;
477 }
477 }
478 span.logtags span.instabilitytag {
479 background-color: #ffb1c0;
480 border-color: #ffbbc8 #ff4476 #ff4476 #ffbbc8;
481 }
478 span.logtags span.tagtag {
482 span.logtags span.tagtag {
479 background-color: #ffffaa;
483 background-color: #ffffaa;
480 border-color: #ffffcc #ffee00 #ffee00 #ffffcc;
484 border-color: #ffffcc #ffee00 #ffee00 #ffffcc;
481 }
485 }
482 span.logtags span.branchtag {
486 span.logtags span.branchtag {
483 background-color: #aaffaa;
487 background-color: #aaffaa;
484 border-color: #ccffcc #00cc33 #00cc33 #ccffcc;
488 border-color: #ccffcc #00cc33 #00cc33 #ccffcc;
485 }
489 }
486 span.logtags span.inbranchtag {
490 span.logtags span.inbranchtag {
487 background-color: #d5dde6;
491 background-color: #d5dde6;
488 border-color: #e3ecf4 #9398f4 #9398f4 #e3ecf4;
492 border-color: #e3ecf4 #9398f4 #9398f4 #e3ecf4;
489 }
493 }
490 span.logtags span.bookmarktag {
494 span.logtags span.bookmarktag {
491 background-color: #afdffa;
495 background-color: #afdffa;
492 border-color: #ccecff #46ace6 #46ace6 #ccecff;
496 border-color: #ccecff #46ace6 #46ace6 #ccecff;
493 }
497 }
494 span.difflineplus { color:#008800; }
498 span.difflineplus { color:#008800; }
495 span.difflineminus { color:#cc0000; }
499 span.difflineminus { color:#cc0000; }
496 span.difflineat { color:#990099; }
500 span.difflineat { color:#990099; }
497 div.diffblocks { counter-reset: lineno; }
501 div.diffblocks { counter-reset: lineno; }
498 div.diffblock { counter-increment: lineno; }
502 div.diffblock { counter-increment: lineno; }
499 pre.sourcelines { position: relative; counter-reset: lineno; }
503 pre.sourcelines { position: relative; counter-reset: lineno; }
500 pre.sourcelines > span {
504 pre.sourcelines > span {
501 display: inline-block;
505 display: inline-block;
502 box-sizing: border-box;
506 box-sizing: border-box;
503 width: 100%;
507 width: 100%;
504 padding: 0 0 0 5em;
508 padding: 0 0 0 5em;
505 counter-increment: lineno;
509 counter-increment: lineno;
506 vertical-align: top;
510 vertical-align: top;
507 }
511 }
508 pre.sourcelines > span:before {
512 pre.sourcelines > span:before {
509 -moz-user-select: -moz-none;
513 -moz-user-select: -moz-none;
510 -khtml-user-select: none;
514 -khtml-user-select: none;
511 -webkit-user-select: none;
515 -webkit-user-select: none;
512 -ms-user-select: none;
516 -ms-user-select: none;
513 user-select: none;
517 user-select: none;
514 display: inline-block;
518 display: inline-block;
515 margin-left: -6em;
519 margin-left: -6em;
516 width: 4em;
520 width: 4em;
517 color: #999;
521 color: #999;
518 text-align: right;
522 text-align: right;
519 content: counters(lineno,".");
523 content: counters(lineno,".");
520 float: left;
524 float: left;
521 }
525 }
522 pre.sourcelines > a {
526 pre.sourcelines > a {
523 display: inline-block;
527 display: inline-block;
524 position: absolute;
528 position: absolute;
525 left: 0px;
529 left: 0px;
526 width: 4em;
530 width: 4em;
527 height: 1em;
531 height: 1em;
528 }
532 }
529 tr:target td,
533 tr:target td,
530 pre.sourcelines > span:target,
534 pre.sourcelines > span:target,
531 pre.sourcelines.stripes > span:target {
535 pre.sourcelines.stripes > span:target {
532 background-color: #bfdfff;
536 background-color: #bfdfff;
533 }
537 }
534
538
535 .description {
539 .description {
536 font-family: monospace;
540 font-family: monospace;
537 white-space: pre;
541 white-space: pre;
538 }
542 }
539
543
540 /* Followlines */
544 /* Followlines */
541 tbody.sourcelines > tr.followlines-selected,
545 tbody.sourcelines > tr.followlines-selected,
542 pre.sourcelines > span.followlines-selected {
546 pre.sourcelines > span.followlines-selected {
543 background-color: #99C7E9 !important;
547 background-color: #99C7E9 !important;
544 }
548 }
545
549
546 div#followlines {
550 div#followlines {
547 background-color: #FFF;
551 background-color: #FFF;
548 border: 1px solid #d9d8d1;
552 border: 1px solid #d9d8d1;
549 padding: 5px;
553 padding: 5px;
550 position: fixed;
554 position: fixed;
551 }
555 }
552
556
553 div.followlines-cancel {
557 div.followlines-cancel {
554 text-align: right;
558 text-align: right;
555 }
559 }
556
560
557 div.followlines-cancel > button {
561 div.followlines-cancel > button {
558 line-height: 80%;
562 line-height: 80%;
559 padding: 0;
563 padding: 0;
560 border: 0;
564 border: 0;
561 border-radius: 2px;
565 border-radius: 2px;
562 background-color: inherit;
566 background-color: inherit;
563 font-weight: bold;
567 font-weight: bold;
564 }
568 }
565
569
566 div.followlines-cancel > button:hover {
570 div.followlines-cancel > button:hover {
567 color: #FFFFFF;
571 color: #FFFFFF;
568 background-color: #CF1F1F;
572 background-color: #CF1F1F;
569 }
573 }
570
574
571 div.followlines-link {
575 div.followlines-link {
572 margin: 2px;
576 margin: 2px;
573 margin-top: 4px;
577 margin-top: 4px;
574 font-family: sans-serif;
578 font-family: sans-serif;
575 }
579 }
576
580
577 .btn-followlines {
581 .btn-followlines {
578 display: none;
582 display: none;
579 cursor: pointer;
583 cursor: pointer;
580 box-sizing: content-box;
584 box-sizing: content-box;
581 font-size: 11px;
585 font-size: 11px;
582 width: 13px;
586 width: 13px;
583 height: 13px;
587 height: 13px;
584 border-radius: 3px;
588 border-radius: 3px;
585 margin: 0px;
589 margin: 0px;
586 margin-top: -2px;
590 margin-top: -2px;
587 padding: 0px;
591 padding: 0px;
588 background-color: #E5FDE5;
592 background-color: #E5FDE5;
589 border: 1px solid #9BC19B;
593 border: 1px solid #9BC19B;
590 font-family: monospace;
594 font-family: monospace;
591 text-align: center;
595 text-align: center;
592 line-height: 5px;
596 line-height: 5px;
593 }
597 }
594
598
595 tr .btn-followlines {
599 tr .btn-followlines {
596 position: absolute;
600 position: absolute;
597 }
601 }
598
602
599 span .btn-followlines {
603 span .btn-followlines {
600 float: left;
604 float: left;
601 }
605 }
602
606
603 span.followlines-select .btn-followlines {
607 span.followlines-select .btn-followlines {
604 margin-left: -1.6em;
608 margin-left: -1.6em;
605 }
609 }
606
610
607 .btn-followlines:hover {
611 .btn-followlines:hover {
608 transform: scale(1.1, 1.1);
612 transform: scale(1.1, 1.1);
609 }
613 }
610
614
611 .btn-followlines .followlines-plus {
615 .btn-followlines .followlines-plus {
612 color: green;
616 color: green;
613 }
617 }
614
618
615 .btn-followlines .followlines-minus {
619 .btn-followlines .followlines-minus {
616 color: red;
620 color: red;
617 }
621 }
618
622
619 .btn-followlines-end {
623 .btn-followlines-end {
620 background-color: #ffdcdc;
624 background-color: #ffdcdc;
621 }
625 }
622
626
623 .sourcelines tr:hover .btn-followlines,
627 .sourcelines tr:hover .btn-followlines,
624 .sourcelines span.followlines-select:hover > .btn-followlines {
628 .sourcelines span.followlines-select:hover > .btn-followlines {
625 display: inline;
629 display: inline;
626 }
630 }
627
631
628 .btn-followlines-hidden,
632 .btn-followlines-hidden,
629 .sourcelines tr:hover .btn-followlines-hidden {
633 .sourcelines tr:hover .btn-followlines-hidden {
630 display: none;
634 display: none;
631 }
635 }
632
636
633 /* Graph */
637 /* Graph */
634 div#wrapper {
638 div#wrapper {
635 position: relative;
639 position: relative;
636 margin: 0;
640 margin: 0;
637 padding: 0;
641 padding: 0;
638 margin-top: 3px;
642 margin-top: 3px;
639 }
643 }
640
644
641 canvas {
645 canvas {
642 position: absolute;
646 position: absolute;
643 z-index: 5;
647 z-index: 5;
644 top: -0.9em;
648 top: -0.9em;
645 margin: 0;
649 margin: 0;
646 }
650 }
647
651
648 ul#nodebgs {
652 ul#nodebgs {
649 list-style: none inside none;
653 list-style: none inside none;
650 padding: 0;
654 padding: 0;
651 margin: 0;
655 margin: 0;
652 top: -0.7em;
656 top: -0.7em;
653 }
657 }
654
658
655 ul#graphnodes li, ul#nodebgs li {
659 ul#graphnodes li, ul#nodebgs li {
656 height: 39px;
660 height: 39px;
657 }
661 }
658
662
659 ul#graphnodes {
663 ul#graphnodes {
660 position: absolute;
664 position: absolute;
661 z-index: 10;
665 z-index: 10;
662 top: -0.8em;
666 top: -0.8em;
663 list-style: none inside none;
667 list-style: none inside none;
664 padding: 0;
668 padding: 0;
665 }
669 }
666
670
667 ul#graphnodes li .info {
671 ul#graphnodes li .info {
668 display: block;
672 display: block;
669 font-size: 100%;
673 font-size: 100%;
670 position: relative;
674 position: relative;
671 top: -3px;
675 top: -3px;
672 font-style: italic;
676 font-style: italic;
673 }
677 }
674
678
675 /* Comparison */
679 /* Comparison */
676 .legend {
680 .legend {
677 padding: 1.5% 0 1.5% 0;
681 padding: 1.5% 0 1.5% 0;
678 }
682 }
679
683
680 .legendinfo {
684 .legendinfo {
681 border: 1px solid #d9d8d1;
685 border: 1px solid #d9d8d1;
682 font-size: 80%;
686 font-size: 80%;
683 text-align: center;
687 text-align: center;
684 padding: 0.5%;
688 padding: 0.5%;
685 }
689 }
686
690
687 .equal {
691 .equal {
688 background-color: #ffffff;
692 background-color: #ffffff;
689 }
693 }
690
694
691 .delete {
695 .delete {
692 background-color: #faa;
696 background-color: #faa;
693 color: #333;
697 color: #333;
694 }
698 }
695
699
696 .insert {
700 .insert {
697 background-color: #ffa;
701 background-color: #ffa;
698 }
702 }
699
703
700 .replace {
704 .replace {
701 background-color: #e8e8e8;
705 background-color: #e8e8e8;
702 }
706 }
703
707
704 .comparison {
708 .comparison {
705 overflow-x: auto;
709 overflow-x: auto;
706 }
710 }
707
711
708 .header th {
712 .header th {
709 text-align: center;
713 text-align: center;
710 }
714 }
711
715
712 .block {
716 .block {
713 border-top: 1px solid #d9d8d1;
717 border-top: 1px solid #d9d8d1;
714 }
718 }
715
719
716 .scroll-loading {
720 .scroll-loading {
717 -webkit-animation: change_color 1s linear 0s infinite alternate;
721 -webkit-animation: change_color 1s linear 0s infinite alternate;
718 -moz-animation: change_color 1s linear 0s infinite alternate;
722 -moz-animation: change_color 1s linear 0s infinite alternate;
719 -o-animation: change_color 1s linear 0s infinite alternate;
723 -o-animation: change_color 1s linear 0s infinite alternate;
720 animation: change_color 1s linear 0s infinite alternate;
724 animation: change_color 1s linear 0s infinite alternate;
721 }
725 }
722
726
723 @-webkit-keyframes change_color {
727 @-webkit-keyframes change_color {
724 from { background-color: #A0CEFF; } to { }
728 from { background-color: #A0CEFF; } to { }
725 }
729 }
726 @-moz-keyframes change_color {
730 @-moz-keyframes change_color {
727 from { background-color: #A0CEFF; } to { }
731 from { background-color: #A0CEFF; } to { }
728 }
732 }
729 @-o-keyframes change_color {
733 @-o-keyframes change_color {
730 from { background-color: #A0CEFF; } to { }
734 from { background-color: #A0CEFF; } to { }
731 }
735 }
732 @keyframes change_color {
736 @keyframes change_color {
733 from { background-color: #A0CEFF; } to { }
737 from { background-color: #A0CEFF; } to { }
734 }
738 }
735
739
736 .scroll-loading-error {
740 .scroll-loading-error {
737 background-color: #FFCCCC !important;
741 background-color: #FFCCCC !important;
738 }
742 }
739
743
740 #doc {
744 #doc {
741 margin: 0 8px;
745 margin: 0 8px;
742 }
746 }
743 304 Not Modified
747 304 Not Modified
744
748
745
749
746 phase changes are refreshed (issue4061)
750 phase changes are refreshed (issue4061)
747
751
748 $ echo bar >> foo
752 $ echo bar >> foo
749 $ hg ci -msecret --secret
753 $ hg ci -msecret --secret
750 $ get-with-headers.py localhost:$HGPORT 'log?style=raw'
754 $ get-with-headers.py localhost:$HGPORT 'log?style=raw'
751 200 Script output follows
755 200 Script output follows
752
756
753
757
754 # HG changelog
758 # HG changelog
755 # Node ID 2ef0ac749a14e4f57a5a822464a0902c6f7f448f
759 # Node ID 2ef0ac749a14e4f57a5a822464a0902c6f7f448f
756
760
757 changeset: 2ef0ac749a14e4f57a5a822464a0902c6f7f448f
761 changeset: 2ef0ac749a14e4f57a5a822464a0902c6f7f448f
758 revision: 0
762 revision: 0
759 user: test
763 user: test
760 date: Thu, 01 Jan 1970 00:00:00 +0000
764 date: Thu, 01 Jan 1970 00:00:00 +0000
761 summary: base
765 summary: base
762 branch: default
766 branch: default
763 tag: tip
767 tag: tip
764 bookmark: @
768 bookmark: @
765 bookmark: a b c
769 bookmark: a b c
766 bookmark: d/e/f
770 bookmark: d/e/f
767
771
768
772
769 $ hg phase --draft tip
773 $ hg phase --draft tip
770 $ get-with-headers.py localhost:$HGPORT 'log?style=raw'
774 $ get-with-headers.py localhost:$HGPORT 'log?style=raw'
771 200 Script output follows
775 200 Script output follows
772
776
773
777
774 # HG changelog
778 # HG changelog
775 # Node ID a084749e708a9c4c0a5b652a2a446322ce290e04
779 # Node ID a084749e708a9c4c0a5b652a2a446322ce290e04
776
780
777 changeset: a084749e708a9c4c0a5b652a2a446322ce290e04
781 changeset: a084749e708a9c4c0a5b652a2a446322ce290e04
778 revision: 1
782 revision: 1
779 user: test
783 user: test
780 date: Thu, 01 Jan 1970 00:00:00 +0000
784 date: Thu, 01 Jan 1970 00:00:00 +0000
781 summary: secret
785 summary: secret
782 branch: default
786 branch: default
783 tag: tip
787 tag: tip
784
788
785 changeset: 2ef0ac749a14e4f57a5a822464a0902c6f7f448f
789 changeset: 2ef0ac749a14e4f57a5a822464a0902c6f7f448f
786 revision: 0
790 revision: 0
787 user: test
791 user: test
788 date: Thu, 01 Jan 1970 00:00:00 +0000
792 date: Thu, 01 Jan 1970 00:00:00 +0000
789 summary: base
793 summary: base
790 bookmark: @
794 bookmark: @
791 bookmark: a b c
795 bookmark: a b c
792 bookmark: d/e/f
796 bookmark: d/e/f
793
797
794
798
795
799
796 access bookmarks
800 access bookmarks
797
801
798 $ get-with-headers.py localhost:$HGPORT 'rev/@?style=paper' | egrep '^200|changeset 0:'
802 $ get-with-headers.py localhost:$HGPORT 'rev/@?style=paper' | egrep '^200|changeset 0:'
799 200 Script output follows
803 200 Script output follows
800 changeset 0:<a href="/rev/2ef0ac749a14?style=paper">2ef0ac749a14</a>
804 changeset 0:<a href="/rev/2ef0ac749a14?style=paper">2ef0ac749a14</a>
801
805
802 $ get-with-headers.py localhost:$HGPORT 'rev/%40?style=paper' | egrep '^200|changeset 0:'
806 $ get-with-headers.py localhost:$HGPORT 'rev/%40?style=paper' | egrep '^200|changeset 0:'
803 200 Script output follows
807 200 Script output follows
804 changeset 0:<a href="/rev/2ef0ac749a14?style=paper">2ef0ac749a14</a>
808 changeset 0:<a href="/rev/2ef0ac749a14?style=paper">2ef0ac749a14</a>
805
809
806 $ get-with-headers.py localhost:$HGPORT 'rev/a%20b%20c?style=paper' | egrep '^200|changeset 0:'
810 $ get-with-headers.py localhost:$HGPORT 'rev/a%20b%20c?style=paper' | egrep '^200|changeset 0:'
807 200 Script output follows
811 200 Script output follows
808 changeset 0:<a href="/rev/2ef0ac749a14?style=paper">2ef0ac749a14</a>
812 changeset 0:<a href="/rev/2ef0ac749a14?style=paper">2ef0ac749a14</a>
809
813
810 $ get-with-headers.py localhost:$HGPORT 'rev/d%252Fe%252Ff?style=paper' | egrep '^200|changeset 0:'
814 $ get-with-headers.py localhost:$HGPORT 'rev/d%252Fe%252Ff?style=paper' | egrep '^200|changeset 0:'
811 200 Script output follows
815 200 Script output follows
812 changeset 0:<a href="/rev/2ef0ac749a14?style=paper">2ef0ac749a14</a>
816 changeset 0:<a href="/rev/2ef0ac749a14?style=paper">2ef0ac749a14</a>
813
817
814 no style can be loaded from directories other than the specified paths
818 no style can be loaded from directories other than the specified paths
815
819
816 $ mkdir -p x/templates/fallback
820 $ mkdir -p x/templates/fallback
817 $ cat <<EOF > x/templates/fallback/map
821 $ cat <<EOF > x/templates/fallback/map
818 > default = 'shortlog'
822 > default = 'shortlog'
819 > shortlog = 'fall back to default\n'
823 > shortlog = 'fall back to default\n'
820 > mimetype = 'text/plain'
824 > mimetype = 'text/plain'
821 > EOF
825 > EOF
822 $ cat <<EOF > x/map
826 $ cat <<EOF > x/map
823 > default = 'shortlog'
827 > default = 'shortlog'
824 > shortlog = 'access to outside of templates directory\n'
828 > shortlog = 'access to outside of templates directory\n'
825 > mimetype = 'text/plain'
829 > mimetype = 'text/plain'
826 > EOF
830 > EOF
827
831
828 $ killdaemons.py
832 $ killdaemons.py
829 $ hg serve -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log \
833 $ hg serve -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log \
830 > --config web.style=fallback --config web.templates=x/templates
834 > --config web.style=fallback --config web.templates=x/templates
831 $ cat hg.pid >> $DAEMON_PIDS
835 $ cat hg.pid >> $DAEMON_PIDS
832
836
833 $ get-with-headers.py localhost:$HGPORT "?style=`pwd`/x"
837 $ get-with-headers.py localhost:$HGPORT "?style=`pwd`/x"
834 200 Script output follows
838 200 Script output follows
835
839
836 fall back to default
840 fall back to default
837
841
838 $ get-with-headers.py localhost:$HGPORT '?style=..'
842 $ get-with-headers.py localhost:$HGPORT '?style=..'
839 200 Script output follows
843 200 Script output follows
840
844
841 fall back to default
845 fall back to default
842
846
843 $ get-with-headers.py localhost:$HGPORT '?style=./..'
847 $ get-with-headers.py localhost:$HGPORT '?style=./..'
844 200 Script output follows
848 200 Script output follows
845
849
846 fall back to default
850 fall back to default
847
851
848 $ get-with-headers.py localhost:$HGPORT '?style=.../.../'
852 $ get-with-headers.py localhost:$HGPORT '?style=.../.../'
849 200 Script output follows
853 200 Script output follows
850
854
851 fall back to default
855 fall back to default
852
856
853 errors
857 errors
854
858
855 $ cat errors.log
859 $ cat errors.log
856
860
857 Uncaught exceptions result in a logged error and canned HTTP response
861 Uncaught exceptions result in a logged error and canned HTTP response
858
862
859 $ killdaemons.py
863 $ killdaemons.py
860 $ hg serve --config extensions.hgweberror=$TESTDIR/hgweberror.py -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
864 $ hg serve --config extensions.hgweberror=$TESTDIR/hgweberror.py -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
861 $ cat hg.pid >> $DAEMON_PIDS
865 $ cat hg.pid >> $DAEMON_PIDS
862
866
863 $ get-with-headers.py localhost:$HGPORT 'raiseerror' transfer-encoding content-type
867 $ get-with-headers.py localhost:$HGPORT 'raiseerror' transfer-encoding content-type
864 500 Internal Server Error
868 500 Internal Server Error
865 transfer-encoding: chunked
869 transfer-encoding: chunked
866
870
867 Internal Server Error (no-eol)
871 Internal Server Error (no-eol)
868 [1]
872 [1]
869
873
870 $ killdaemons.py
874 $ killdaemons.py
871 $ head -1 errors.log
875 $ head -1 errors.log
872 .* Exception happened during processing request '/raiseerror': (re)
876 .* Exception happened during processing request '/raiseerror': (re)
873
877
874 Uncaught exception after partial content sent
878 Uncaught exception after partial content sent
875
879
876 $ hg serve --config extensions.hgweberror=$TESTDIR/hgweberror.py -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
880 $ hg serve --config extensions.hgweberror=$TESTDIR/hgweberror.py -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
877 $ cat hg.pid >> $DAEMON_PIDS
881 $ cat hg.pid >> $DAEMON_PIDS
878 $ get-with-headers.py localhost:$HGPORT 'raiseerror?partialresponse=1' transfer-encoding content-type
882 $ get-with-headers.py localhost:$HGPORT 'raiseerror?partialresponse=1' transfer-encoding content-type
879 200 Script output follows
883 200 Script output follows
880 transfer-encoding: chunked
884 transfer-encoding: chunked
881 content-type: text/plain
885 content-type: text/plain
882
886
883 partial content
887 partial content
884 Internal Server Error (no-eol)
888 Internal Server Error (no-eol)
885
889
886 $ killdaemons.py
890 $ killdaemons.py
887 $ cd ..
891 $ cd ..
@@ -1,1536 +1,1550 b''
1 $ cat >> $HGRCPATH << EOF
1 $ cat >> $HGRCPATH << EOF
2 > [phases]
2 > [phases]
3 > # public changeset are not obsolete
3 > # public changeset are not obsolete
4 > publish=false
4 > publish=false
5 > [ui]
5 > [ui]
6 > logtemplate="{rev}:{node|short} ({phase}{if(obsolete, ' *{obsolete}*')}{if(instabilities, ' {instabilities}')}) [{tags} {bookmarks}] {desc|firstline}{if(obsfate, " [{join(obsfate, "; ")}]")}\n"
6 > logtemplate="{rev}:{node|short} ({phase}{if(obsolete, ' *{obsolete}*')}{if(instabilities, ' {instabilities}')}) [{tags} {bookmarks}] {desc|firstline}{if(obsfate, " [{join(obsfate, "; ")}]")}\n"
7 > EOF
7 > EOF
8 $ mkcommit() {
8 $ mkcommit() {
9 > echo "$1" > "$1"
9 > echo "$1" > "$1"
10 > hg add "$1"
10 > hg add "$1"
11 > hg ci -m "add $1"
11 > hg ci -m "add $1"
12 > }
12 > }
13 $ getid() {
13 $ getid() {
14 > hg log -T "{node}\n" --hidden -r "desc('$1')"
14 > hg log -T "{node}\n" --hidden -r "desc('$1')"
15 > }
15 > }
16
16
17 $ cat > debugkeys.py <<EOF
17 $ cat > debugkeys.py <<EOF
18 > def reposetup(ui, repo):
18 > def reposetup(ui, repo):
19 > class debugkeysrepo(repo.__class__):
19 > class debugkeysrepo(repo.__class__):
20 > def listkeys(self, namespace):
20 > def listkeys(self, namespace):
21 > ui.write('listkeys %s\n' % (namespace,))
21 > ui.write('listkeys %s\n' % (namespace,))
22 > return super(debugkeysrepo, self).listkeys(namespace)
22 > return super(debugkeysrepo, self).listkeys(namespace)
23 >
23 >
24 > if repo.local():
24 > if repo.local():
25 > repo.__class__ = debugkeysrepo
25 > repo.__class__ = debugkeysrepo
26 > EOF
26 > EOF
27
27
28 $ hg init tmpa
28 $ hg init tmpa
29 $ cd tmpa
29 $ cd tmpa
30 $ mkcommit kill_me
30 $ mkcommit kill_me
31
31
32 Checking that the feature is properly disabled
32 Checking that the feature is properly disabled
33
33
34 $ hg debugobsolete -d '0 0' `getid kill_me` -u babar
34 $ hg debugobsolete -d '0 0' `getid kill_me` -u babar
35 abort: creating obsolete markers is not enabled on this repo
35 abort: creating obsolete markers is not enabled on this repo
36 [255]
36 [255]
37
37
38 Enabling it
38 Enabling it
39
39
40 $ cat >> $HGRCPATH << EOF
40 $ cat >> $HGRCPATH << EOF
41 > [experimental]
41 > [experimental]
42 > evolution=exchange
42 > evolution=exchange
43 > evolution.createmarkers=True
43 > evolution.createmarkers=True
44 > EOF
44 > EOF
45
45
46 Killing a single changeset without replacement
46 Killing a single changeset without replacement
47
47
48 $ hg debugobsolete 0
48 $ hg debugobsolete 0
49 abort: changeset references must be full hexadecimal node identifiers
49 abort: changeset references must be full hexadecimal node identifiers
50 [255]
50 [255]
51 $ hg debugobsolete '00'
51 $ hg debugobsolete '00'
52 abort: changeset references must be full hexadecimal node identifiers
52 abort: changeset references must be full hexadecimal node identifiers
53 [255]
53 [255]
54 $ hg debugobsolete -d '0 0' `getid kill_me` -u babar
54 $ hg debugobsolete -d '0 0' `getid kill_me` -u babar
55 obsoleted 1 changesets
55 obsoleted 1 changesets
56 $ hg debugobsolete
56 $ hg debugobsolete
57 97b7c2d76b1845ed3eb988cd612611e72406cef0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'babar'}
57 97b7c2d76b1845ed3eb988cd612611e72406cef0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'babar'}
58
58
59 (test that mercurial is not confused)
59 (test that mercurial is not confused)
60
60
61 $ hg up null --quiet # having 0 as parent prevents it to be hidden
61 $ hg up null --quiet # having 0 as parent prevents it to be hidden
62 $ hg tip
62 $ hg tip
63 -1:000000000000 (public) [tip ]
63 -1:000000000000 (public) [tip ]
64 $ hg up --hidden tip --quiet
64 $ hg up --hidden tip --quiet
65
65
66 Killing a single changeset with itself should fail
66 Killing a single changeset with itself should fail
67 (simple local safeguard)
67 (simple local safeguard)
68
68
69 $ hg debugobsolete `getid kill_me` `getid kill_me`
69 $ hg debugobsolete `getid kill_me` `getid kill_me`
70 abort: bad obsmarker input: in-marker cycle with 97b7c2d76b1845ed3eb988cd612611e72406cef0
70 abort: bad obsmarker input: in-marker cycle with 97b7c2d76b1845ed3eb988cd612611e72406cef0
71 [255]
71 [255]
72
72
73 $ cd ..
73 $ cd ..
74
74
75 Killing a single changeset with replacement
75 Killing a single changeset with replacement
76 (and testing the format option)
76 (and testing the format option)
77
77
78 $ hg init tmpb
78 $ hg init tmpb
79 $ cd tmpb
79 $ cd tmpb
80 $ mkcommit a
80 $ mkcommit a
81 $ mkcommit b
81 $ mkcommit b
82 $ mkcommit original_c
82 $ mkcommit original_c
83 $ hg up "desc('b')"
83 $ hg up "desc('b')"
84 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
84 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
85 $ mkcommit new_c
85 $ mkcommit new_c
86 created new head
86 created new head
87 $ hg log -r 'hidden()' --template '{rev}:{node|short} {desc}\n' --hidden
87 $ hg log -r 'hidden()' --template '{rev}:{node|short} {desc}\n' --hidden
88 $ hg debugobsolete --config format.obsstore-version=0 --flag 12 `getid original_c` `getid new_c` -d '121 120'
88 $ hg debugobsolete --config format.obsstore-version=0 --flag 12 `getid original_c` `getid new_c` -d '121 120'
89 obsoleted 1 changesets
89 obsoleted 1 changesets
90 $ hg log -r 'hidden()' --template '{rev}:{node|short} {desc}\n' --hidden
90 $ hg log -r 'hidden()' --template '{rev}:{node|short} {desc}\n' --hidden
91 2:245bde4270cd add original_c
91 2:245bde4270cd add original_c
92 $ hg debugrevlog -cd
92 $ hg debugrevlog -cd
93 # rev p1rev p2rev start end deltastart base p1 p2 rawsize totalsize compression heads chainlen
93 # rev p1rev p2rev start end deltastart base p1 p2 rawsize totalsize compression heads chainlen
94 0 -1 -1 0 59 0 0 0 0 58 58 0 1 0
94 0 -1 -1 0 59 0 0 0 0 58 58 0 1 0
95 1 0 -1 59 118 59 59 0 0 58 116 0 1 0
95 1 0 -1 59 118 59 59 0 0 58 116 0 1 0
96 2 1 -1 118 193 118 118 59 0 76 192 0 1 0
96 2 1 -1 118 193 118 118 59 0 76 192 0 1 0
97 3 1 -1 193 260 193 193 59 0 66 258 0 2 0
97 3 1 -1 193 260 193 193 59 0 66 258 0 2 0
98 $ hg debugobsolete
98 $ hg debugobsolete
99 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
99 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
100
100
101 (check for version number of the obsstore)
101 (check for version number of the obsstore)
102
102
103 $ dd bs=1 count=1 if=.hg/store/obsstore 2>/dev/null
103 $ dd bs=1 count=1 if=.hg/store/obsstore 2>/dev/null
104 \x00 (no-eol) (esc)
104 \x00 (no-eol) (esc)
105
105
106 do it again (it read the obsstore before adding new changeset)
106 do it again (it read the obsstore before adding new changeset)
107
107
108 $ hg up '.^'
108 $ hg up '.^'
109 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
109 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
110 $ mkcommit new_2_c
110 $ mkcommit new_2_c
111 created new head
111 created new head
112 $ hg debugobsolete -d '1337 0' `getid new_c` `getid new_2_c`
112 $ hg debugobsolete -d '1337 0' `getid new_c` `getid new_2_c`
113 obsoleted 1 changesets
113 obsoleted 1 changesets
114 $ hg debugobsolete
114 $ hg debugobsolete
115 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
115 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
116 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
116 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
117
117
118 Register two markers with a missing node
118 Register two markers with a missing node
119
119
120 $ hg up '.^'
120 $ hg up '.^'
121 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
121 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
122 $ mkcommit new_3_c
122 $ mkcommit new_3_c
123 created new head
123 created new head
124 $ hg debugobsolete -d '1338 0' `getid new_2_c` 1337133713371337133713371337133713371337
124 $ hg debugobsolete -d '1338 0' `getid new_2_c` 1337133713371337133713371337133713371337
125 obsoleted 1 changesets
125 obsoleted 1 changesets
126 $ hg debugobsolete -d '1339 0' 1337133713371337133713371337133713371337 `getid new_3_c`
126 $ hg debugobsolete -d '1339 0' 1337133713371337133713371337133713371337 `getid new_3_c`
127 $ hg debugobsolete
127 $ hg debugobsolete
128 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
128 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
129 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
129 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
130 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
130 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
131 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
131 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
132
132
133 Test the --index option of debugobsolete command
133 Test the --index option of debugobsolete command
134 $ hg debugobsolete --index
134 $ hg debugobsolete --index
135 0 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
135 0 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
136 1 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
136 1 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
137 2 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
137 2 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
138 3 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
138 3 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
139
139
140 Refuse pathological nullid successors
140 Refuse pathological nullid successors
141 $ hg debugobsolete -d '9001 0' 1337133713371337133713371337133713371337 0000000000000000000000000000000000000000
141 $ hg debugobsolete -d '9001 0' 1337133713371337133713371337133713371337 0000000000000000000000000000000000000000
142 transaction abort!
142 transaction abort!
143 rollback completed
143 rollback completed
144 abort: bad obsolescence marker detected: invalid successors nullid
144 abort: bad obsolescence marker detected: invalid successors nullid
145 [255]
145 [255]
146
146
147 Check that graphlog detect that a changeset is obsolete:
147 Check that graphlog detect that a changeset is obsolete:
148
148
149 $ hg log -G
149 $ hg log -G
150 @ 5:5601fb93a350 (draft) [tip ] add new_3_c
150 @ 5:5601fb93a350 (draft) [tip ] add new_3_c
151 |
151 |
152 o 1:7c3bad9141dc (draft) [ ] add b
152 o 1:7c3bad9141dc (draft) [ ] add b
153 |
153 |
154 o 0:1f0dee641bb7 (draft) [ ] add a
154 o 0:1f0dee641bb7 (draft) [ ] add a
155
155
156
156
157 check that heads does not report them
157 check that heads does not report them
158
158
159 $ hg heads
159 $ hg heads
160 5:5601fb93a350 (draft) [tip ] add new_3_c
160 5:5601fb93a350 (draft) [tip ] add new_3_c
161 $ hg heads --hidden
161 $ hg heads --hidden
162 5:5601fb93a350 (draft) [tip ] add new_3_c
162 5:5601fb93a350 (draft) [tip ] add new_3_c
163 4:ca819180edb9 (draft *obsolete*) [ ] add new_2_c [rewritten as 5:5601fb93a350]
163 4:ca819180edb9 (draft *obsolete*) [ ] add new_2_c [rewritten as 5:5601fb93a350]
164 3:cdbce2fbb163 (draft *obsolete*) [ ] add new_c [rewritten as 4:ca819180edb9]
164 3:cdbce2fbb163 (draft *obsolete*) [ ] add new_c [rewritten as 4:ca819180edb9]
165 2:245bde4270cd (draft *obsolete*) [ ] add original_c [rewritten as 3:cdbce2fbb163]
165 2:245bde4270cd (draft *obsolete*) [ ] add original_c [rewritten as 3:cdbce2fbb163]
166
166
167
167
168 check that summary does not report them
168 check that summary does not report them
169
169
170 $ hg init ../sink
170 $ hg init ../sink
171 $ echo '[paths]' >> .hg/hgrc
171 $ echo '[paths]' >> .hg/hgrc
172 $ echo 'default=../sink' >> .hg/hgrc
172 $ echo 'default=../sink' >> .hg/hgrc
173 $ hg summary --remote
173 $ hg summary --remote
174 parent: 5:5601fb93a350 tip
174 parent: 5:5601fb93a350 tip
175 add new_3_c
175 add new_3_c
176 branch: default
176 branch: default
177 commit: (clean)
177 commit: (clean)
178 update: (current)
178 update: (current)
179 phases: 3 draft
179 phases: 3 draft
180 remote: 3 outgoing
180 remote: 3 outgoing
181
181
182 $ hg summary --remote --hidden
182 $ hg summary --remote --hidden
183 parent: 5:5601fb93a350 tip
183 parent: 5:5601fb93a350 tip
184 add new_3_c
184 add new_3_c
185 branch: default
185 branch: default
186 commit: (clean)
186 commit: (clean)
187 update: 3 new changesets, 4 branch heads (merge)
187 update: 3 new changesets, 4 branch heads (merge)
188 phases: 6 draft
188 phases: 6 draft
189 remote: 3 outgoing
189 remote: 3 outgoing
190
190
191 check that various commands work well with filtering
191 check that various commands work well with filtering
192
192
193 $ hg tip
193 $ hg tip
194 5:5601fb93a350 (draft) [tip ] add new_3_c
194 5:5601fb93a350 (draft) [tip ] add new_3_c
195 $ hg log -r 6
195 $ hg log -r 6
196 abort: unknown revision '6'!
196 abort: unknown revision '6'!
197 [255]
197 [255]
198 $ hg log -r 4
198 $ hg log -r 4
199 abort: hidden revision '4'!
199 abort: hidden revision '4'!
200 (use --hidden to access hidden revisions)
200 (use --hidden to access hidden revisions)
201 [255]
201 [255]
202 $ hg debugrevspec 'rev(6)'
202 $ hg debugrevspec 'rev(6)'
203 $ hg debugrevspec 'rev(4)'
203 $ hg debugrevspec 'rev(4)'
204 $ hg debugrevspec 'null'
204 $ hg debugrevspec 'null'
205 -1
205 -1
206
206
207 Check that public changeset are not accounted as obsolete:
207 Check that public changeset are not accounted as obsolete:
208
208
209 $ hg --hidden phase --public 2
209 $ hg --hidden phase --public 2
210 $ hg log -G
210 $ hg log -G
211 @ 5:5601fb93a350 (draft phase-divergent) [tip ] add new_3_c
211 @ 5:5601fb93a350 (draft phase-divergent) [tip ] add new_3_c
212 |
212 |
213 | o 2:245bde4270cd (public) [ ] add original_c
213 | o 2:245bde4270cd (public) [ ] add original_c
214 |/
214 |/
215 o 1:7c3bad9141dc (public) [ ] add b
215 o 1:7c3bad9141dc (public) [ ] add b
216 |
216 |
217 o 0:1f0dee641bb7 (public) [ ] add a
217 o 0:1f0dee641bb7 (public) [ ] add a
218
218
219
219
220 And that bumped changeset are detected
220 And that bumped changeset are detected
221 --------------------------------------
221 --------------------------------------
222
222
223 If we didn't filtered obsolete changesets out, 3 and 4 would show up too. Also
223 If we didn't filtered obsolete changesets out, 3 and 4 would show up too. Also
224 note that the bumped changeset (5:5601fb93a350) is not a direct successor of
224 note that the bumped changeset (5:5601fb93a350) is not a direct successor of
225 the public changeset
225 the public changeset
226
226
227 $ hg log --hidden -r 'phasedivergent()'
227 $ hg log --hidden -r 'phasedivergent()'
228 5:5601fb93a350 (draft phase-divergent) [tip ] add new_3_c
228 5:5601fb93a350 (draft phase-divergent) [tip ] add new_3_c
229
229
230 And that we can't push bumped changeset
230 And that we can't push bumped changeset
231
231
232 $ hg push ../tmpa -r 0 --force #(make repo related)
232 $ hg push ../tmpa -r 0 --force #(make repo related)
233 pushing to ../tmpa
233 pushing to ../tmpa
234 searching for changes
234 searching for changes
235 warning: repository is unrelated
235 warning: repository is unrelated
236 adding changesets
236 adding changesets
237 adding manifests
237 adding manifests
238 adding file changes
238 adding file changes
239 added 1 changesets with 1 changes to 1 files (+1 heads)
239 added 1 changesets with 1 changes to 1 files (+1 heads)
240 $ hg push ../tmpa
240 $ hg push ../tmpa
241 pushing to ../tmpa
241 pushing to ../tmpa
242 searching for changes
242 searching for changes
243 abort: push includes phase-divergent changeset: 5601fb93a350!
243 abort: push includes phase-divergent changeset: 5601fb93a350!
244 [255]
244 [255]
245
245
246 Fixing "bumped" situation
246 Fixing "bumped" situation
247 We need to create a clone of 5 and add a special marker with a flag
247 We need to create a clone of 5 and add a special marker with a flag
248
248
249 $ hg summary
249 $ hg summary
250 parent: 5:5601fb93a350 tip (phase-divergent)
250 parent: 5:5601fb93a350 tip (phase-divergent)
251 add new_3_c
251 add new_3_c
252 branch: default
252 branch: default
253 commit: (clean)
253 commit: (clean)
254 update: 1 new changesets, 2 branch heads (merge)
254 update: 1 new changesets, 2 branch heads (merge)
255 phases: 1 draft
255 phases: 1 draft
256 phase-divergent: 1 changesets
256 phase-divergent: 1 changesets
257 $ hg up '5^'
257 $ hg up '5^'
258 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
258 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
259 $ hg revert -ar 5
259 $ hg revert -ar 5
260 adding new_3_c
260 adding new_3_c
261 $ hg ci -m 'add n3w_3_c'
261 $ hg ci -m 'add n3w_3_c'
262 created new head
262 created new head
263 $ hg debugobsolete -d '1338 0' --flags 1 `getid new_3_c` `getid n3w_3_c`
263 $ hg debugobsolete -d '1338 0' --flags 1 `getid new_3_c` `getid n3w_3_c`
264 obsoleted 1 changesets
264 obsoleted 1 changesets
265 $ hg log -r 'phasedivergent()'
265 $ hg log -r 'phasedivergent()'
266 $ hg log -G
266 $ hg log -G
267 @ 6:6f9641995072 (draft) [tip ] add n3w_3_c
267 @ 6:6f9641995072 (draft) [tip ] add n3w_3_c
268 |
268 |
269 | o 2:245bde4270cd (public) [ ] add original_c
269 | o 2:245bde4270cd (public) [ ] add original_c
270 |/
270 |/
271 o 1:7c3bad9141dc (public) [ ] add b
271 o 1:7c3bad9141dc (public) [ ] add b
272 |
272 |
273 o 0:1f0dee641bb7 (public) [ ] add a
273 o 0:1f0dee641bb7 (public) [ ] add a
274
274
275
275
276 Basic exclusive testing
276 Basic exclusive testing
277
277
278 $ hg log -G --hidden
278 $ hg log -G --hidden
279 @ 6:6f9641995072 (draft) [tip ] add n3w_3_c
279 @ 6:6f9641995072 (draft) [tip ] add n3w_3_c
280 |
280 |
281 | x 5:5601fb93a350 (draft *obsolete*) [ ] add new_3_c [rewritten as 6:6f9641995072]
281 | x 5:5601fb93a350 (draft *obsolete*) [ ] add new_3_c [rewritten as 6:6f9641995072]
282 |/
282 |/
283 | x 4:ca819180edb9 (draft *obsolete*) [ ] add new_2_c [rewritten as 5:5601fb93a350]
283 | x 4:ca819180edb9 (draft *obsolete*) [ ] add new_2_c [rewritten as 5:5601fb93a350]
284 |/
284 |/
285 | x 3:cdbce2fbb163 (draft *obsolete*) [ ] add new_c [rewritten as 4:ca819180edb9]
285 | x 3:cdbce2fbb163 (draft *obsolete*) [ ] add new_c [rewritten as 4:ca819180edb9]
286 |/
286 |/
287 | o 2:245bde4270cd (public) [ ] add original_c
287 | o 2:245bde4270cd (public) [ ] add original_c
288 |/
288 |/
289 o 1:7c3bad9141dc (public) [ ] add b
289 o 1:7c3bad9141dc (public) [ ] add b
290 |
290 |
291 o 0:1f0dee641bb7 (public) [ ] add a
291 o 0:1f0dee641bb7 (public) [ ] add a
292
292
293 $ hg debugobsolete --rev 6f9641995072
293 $ hg debugobsolete --rev 6f9641995072
294 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
294 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
295 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
295 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
296 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
296 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
297 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
297 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
298 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
298 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
299 $ hg debugobsolete --rev 6f9641995072 --exclusive
299 $ hg debugobsolete --rev 6f9641995072 --exclusive
300 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
300 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
301 $ hg debugobsolete --rev 5601fb93a350 --hidden
301 $ hg debugobsolete --rev 5601fb93a350 --hidden
302 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
302 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
303 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
303 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
304 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
304 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
305 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
305 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
306 $ hg debugobsolete --rev 5601fb93a350 --hidden --exclusive
306 $ hg debugobsolete --rev 5601fb93a350 --hidden --exclusive
307 $ hg debugobsolete --rev 5601fb93a350+6f9641995072 --hidden --exclusive
307 $ hg debugobsolete --rev 5601fb93a350+6f9641995072 --hidden --exclusive
308 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
308 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
309 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
309 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
310 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
310 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
311
311
312 $ cd ..
312 $ cd ..
313
313
314 Revision 0 is hidden
314 Revision 0 is hidden
315 --------------------
315 --------------------
316
316
317 $ hg init rev0hidden
317 $ hg init rev0hidden
318 $ cd rev0hidden
318 $ cd rev0hidden
319
319
320 $ mkcommit kill0
320 $ mkcommit kill0
321 $ hg up -q null
321 $ hg up -q null
322 $ hg debugobsolete `getid kill0`
322 $ hg debugobsolete `getid kill0`
323 obsoleted 1 changesets
323 obsoleted 1 changesets
324 $ mkcommit a
324 $ mkcommit a
325 $ mkcommit b
325 $ mkcommit b
326
326
327 Should pick the first visible revision as "repo" node
327 Should pick the first visible revision as "repo" node
328
328
329 $ hg archive ../archive-null
329 $ hg archive ../archive-null
330 $ cat ../archive-null/.hg_archival.txt
330 $ cat ../archive-null/.hg_archival.txt
331 repo: 1f0dee641bb7258c56bd60e93edfa2405381c41e
331 repo: 1f0dee641bb7258c56bd60e93edfa2405381c41e
332 node: 7c3bad9141dcb46ff89abf5f61856facd56e476c
332 node: 7c3bad9141dcb46ff89abf5f61856facd56e476c
333 branch: default
333 branch: default
334 latesttag: null
334 latesttag: null
335 latesttagdistance: 2
335 latesttagdistance: 2
336 changessincelatesttag: 2
336 changessincelatesttag: 2
337
337
338
338
339 $ cd ..
339 $ cd ..
340
340
341 Exchange Test
341 Exchange Test
342 ============================
342 ============================
343
343
344 Destination repo does not have any data
344 Destination repo does not have any data
345 ---------------------------------------
345 ---------------------------------------
346
346
347 Simple incoming test
347 Simple incoming test
348
348
349 $ hg init tmpc
349 $ hg init tmpc
350 $ cd tmpc
350 $ cd tmpc
351 $ hg incoming ../tmpb
351 $ hg incoming ../tmpb
352 comparing with ../tmpb
352 comparing with ../tmpb
353 0:1f0dee641bb7 (public) [ ] add a
353 0:1f0dee641bb7 (public) [ ] add a
354 1:7c3bad9141dc (public) [ ] add b
354 1:7c3bad9141dc (public) [ ] add b
355 2:245bde4270cd (public) [ ] add original_c
355 2:245bde4270cd (public) [ ] add original_c
356 6:6f9641995072 (draft) [tip ] add n3w_3_c
356 6:6f9641995072 (draft) [tip ] add n3w_3_c
357
357
358 Try to pull markers
358 Try to pull markers
359 (extinct changeset are excluded but marker are pushed)
359 (extinct changeset are excluded but marker are pushed)
360
360
361 $ hg pull ../tmpb
361 $ hg pull ../tmpb
362 pulling from ../tmpb
362 pulling from ../tmpb
363 requesting all changes
363 requesting all changes
364 adding changesets
364 adding changesets
365 adding manifests
365 adding manifests
366 adding file changes
366 adding file changes
367 added 4 changesets with 4 changes to 4 files (+1 heads)
367 added 4 changesets with 4 changes to 4 files (+1 heads)
368 5 new obsolescence markers
368 5 new obsolescence markers
369 new changesets 1f0dee641bb7:6f9641995072
369 new changesets 1f0dee641bb7:6f9641995072
370 (run 'hg heads' to see heads, 'hg merge' to merge)
370 (run 'hg heads' to see heads, 'hg merge' to merge)
371 $ hg debugobsolete
371 $ hg debugobsolete
372 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
372 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
373 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
373 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
374 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
374 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
375 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
375 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
376 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
376 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
377
377
378 Rollback//Transaction support
378 Rollback//Transaction support
379
379
380 $ hg debugobsolete -d '1340 0' aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
380 $ hg debugobsolete -d '1340 0' aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
381 $ hg debugobsolete
381 $ hg debugobsolete
382 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
382 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
383 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
383 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
384 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
384 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
385 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
385 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
386 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
386 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
387 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb 0 (Thu Jan 01 00:22:20 1970 +0000) {'user': 'test'}
387 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb 0 (Thu Jan 01 00:22:20 1970 +0000) {'user': 'test'}
388 $ hg rollback -n
388 $ hg rollback -n
389 repository tip rolled back to revision 3 (undo debugobsolete)
389 repository tip rolled back to revision 3 (undo debugobsolete)
390 $ hg rollback
390 $ hg rollback
391 repository tip rolled back to revision 3 (undo debugobsolete)
391 repository tip rolled back to revision 3 (undo debugobsolete)
392 $ hg debugobsolete
392 $ hg debugobsolete
393 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
393 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
394 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
394 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
395 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
395 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
396 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
396 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
397 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
397 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
398
398
399 $ cd ..
399 $ cd ..
400
400
401 Try to push markers
401 Try to push markers
402
402
403 $ hg init tmpd
403 $ hg init tmpd
404 $ hg -R tmpb push tmpd
404 $ hg -R tmpb push tmpd
405 pushing to tmpd
405 pushing to tmpd
406 searching for changes
406 searching for changes
407 adding changesets
407 adding changesets
408 adding manifests
408 adding manifests
409 adding file changes
409 adding file changes
410 added 4 changesets with 4 changes to 4 files (+1 heads)
410 added 4 changesets with 4 changes to 4 files (+1 heads)
411 5 new obsolescence markers
411 5 new obsolescence markers
412 $ hg -R tmpd debugobsolete | sort
412 $ hg -R tmpd debugobsolete | sort
413 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
413 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
414 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
414 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
415 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
415 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
416 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
416 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
417 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
417 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
418
418
419 Check obsolete keys are exchanged only if source has an obsolete store
419 Check obsolete keys are exchanged only if source has an obsolete store
420
420
421 $ hg init empty
421 $ hg init empty
422 $ hg --config extensions.debugkeys=debugkeys.py -R empty push tmpd
422 $ hg --config extensions.debugkeys=debugkeys.py -R empty push tmpd
423 pushing to tmpd
423 pushing to tmpd
424 listkeys phases
424 listkeys phases
425 listkeys bookmarks
425 listkeys bookmarks
426 no changes found
426 no changes found
427 listkeys phases
427 listkeys phases
428 [1]
428 [1]
429
429
430 clone support
430 clone support
431 (markers are copied and extinct changesets are included to allow hardlinks)
431 (markers are copied and extinct changesets are included to allow hardlinks)
432
432
433 $ hg clone tmpb clone-dest
433 $ hg clone tmpb clone-dest
434 updating to branch default
434 updating to branch default
435 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
435 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
436 $ hg -R clone-dest log -G --hidden
436 $ hg -R clone-dest log -G --hidden
437 @ 6:6f9641995072 (draft) [tip ] add n3w_3_c
437 @ 6:6f9641995072 (draft) [tip ] add n3w_3_c
438 |
438 |
439 | x 5:5601fb93a350 (draft *obsolete*) [ ] add new_3_c [rewritten as 6:6f9641995072]
439 | x 5:5601fb93a350 (draft *obsolete*) [ ] add new_3_c [rewritten as 6:6f9641995072]
440 |/
440 |/
441 | x 4:ca819180edb9 (draft *obsolete*) [ ] add new_2_c [rewritten as 5:5601fb93a350]
441 | x 4:ca819180edb9 (draft *obsolete*) [ ] add new_2_c [rewritten as 5:5601fb93a350]
442 |/
442 |/
443 | x 3:cdbce2fbb163 (draft *obsolete*) [ ] add new_c [rewritten as 4:ca819180edb9]
443 | x 3:cdbce2fbb163 (draft *obsolete*) [ ] add new_c [rewritten as 4:ca819180edb9]
444 |/
444 |/
445 | o 2:245bde4270cd (public) [ ] add original_c
445 | o 2:245bde4270cd (public) [ ] add original_c
446 |/
446 |/
447 o 1:7c3bad9141dc (public) [ ] add b
447 o 1:7c3bad9141dc (public) [ ] add b
448 |
448 |
449 o 0:1f0dee641bb7 (public) [ ] add a
449 o 0:1f0dee641bb7 (public) [ ] add a
450
450
451 $ hg -R clone-dest debugobsolete
451 $ hg -R clone-dest debugobsolete
452 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
452 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
453 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
453 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
454 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
454 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
455 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
455 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
456 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
456 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
457
457
458
458
459 Destination repo have existing data
459 Destination repo have existing data
460 ---------------------------------------
460 ---------------------------------------
461
461
462 On pull
462 On pull
463
463
464 $ hg init tmpe
464 $ hg init tmpe
465 $ cd tmpe
465 $ cd tmpe
466 $ hg debugobsolete -d '1339 0' 1339133913391339133913391339133913391339 ca819180edb99ed25ceafb3e9584ac287e240b00
466 $ hg debugobsolete -d '1339 0' 1339133913391339133913391339133913391339 ca819180edb99ed25ceafb3e9584ac287e240b00
467 $ hg pull ../tmpb
467 $ hg pull ../tmpb
468 pulling from ../tmpb
468 pulling from ../tmpb
469 requesting all changes
469 requesting all changes
470 adding changesets
470 adding changesets
471 adding manifests
471 adding manifests
472 adding file changes
472 adding file changes
473 added 4 changesets with 4 changes to 4 files (+1 heads)
473 added 4 changesets with 4 changes to 4 files (+1 heads)
474 5 new obsolescence markers
474 5 new obsolescence markers
475 new changesets 1f0dee641bb7:6f9641995072
475 new changesets 1f0dee641bb7:6f9641995072
476 (run 'hg heads' to see heads, 'hg merge' to merge)
476 (run 'hg heads' to see heads, 'hg merge' to merge)
477 $ hg debugobsolete
477 $ hg debugobsolete
478 1339133913391339133913391339133913391339 ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
478 1339133913391339133913391339133913391339 ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
479 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
479 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
480 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
480 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
481 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
481 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
482 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
482 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
483 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
483 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
484
484
485
485
486 On push
486 On push
487
487
488 $ hg push ../tmpc
488 $ hg push ../tmpc
489 pushing to ../tmpc
489 pushing to ../tmpc
490 searching for changes
490 searching for changes
491 no changes found
491 no changes found
492 1 new obsolescence markers
492 1 new obsolescence markers
493 [1]
493 [1]
494 $ hg -R ../tmpc debugobsolete
494 $ hg -R ../tmpc debugobsolete
495 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
495 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
496 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
496 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
497 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
497 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
498 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
498 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
499 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
499 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
500 1339133913391339133913391339133913391339 ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
500 1339133913391339133913391339133913391339 ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
501
501
502 detect outgoing obsolete and unstable
502 detect outgoing obsolete and unstable
503 ---------------------------------------
503 ---------------------------------------
504
504
505
505
506 $ hg log -G
506 $ hg log -G
507 o 3:6f9641995072 (draft) [tip ] add n3w_3_c
507 o 3:6f9641995072 (draft) [tip ] add n3w_3_c
508 |
508 |
509 | o 2:245bde4270cd (public) [ ] add original_c
509 | o 2:245bde4270cd (public) [ ] add original_c
510 |/
510 |/
511 o 1:7c3bad9141dc (public) [ ] add b
511 o 1:7c3bad9141dc (public) [ ] add b
512 |
512 |
513 o 0:1f0dee641bb7 (public) [ ] add a
513 o 0:1f0dee641bb7 (public) [ ] add a
514
514
515 $ hg up 'desc("n3w_3_c")'
515 $ hg up 'desc("n3w_3_c")'
516 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
516 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
517 $ mkcommit original_d
517 $ mkcommit original_d
518 $ mkcommit original_e
518 $ mkcommit original_e
519 $ hg debugobsolete --record-parents `getid original_d` -d '0 0'
519 $ hg debugobsolete --record-parents `getid original_d` -d '0 0'
520 obsoleted 1 changesets
520 obsoleted 1 changesets
521 $ hg debugobsolete | grep `getid original_d`
521 $ hg debugobsolete | grep `getid original_d`
522 94b33453f93bdb8d457ef9b770851a618bf413e1 0 {6f96419950729f3671185b847352890f074f7557} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
522 94b33453f93bdb8d457ef9b770851a618bf413e1 0 {6f96419950729f3671185b847352890f074f7557} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
523 $ hg log -r 'obsolete()'
523 $ hg log -r 'obsolete()'
524 4:94b33453f93b (draft *obsolete*) [ ] add original_d [pruned]
524 4:94b33453f93b (draft *obsolete*) [ ] add original_d [pruned]
525 $ hg summary
525 $ hg summary
526 parent: 5:cda648ca50f5 tip (orphan)
526 parent: 5:cda648ca50f5 tip (orphan)
527 add original_e
527 add original_e
528 branch: default
528 branch: default
529 commit: (clean)
529 commit: (clean)
530 update: 1 new changesets, 2 branch heads (merge)
530 update: 1 new changesets, 2 branch heads (merge)
531 phases: 3 draft
531 phases: 3 draft
532 orphan: 1 changesets
532 orphan: 1 changesets
533 $ hg log -G -r '::orphan()'
533 $ hg log -G -r '::orphan()'
534 @ 5:cda648ca50f5 (draft orphan) [tip ] add original_e
534 @ 5:cda648ca50f5 (draft orphan) [tip ] add original_e
535 |
535 |
536 x 4:94b33453f93b (draft *obsolete*) [ ] add original_d [pruned]
536 x 4:94b33453f93b (draft *obsolete*) [ ] add original_d [pruned]
537 |
537 |
538 o 3:6f9641995072 (draft) [ ] add n3w_3_c
538 o 3:6f9641995072 (draft) [ ] add n3w_3_c
539 |
539 |
540 o 1:7c3bad9141dc (public) [ ] add b
540 o 1:7c3bad9141dc (public) [ ] add b
541 |
541 |
542 o 0:1f0dee641bb7 (public) [ ] add a
542 o 0:1f0dee641bb7 (public) [ ] add a
543
543
544
544
545 refuse to push obsolete changeset
545 refuse to push obsolete changeset
546
546
547 $ hg push ../tmpc/ -r 'desc("original_d")'
547 $ hg push ../tmpc/ -r 'desc("original_d")'
548 pushing to ../tmpc/
548 pushing to ../tmpc/
549 searching for changes
549 searching for changes
550 abort: push includes obsolete changeset: 94b33453f93b!
550 abort: push includes obsolete changeset: 94b33453f93b!
551 [255]
551 [255]
552
552
553 refuse to push unstable changeset
553 refuse to push unstable changeset
554
554
555 $ hg push ../tmpc/
555 $ hg push ../tmpc/
556 pushing to ../tmpc/
556 pushing to ../tmpc/
557 searching for changes
557 searching for changes
558 abort: push includes orphan changeset: cda648ca50f5!
558 abort: push includes orphan changeset: cda648ca50f5!
559 [255]
559 [255]
560
560
561 Test that extinct changeset are properly detected
561 Test that extinct changeset are properly detected
562
562
563 $ hg log -r 'extinct()'
563 $ hg log -r 'extinct()'
564
564
565 Don't try to push extinct changeset
565 Don't try to push extinct changeset
566
566
567 $ hg init ../tmpf
567 $ hg init ../tmpf
568 $ hg out ../tmpf
568 $ hg out ../tmpf
569 comparing with ../tmpf
569 comparing with ../tmpf
570 searching for changes
570 searching for changes
571 0:1f0dee641bb7 (public) [ ] add a
571 0:1f0dee641bb7 (public) [ ] add a
572 1:7c3bad9141dc (public) [ ] add b
572 1:7c3bad9141dc (public) [ ] add b
573 2:245bde4270cd (public) [ ] add original_c
573 2:245bde4270cd (public) [ ] add original_c
574 3:6f9641995072 (draft) [ ] add n3w_3_c
574 3:6f9641995072 (draft) [ ] add n3w_3_c
575 4:94b33453f93b (draft *obsolete*) [ ] add original_d [pruned]
575 4:94b33453f93b (draft *obsolete*) [ ] add original_d [pruned]
576 5:cda648ca50f5 (draft orphan) [tip ] add original_e
576 5:cda648ca50f5 (draft orphan) [tip ] add original_e
577 $ hg push ../tmpf -f # -f because be push unstable too
577 $ hg push ../tmpf -f # -f because be push unstable too
578 pushing to ../tmpf
578 pushing to ../tmpf
579 searching for changes
579 searching for changes
580 adding changesets
580 adding changesets
581 adding manifests
581 adding manifests
582 adding file changes
582 adding file changes
583 added 6 changesets with 6 changes to 6 files (+1 heads)
583 added 6 changesets with 6 changes to 6 files (+1 heads)
584 7 new obsolescence markers
584 7 new obsolescence markers
585
585
586 no warning displayed
586 no warning displayed
587
587
588 $ hg push ../tmpf
588 $ hg push ../tmpf
589 pushing to ../tmpf
589 pushing to ../tmpf
590 searching for changes
590 searching for changes
591 no changes found
591 no changes found
592 [1]
592 [1]
593
593
594 Do not warn about new head when the new head is a successors of a remote one
594 Do not warn about new head when the new head is a successors of a remote one
595
595
596 $ hg log -G
596 $ hg log -G
597 @ 5:cda648ca50f5 (draft orphan) [tip ] add original_e
597 @ 5:cda648ca50f5 (draft orphan) [tip ] add original_e
598 |
598 |
599 x 4:94b33453f93b (draft *obsolete*) [ ] add original_d [pruned]
599 x 4:94b33453f93b (draft *obsolete*) [ ] add original_d [pruned]
600 |
600 |
601 o 3:6f9641995072 (draft) [ ] add n3w_3_c
601 o 3:6f9641995072 (draft) [ ] add n3w_3_c
602 |
602 |
603 | o 2:245bde4270cd (public) [ ] add original_c
603 | o 2:245bde4270cd (public) [ ] add original_c
604 |/
604 |/
605 o 1:7c3bad9141dc (public) [ ] add b
605 o 1:7c3bad9141dc (public) [ ] add b
606 |
606 |
607 o 0:1f0dee641bb7 (public) [ ] add a
607 o 0:1f0dee641bb7 (public) [ ] add a
608
608
609 $ hg up -q 'desc(n3w_3_c)'
609 $ hg up -q 'desc(n3w_3_c)'
610 $ mkcommit obsolete_e
610 $ mkcommit obsolete_e
611 created new head
611 created new head
612 $ hg debugobsolete `getid 'original_e'` `getid 'obsolete_e'` \
612 $ hg debugobsolete `getid 'original_e'` `getid 'obsolete_e'` \
613 > -u 'test <test@example.net>'
613 > -u 'test <test@example.net>'
614 obsoleted 1 changesets
614 obsoleted 1 changesets
615 $ hg outgoing ../tmpf # parasite hg outgoing testin
615 $ hg outgoing ../tmpf # parasite hg outgoing testin
616 comparing with ../tmpf
616 comparing with ../tmpf
617 searching for changes
617 searching for changes
618 6:3de5eca88c00 (draft) [tip ] add obsolete_e
618 6:3de5eca88c00 (draft) [tip ] add obsolete_e
619 $ hg push ../tmpf
619 $ hg push ../tmpf
620 pushing to ../tmpf
620 pushing to ../tmpf
621 searching for changes
621 searching for changes
622 adding changesets
622 adding changesets
623 adding manifests
623 adding manifests
624 adding file changes
624 adding file changes
625 added 1 changesets with 1 changes to 1 files (+1 heads)
625 added 1 changesets with 1 changes to 1 files (+1 heads)
626 1 new obsolescence markers
626 1 new obsolescence markers
627 obsoleted 1 changesets
627 obsoleted 1 changesets
628
628
629 test relevance computation
629 test relevance computation
630 ---------------------------------------
630 ---------------------------------------
631
631
632 Checking simple case of "marker relevance".
632 Checking simple case of "marker relevance".
633
633
634
634
635 Reminder of the repo situation
635 Reminder of the repo situation
636
636
637 $ hg log --hidden --graph
637 $ hg log --hidden --graph
638 @ 6:3de5eca88c00 (draft) [tip ] add obsolete_e
638 @ 6:3de5eca88c00 (draft) [tip ] add obsolete_e
639 |
639 |
640 | x 5:cda648ca50f5 (draft *obsolete*) [ ] add original_e [rewritten as 6:3de5eca88c00 by test <test@example.net>]
640 | x 5:cda648ca50f5 (draft *obsolete*) [ ] add original_e [rewritten as 6:3de5eca88c00 by test <test@example.net>]
641 | |
641 | |
642 | x 4:94b33453f93b (draft *obsolete*) [ ] add original_d [pruned]
642 | x 4:94b33453f93b (draft *obsolete*) [ ] add original_d [pruned]
643 |/
643 |/
644 o 3:6f9641995072 (draft) [ ] add n3w_3_c
644 o 3:6f9641995072 (draft) [ ] add n3w_3_c
645 |
645 |
646 | o 2:245bde4270cd (public) [ ] add original_c
646 | o 2:245bde4270cd (public) [ ] add original_c
647 |/
647 |/
648 o 1:7c3bad9141dc (public) [ ] add b
648 o 1:7c3bad9141dc (public) [ ] add b
649 |
649 |
650 o 0:1f0dee641bb7 (public) [ ] add a
650 o 0:1f0dee641bb7 (public) [ ] add a
651
651
652
652
653 List of all markers
653 List of all markers
654
654
655 $ hg debugobsolete
655 $ hg debugobsolete
656 1339133913391339133913391339133913391339 ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
656 1339133913391339133913391339133913391339 ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
657 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
657 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
658 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
658 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
659 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
659 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
660 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
660 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
661 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
661 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
662 94b33453f93bdb8d457ef9b770851a618bf413e1 0 {6f96419950729f3671185b847352890f074f7557} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
662 94b33453f93bdb8d457ef9b770851a618bf413e1 0 {6f96419950729f3671185b847352890f074f7557} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
663 cda648ca50f50482b7055c0b0c4c117bba6733d9 3de5eca88c00aa039da7399a220f4a5221faa585 0 (*) {'user': 'test <test@example.net>'} (glob)
663 cda648ca50f50482b7055c0b0c4c117bba6733d9 3de5eca88c00aa039da7399a220f4a5221faa585 0 (*) {'user': 'test <test@example.net>'} (glob)
664
664
665 List of changesets with no chain
665 List of changesets with no chain
666
666
667 $ hg debugobsolete --hidden --rev ::2
667 $ hg debugobsolete --hidden --rev ::2
668
668
669 List of changesets that are included on marker chain
669 List of changesets that are included on marker chain
670
670
671 $ hg debugobsolete --hidden --rev 6
671 $ hg debugobsolete --hidden --rev 6
672 cda648ca50f50482b7055c0b0c4c117bba6733d9 3de5eca88c00aa039da7399a220f4a5221faa585 0 (*) {'user': 'test <test@example.net>'} (glob)
672 cda648ca50f50482b7055c0b0c4c117bba6733d9 3de5eca88c00aa039da7399a220f4a5221faa585 0 (*) {'user': 'test <test@example.net>'} (glob)
673
673
674 List of changesets with a longer chain, (including a pruned children)
674 List of changesets with a longer chain, (including a pruned children)
675
675
676 $ hg debugobsolete --hidden --rev 3
676 $ hg debugobsolete --hidden --rev 3
677 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
677 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
678 1339133913391339133913391339133913391339 ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
678 1339133913391339133913391339133913391339 ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
679 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
679 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
680 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
680 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
681 94b33453f93bdb8d457ef9b770851a618bf413e1 0 {6f96419950729f3671185b847352890f074f7557} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
681 94b33453f93bdb8d457ef9b770851a618bf413e1 0 {6f96419950729f3671185b847352890f074f7557} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
682 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
682 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
683 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
683 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
684
684
685 List of both
685 List of both
686
686
687 $ hg debugobsolete --hidden --rev 3::6
687 $ hg debugobsolete --hidden --rev 3::6
688 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
688 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
689 1339133913391339133913391339133913391339 ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
689 1339133913391339133913391339133913391339 ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
690 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
690 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
691 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
691 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
692 94b33453f93bdb8d457ef9b770851a618bf413e1 0 {6f96419950729f3671185b847352890f074f7557} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
692 94b33453f93bdb8d457ef9b770851a618bf413e1 0 {6f96419950729f3671185b847352890f074f7557} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
693 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
693 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
694 cda648ca50f50482b7055c0b0c4c117bba6733d9 3de5eca88c00aa039da7399a220f4a5221faa585 0 (*) {'user': 'test <test@example.net>'} (glob)
694 cda648ca50f50482b7055c0b0c4c117bba6733d9 3de5eca88c00aa039da7399a220f4a5221faa585 0 (*) {'user': 'test <test@example.net>'} (glob)
695 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
695 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
696
696
697 List of all markers in JSON
697 List of all markers in JSON
698
698
699 $ hg debugobsolete -Tjson
699 $ hg debugobsolete -Tjson
700 [
700 [
701 {
701 {
702 "date": [1339.0, 0],
702 "date": [1339.0, 0],
703 "flag": 0,
703 "flag": 0,
704 "metadata": {"user": "test"},
704 "metadata": {"user": "test"},
705 "prednode": "1339133913391339133913391339133913391339",
705 "prednode": "1339133913391339133913391339133913391339",
706 "succnodes": ["ca819180edb99ed25ceafb3e9584ac287e240b00"]
706 "succnodes": ["ca819180edb99ed25ceafb3e9584ac287e240b00"]
707 },
707 },
708 {
708 {
709 "date": [1339.0, 0],
709 "date": [1339.0, 0],
710 "flag": 0,
710 "flag": 0,
711 "metadata": {"user": "test"},
711 "metadata": {"user": "test"},
712 "prednode": "1337133713371337133713371337133713371337",
712 "prednode": "1337133713371337133713371337133713371337",
713 "succnodes": ["5601fb93a350734d935195fee37f4054c529ff39"]
713 "succnodes": ["5601fb93a350734d935195fee37f4054c529ff39"]
714 },
714 },
715 {
715 {
716 "date": [121.0, 120],
716 "date": [121.0, 120],
717 "flag": 12,
717 "flag": 12,
718 "metadata": {"user": "test"},
718 "metadata": {"user": "test"},
719 "prednode": "245bde4270cd1072a27757984f9cda8ba26f08ca",
719 "prednode": "245bde4270cd1072a27757984f9cda8ba26f08ca",
720 "succnodes": ["cdbce2fbb16313928851e97e0d85413f3f7eb77f"]
720 "succnodes": ["cdbce2fbb16313928851e97e0d85413f3f7eb77f"]
721 },
721 },
722 {
722 {
723 "date": [1338.0, 0],
723 "date": [1338.0, 0],
724 "flag": 1,
724 "flag": 1,
725 "metadata": {"user": "test"},
725 "metadata": {"user": "test"},
726 "prednode": "5601fb93a350734d935195fee37f4054c529ff39",
726 "prednode": "5601fb93a350734d935195fee37f4054c529ff39",
727 "succnodes": ["6f96419950729f3671185b847352890f074f7557"]
727 "succnodes": ["6f96419950729f3671185b847352890f074f7557"]
728 },
728 },
729 {
729 {
730 "date": [1338.0, 0],
730 "date": [1338.0, 0],
731 "flag": 0,
731 "flag": 0,
732 "metadata": {"user": "test"},
732 "metadata": {"user": "test"},
733 "prednode": "ca819180edb99ed25ceafb3e9584ac287e240b00",
733 "prednode": "ca819180edb99ed25ceafb3e9584ac287e240b00",
734 "succnodes": ["1337133713371337133713371337133713371337"]
734 "succnodes": ["1337133713371337133713371337133713371337"]
735 },
735 },
736 {
736 {
737 "date": [1337.0, 0],
737 "date": [1337.0, 0],
738 "flag": 0,
738 "flag": 0,
739 "metadata": {"user": "test"},
739 "metadata": {"user": "test"},
740 "prednode": "cdbce2fbb16313928851e97e0d85413f3f7eb77f",
740 "prednode": "cdbce2fbb16313928851e97e0d85413f3f7eb77f",
741 "succnodes": ["ca819180edb99ed25ceafb3e9584ac287e240b00"]
741 "succnodes": ["ca819180edb99ed25ceafb3e9584ac287e240b00"]
742 },
742 },
743 {
743 {
744 "date": [0.0, 0],
744 "date": [0.0, 0],
745 "flag": 0,
745 "flag": 0,
746 "metadata": {"user": "test"},
746 "metadata": {"user": "test"},
747 "parentnodes": ["6f96419950729f3671185b847352890f074f7557"],
747 "parentnodes": ["6f96419950729f3671185b847352890f074f7557"],
748 "prednode": "94b33453f93bdb8d457ef9b770851a618bf413e1",
748 "prednode": "94b33453f93bdb8d457ef9b770851a618bf413e1",
749 "succnodes": []
749 "succnodes": []
750 },
750 },
751 {
751 {
752 "date": *, (glob)
752 "date": *, (glob)
753 "flag": 0,
753 "flag": 0,
754 "metadata": {"user": "test <test@example.net>"},
754 "metadata": {"user": "test <test@example.net>"},
755 "prednode": "cda648ca50f50482b7055c0b0c4c117bba6733d9",
755 "prednode": "cda648ca50f50482b7055c0b0c4c117bba6733d9",
756 "succnodes": ["3de5eca88c00aa039da7399a220f4a5221faa585"]
756 "succnodes": ["3de5eca88c00aa039da7399a220f4a5221faa585"]
757 }
757 }
758 ]
758 ]
759
759
760 Template keywords
760 Template keywords
761
761
762 $ hg debugobsolete -r6 -T '{succnodes % "{node|short}"} {date|shortdate}\n'
762 $ hg debugobsolete -r6 -T '{succnodes % "{node|short}"} {date|shortdate}\n'
763 3de5eca88c00 ????-??-?? (glob)
763 3de5eca88c00 ????-??-?? (glob)
764 $ hg debugobsolete -r6 -T '{join(metadata % "{key}={value}", " ")}\n'
764 $ hg debugobsolete -r6 -T '{join(metadata % "{key}={value}", " ")}\n'
765 user=test <test@example.net>
765 user=test <test@example.net>
766 $ hg debugobsolete -r6 -T '{metadata}\n{metadata}\n'
766 $ hg debugobsolete -r6 -T '{metadata}\n{metadata}\n'
767 'user': 'test <test@example.net>'
767 'user': 'test <test@example.net>'
768 'user': 'test <test@example.net>'
768 'user': 'test <test@example.net>'
769 $ hg debugobsolete -r6 -T '{succnodes}\n{succnodes}\n'
769 $ hg debugobsolete -r6 -T '{succnodes}\n{succnodes}\n'
770 3de5eca88c00aa039da7399a220f4a5221faa585
770 3de5eca88c00aa039da7399a220f4a5221faa585
771 3de5eca88c00aa039da7399a220f4a5221faa585
771 3de5eca88c00aa039da7399a220f4a5221faa585
772 $ hg debugobsolete -r6 -T '{flag} {get(metadata, "user")}\n'
772 $ hg debugobsolete -r6 -T '{flag} {get(metadata, "user")}\n'
773 0 test <test@example.net>
773 0 test <test@example.net>
774
774
775 Test the debug output for exchange
775 Test the debug output for exchange
776 ----------------------------------
776 ----------------------------------
777
777
778 $ hg pull ../tmpb --config 'experimental.obsmarkers-exchange-debug=True' # bundle2
778 $ hg pull ../tmpb --config 'experimental.obsmarkers-exchange-debug=True' # bundle2
779 pulling from ../tmpb
779 pulling from ../tmpb
780 searching for changes
780 searching for changes
781 no changes found
781 no changes found
782 obsmarker-exchange: 346 bytes received
782 obsmarker-exchange: 346 bytes received
783
783
784 check hgweb does not explode
784 check hgweb does not explode
785 ====================================
785 ====================================
786
786
787 $ hg unbundle $TESTDIR/bundles/hgweb+obs.hg
787 $ hg unbundle $TESTDIR/bundles/hgweb+obs.hg
788 adding changesets
788 adding changesets
789 adding manifests
789 adding manifests
790 adding file changes
790 adding file changes
791 added 62 changesets with 63 changes to 9 files (+60 heads)
791 added 62 changesets with 63 changes to 9 files (+60 heads)
792 new changesets 50c51b361e60:c15e9edfca13
792 new changesets 50c51b361e60:c15e9edfca13
793 (run 'hg heads .' to see heads, 'hg merge' to merge)
793 (run 'hg heads .' to see heads, 'hg merge' to merge)
794 $ for node in `hg log -r 'desc(babar_)' --template '{node}\n'`;
794 $ for node in `hg log -r 'desc(babar_)' --template '{node}\n'`;
795 > do
795 > do
796 > hg debugobsolete $node
796 > hg debugobsolete $node
797 > done
797 > done
798 obsoleted 1 changesets
798 obsoleted 1 changesets
799 obsoleted 1 changesets
799 obsoleted 1 changesets
800 obsoleted 1 changesets
800 obsoleted 1 changesets
801 obsoleted 1 changesets
801 obsoleted 1 changesets
802 obsoleted 1 changesets
802 obsoleted 1 changesets
803 obsoleted 1 changesets
803 obsoleted 1 changesets
804 obsoleted 1 changesets
804 obsoleted 1 changesets
805 obsoleted 1 changesets
805 obsoleted 1 changesets
806 obsoleted 1 changesets
806 obsoleted 1 changesets
807 obsoleted 1 changesets
807 obsoleted 1 changesets
808 obsoleted 1 changesets
808 obsoleted 1 changesets
809 obsoleted 1 changesets
809 obsoleted 1 changesets
810 obsoleted 1 changesets
810 obsoleted 1 changesets
811 obsoleted 1 changesets
811 obsoleted 1 changesets
812 obsoleted 1 changesets
812 obsoleted 1 changesets
813 obsoleted 1 changesets
813 obsoleted 1 changesets
814 obsoleted 1 changesets
814 obsoleted 1 changesets
815 obsoleted 1 changesets
815 obsoleted 1 changesets
816 obsoleted 1 changesets
816 obsoleted 1 changesets
817 obsoleted 1 changesets
817 obsoleted 1 changesets
818 obsoleted 1 changesets
818 obsoleted 1 changesets
819 obsoleted 1 changesets
819 obsoleted 1 changesets
820 obsoleted 1 changesets
820 obsoleted 1 changesets
821 obsoleted 1 changesets
821 obsoleted 1 changesets
822 obsoleted 1 changesets
822 obsoleted 1 changesets
823 obsoleted 1 changesets
823 obsoleted 1 changesets
824 obsoleted 1 changesets
824 obsoleted 1 changesets
825 obsoleted 1 changesets
825 obsoleted 1 changesets
826 obsoleted 1 changesets
826 obsoleted 1 changesets
827 obsoleted 1 changesets
827 obsoleted 1 changesets
828 obsoleted 1 changesets
828 obsoleted 1 changesets
829 obsoleted 1 changesets
829 obsoleted 1 changesets
830 obsoleted 1 changesets
830 obsoleted 1 changesets
831 obsoleted 1 changesets
831 obsoleted 1 changesets
832 obsoleted 1 changesets
832 obsoleted 1 changesets
833 obsoleted 1 changesets
833 obsoleted 1 changesets
834 obsoleted 1 changesets
834 obsoleted 1 changesets
835 obsoleted 1 changesets
835 obsoleted 1 changesets
836 obsoleted 1 changesets
836 obsoleted 1 changesets
837 obsoleted 1 changesets
837 obsoleted 1 changesets
838 obsoleted 1 changesets
838 obsoleted 1 changesets
839 obsoleted 1 changesets
839 obsoleted 1 changesets
840 obsoleted 1 changesets
840 obsoleted 1 changesets
841 obsoleted 1 changesets
841 obsoleted 1 changesets
842 obsoleted 1 changesets
842 obsoleted 1 changesets
843 obsoleted 1 changesets
843 obsoleted 1 changesets
844 obsoleted 1 changesets
844 obsoleted 1 changesets
845 obsoleted 1 changesets
845 obsoleted 1 changesets
846 obsoleted 1 changesets
846 obsoleted 1 changesets
847 obsoleted 1 changesets
847 obsoleted 1 changesets
848 obsoleted 1 changesets
848 obsoleted 1 changesets
849 obsoleted 1 changesets
849 obsoleted 1 changesets
850 obsoleted 1 changesets
850 obsoleted 1 changesets
851 obsoleted 1 changesets
851 obsoleted 1 changesets
852 obsoleted 1 changesets
852 obsoleted 1 changesets
853 obsoleted 1 changesets
853 obsoleted 1 changesets
854 obsoleted 1 changesets
854 obsoleted 1 changesets
855 obsoleted 1 changesets
855 obsoleted 1 changesets
856 obsoleted 1 changesets
856 obsoleted 1 changesets
857 obsoleted 1 changesets
857 obsoleted 1 changesets
858 $ hg up tip
858 $ hg up tip
859 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
859 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
860
860
861 #if serve
861 #if serve
862
862
863 $ hg serve -n test -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
863 $ hg serve -n test -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
864 $ cat hg.pid >> $DAEMON_PIDS
864 $ cat hg.pid >> $DAEMON_PIDS
865
865
866 check changelog view
866 check changelog view
867
867
868 $ get-with-headers.py --headeronly localhost:$HGPORT 'shortlog/'
868 $ get-with-headers.py --headeronly localhost:$HGPORT 'shortlog/'
869 200 Script output follows
869 200 Script output follows
870
870
871 check graph view
871 check graph view
872
872
873 $ get-with-headers.py --headeronly localhost:$HGPORT 'graph'
873 $ get-with-headers.py --headeronly localhost:$HGPORT 'graph'
874 200 Script output follows
874 200 Script output follows
875
875
876 check filelog view
876 check filelog view
877
877
878 $ get-with-headers.py --headeronly localhost:$HGPORT 'log/'`hg log -r . -T "{node}"`/'babar'
878 $ get-with-headers.py --headeronly localhost:$HGPORT 'log/'`hg log -r . -T "{node}"`/'babar'
879 200 Script output follows
879 200 Script output follows
880
880
881 $ get-with-headers.py --headeronly localhost:$HGPORT 'rev/68'
881 $ get-with-headers.py --headeronly localhost:$HGPORT 'rev/68'
882 200 Script output follows
882 200 Script output follows
883 $ get-with-headers.py --headeronly localhost:$HGPORT 'rev/67'
883 $ get-with-headers.py --headeronly localhost:$HGPORT 'rev/67'
884 404 Not Found
884 404 Not Found
885 [1]
885 [1]
886
886
887 check that web.view config option:
887 check that web.view config option:
888
888
889 $ killdaemons.py hg.pid
889 $ killdaemons.py hg.pid
890 $ cat >> .hg/hgrc << EOF
890 $ cat >> .hg/hgrc << EOF
891 > [web]
891 > [web]
892 > view=all
892 > view=all
893 > EOF
893 > EOF
894 $ wait
894 $ wait
895 $ hg serve -n test -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
895 $ hg serve -n test -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
896 $ get-with-headers.py --headeronly localhost:$HGPORT 'rev/67'
896 $ get-with-headers.py --headeronly localhost:$HGPORT 'rev/67'
897 200 Script output follows
897 200 Script output follows
898 $ killdaemons.py hg.pid
898 $ killdaemons.py hg.pid
899
899
900 Checking _enable=False warning if obsolete marker exists
900 Checking _enable=False warning if obsolete marker exists
901
901
902 $ echo '[experimental]' >> $HGRCPATH
902 $ echo '[experimental]' >> $HGRCPATH
903 $ echo "evolution=" >> $HGRCPATH
903 $ echo "evolution=" >> $HGRCPATH
904 $ hg log -r tip
904 $ hg log -r tip
905 68:c15e9edfca13 (draft) [tip ] add celestine
905 68:c15e9edfca13 (draft) [tip ] add celestine
906
906
907 reenable for later test
907 reenable for later test
908
908
909 $ echo '[experimental]' >> $HGRCPATH
909 $ echo '[experimental]' >> $HGRCPATH
910 $ echo "evolution.exchange=True" >> $HGRCPATH
910 $ echo "evolution.exchange=True" >> $HGRCPATH
911 $ echo "evolution.createmarkers=True" >> $HGRCPATH
911 $ echo "evolution.createmarkers=True" >> $HGRCPATH
912
912
913 $ rm hg.pid access.log errors.log
913 $ rm hg.pid access.log errors.log
914 #endif
914 #endif
915
915
916 Several troubles on the same changeset (create an unstable and bumped changeset)
916 Several troubles on the same changeset (create an unstable and bumped changeset)
917
917
918 $ hg debugobsolete `getid obsolete_e`
918 $ hg debugobsolete `getid obsolete_e`
919 obsoleted 1 changesets
919 obsoleted 1 changesets
920 $ hg debugobsolete `getid original_c` `getid babar`
920 $ hg debugobsolete `getid original_c` `getid babar`
921 $ hg log --config ui.logtemplate= -r 'phasedivergent() and orphan()'
921 $ hg log --config ui.logtemplate= -r 'phasedivergent() and orphan()'
922 changeset: 7:50c51b361e60
922 changeset: 7:50c51b361e60
923 user: test
923 user: test
924 date: Thu Jan 01 00:00:00 1970 +0000
924 date: Thu Jan 01 00:00:00 1970 +0000
925 instability: orphan, phase-divergent
925 instability: orphan, phase-divergent
926 summary: add babar
926 summary: add babar
927
927
928
928
929 test the "obsolete" templatekw
929 test the "obsolete" templatekw
930
930
931 $ hg log -r 'obsolete()'
931 $ hg log -r 'obsolete()'
932 6:3de5eca88c00 (draft *obsolete*) [ ] add obsolete_e [pruned]
932 6:3de5eca88c00 (draft *obsolete*) [ ] add obsolete_e [pruned]
933
933
934 test the "troubles" templatekw
934 test the "troubles" templatekw
935
935
936 $ hg log -r 'phasedivergent() and orphan()'
936 $ hg log -r 'phasedivergent() and orphan()'
937 7:50c51b361e60 (draft orphan phase-divergent) [ ] add babar
937 7:50c51b361e60 (draft orphan phase-divergent) [ ] add babar
938
938
939 test the default cmdline template
939 test the default cmdline template
940
940
941 $ hg log -T default -r 'phasedivergent()'
941 $ hg log -T default -r 'phasedivergent()'
942 changeset: 7:50c51b361e60
942 changeset: 7:50c51b361e60
943 user: test
943 user: test
944 date: Thu Jan 01 00:00:00 1970 +0000
944 date: Thu Jan 01 00:00:00 1970 +0000
945 instability: orphan, phase-divergent
945 instability: orphan, phase-divergent
946 summary: add babar
946 summary: add babar
947
947
948 $ hg log -T default -r 'obsolete()'
948 $ hg log -T default -r 'obsolete()'
949 changeset: 6:3de5eca88c00
949 changeset: 6:3de5eca88c00
950 parent: 3:6f9641995072
950 parent: 3:6f9641995072
951 user: test
951 user: test
952 date: Thu Jan 01 00:00:00 1970 +0000
952 date: Thu Jan 01 00:00:00 1970 +0000
953 obsolete: pruned
953 obsolete: pruned
954 summary: add obsolete_e
954 summary: add obsolete_e
955
955
956
956
957 test the obsolete labels
957 test the obsolete labels
958
958
959 $ hg log --config ui.logtemplate= --color=debug -r 'phasedivergent()'
959 $ hg log --config ui.logtemplate= --color=debug -r 'phasedivergent()'
960 [log.changeset changeset.draft changeset.unstable instability.orphan instability.phase-divergent|changeset: 7:50c51b361e60]
960 [log.changeset changeset.draft changeset.unstable instability.orphan instability.phase-divergent|changeset: 7:50c51b361e60]
961 [log.user|user: test]
961 [log.user|user: test]
962 [log.date|date: Thu Jan 01 00:00:00 1970 +0000]
962 [log.date|date: Thu Jan 01 00:00:00 1970 +0000]
963 [log.instability|instability: orphan, phase-divergent]
963 [log.instability|instability: orphan, phase-divergent]
964 [log.summary|summary: add babar]
964 [log.summary|summary: add babar]
965
965
966
966
967 $ hg log -T default -r 'phasedivergent()' --color=debug
967 $ hg log -T default -r 'phasedivergent()' --color=debug
968 [log.changeset changeset.draft changeset.unstable instability.orphan instability.phase-divergent|changeset: 7:50c51b361e60]
968 [log.changeset changeset.draft changeset.unstable instability.orphan instability.phase-divergent|changeset: 7:50c51b361e60]
969 [log.user|user: test]
969 [log.user|user: test]
970 [log.date|date: Thu Jan 01 00:00:00 1970 +0000]
970 [log.date|date: Thu Jan 01 00:00:00 1970 +0000]
971 [log.instability|instability: orphan, phase-divergent]
971 [log.instability|instability: orphan, phase-divergent]
972 [log.summary|summary: add babar]
972 [log.summary|summary: add babar]
973
973
974
974
975 $ hg log --config ui.logtemplate= --color=debug -r "obsolete()"
975 $ hg log --config ui.logtemplate= --color=debug -r "obsolete()"
976 [log.changeset changeset.draft changeset.obsolete|changeset: 6:3de5eca88c00]
976 [log.changeset changeset.draft changeset.obsolete|changeset: 6:3de5eca88c00]
977 [log.parent changeset.draft|parent: 3:6f9641995072]
977 [log.parent changeset.draft|parent: 3:6f9641995072]
978 [log.user|user: test]
978 [log.user|user: test]
979 [log.date|date: Thu Jan 01 00:00:00 1970 +0000]
979 [log.date|date: Thu Jan 01 00:00:00 1970 +0000]
980 [log.obsfate|obsolete: pruned]
980 [log.obsfate|obsolete: pruned]
981 [log.summary|summary: add obsolete_e]
981 [log.summary|summary: add obsolete_e]
982
982
983
983
984 $ hg log -T default -r 'obsolete()' --color=debug
984 $ hg log -T default -r 'obsolete()' --color=debug
985 [log.changeset changeset.draft changeset.obsolete|changeset: 6:3de5eca88c00]
985 [log.changeset changeset.draft changeset.obsolete|changeset: 6:3de5eca88c00]
986 [log.parent changeset.draft|parent: 3:6f9641995072]
986 [log.parent changeset.draft|parent: 3:6f9641995072]
987 [log.user|user: test]
987 [log.user|user: test]
988 [log.date|date: Thu Jan 01 00:00:00 1970 +0000]
988 [log.date|date: Thu Jan 01 00:00:00 1970 +0000]
989 [log.obsfate|obsolete: pruned]
989 [log.obsfate|obsolete: pruned]
990 [log.summary|summary: add obsolete_e]
990 [log.summary|summary: add obsolete_e]
991
991
992
992
993 test summary output
993 test summary output
994
994
995 $ hg up -r 'phasedivergent() and orphan()'
995 $ hg up -r 'phasedivergent() and orphan()'
996 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
996 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
997 $ hg summary
997 $ hg summary
998 parent: 7:50c51b361e60 (orphan, phase-divergent)
998 parent: 7:50c51b361e60 (orphan, phase-divergent)
999 add babar
999 add babar
1000 branch: default
1000 branch: default
1001 commit: (clean)
1001 commit: (clean)
1002 update: 2 new changesets (update)
1002 update: 2 new changesets (update)
1003 phases: 4 draft
1003 phases: 4 draft
1004 orphan: 2 changesets
1004 orphan: 2 changesets
1005 phase-divergent: 1 changesets
1005 phase-divergent: 1 changesets
1006 $ hg up -r 'obsolete()'
1006 $ hg up -r 'obsolete()'
1007 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
1007 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
1008 $ hg summary
1008 $ hg summary
1009 parent: 6:3de5eca88c00 (obsolete)
1009 parent: 6:3de5eca88c00 (obsolete)
1010 add obsolete_e
1010 add obsolete_e
1011 branch: default
1011 branch: default
1012 commit: (clean)
1012 commit: (clean)
1013 update: 3 new changesets (update)
1013 update: 3 new changesets (update)
1014 phases: 4 draft
1014 phases: 4 draft
1015 orphan: 2 changesets
1015 orphan: 2 changesets
1016 phase-divergent: 1 changesets
1016 phase-divergent: 1 changesets
1017
1017
1018 #if serve
1018 #if serve
1019
1019
1020 $ hg serve -n test -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
1020 $ hg serve -n test -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
1021 $ cat hg.pid >> $DAEMON_PIDS
1021 $ cat hg.pid >> $DAEMON_PIDS
1022
1022
1023 check obsolete changeset
1023 check obsolete changeset
1024
1024
1025 $ get-with-headers.py localhost:$HGPORT 'log?rev=first(obsolete())&style=paper' | grep '<span class="obsolete">'
1025 $ get-with-headers.py localhost:$HGPORT 'log?rev=first(obsolete())&style=paper' | grep '<span class="obsolete">'
1026 <span class="phase">draft</span> <span class="obsolete">obsolete</span>
1026 <span class="phase">draft</span> <span class="obsolete">obsolete</span>
1027 $ get-with-headers.py localhost:$HGPORT 'log?rev=first(obsolete())&style=coal' | grep '<span class="obsolete">'
1027 $ get-with-headers.py localhost:$HGPORT 'log?rev=first(obsolete())&style=coal' | grep '<span class="obsolete">'
1028 <span class="phase">draft</span> <span class="obsolete">obsolete</span>
1028 <span class="phase">draft</span> <span class="obsolete">obsolete</span>
1029 $ get-with-headers.py localhost:$HGPORT 'log?rev=first(obsolete())&style=gitweb' | grep '<span class="logtags">'
1029 $ get-with-headers.py localhost:$HGPORT 'log?rev=first(obsolete())&style=gitweb' | grep '<span class="logtags">'
1030 <span class="logtags"><span class="phasetag" title="draft">draft</span> <span class="obsoletetag" title="obsolete">obsolete</span> </span>
1030 <span class="logtags"><span class="phasetag" title="draft">draft</span> <span class="obsoletetag" title="obsolete">obsolete</span> </span>
1031 $ get-with-headers.py localhost:$HGPORT 'log?rev=first(obsolete())&style=monoblue' | grep '<span class="logtags">'
1031 $ get-with-headers.py localhost:$HGPORT 'log?rev=first(obsolete())&style=monoblue' | grep '<span class="logtags">'
1032 <span class="logtags"><span class="phasetag" title="draft">draft</span> <span class="obsoletetag" title="obsolete">obsolete</span> </span>
1032 <span class="logtags"><span class="phasetag" title="draft">draft</span> <span class="obsoletetag" title="obsolete">obsolete</span> </span>
1033 $ get-with-headers.py localhost:$HGPORT 'log?rev=first(obsolete())&style=spartan' | grep 'class="obsolete"'
1033 $ get-with-headers.py localhost:$HGPORT 'log?rev=first(obsolete())&style=spartan' | grep 'class="obsolete"'
1034 <th class="obsolete">obsolete:</th>
1034 <th class="obsolete">obsolete:</th>
1035 <td class="obsolete">yes</td>
1035 <td class="obsolete">yes</td>
1036
1036
1037 check changeset with instabilities
1038
1039 $ get-with-headers.py localhost:$HGPORT 'log?rev=first(phasedivergent())&style=paper' | grep '<span class="instability">'
1040 <span class="phase">draft</span> <span class="instability">orphan</span> <span class="instability">phase-divergent</span>
1041 $ get-with-headers.py localhost:$HGPORT 'log?rev=first(phasedivergent())&style=coal' | grep '<span class="instability">'
1042 <span class="phase">draft</span> <span class="instability">orphan</span> <span class="instability">phase-divergent</span>
1043 $ get-with-headers.py localhost:$HGPORT 'log?rev=first(phasedivergent())&style=gitweb' | grep '<span class="logtags">'
1044 <span class="logtags"><span class="phasetag" title="draft">draft</span> <span class="instabilitytag" title="orphan">orphan</span> <span class="instabilitytag" title="phase-divergent">phase-divergent</span> </span>
1045 $ get-with-headers.py localhost:$HGPORT 'log?rev=first(phasedivergent())&style=monoblue' | grep '<span class="logtags">'
1046 <span class="logtags"><span class="phasetag" title="draft">draft</span> <span class="instabilitytag" title="orphan">orphan</span> <span class="instabilitytag" title="phase-divergent">phase-divergent</span> </span>
1047 $ get-with-headers.py localhost:$HGPORT 'log?rev=first(phasedivergent())&style=spartan' | grep 'class="instabilities"'
1048 <th class="instabilities">instabilities:</th>
1049 <td class="instabilities">orphan phase-divergent </td>
1050
1037 $ killdaemons.py
1051 $ killdaemons.py
1038
1052
1039 $ rm hg.pid access.log errors.log
1053 $ rm hg.pid access.log errors.log
1040 #endif
1054 #endif
1041
1055
1042 Test incoming/outcoming with changesets obsoleted remotely, known locally
1056 Test incoming/outcoming with changesets obsoleted remotely, known locally
1043 ===============================================================================
1057 ===============================================================================
1044
1058
1045 This test issue 3805
1059 This test issue 3805
1046
1060
1047 $ hg init repo-issue3805
1061 $ hg init repo-issue3805
1048 $ cd repo-issue3805
1062 $ cd repo-issue3805
1049 $ echo "base" > base
1063 $ echo "base" > base
1050 $ hg ci -Am "base"
1064 $ hg ci -Am "base"
1051 adding base
1065 adding base
1052 $ echo "foo" > foo
1066 $ echo "foo" > foo
1053 $ hg ci -Am "A"
1067 $ hg ci -Am "A"
1054 adding foo
1068 adding foo
1055 $ hg clone . ../other-issue3805
1069 $ hg clone . ../other-issue3805
1056 updating to branch default
1070 updating to branch default
1057 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
1071 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
1058 $ echo "bar" >> foo
1072 $ echo "bar" >> foo
1059 $ hg ci --amend
1073 $ hg ci --amend
1060 $ cd ../other-issue3805
1074 $ cd ../other-issue3805
1061 $ hg log -G
1075 $ hg log -G
1062 @ 1:29f0c6921ddd (draft) [tip ] A
1076 @ 1:29f0c6921ddd (draft) [tip ] A
1063 |
1077 |
1064 o 0:d20a80d4def3 (draft) [ ] base
1078 o 0:d20a80d4def3 (draft) [ ] base
1065
1079
1066 $ hg log -G -R ../repo-issue3805
1080 $ hg log -G -R ../repo-issue3805
1067 @ 2:323a9c3ddd91 (draft) [tip ] A
1081 @ 2:323a9c3ddd91 (draft) [tip ] A
1068 |
1082 |
1069 o 0:d20a80d4def3 (draft) [ ] base
1083 o 0:d20a80d4def3 (draft) [ ] base
1070
1084
1071 $ hg incoming
1085 $ hg incoming
1072 comparing with $TESTTMP/tmpe/repo-issue3805 (glob)
1086 comparing with $TESTTMP/tmpe/repo-issue3805 (glob)
1073 searching for changes
1087 searching for changes
1074 2:323a9c3ddd91 (draft) [tip ] A
1088 2:323a9c3ddd91 (draft) [tip ] A
1075 $ hg incoming --bundle ../issue3805.hg
1089 $ hg incoming --bundle ../issue3805.hg
1076 comparing with $TESTTMP/tmpe/repo-issue3805 (glob)
1090 comparing with $TESTTMP/tmpe/repo-issue3805 (glob)
1077 searching for changes
1091 searching for changes
1078 2:323a9c3ddd91 (draft) [tip ] A
1092 2:323a9c3ddd91 (draft) [tip ] A
1079 $ hg outgoing
1093 $ hg outgoing
1080 comparing with $TESTTMP/tmpe/repo-issue3805 (glob)
1094 comparing with $TESTTMP/tmpe/repo-issue3805 (glob)
1081 searching for changes
1095 searching for changes
1082 1:29f0c6921ddd (draft) [tip ] A
1096 1:29f0c6921ddd (draft) [tip ] A
1083
1097
1084 #if serve
1098 #if serve
1085
1099
1086 $ hg serve -R ../repo-issue3805 -n test -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
1100 $ hg serve -R ../repo-issue3805 -n test -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
1087 $ cat hg.pid >> $DAEMON_PIDS
1101 $ cat hg.pid >> $DAEMON_PIDS
1088
1102
1089 $ hg incoming http://localhost:$HGPORT
1103 $ hg incoming http://localhost:$HGPORT
1090 comparing with http://localhost:$HGPORT/
1104 comparing with http://localhost:$HGPORT/
1091 searching for changes
1105 searching for changes
1092 2:323a9c3ddd91 (draft) [tip ] A
1106 2:323a9c3ddd91 (draft) [tip ] A
1093 $ hg outgoing http://localhost:$HGPORT
1107 $ hg outgoing http://localhost:$HGPORT
1094 comparing with http://localhost:$HGPORT/
1108 comparing with http://localhost:$HGPORT/
1095 searching for changes
1109 searching for changes
1096 1:29f0c6921ddd (draft) [tip ] A
1110 1:29f0c6921ddd (draft) [tip ] A
1097
1111
1098 $ killdaemons.py
1112 $ killdaemons.py
1099
1113
1100 #endif
1114 #endif
1101
1115
1102 This test issue 3814
1116 This test issue 3814
1103
1117
1104 (nothing to push but locally hidden changeset)
1118 (nothing to push but locally hidden changeset)
1105
1119
1106 $ cd ..
1120 $ cd ..
1107 $ hg init repo-issue3814
1121 $ hg init repo-issue3814
1108 $ cd repo-issue3805
1122 $ cd repo-issue3805
1109 $ hg push -r 323a9c3ddd91 ../repo-issue3814
1123 $ hg push -r 323a9c3ddd91 ../repo-issue3814
1110 pushing to ../repo-issue3814
1124 pushing to ../repo-issue3814
1111 searching for changes
1125 searching for changes
1112 adding changesets
1126 adding changesets
1113 adding manifests
1127 adding manifests
1114 adding file changes
1128 adding file changes
1115 added 2 changesets with 2 changes to 2 files
1129 added 2 changesets with 2 changes to 2 files
1116 1 new obsolescence markers
1130 1 new obsolescence markers
1117 $ hg out ../repo-issue3814
1131 $ hg out ../repo-issue3814
1118 comparing with ../repo-issue3814
1132 comparing with ../repo-issue3814
1119 searching for changes
1133 searching for changes
1120 no changes found
1134 no changes found
1121 [1]
1135 [1]
1122
1136
1123 Test that a local tag blocks a changeset from being hidden
1137 Test that a local tag blocks a changeset from being hidden
1124
1138
1125 $ hg tag -l visible -r 1 --hidden
1139 $ hg tag -l visible -r 1 --hidden
1126 $ hg log -G
1140 $ hg log -G
1127 @ 2:323a9c3ddd91 (draft) [tip ] A
1141 @ 2:323a9c3ddd91 (draft) [tip ] A
1128 |
1142 |
1129 | x 1:29f0c6921ddd (draft *obsolete*) [visible ] A [rewritten using amend as 2:323a9c3ddd91]
1143 | x 1:29f0c6921ddd (draft *obsolete*) [visible ] A [rewritten using amend as 2:323a9c3ddd91]
1130 |/
1144 |/
1131 o 0:d20a80d4def3 (draft) [ ] base
1145 o 0:d20a80d4def3 (draft) [ ] base
1132
1146
1133 Test that removing a local tag does not cause some commands to fail
1147 Test that removing a local tag does not cause some commands to fail
1134
1148
1135 $ hg tag -l -r tip tiptag
1149 $ hg tag -l -r tip tiptag
1136 $ hg tags
1150 $ hg tags
1137 tiptag 2:323a9c3ddd91
1151 tiptag 2:323a9c3ddd91
1138 tip 2:323a9c3ddd91
1152 tip 2:323a9c3ddd91
1139 visible 1:29f0c6921ddd
1153 visible 1:29f0c6921ddd
1140 $ hg --config extensions.strip= strip -r tip --no-backup
1154 $ hg --config extensions.strip= strip -r tip --no-backup
1141 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
1155 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
1142 $ hg tags
1156 $ hg tags
1143 visible 1:29f0c6921ddd
1157 visible 1:29f0c6921ddd
1144 tip 1:29f0c6921ddd
1158 tip 1:29f0c6921ddd
1145
1159
1146 Test bundle overlay onto hidden revision
1160 Test bundle overlay onto hidden revision
1147
1161
1148 $ cd ..
1162 $ cd ..
1149 $ hg init repo-bundleoverlay
1163 $ hg init repo-bundleoverlay
1150 $ cd repo-bundleoverlay
1164 $ cd repo-bundleoverlay
1151 $ echo "A" > foo
1165 $ echo "A" > foo
1152 $ hg ci -Am "A"
1166 $ hg ci -Am "A"
1153 adding foo
1167 adding foo
1154 $ echo "B" >> foo
1168 $ echo "B" >> foo
1155 $ hg ci -m "B"
1169 $ hg ci -m "B"
1156 $ hg up 0
1170 $ hg up 0
1157 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1171 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1158 $ echo "C" >> foo
1172 $ echo "C" >> foo
1159 $ hg ci -m "C"
1173 $ hg ci -m "C"
1160 created new head
1174 created new head
1161 $ hg log -G
1175 $ hg log -G
1162 @ 2:c186d7714947 (draft) [tip ] C
1176 @ 2:c186d7714947 (draft) [tip ] C
1163 |
1177 |
1164 | o 1:44526ebb0f98 (draft) [ ] B
1178 | o 1:44526ebb0f98 (draft) [ ] B
1165 |/
1179 |/
1166 o 0:4b34ecfb0d56 (draft) [ ] A
1180 o 0:4b34ecfb0d56 (draft) [ ] A
1167
1181
1168
1182
1169 $ hg clone -r1 . ../other-bundleoverlay
1183 $ hg clone -r1 . ../other-bundleoverlay
1170 adding changesets
1184 adding changesets
1171 adding manifests
1185 adding manifests
1172 adding file changes
1186 adding file changes
1173 added 2 changesets with 2 changes to 1 files
1187 added 2 changesets with 2 changes to 1 files
1174 new changesets 4b34ecfb0d56:44526ebb0f98
1188 new changesets 4b34ecfb0d56:44526ebb0f98
1175 updating to branch default
1189 updating to branch default
1176 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1190 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1177 $ cd ../other-bundleoverlay
1191 $ cd ../other-bundleoverlay
1178 $ echo "B+" >> foo
1192 $ echo "B+" >> foo
1179 $ hg ci --amend -m "B+"
1193 $ hg ci --amend -m "B+"
1180 $ hg log -G --hidden
1194 $ hg log -G --hidden
1181 @ 2:b7d587542d40 (draft) [tip ] B+
1195 @ 2:b7d587542d40 (draft) [tip ] B+
1182 |
1196 |
1183 | x 1:44526ebb0f98 (draft *obsolete*) [ ] B [rewritten using amend as 2:b7d587542d40]
1197 | x 1:44526ebb0f98 (draft *obsolete*) [ ] B [rewritten using amend as 2:b7d587542d40]
1184 |/
1198 |/
1185 o 0:4b34ecfb0d56 (draft) [ ] A
1199 o 0:4b34ecfb0d56 (draft) [ ] A
1186
1200
1187
1201
1188 $ hg incoming ../repo-bundleoverlay --bundle ../bundleoverlay.hg
1202 $ hg incoming ../repo-bundleoverlay --bundle ../bundleoverlay.hg
1189 comparing with ../repo-bundleoverlay
1203 comparing with ../repo-bundleoverlay
1190 searching for changes
1204 searching for changes
1191 1:44526ebb0f98 (draft) [ ] B
1205 1:44526ebb0f98 (draft) [ ] B
1192 2:c186d7714947 (draft) [tip ] C
1206 2:c186d7714947 (draft) [tip ] C
1193 $ hg log -G -R ../bundleoverlay.hg
1207 $ hg log -G -R ../bundleoverlay.hg
1194 o 3:c186d7714947 (draft) [tip ] C
1208 o 3:c186d7714947 (draft) [tip ] C
1195 |
1209 |
1196 | @ 2:b7d587542d40 (draft) [ ] B+
1210 | @ 2:b7d587542d40 (draft) [ ] B+
1197 |/
1211 |/
1198 o 0:4b34ecfb0d56 (draft) [ ] A
1212 o 0:4b34ecfb0d56 (draft) [ ] A
1199
1213
1200
1214
1201 #if serve
1215 #if serve
1202
1216
1203 Test issue 4506
1217 Test issue 4506
1204
1218
1205 $ cd ..
1219 $ cd ..
1206 $ hg init repo-issue4506
1220 $ hg init repo-issue4506
1207 $ cd repo-issue4506
1221 $ cd repo-issue4506
1208 $ echo "0" > foo
1222 $ echo "0" > foo
1209 $ hg add foo
1223 $ hg add foo
1210 $ hg ci -m "content-0"
1224 $ hg ci -m "content-0"
1211
1225
1212 $ hg up null
1226 $ hg up null
1213 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
1227 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
1214 $ echo "1" > bar
1228 $ echo "1" > bar
1215 $ hg add bar
1229 $ hg add bar
1216 $ hg ci -m "content-1"
1230 $ hg ci -m "content-1"
1217 created new head
1231 created new head
1218 $ hg up 0
1232 $ hg up 0
1219 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
1233 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
1220 $ hg graft 1
1234 $ hg graft 1
1221 grafting 1:1c9eddb02162 "content-1" (tip)
1235 grafting 1:1c9eddb02162 "content-1" (tip)
1222
1236
1223 $ hg debugobsolete `hg log -r1 -T'{node}'` `hg log -r2 -T'{node}'`
1237 $ hg debugobsolete `hg log -r1 -T'{node}'` `hg log -r2 -T'{node}'`
1224 obsoleted 1 changesets
1238 obsoleted 1 changesets
1225
1239
1226 $ hg serve -n test -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
1240 $ hg serve -n test -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
1227 $ cat hg.pid >> $DAEMON_PIDS
1241 $ cat hg.pid >> $DAEMON_PIDS
1228
1242
1229 $ get-with-headers.py --headeronly localhost:$HGPORT 'rev/1'
1243 $ get-with-headers.py --headeronly localhost:$HGPORT 'rev/1'
1230 404 Not Found
1244 404 Not Found
1231 [1]
1245 [1]
1232 $ get-with-headers.py --headeronly localhost:$HGPORT 'file/tip/bar'
1246 $ get-with-headers.py --headeronly localhost:$HGPORT 'file/tip/bar'
1233 200 Script output follows
1247 200 Script output follows
1234 $ get-with-headers.py --headeronly localhost:$HGPORT 'annotate/tip/bar'
1248 $ get-with-headers.py --headeronly localhost:$HGPORT 'annotate/tip/bar'
1235 200 Script output follows
1249 200 Script output follows
1236
1250
1237 $ killdaemons.py
1251 $ killdaemons.py
1238
1252
1239 #endif
1253 #endif
1240
1254
1241 Test heads computation on pending index changes with obsolescence markers
1255 Test heads computation on pending index changes with obsolescence markers
1242 $ cd ..
1256 $ cd ..
1243 $ cat >$TESTTMP/test_extension.py << EOF
1257 $ cat >$TESTTMP/test_extension.py << EOF
1244 > from __future__ import absolute_import
1258 > from __future__ import absolute_import
1245 > from mercurial.i18n import _
1259 > from mercurial.i18n import _
1246 > from mercurial import cmdutil, registrar
1260 > from mercurial import cmdutil, registrar
1247 >
1261 >
1248 > cmdtable = {}
1262 > cmdtable = {}
1249 > command = registrar.command(cmdtable)
1263 > command = registrar.command(cmdtable)
1250 > @command(b"amendtransient",[], _('hg amendtransient [rev]'))
1264 > @command(b"amendtransient",[], _('hg amendtransient [rev]'))
1251 > def amend(ui, repo, *pats, **opts):
1265 > def amend(ui, repo, *pats, **opts):
1252 > opts['message'] = 'Test'
1266 > opts['message'] = 'Test'
1253 > opts['logfile'] = None
1267 > opts['logfile'] = None
1254 > cmdutil.amend(ui, repo, repo['.'], {}, pats, opts)
1268 > cmdutil.amend(ui, repo, repo['.'], {}, pats, opts)
1255 > ui.write('%s\n' % repo.changelog.headrevs())
1269 > ui.write('%s\n' % repo.changelog.headrevs())
1256 > EOF
1270 > EOF
1257 $ cat >> $HGRCPATH << EOF
1271 $ cat >> $HGRCPATH << EOF
1258 > [extensions]
1272 > [extensions]
1259 > testextension=$TESTTMP/test_extension.py
1273 > testextension=$TESTTMP/test_extension.py
1260 > EOF
1274 > EOF
1261 $ hg init repo-issue-nativerevs-pending-changes
1275 $ hg init repo-issue-nativerevs-pending-changes
1262 $ cd repo-issue-nativerevs-pending-changes
1276 $ cd repo-issue-nativerevs-pending-changes
1263 $ mkcommit a
1277 $ mkcommit a
1264 $ mkcommit b
1278 $ mkcommit b
1265 $ hg up ".^"
1279 $ hg up ".^"
1266 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
1280 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
1267 $ echo aa > a
1281 $ echo aa > a
1268 $ hg amendtransient
1282 $ hg amendtransient
1269 [1, 2]
1283 [1, 2]
1270
1284
1271 Test cache consistency for the visible filter
1285 Test cache consistency for the visible filter
1272 1) We want to make sure that the cached filtered revs are invalidated when
1286 1) We want to make sure that the cached filtered revs are invalidated when
1273 bookmarks change
1287 bookmarks change
1274 $ cd ..
1288 $ cd ..
1275 $ cat >$TESTTMP/test_extension.py << EOF
1289 $ cat >$TESTTMP/test_extension.py << EOF
1276 > from __future__ import absolute_import, print_function
1290 > from __future__ import absolute_import, print_function
1277 > import weakref
1291 > import weakref
1278 > from mercurial import (
1292 > from mercurial import (
1279 > bookmarks,
1293 > bookmarks,
1280 > cmdutil,
1294 > cmdutil,
1281 > extensions,
1295 > extensions,
1282 > repoview,
1296 > repoview,
1283 > )
1297 > )
1284 > def _bookmarkchanged(orig, bkmstoreinst, *args, **kwargs):
1298 > def _bookmarkchanged(orig, bkmstoreinst, *args, **kwargs):
1285 > reporef = weakref.ref(bkmstoreinst._repo)
1299 > reporef = weakref.ref(bkmstoreinst._repo)
1286 > def trhook(tr):
1300 > def trhook(tr):
1287 > repo = reporef()
1301 > repo = reporef()
1288 > hidden1 = repoview.computehidden(repo)
1302 > hidden1 = repoview.computehidden(repo)
1289 > hidden = repoview.filterrevs(repo, 'visible')
1303 > hidden = repoview.filterrevs(repo, 'visible')
1290 > if sorted(hidden1) != sorted(hidden):
1304 > if sorted(hidden1) != sorted(hidden):
1291 > print("cache inconsistency")
1305 > print("cache inconsistency")
1292 > bkmstoreinst._repo.currenttransaction().addpostclose('test_extension', trhook)
1306 > bkmstoreinst._repo.currenttransaction().addpostclose('test_extension', trhook)
1293 > orig(bkmstoreinst, *args, **kwargs)
1307 > orig(bkmstoreinst, *args, **kwargs)
1294 > def extsetup(ui):
1308 > def extsetup(ui):
1295 > extensions.wrapfunction(bookmarks.bmstore, '_recordchange',
1309 > extensions.wrapfunction(bookmarks.bmstore, '_recordchange',
1296 > _bookmarkchanged)
1310 > _bookmarkchanged)
1297 > EOF
1311 > EOF
1298
1312
1299 $ hg init repo-cache-inconsistency
1313 $ hg init repo-cache-inconsistency
1300 $ cd repo-issue-nativerevs-pending-changes
1314 $ cd repo-issue-nativerevs-pending-changes
1301 $ mkcommit a
1315 $ mkcommit a
1302 a already tracked!
1316 a already tracked!
1303 $ mkcommit b
1317 $ mkcommit b
1304 $ hg id
1318 $ hg id
1305 13bedc178fce tip
1319 13bedc178fce tip
1306 $ echo "hello" > b
1320 $ echo "hello" > b
1307 $ hg commit --amend -m "message"
1321 $ hg commit --amend -m "message"
1308 $ hg book bookb -r 13bedc178fce --hidden
1322 $ hg book bookb -r 13bedc178fce --hidden
1309 $ hg log -r 13bedc178fce
1323 $ hg log -r 13bedc178fce
1310 4:13bedc178fce (draft *obsolete*) [ bookb] add b [rewritten using amend as 5:a9b1f8652753]
1324 4:13bedc178fce (draft *obsolete*) [ bookb] add b [rewritten using amend as 5:a9b1f8652753]
1311 $ hg book -d bookb
1325 $ hg book -d bookb
1312 $ hg log -r 13bedc178fce
1326 $ hg log -r 13bedc178fce
1313 abort: hidden revision '13bedc178fce'!
1327 abort: hidden revision '13bedc178fce'!
1314 (use --hidden to access hidden revisions)
1328 (use --hidden to access hidden revisions)
1315 [255]
1329 [255]
1316
1330
1317 Empty out the test extension, as it isn't compatible with later parts
1331 Empty out the test extension, as it isn't compatible with later parts
1318 of the test.
1332 of the test.
1319 $ echo > $TESTTMP/test_extension.py
1333 $ echo > $TESTTMP/test_extension.py
1320
1334
1321 Test ability to pull changeset with locally applying obsolescence markers
1335 Test ability to pull changeset with locally applying obsolescence markers
1322 (issue4945)
1336 (issue4945)
1323
1337
1324 $ cd ..
1338 $ cd ..
1325 $ hg init issue4845
1339 $ hg init issue4845
1326 $ cd issue4845
1340 $ cd issue4845
1327
1341
1328 $ echo foo > f0
1342 $ echo foo > f0
1329 $ hg add f0
1343 $ hg add f0
1330 $ hg ci -m '0'
1344 $ hg ci -m '0'
1331 $ echo foo > f1
1345 $ echo foo > f1
1332 $ hg add f1
1346 $ hg add f1
1333 $ hg ci -m '1'
1347 $ hg ci -m '1'
1334 $ echo foo > f2
1348 $ echo foo > f2
1335 $ hg add f2
1349 $ hg add f2
1336 $ hg ci -m '2'
1350 $ hg ci -m '2'
1337
1351
1338 $ echo bar > f2
1352 $ echo bar > f2
1339 $ hg commit --amend --config experimental.evolution.createmarkers=True
1353 $ hg commit --amend --config experimental.evolution.createmarkers=True
1340 $ hg log -G
1354 $ hg log -G
1341 @ 3:b0551702f918 (draft) [tip ] 2
1355 @ 3:b0551702f918 (draft) [tip ] 2
1342 |
1356 |
1343 o 1:e016b03fd86f (draft) [ ] 1
1357 o 1:e016b03fd86f (draft) [ ] 1
1344 |
1358 |
1345 o 0:a78f55e5508c (draft) [ ] 0
1359 o 0:a78f55e5508c (draft) [ ] 0
1346
1360
1347 $ hg log -G --hidden
1361 $ hg log -G --hidden
1348 @ 3:b0551702f918 (draft) [tip ] 2
1362 @ 3:b0551702f918 (draft) [tip ] 2
1349 |
1363 |
1350 | x 2:e008cf283490 (draft *obsolete*) [ ] 2 [rewritten using amend as 3:b0551702f918]
1364 | x 2:e008cf283490 (draft *obsolete*) [ ] 2 [rewritten using amend as 3:b0551702f918]
1351 |/
1365 |/
1352 o 1:e016b03fd86f (draft) [ ] 1
1366 o 1:e016b03fd86f (draft) [ ] 1
1353 |
1367 |
1354 o 0:a78f55e5508c (draft) [ ] 0
1368 o 0:a78f55e5508c (draft) [ ] 0
1355
1369
1356
1370
1357 $ hg strip --hidden -r 2 --config extensions.strip= --config devel.strip-obsmarkers=no
1371 $ hg strip --hidden -r 2 --config extensions.strip= --config devel.strip-obsmarkers=no
1358 saved backup bundle to $TESTTMP/tmpe/issue4845/.hg/strip-backup/e008cf283490-ede36964-backup.hg (glob)
1372 saved backup bundle to $TESTTMP/tmpe/issue4845/.hg/strip-backup/e008cf283490-ede36964-backup.hg (glob)
1359 $ hg debugobsolete
1373 $ hg debugobsolete
1360 e008cf2834908e5d6b0f792a9d4b0e2272260fb8 b0551702f918510f01ae838ab03a463054c67b46 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '8', 'operation': 'amend', 'user': 'test'}
1374 e008cf2834908e5d6b0f792a9d4b0e2272260fb8 b0551702f918510f01ae838ab03a463054c67b46 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '8', 'operation': 'amend', 'user': 'test'}
1361 $ hg log -G
1375 $ hg log -G
1362 @ 2:b0551702f918 (draft) [tip ] 2
1376 @ 2:b0551702f918 (draft) [tip ] 2
1363 |
1377 |
1364 o 1:e016b03fd86f (draft) [ ] 1
1378 o 1:e016b03fd86f (draft) [ ] 1
1365 |
1379 |
1366 o 0:a78f55e5508c (draft) [ ] 0
1380 o 0:a78f55e5508c (draft) [ ] 0
1367
1381
1368 $ hg log -G --hidden
1382 $ hg log -G --hidden
1369 @ 2:b0551702f918 (draft) [tip ] 2
1383 @ 2:b0551702f918 (draft) [tip ] 2
1370 |
1384 |
1371 o 1:e016b03fd86f (draft) [ ] 1
1385 o 1:e016b03fd86f (draft) [ ] 1
1372 |
1386 |
1373 o 0:a78f55e5508c (draft) [ ] 0
1387 o 0:a78f55e5508c (draft) [ ] 0
1374
1388
1375 $ hg debugbundle .hg/strip-backup/e008cf283490-*-backup.hg
1389 $ hg debugbundle .hg/strip-backup/e008cf283490-*-backup.hg
1376 Stream params: {Compression: BZ}
1390 Stream params: {Compression: BZ}
1377 changegroup -- {nbchanges: 1, version: 02}
1391 changegroup -- {nbchanges: 1, version: 02}
1378 e008cf2834908e5d6b0f792a9d4b0e2272260fb8
1392 e008cf2834908e5d6b0f792a9d4b0e2272260fb8
1379 phase-heads -- {}
1393 phase-heads -- {}
1380 e008cf2834908e5d6b0f792a9d4b0e2272260fb8 draft
1394 e008cf2834908e5d6b0f792a9d4b0e2272260fb8 draft
1381
1395
1382 $ hg pull .hg/strip-backup/e008cf283490-*-backup.hg
1396 $ hg pull .hg/strip-backup/e008cf283490-*-backup.hg
1383 pulling from .hg/strip-backup/e008cf283490-ede36964-backup.hg
1397 pulling from .hg/strip-backup/e008cf283490-ede36964-backup.hg
1384 searching for changes
1398 searching for changes
1385 no changes found
1399 no changes found
1386 $ hg debugobsolete
1400 $ hg debugobsolete
1387 e008cf2834908e5d6b0f792a9d4b0e2272260fb8 b0551702f918510f01ae838ab03a463054c67b46 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '8', 'operation': 'amend', 'user': 'test'}
1401 e008cf2834908e5d6b0f792a9d4b0e2272260fb8 b0551702f918510f01ae838ab03a463054c67b46 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '8', 'operation': 'amend', 'user': 'test'}
1388 $ hg log -G
1402 $ hg log -G
1389 @ 2:b0551702f918 (draft) [tip ] 2
1403 @ 2:b0551702f918 (draft) [tip ] 2
1390 |
1404 |
1391 o 1:e016b03fd86f (draft) [ ] 1
1405 o 1:e016b03fd86f (draft) [ ] 1
1392 |
1406 |
1393 o 0:a78f55e5508c (draft) [ ] 0
1407 o 0:a78f55e5508c (draft) [ ] 0
1394
1408
1395 $ hg log -G --hidden
1409 $ hg log -G --hidden
1396 @ 2:b0551702f918 (draft) [tip ] 2
1410 @ 2:b0551702f918 (draft) [tip ] 2
1397 |
1411 |
1398 o 1:e016b03fd86f (draft) [ ] 1
1412 o 1:e016b03fd86f (draft) [ ] 1
1399 |
1413 |
1400 o 0:a78f55e5508c (draft) [ ] 0
1414 o 0:a78f55e5508c (draft) [ ] 0
1401
1415
1402
1416
1403 Testing that strip remove markers:
1417 Testing that strip remove markers:
1404
1418
1405 $ hg strip -r 1 --config extensions.strip=
1419 $ hg strip -r 1 --config extensions.strip=
1406 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
1420 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
1407 saved backup bundle to $TESTTMP/tmpe/issue4845/.hg/strip-backup/e016b03fd86f-65ede734-backup.hg (glob)
1421 saved backup bundle to $TESTTMP/tmpe/issue4845/.hg/strip-backup/e016b03fd86f-65ede734-backup.hg (glob)
1408 $ hg debugobsolete
1422 $ hg debugobsolete
1409 $ hg log -G
1423 $ hg log -G
1410 @ 0:a78f55e5508c (draft) [tip ] 0
1424 @ 0:a78f55e5508c (draft) [tip ] 0
1411
1425
1412 $ hg log -G --hidden
1426 $ hg log -G --hidden
1413 @ 0:a78f55e5508c (draft) [tip ] 0
1427 @ 0:a78f55e5508c (draft) [tip ] 0
1414
1428
1415 $ hg debugbundle .hg/strip-backup/e016b03fd86f-*-backup.hg
1429 $ hg debugbundle .hg/strip-backup/e016b03fd86f-*-backup.hg
1416 Stream params: {Compression: BZ}
1430 Stream params: {Compression: BZ}
1417 changegroup -- {nbchanges: 2, version: 02}
1431 changegroup -- {nbchanges: 2, version: 02}
1418 e016b03fd86fcccc54817d120b90b751aaf367d6
1432 e016b03fd86fcccc54817d120b90b751aaf367d6
1419 b0551702f918510f01ae838ab03a463054c67b46
1433 b0551702f918510f01ae838ab03a463054c67b46
1420 obsmarkers -- {}
1434 obsmarkers -- {}
1421 version: 1 (92 bytes)
1435 version: 1 (92 bytes)
1422 e008cf2834908e5d6b0f792a9d4b0e2272260fb8 b0551702f918510f01ae838ab03a463054c67b46 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '8', 'operation': 'amend', 'user': 'test'}
1436 e008cf2834908e5d6b0f792a9d4b0e2272260fb8 b0551702f918510f01ae838ab03a463054c67b46 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '8', 'operation': 'amend', 'user': 'test'}
1423 phase-heads -- {}
1437 phase-heads -- {}
1424 b0551702f918510f01ae838ab03a463054c67b46 draft
1438 b0551702f918510f01ae838ab03a463054c67b46 draft
1425
1439
1426 $ hg unbundle .hg/strip-backup/e016b03fd86f-*-backup.hg
1440 $ hg unbundle .hg/strip-backup/e016b03fd86f-*-backup.hg
1427 adding changesets
1441 adding changesets
1428 adding manifests
1442 adding manifests
1429 adding file changes
1443 adding file changes
1430 added 2 changesets with 2 changes to 2 files
1444 added 2 changesets with 2 changes to 2 files
1431 1 new obsolescence markers
1445 1 new obsolescence markers
1432 new changesets e016b03fd86f:b0551702f918
1446 new changesets e016b03fd86f:b0551702f918
1433 (run 'hg update' to get a working copy)
1447 (run 'hg update' to get a working copy)
1434 $ hg debugobsolete | sort
1448 $ hg debugobsolete | sort
1435 e008cf2834908e5d6b0f792a9d4b0e2272260fb8 b0551702f918510f01ae838ab03a463054c67b46 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '8', 'operation': 'amend', 'user': 'test'}
1449 e008cf2834908e5d6b0f792a9d4b0e2272260fb8 b0551702f918510f01ae838ab03a463054c67b46 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '8', 'operation': 'amend', 'user': 'test'}
1436 $ hg log -G
1450 $ hg log -G
1437 o 2:b0551702f918 (draft) [tip ] 2
1451 o 2:b0551702f918 (draft) [tip ] 2
1438 |
1452 |
1439 o 1:e016b03fd86f (draft) [ ] 1
1453 o 1:e016b03fd86f (draft) [ ] 1
1440 |
1454 |
1441 @ 0:a78f55e5508c (draft) [ ] 0
1455 @ 0:a78f55e5508c (draft) [ ] 0
1442
1456
1443 $ hg log -G --hidden
1457 $ hg log -G --hidden
1444 o 2:b0551702f918 (draft) [tip ] 2
1458 o 2:b0551702f918 (draft) [tip ] 2
1445 |
1459 |
1446 o 1:e016b03fd86f (draft) [ ] 1
1460 o 1:e016b03fd86f (draft) [ ] 1
1447 |
1461 |
1448 @ 0:a78f55e5508c (draft) [ ] 0
1462 @ 0:a78f55e5508c (draft) [ ] 0
1449
1463
1450 Test that 'hg debugobsolete --index --rev' can show indices of obsmarkers when
1464 Test that 'hg debugobsolete --index --rev' can show indices of obsmarkers when
1451 only a subset of those are displayed (because of --rev option)
1465 only a subset of those are displayed (because of --rev option)
1452 $ hg init doindexrev
1466 $ hg init doindexrev
1453 $ cd doindexrev
1467 $ cd doindexrev
1454 $ echo a > a
1468 $ echo a > a
1455 $ hg ci -Am a
1469 $ hg ci -Am a
1456 adding a
1470 adding a
1457 $ hg ci --amend -m aa
1471 $ hg ci --amend -m aa
1458 $ echo b > b
1472 $ echo b > b
1459 $ hg ci -Am b
1473 $ hg ci -Am b
1460 adding b
1474 adding b
1461 $ hg ci --amend -m bb
1475 $ hg ci --amend -m bb
1462 $ echo c > c
1476 $ echo c > c
1463 $ hg ci -Am c
1477 $ hg ci -Am c
1464 adding c
1478 adding c
1465 $ hg ci --amend -m cc
1479 $ hg ci --amend -m cc
1466 $ echo d > d
1480 $ echo d > d
1467 $ hg ci -Am d
1481 $ hg ci -Am d
1468 adding d
1482 adding d
1469 $ hg ci --amend -m dd --config experimental.evolution.track-operation=1
1483 $ hg ci --amend -m dd --config experimental.evolution.track-operation=1
1470 $ hg debugobsolete --index --rev "3+7"
1484 $ hg debugobsolete --index --rev "3+7"
1471 1 6fdef60fcbabbd3d50e9b9cbc2a240724b91a5e1 d27fb9b066076fd921277a4b9e8b9cb48c95bc6a 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'test'}
1485 1 6fdef60fcbabbd3d50e9b9cbc2a240724b91a5e1 d27fb9b066076fd921277a4b9e8b9cb48c95bc6a 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'test'}
1472 3 4715cf767440ed891755448016c2b8cf70760c30 7ae79c5d60f049c7b0dd02f5f25b9d60aaf7b36d 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'test'}
1486 3 4715cf767440ed891755448016c2b8cf70760c30 7ae79c5d60f049c7b0dd02f5f25b9d60aaf7b36d 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'test'}
1473 $ hg debugobsolete --index --rev "3+7" -Tjson
1487 $ hg debugobsolete --index --rev "3+7" -Tjson
1474 [
1488 [
1475 {
1489 {
1476 "date": [0.0, 0],
1490 "date": [0.0, 0],
1477 "flag": 0,
1491 "flag": 0,
1478 "index": 1,
1492 "index": 1,
1479 "metadata": {"ef1": "1", "operation": "amend", "user": "test"},
1493 "metadata": {"ef1": "1", "operation": "amend", "user": "test"},
1480 "prednode": "6fdef60fcbabbd3d50e9b9cbc2a240724b91a5e1",
1494 "prednode": "6fdef60fcbabbd3d50e9b9cbc2a240724b91a5e1",
1481 "succnodes": ["d27fb9b066076fd921277a4b9e8b9cb48c95bc6a"]
1495 "succnodes": ["d27fb9b066076fd921277a4b9e8b9cb48c95bc6a"]
1482 },
1496 },
1483 {
1497 {
1484 "date": [0.0, 0],
1498 "date": [0.0, 0],
1485 "flag": 0,
1499 "flag": 0,
1486 "index": 3,
1500 "index": 3,
1487 "metadata": {"ef1": "1", "operation": "amend", "user": "test"},
1501 "metadata": {"ef1": "1", "operation": "amend", "user": "test"},
1488 "prednode": "4715cf767440ed891755448016c2b8cf70760c30",
1502 "prednode": "4715cf767440ed891755448016c2b8cf70760c30",
1489 "succnodes": ["7ae79c5d60f049c7b0dd02f5f25b9d60aaf7b36d"]
1503 "succnodes": ["7ae79c5d60f049c7b0dd02f5f25b9d60aaf7b36d"]
1490 }
1504 }
1491 ]
1505 ]
1492
1506
1493 Test the --delete option of debugobsolete command
1507 Test the --delete option of debugobsolete command
1494 $ hg debugobsolete --index
1508 $ hg debugobsolete --index
1495 0 cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b f9bd49731b0b175e42992a3c8fa6c678b2bc11f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'test'}
1509 0 cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b f9bd49731b0b175e42992a3c8fa6c678b2bc11f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'test'}
1496 1 6fdef60fcbabbd3d50e9b9cbc2a240724b91a5e1 d27fb9b066076fd921277a4b9e8b9cb48c95bc6a 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'test'}
1510 1 6fdef60fcbabbd3d50e9b9cbc2a240724b91a5e1 d27fb9b066076fd921277a4b9e8b9cb48c95bc6a 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'test'}
1497 2 1ab51af8f9b41ef8c7f6f3312d4706d870b1fb74 29346082e4a9e27042b62d2da0e2de211c027621 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'test'}
1511 2 1ab51af8f9b41ef8c7f6f3312d4706d870b1fb74 29346082e4a9e27042b62d2da0e2de211c027621 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'test'}
1498 3 4715cf767440ed891755448016c2b8cf70760c30 7ae79c5d60f049c7b0dd02f5f25b9d60aaf7b36d 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'test'}
1512 3 4715cf767440ed891755448016c2b8cf70760c30 7ae79c5d60f049c7b0dd02f5f25b9d60aaf7b36d 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'test'}
1499 $ hg debugobsolete --delete 1 --delete 3
1513 $ hg debugobsolete --delete 1 --delete 3
1500 deleted 2 obsolescence markers
1514 deleted 2 obsolescence markers
1501 $ hg debugobsolete
1515 $ hg debugobsolete
1502 cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b f9bd49731b0b175e42992a3c8fa6c678b2bc11f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'test'}
1516 cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b f9bd49731b0b175e42992a3c8fa6c678b2bc11f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'test'}
1503 1ab51af8f9b41ef8c7f6f3312d4706d870b1fb74 29346082e4a9e27042b62d2da0e2de211c027621 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'test'}
1517 1ab51af8f9b41ef8c7f6f3312d4706d870b1fb74 29346082e4a9e27042b62d2da0e2de211c027621 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'test'}
1504
1518
1505 Test adding changeset after obsmarkers affecting it
1519 Test adding changeset after obsmarkers affecting it
1506 (eg: during pull, or unbundle)
1520 (eg: during pull, or unbundle)
1507
1521
1508 $ mkcommit e
1522 $ mkcommit e
1509 $ hg bundle -r . --base .~1 ../bundle-2.hg
1523 $ hg bundle -r . --base .~1 ../bundle-2.hg
1510 1 changesets found
1524 1 changesets found
1511 $ getid .
1525 $ getid .
1512 $ hg --config extensions.strip= strip -r .
1526 $ hg --config extensions.strip= strip -r .
1513 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
1527 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
1514 saved backup bundle to $TESTTMP/tmpe/issue4845/doindexrev/.hg/strip-backup/9bc153528424-ee80edd4-backup.hg (glob)
1528 saved backup bundle to $TESTTMP/tmpe/issue4845/doindexrev/.hg/strip-backup/9bc153528424-ee80edd4-backup.hg (glob)
1515 $ hg debugobsolete 9bc153528424ea266d13e57f9ff0d799dfe61e4b
1529 $ hg debugobsolete 9bc153528424ea266d13e57f9ff0d799dfe61e4b
1516 $ hg unbundle ../bundle-2.hg
1530 $ hg unbundle ../bundle-2.hg
1517 adding changesets
1531 adding changesets
1518 adding manifests
1532 adding manifests
1519 adding file changes
1533 adding file changes
1520 added 1 changesets with 1 changes to 1 files
1534 added 1 changesets with 1 changes to 1 files
1521 (run 'hg update' to get a working copy)
1535 (run 'hg update' to get a working copy)
1522 $ hg log -G
1536 $ hg log -G
1523 @ 7:7ae79c5d60f0 (draft) [tip ] dd
1537 @ 7:7ae79c5d60f0 (draft) [tip ] dd
1524 |
1538 |
1525 | o 6:4715cf767440 (draft) [ ] d
1539 | o 6:4715cf767440 (draft) [ ] d
1526 |/
1540 |/
1527 o 5:29346082e4a9 (draft) [ ] cc
1541 o 5:29346082e4a9 (draft) [ ] cc
1528 |
1542 |
1529 o 3:d27fb9b06607 (draft) [ ] bb
1543 o 3:d27fb9b06607 (draft) [ ] bb
1530 |
1544 |
1531 | o 2:6fdef60fcbab (draft) [ ] b
1545 | o 2:6fdef60fcbab (draft) [ ] b
1532 |/
1546 |/
1533 o 1:f9bd49731b0b (draft) [ ] aa
1547 o 1:f9bd49731b0b (draft) [ ] aa
1534
1548
1535
1549
1536 $ cd ..
1550 $ cd ..
General Comments 0
You need to be logged in to leave comments. Login now