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