##// END OF EJS Templates
hgweb: show each obsfateentry on its own line...
av6 -
r36340:f3fd4fe0 default
parent child Browse files
Show More
@@ -1,61 +1,61
1 1 {header}
2 2 <title>{repo|escape}: changeset {rev}:{node|short}</title>
3 3 <link rel="alternate" type="application/atom+xml"
4 4 href="{url|urlescape}atom-log" title="Atom feed for {repo|escape}"/>
5 5 <link rel="alternate" type="application/rss+xml"
6 6 href="{url|urlescape}rss-log" title="RSS feed for {repo|escape}"/>
7 7 </head>
8 8 <body>
9 9
10 10 <div class="page_header">
11 11 <a href="{logourl}" title="Mercurial" style="float: right;">Mercurial</a>
12 12 <a href="/">Mercurial</a> {pathdef%breadcrumb} / changeset
13 13 </div>
14 14
15 15 <div class="page_nav">
16 16 <div>
17 17 <a href="{url|urlescape}summary{sessionvars%urlparameter}">summary</a> |
18 18 <a href="{url|urlescape}shortlog/{symrev}{sessionvars%urlparameter}">shortlog</a> |
19 19 <a href="{url|urlescape}log/{symrev}{sessionvars%urlparameter}">changelog</a> |
20 20 <a href="{url|urlescape}graph/{symrev}{sessionvars%urlparameter}">graph</a> |
21 21 <a href="{url|urlescape}tags{sessionvars%urlparameter}">tags</a> |
22 22 <a href="{url|urlescape}bookmarks{sessionvars%urlparameter}">bookmarks</a> |
23 23 <a href="{url|urlescape}branches{sessionvars%urlparameter}">branches</a> |
24 24 <a href="{url|urlescape}file/{symrev}{sessionvars%urlparameter}">files</a> |
25 25 changeset |
26 26 <a href="{url|urlescape}raw-rev/{symrev}">raw</a> {archives%archiveentry} |
27 27 <a href="{url|urlescape}help{sessionvars%urlparameter}">help</a>
28 28 </div>
29 29 {searchform}
30 30 </div>
31 31
32 32 <div>
33 33 <a class="title" href="{url|urlescape}raw-rev/{node|short}">
34 34 {desc|strip|escape|firstline|nonempty}
35 35 {alltags}
36 36 </a>
37 37 </div>
38 38 <div class="title_text">
39 39 <table cellspacing="0">
40 40 <tr><td>author</td><td>{author|obfuscate}</td></tr>
41 41 <tr><td></td><td class="date age">{date|rfc822date}</td></tr>
42 42 {branch%changesetbranch}
43 43 <tr>
44 44 <td>changeset {rev}</td>
45 45 <td style="font-family:monospace"><a class="list" href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td>
46 46 </tr>
47 {if(obsolete, '<tr><td>obsolete</td><td>{succsandmarkers%obsfateentry}</td></tr>')}
47 {if(obsolete, succsandmarkers%obsfateentry)}
48 48 {ifeq(count(parent), '2', parent%changesetparentdiff, parent%changesetparent)}
49 49 {child%changesetchild}
50 50 </table></div>
51 51
52 52 <div class="page_body description">{desc|strip|escape|websub|nonempty}</div>
53 53 <div class="list_head"></div>
54 54 <div class="title_text">
55 55 <table cellspacing="0">
56 56 {files}
57 57 </table></div>
58 58
59 59 <div class="page_body diffblocks">{diff}</div>
60 60
61 61 {footer}
@@ -1,363 +1,367
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 graphentry = graphentry.tmpl
266 266 phasetag = '{ifeq(phase, 'public', '', '<span class="phasetag" title="{phase|escape}">{phase|escape}</span> ')}'
267 267 obsoletetag = '{if(obsolete, '<span class="obsoletetag" title="obsolete">obsolete</span> ')}'
268 268 instabilitytag = '<span class="instabilitytag" title="{instability|escape}">{instability|escape}</span> '
269 269 tagtag = '<span class="tagtag" title="{name|escape}">{name|escape}</span> '
270 270 branchtag = '<span class="branchtag" title="{name|escape}">{name|escape}</span> '
271 271 inbranchtag = '<span class="inbranchtag" title="{name|escape}">{name|escape}</span> '
272 272 bookmarktag = '<span class="bookmarktag" title="{name|escape}">{name|escape}</span> '
273 273 alltags = '<span class="logtags">{phasetag}{obsoletetag}{instabilities%instabilitytag}{inbranch%inbranchtag}{branches%branchtag}{tags%tagtag}{bookmarks%bookmarktag}</span>'
274 274 successorlink = '<a class="list" href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a> '
275 275 obsfatesuccessors = '{if(successors, ' as ')}{successors%successorlink}'
276 276 obsfateverb = '{obsfateverb(successors, markers)}'
277 277 obsfateoperations = '{if(obsfateoperations(markers), ' using {join(obsfateoperations(markers), ', ')}')}'
278 278 obsfateusers = '{if(obsfateusers(markers), ' by {join(obsfateusers(markers)%'{user|obfuscate}', ', ')}')}'
279 279 obsfatedate = '{if(obsfatedate(markers), ' {ifeq(min(obsfatedate(markers)), max(obsfatedate(markers)), '<span class="age">{min(obsfatedate(markers))|rfc822date}</span>', 'between <span class="age">{min(obsfatedate(markers))|rfc822date}</span> and <span class="age">{max(obsfatedate(markers))|rfc822date}</span>')}')}'
280 obsfateentry = '{obsfateverb}{obsfateoperations}{obsfatesuccessors}{obsfateusers}{obsfatedate}'
280 obsfateentry = '
281 <tr>
282 <td>obsolete</td>
283 <td>{obsfateverb}{obsfateoperations}{obsfatesuccessors}{obsfateusers}{obsfatedate}</td>
284 </tr>'
281 285 shortlogentry = '
282 286 <tr class="parity{parity}">
283 287 <td class="age"><i class="age">{date|rfc822date}</i></td>
284 288 <td><i>{author|person}</i></td>
285 289 <td>
286 290 <a class="list" href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">
287 291 <b>{desc|strip|firstline|escape|nonempty}</b>
288 292 {alltags}
289 293 </a>
290 294 </td>
291 295 <td class="link" nowrap>
292 296 <a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">changeset</a> |
293 297 <a href="{url|urlescape}file/{node|short}{sessionvars%urlparameter}">files</a>
294 298 </td>
295 299 </tr>'
296 300 filelogentry = '
297 301 <tr class="parity{if(patch, '1', '{parity}')}">
298 302 <td class="age"><i class="age">{date|rfc822date}</i></td>
299 303 <td><i>{author|person}</i></td>
300 304 <td>
301 305 <a class="list" href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">
302 306 <b>{desc|strip|firstline|escape|nonempty}</b>
303 307 {alltags}
304 308 </a>
305 309 </td>
306 310 <td class="link">
307 311 <a href="{url|urlescape}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a> |
308 312 <a href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a> |
309 313 <a href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a>
310 314 {rename%filelogrename}
311 315 </td>
312 316 </tr>
313 317 {if(patch, '<tr><td colspan="4">{diff}</td></tr>')}'
314 318 archiveentry = ' | <a href="{url|urlescape}archive/{symrev}{extension}{ifeq(path,'/','',path|urlescape)}">{type|escape}</a> '
315 319 indexentry = '
316 320 <tr class="parity{parity}">
317 321 <td>
318 322 <a class="list" href="{url|urlescape}{sessionvars%urlparameter}">
319 323 <b>{name|escape}</b>
320 324 </a>
321 325 </td>
322 326 <td>{description}</td>
323 327 <td>{contact|obfuscate}</td>
324 328 <td class="age">{lastchange|rfc822date}</td>
325 329 <td class="indexlinks">{archives%indexarchiveentry}</td>
326 330 <td>{if(isdirectory, '',
327 331 '<div class="rss_logo">
328 332 <a href="{url|urlescape}rss-log">RSS</a> <a href="{url|urlescape}atom-log">Atom</a>
329 333 </div>'
330 334 )}
331 335 </td>
332 336 </tr>\n'
333 337 indexarchiveentry = ' <a href="{url|urlescape}archive/{node|short}{extension}">{type|escape}</a> '
334 338 index = index.tmpl
335 339 urlparameter = '{separator}{name}={value|urlescape}'
336 340 hiddenformentry = '<input type="hidden" name="{name}" value="{value|escape}" />'
337 341 breadcrumb = '&gt; <a href="{url|urlescape}">{name|escape}</a> '
338 342
339 343 searchform = '
340 344 <div class="search">
341 345 <form id="searchform" action="{url|urlescape}log">
342 346 {sessionvars%hiddenformentry}
343 347 <input name="rev" type="text" value="{query|escape}" size="40" />
344 348 <div id="hint">{searchhint}</div>
345 349 </form>
346 350 </div>'
347 351 searchhint = 'Find changesets by keywords (author, files, the commit message), revision
348 352 number or hash, or <a href="{url|urlescape}help/revsets">revset expression</a>.'
349 353
350 354 diffoptsform = '
351 355 <form id="diffopts-form"
352 356 data-ignorews="{if(get(diffopts, 'ignorews'), '1', '0')}"
353 357 data-ignorewsamount="{if(get(diffopts, 'ignorewsamount'), '1', '0')}"
354 358 data-ignorewseol="{if(get(diffopts, 'ignorewseol'), '1', '0')}"
355 359 data-ignoreblanklines="{if(get(diffopts, 'ignoreblanklines'), '1', '0')}">
356 360 <span>Ignore whitespace changes - </span>
357 361 <span>Everywhere:</span>
358 362 <input id="ignorews-checkbox" type="checkbox" />
359 363 <span>Within whitespace:</span>
360 364 <input id="ignorewsamount-checkbox" type="checkbox" />
361 365 <span>At end of lines:</span>
362 366 <input id="ignorewseol-checkbox" type="checkbox" />
363 367 </form>'
@@ -1,66 +1,66
1 1 {header}
2 2 <title>{repo|escape}: changeset {rev}:{node|short}</title>
3 3 <link rel="alternate" type="application/atom+xml" href="{url|urlescape}atom-log" title="Atom feed for {repo|escape}"/>
4 4 <link rel="alternate" type="application/rss+xml" href="{url|urlescape}rss-log" title="RSS feed for {repo|escape}"/>
5 5 </head>
6 6
7 7 <body>
8 8 <div id="container">
9 9 <div class="page-header">
10 10 <h1 class="breadcrumb"><a href="/">Mercurial</a> {pathdef%breadcrumb} / changeset</h1>
11 11
12 12 {searchform}
13 13
14 14 <ul class="page-nav">
15 15 <li><a href="{url|urlescape}summary{sessionvars%urlparameter}">summary</a></li>
16 16 <li><a href="{url|urlescape}shortlog{sessionvars%urlparameter}">shortlog</a></li>
17 17 <li><a href="{url|urlescape}changelog{sessionvars%urlparameter}">changelog</a></li>
18 18 <li><a href="{url|urlescape}graph/{symrev}{sessionvars%urlparameter}">graph</a></li>
19 19 <li><a href="{url|urlescape}tags{sessionvars%urlparameter}">tags</a></li>
20 20 <li><a href="{url|urlescape}bookmarks{sessionvars%urlparameter}">bookmarks</a></li>
21 21 <li><a href="{url|urlescape}branches{sessionvars%urlparameter}">branches</a></li>
22 22 <li><a href="{url|urlescape}file/{symrev}{sessionvars%urlparameter}">files</a></li>
23 23 <li><a href="{url|urlescape}help{sessionvars%urlparameter}">help</a></li>
24 24 </ul>
25 25 </div>
26 26
27 27 <ul class="submenu">
28 28 <li class="current">changeset</li>
29 29 <li><a href="{url|urlescape}raw-rev/{symrev}">raw</a></li>
30 30 {archives%archiveentry}
31 31 </ul>
32 32
33 33 <h2 class="no-link no-border">changeset</h2>
34 34
35 35 <h3 class="changeset">
36 36 <a href="{url|urlescape}raw-rev/{node|short}">
37 37 {desc|strip|escape|firstline|nonempty}
38 38 {alltags}
39 39 </a>
40 40 </h3>
41 41 <p class="changeset-age"><span class="age">{date|rfc822date}</span></p>
42 42
43 43 <dl class="overview">
44 44 <dt>author</dt>
45 45 <dd>{author|obfuscate}</dd>
46 46 <dt>date</dt>
47 47 <dd class="date age">{date|rfc822date}</dd>
48 48 {branch%changesetbranch}
49 49 <dt>changeset {rev}</dt>
50 50 <dd><a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></dd>
51 {if(obsolete, '<dt>obsolete</dt><dd>{succsandmarkers%obsfateentry}</dd>')}
51 {if(obsolete, succsandmarkers%obsfateentry)}
52 52 {ifeq(count(parent), '2', parent%changesetparentdiff, parent%changesetparent)}
53 53 {child%changesetchild}
54 54 </dl>
55 55
56 56 <p class="description">{desc|strip|escape|websub|addbreaks|nonempty}</p>
57 57
58 58 <table>
59 59 {files}
60 60 </table>
61 61
62 62 <div class="diff diffblocks">
63 63 {diff}
64 64 </div>
65 65
66 66 {footer}
@@ -1,302 +1,304
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 226 instabilitytag = '<span class="instabilitytag" title="{instability|escape}">{instability|escape}</span> '
227 227 tagtag = '<span class="tagtag" title="{name|escape}">{name|escape}</span> '
228 228 branchtag = '<span class="branchtag" title="{name|escape}">{name|escape}</span> '
229 229 inbranchtag = '<span class="inbranchtag" title="{name|escape}">{name|escape}</span> '
230 230 bookmarktag = '<span class="bookmarktag" title="{name|escape}">{name|escape}</span> '
231 231 alltags = '<span class="logtags">{phasetag}{obsoletetag}{instabilities%instabilitytag}{inbranch%inbranchtag}{branches%branchtag}{tags%tagtag}{bookmarks%bookmarktag}</span>'
232 232 successorlink = '<a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a> '
233 233 obsfatesuccessors = '{if(successors, ' as ')}{successors%successorlink}'
234 234 obsfateverb = '{obsfateverb(successors, markers)}'
235 235 obsfateoperations = '{if(obsfateoperations(markers), ' using {join(obsfateoperations(markers), ', ')}')}'
236 236 obsfateusers = '{if(obsfateusers(markers), ' by {join(obsfateusers(markers)%'{user|obfuscate}', ', ')}')}'
237 237 obsfatedate = '{if(obsfatedate(markers), ' {ifeq(min(obsfatedate(markers)), max(obsfatedate(markers)), '<span class="age">{min(obsfatedate(markers))|rfc822date}</span>', 'between <span class="age">{min(obsfatedate(markers))|rfc822date}</span> and <span class="age">{max(obsfatedate(markers))|rfc822date}</span>')}')}'
238 obsfateentry = '{obsfateverb}{obsfateoperations}{obsfatesuccessors}{obsfateusers}{obsfatedate}'
238 obsfateentry = '
239 <dt>obsolete</dt>
240 <dd>{obsfateverb}{obsfateoperations}{obsfatesuccessors}{obsfateusers}{obsfatedate}</dd>'
239 241 shortlogentry = '
240 242 <tr class="parity{parity}">
241 243 <td class="nowrap age">{date|rfc822date}</td>
242 244 <td>{author|person}</td>
243 245 <td>
244 246 <a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">
245 247 {desc|strip|firstline|escape|nonempty}
246 248 {alltags}
247 249 </a>
248 250 </td>
249 251 <td class="nowrap">
250 252 <a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">changeset</a> |
251 253 <a href="{url|urlescape}file/{node|short}{sessionvars%urlparameter}">files</a>
252 254 </td>
253 255 </tr>'
254 256 filelogentry = '
255 257 <tr class="parity{parity}">
256 258 <td class="nowrap age">{date|rfc822date}</td>
257 259 <td>{author|person}</td>
258 260 <td>
259 261 <a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">
260 262 {desc|strip|firstline|escape|nonempty}
261 263 {alltags}
262 264 </a>
263 265 </td>
264 266 <td class="nowrap">
265 267 <a href="{url|urlescape}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a> |
266 268 <a href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a> |
267 269 <a href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a>
268 270 {rename%filelogrename}
269 271 </td>
270 272 </tr>'
271 273 archiveentry = '<li><a href="{url|urlescape}archive/{symrev}{extension}{ifeq(path,'/','',path|urlescape)}">{type|escape}</a></li>'
272 274 indexentry = '
273 275 <tr class="parity{parity}">
274 276 <td><a href="{url|urlescape}{sessionvars%urlparameter}">{name|escape}</a></td>
275 277 <td>{description}</td>
276 278 <td>{contact|obfuscate}</td>
277 279 <td class="age">{lastchange|rfc822date}</td>
278 280 <td class="indexlinks">{archives%indexarchiveentry}</td>
279 281 <td>
280 282 {if(isdirectory, '',
281 283 '<div class="rss_logo">
282 284 <a href="{url|urlescape}rss-log">RSS</a> <a href="{url|urlescape}atom-log">Atom</a>
283 285 </div>'
284 286 )}
285 287 </td>
286 288 </tr>\n'
287 289 indexarchiveentry = '<a href="{url|urlescape}archive/{node|short}{extension}">{type|escape}</a> '
288 290 index = index.tmpl
289 291 urlparameter = '{separator}{name}={value|urlescape}'
290 292 hiddenformentry = '<input type="hidden" name="{name}" value="{value|escape}" />'
291 293 graph = graph.tmpl
292 294 graphentry = graphentry.tmpl
293 295 breadcrumb = '&gt; <a href="{url|urlescape}">{name|escape}</a> '
294 296
295 297 searchform = '
296 298 <form action="{url|urlescape}log">
297 299 {sessionvars%hiddenformentry}
298 300 <dl class="search">
299 301 <dt><label>Search: </label></dt>
300 302 <dd><input type="text" name="rev" value="{query|escape}" /></dd>
301 303 </dl>
302 304 </form>'
@@ -1,91 +1,91
1 1 {header}
2 2 <title>{repo|escape}: {node|short}</title>
3 3 </head>
4 4 <body>
5 5 <div class="container">
6 6 <div class="menu">
7 7 <div class="logo">
8 8 <a href="{logourl}">
9 9 <img src="{staticurl|urlescape}{logoimg}" alt="mercurial" /></a>
10 10 </div>
11 11 <ul>
12 12 <li><a href="{url|urlescape}shortlog/{symrev}{sessionvars%urlparameter}">log</a></li>
13 13 <li><a href="{url|urlescape}graph/{symrev}{sessionvars%urlparameter}">graph</a></li>
14 14 <li><a href="{url|urlescape}tags{sessionvars%urlparameter}">tags</a></li>
15 15 <li><a href="{url|urlescape}bookmarks{sessionvars%urlparameter}">bookmarks</a></li>
16 16 <li><a href="{url|urlescape}branches{sessionvars%urlparameter}">branches</a></li>
17 17 </ul>
18 18 <ul>
19 19 <li class="active">changeset</li>
20 20 <li><a href="{url|urlescape}raw-rev/{symrev}{sessionvars%urlparameter}">raw</a></li>
21 21 <li><a href="{url|urlescape}file/{symrev}{sessionvars%urlparameter}">browse</a></li>
22 22 </ul>
23 23 <ul>
24 24 {archives%archiveentry}
25 25 </ul>
26 26 <ul>
27 27 <li><a href="{url|urlescape}help{sessionvars%urlparameter}">help</a></li>
28 28 </ul>
29 29 </div>
30 30
31 31 <div class="main">
32 32
33 33 <h2 class="breadcrumb"><a href="/">Mercurial</a> {pathdef%breadcrumb}</h2>
34 34 <h3>
35 35 changeset {rev}:<a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a>
36 36 {alltags}
37 37 </h3>
38 38
39 39 {searchform}
40 40
41 41 <div class="description">{desc|strip|escape|websub|nonempty}</div>
42 42
43 43 <table id="changesetEntry">
44 44 <tr>
45 45 <th class="author">author</th>
46 46 <td class="author">{author|obfuscate}</td>
47 47 </tr>
48 48 <tr>
49 49 <th class="date">date</th>
50 50 <td class="date age">{date|rfc822date}</td>
51 51 </tr>
52 52 {if(obsolete, '<tr>
53 53 <th>obsolete</th>
54 <td>{succsandmarkers%obsfateentry}</td>
54 <td>{join(succsandmarkers%obsfateentry, '<br>\n')}</td>
55 55 </tr>')}
56 56 <tr>
57 57 <th class="author">parents</th>
58 58 <td class="author">{ifeq(count(parent), '2', parent%changesetparentdiff, parent%changesetparent)}</td>
59 59 </tr>
60 60 <tr>
61 61 <th class="author">children</th>
62 62 <td class="author">{child%changesetchild}</td>
63 63 </tr>
64 64 <tr>
65 65 <th class="files">files</th>
66 66 <td class="files">{files}</td>
67 67 </tr>
68 68 <tr>
69 69 <th class="diffstat">diffstat</th>
70 70 <td class="diffstat">
71 71 {diffsummary}
72 72 <a id="diffstatexpand" href="javascript:toggleDiffstat()">[<tt>+</tt>]</a>
73 73 <div id="diffstatdetails" style="display:none;">
74 74 <a href="javascript:toggleDiffstat()">[<tt>-</tt>]</a>
75 75 <table class="diffstat-table stripes2">{diffstat}</table>
76 76 </div>
77 77 </td>
78 78 </tr>
79 79 </table>
80 80
81 81 <div class="overflow">
82 82 <div class="sourcefirst linewraptoggle">line wrap: <a class="linewraplink" href="javascript:toggleLinewrap()">on</a></div>
83 83 <div class="sourcefirst"> line diff</div>
84 84 <div class="stripes2 diffblocks">
85 85 {diff}
86 86 </div>
87 87 </div>
88 88
89 89 </div>
90 90 </div>
91 91 {footer}
@@ -1,37 +1,34
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 {if(obsolete, '<tr>
26 <th class="obsolete">obsolete:</th>
27 <td class="obsolete">{succsandmarkers%obsfateentry}</td>
28 </tr>')}
25 {if(obsolete, succsandmarkers%obsfateentry)}
29 26 {ifeq(count(instabilities), '0', '', '<tr>
30 27 <th class="instabilities">instabilities:</th>
31 28 <td class="instabilities">{instabilities%"{instability} "|escape}</td>
32 29 </tr>')}
33 30 <tr>
34 31 <th class="files"><a href="{url|urlescape}file/{node|short}{sessionvars%urlparameter}">files</a>:</th>
35 32 <td class="files">{files}</td>
36 33 </tr>
37 34 </table>
@@ -1,64 +1,61
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 {if(obsolete, '<tr>
41 <th class="obsolete">obsolete:</th>
42 <td class="obsolete">{succsandmarkers%obsfateentry}</td>
43 </tr>')}
40 {if(obsolete, succsandmarkers%obsfateentry)}
44 41 {ifeq(count(instabilities), '0', '', '<tr>
45 42 <th class="instabilities">instabilities:</th>
46 43 <td class="instabilities">{instabilities%"{instability} "|escape}</td>
47 44 </tr>')}
48 45 <tr>
49 46 <th class="files">files:</th>
50 47 <td class="files">{files}</td>
51 48 </tr>
52 49 <tr>
53 50 <th class="description">description:</th>
54 51 <td class="description">{desc|strip|escape|websub|addbreaks|nonempty}</td>
55 52 </tr>
56 53 </table>
57 54
58 55 <div id="changesetDiff">
59 56 {diff}
60 57 </div>
61 58
62 59 {footer}
63 60
64 61
@@ -1,204 +1,208
1 1 default = 'shortlog'
2 2 mimetype = 'text/html; charset={encoding}'
3 3 header = header.tmpl
4 4 footer = footer.tmpl
5 5 search = search.tmpl
6 6 changelog = changelog.tmpl
7 7 shortlog = shortlog.tmpl
8 8 shortlogentry = shortlogentry.tmpl
9 9 graph = graph.tmpl
10 10 graphentry = graphentry.tmpl
11 11 naventry = '<a href="{url|urlescape}log/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
12 12 navshortentry = '<a href="{url|urlescape}shortlog/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
13 13 navgraphentry = '<a href="{url|urlescape}graph/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
14 14 filenaventry = '<a href="{url|urlescape}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{label|escape}</a> '
15 15 filedifflink = '<a href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a> '
16 16 filenodelink = '<a href="{url|urlescape}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a> '
17 17 filenolink = '{file|escape} '
18 18 fileellipses = '...'
19 19 changelogentry = changelogentry.tmpl
20 20 searchentry = changelogentry.tmpl
21 21 changeset = changeset.tmpl
22 22 manifest = manifest.tmpl
23 23
24 24 nav = '{before%naventry} {after%naventry}'
25 25 navshort = '{before%navshortentry}{after%navshortentry}'
26 26 navgraph = '{before%navgraphentry}{after%navgraphentry}'
27 27 filenav = '{before%filenaventry}{after%filenaventry}'
28 28
29 29 direntry = '
30 30 <tr class="parity{parity}">
31 31 <td><tt>drwxr-xr-x</tt>&nbsp;
32 32 <td>&nbsp;
33 33 <td>&nbsp;
34 34 <td>
35 35 <a href="{url|urlescape}file/{symrev}{path|urlescape}{sessionvars%urlparameter}">{basename|escape}/</a>
36 36 <a href="{url|urlescape}file/{symrev}{path|urlescape}/{emptydirs|urlescape}{sessionvars%urlparameter}">
37 37 {emptydirs|urlescape}
38 38 </a>'
39 39
40 40 fileentry = '
41 41 <tr class="parity{parity}">
42 42 <td><tt>{permissions|permissions}</tt>&nbsp;
43 43 <td align=right><tt class="date">{date|isodate}</tt>&nbsp;
44 44 <td align=right><tt>{size}</tt>&nbsp;
45 45 <td><a href="{url|urlescape}file/{symrev}/{file|urlescape}{sessionvars%urlparameter}">{basename|escape}</a>'
46 46
47 47 filerevision = filerevision.tmpl
48 48 fileannotate = fileannotate.tmpl
49 49 filediff = filediff.tmpl
50 50 filelog = filelog.tmpl
51 51 fileline = '<div class="parity{parity}"><a class="lineno" href="#{lineid}" id="{lineid}">{linenumber}</a>&nbsp;{line|escape}</div>'
52 52 filelogentry = filelogentry.tmpl
53 53
54 54 # The &nbsp; ensures that all table cells have content (even if there
55 55 # is an empty line in the annotated file), which in turn ensures that
56 56 # all table rows have equal height.
57 57 annotateline = '
58 58 <tr class="parity{parity}{ifeq(node, originalnode, ' thisrev')}">
59 59 <td class="annotate parity{blockparity}">
60 60 {if(blockhead,
61 61 '<a href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}#l{targetline}">
62 62 {rev}
63 63 </a>')}
64 64 <div class="annotate-info">
65 65 <div>
66 66 <a href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}#l{targetline}">
67 67 {node|short}</a>
68 68 {desc|escape|firstline}
69 69 </div>
70 70 <div><em>{author|obfuscate}</em></div>
71 71 <div>parents: {parents%annotateparent}</div>
72 72 <a href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a>
73 73 <a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">changeset</a>
74 74 </div>
75 75 </td>
76 76 <td>
77 77 <a class="lineno" href="#{lineid}" id="{lineid}">{linenumber}</a>
78 78 </td>
79 79 <td><pre>&nbsp;{line|escape}</pre></td>
80 80 </tr>'
81 81 annotateparent = '
82 82 <a href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{rev}</a>'
83 83 difflineplus = '<span class="plusline"><a class="lineno" href="#{lineid}" id="{lineid}">{linenumber}</a>{line|escape}</span>'
84 84 difflineminus = '<span class="minusline"><a class="lineno" href="#{lineid}" id="{lineid}">{linenumber}</a>{line|escape}</span>'
85 85 difflineat = '<span class="atline"><a class="lineno" href="#{lineid}" id="{lineid}">{linenumber}</a>{line|escape}</span>'
86 86 diffline = '<a class="lineno" href="#{lineid}" id="{lineid}">{linenumber}</a>{line|escape}'
87 87 changesetlink = '<a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a>'
88 88 changelogparent = '
89 89 <tr>
90 90 <th class="parent">parent {rev}:</th>
91 91 <td class="parent">
92 92 {changesetlink}
93 93 </td>
94 94 </tr>'
95 95 changesetparent = '
96 96 <tr>
97 97 <th class="parent">parent {rev}:</th>
98 98 <td class="parent">{changesetlink}</td>
99 99 </tr>'
100 100 changesetparentdiff = '
101 101 <tr>
102 102 <th class="parent">parent {rev}:</th>
103 103 <td class="parent">{changesetlink} {ifeq(node, basenode, '(current diff)', '({difffrom})')}</td>
104 104 </tr>'
105 105 difffrom = '<a href="{url|urlescape}rev/{node|short}:{originalnode|short}{sessionvars%urlparameter}">diff</a>'
106 106 filerevparent = '
107 107 <tr>
108 108 <td class="metatag">parent:</td>
109 109 <td>
110 110 <a href="{url|urlescape}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
111 111 {rename%filerename}{node|short}
112 112 </a>
113 113 </td>
114 114 </tr>'
115 115 filerename = '{file|escape}@'
116 116 filelogrename = '
117 117 <tr>
118 118 <th>base:</th>
119 119 <td>
120 120 <a href="{url|urlescape}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
121 121 {file|escape}@{node|short}
122 122 </a>
123 123 </td>
124 124 </tr>'
125 125 fileannotateparent = '
126 126 <tr>
127 127 <td class="metatag">parent:</td>
128 128 <td>
129 129 <a href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
130 130 {rename%filerename}{node|short}
131 131 </a>
132 132 </td>
133 133 </tr>'
134 134 changesetchild = '
135 135 <tr>
136 136 <th class="child">child {rev}:</th>
137 137 <td class="child"><a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td>
138 138 </tr>'
139 139 changelogchild = '
140 140 <tr>
141 141 <th class="child">child {rev}:</th>
142 142 <td class="child"><a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td>
143 143 </tr>'
144 144 filerevchild = '
145 145 <tr>
146 146 <td class="metatag">child:</td>
147 147 <td><a href="{url|urlescape}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></td>
148 148 </tr>'
149 149 fileannotatechild = '
150 150 <tr>
151 151 <td class="metatag">child:</td>
152 152 <td><a href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></td>
153 153 </tr>'
154 154 tags = tags.tmpl
155 155 tagentry = '
156 156 <li class="tagEntry parity{parity}">
157 157 <tt class="node">{node}</tt>
158 158 <a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{tag|escape}</a>
159 159 </li>'
160 160 branches = branches.tmpl
161 161 branchentry = '
162 162 <li class="tagEntry parity{parity}">
163 163 <tt class="node">{node}</tt>
164 164 <a href="{url|urlescape}shortlog/{node|short}{sessionvars%urlparameter}" class="{status}">{branch|escape}</a>
165 165 </li>'
166 166 diffblock = '<pre class="parity{parity}">{lines}</pre>'
167 167 changelogtag = '<tr><th class="tag">tag:</th><td class="tag">{tag|escape}</td></tr>'
168 168 changesettag = '<tr><th class="tag">tag:</th><td class="tag">{tag|escape}</td></tr>'
169 169 successorlink = '<a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a> '
170 170 obsfatesuccessors = '{if(successors, ' as ')}{successors%successorlink}'
171 171 obsfateverb = '{obsfateverb(successors, markers)}'
172 172 obsfateoperations = '{if(obsfateoperations(markers), ' using {join(obsfateoperations(markers), ', ')}')}'
173 173 obsfateusers = '{if(obsfateusers(markers), ' by {join(obsfateusers(markers)%'{user|obfuscate}', ', ')}')}'
174 174 obsfatedate = '{if(obsfatedate(markers), ' {ifeq(min(obsfatedate(markers)), max(obsfatedate(markers)), '<span class="age">{min(obsfatedate(markers))|rfc822date}</span>', 'between <span class="age">{min(obsfatedate(markers))|rfc822date}</span> and <span class="age">{max(obsfatedate(markers))|rfc822date}</span>')}')}'
175 obsfateentry = '{obsfateverb}{obsfateoperations}{obsfatesuccessors}{obsfateusers}{obsfatedate}'
175 obsfateentry = '
176 <tr>
177 <th class="obsolete">obsolete:</th>
178 <td class="obsolete">{obsfateverb}{obsfateoperations}{obsfatesuccessors}{obsfateusers}{obsfatedate}</td>
179 </tr>'
176 180 filediffparent = '
177 181 <tr>
178 182 <th class="parent">parent {rev}:</th>
179 183 <td class="parent"><a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td>
180 184 </tr>'
181 185 filediffchild = '
182 186 <tr>
183 187 <th class="child">child {rev}:</th>
184 188 <td class="child"><a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td>
185 189 </tr>'
186 190 indexentry = '
187 191 <tr class="parity{parity}">
188 192 <td><a href="{url|urlescape}{sessionvars%urlparameter}">{name|escape}</a></td>
189 193 <td>{description}</td>
190 194 <td>{contact|obfuscate}</td>
191 195 <td class="age">{lastchange|rfc822date}</td>
192 196 <td class="indexlinks">
193 197 <a href="{url|urlescape}rss-log">RSS</a>
194 198 <a href="{url|urlescape}atom-log">Atom</a>
195 199 {archives%archiveentry}
196 200 </td>
197 201 </tr>'
198 202 index = index.tmpl
199 203 archiveentry = '<a href="{url|urlescape}archive/{symrev}{extension|urlescape}">{type|escape}</a> '
200 204 notfound = notfound.tmpl
201 205 error = error.tmpl
202 206 urlparameter = '{separator}{name}={value|urlescape}'
203 207 hiddenformentry = '<input type="hidden" name="{name}" value="{value|escape}" />'
204 208 breadcrumb = '&gt; <a href="{url|urlescape}">{name|escape}</a> '
@@ -1,714 +1,719
1 1 Test file dedicated to testing the divergent troubles from obsolete changeset.
2 2
3 3 This is the most complex troubles from far so we isolate it in a dedicated
4 4 file.
5 5
6 6 Enable obsolete
7 7
8 8 $ cat >> $HGRCPATH << EOF
9 9 > [ui]
10 10 > logtemplate = {rev}:{node|short} {desc}{if(obsfate, " [{join(obsfate, "; ")}]")}\n
11 11 > [experimental]
12 12 > evolution.createmarkers=True
13 13 > [extensions]
14 14 > drawdag=$TESTDIR/drawdag.py
15 15 > [alias]
16 16 > debugobsolete = debugobsolete -d '0 0'
17 17 > [phases]
18 18 > publish=False
19 19 > EOF
20 20
21 21
22 22 $ mkcommit() {
23 23 > echo "$1" > "$1"
24 24 > hg add "$1"
25 25 > hg ci -m "$1"
26 26 > }
27 27 $ getid() {
28 28 > hg log --hidden -r "desc('$1')" -T '{node}\n'
29 29 > }
30 30
31 31 setup repo
32 32
33 33 $ hg init reference
34 34 $ cd reference
35 35 $ mkcommit base
36 36 $ mkcommit A_0
37 37 $ hg up 0
38 38 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
39 39 $ mkcommit A_1
40 40 created new head
41 41 $ hg up 0
42 42 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
43 43 $ mkcommit A_2
44 44 created new head
45 45 $ hg up 0
46 46 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
47 47 $ cd ..
48 48
49 49
50 50 $ newcase() {
51 51 > hg clone -u 0 -q reference $1
52 52 > cd $1
53 53 > }
54 54
55 55 direct divergence
56 56 -----------------
57 57
58 58 A_1 have two direct and divergent successors A_1 and A_1
59 59
60 60 $ newcase direct
61 61 $ hg debugobsolete `getid A_0` `getid A_1`
62 62 obsoleted 1 changesets
63 63 $ hg debugobsolete `getid A_0` `getid A_2`
64 64 2 new content-divergent changesets
65 65 $ hg log -G --hidden
66 66 * 3:392fd25390da A_2
67 67 |
68 68 | * 2:82623d38b9ba A_1
69 69 |/
70 70 | x 1:007dc284c1f8 A_0 [rewritten as 2:82623d38b9ba; rewritten as 3:392fd25390da]
71 71 |/
72 72 @ 0:d20a80d4def3 base
73 73
74 74 $ hg debugsuccessorssets --hidden 'all()'
75 75 d20a80d4def3
76 76 d20a80d4def3
77 77 007dc284c1f8
78 78 82623d38b9ba
79 79 392fd25390da
80 80 82623d38b9ba
81 81 82623d38b9ba
82 82 392fd25390da
83 83 392fd25390da
84 84 $ hg log -r 'contentdivergent()'
85 85 2:82623d38b9ba A_1
86 86 3:392fd25390da A_2
87 87 $ hg debugsuccessorssets 'all()' --closest
88 88 d20a80d4def3
89 89 d20a80d4def3
90 90 82623d38b9ba
91 91 82623d38b9ba
92 92 392fd25390da
93 93 392fd25390da
94 94 $ hg debugsuccessorssets 'all()' --closest --hidden
95 95 d20a80d4def3
96 96 d20a80d4def3
97 97 007dc284c1f8
98 98 82623d38b9ba
99 99 392fd25390da
100 100 82623d38b9ba
101 101 82623d38b9ba
102 102 392fd25390da
103 103 392fd25390da
104 104
105 105 check that mercurial refuse to push
106 106
107 107 $ hg init ../other
108 108 $ hg push ../other
109 109 pushing to ../other
110 110 searching for changes
111 111 abort: push includes content-divergent changeset: 392fd25390da!
112 112 [255]
113 113
114 114 $ cd ..
115 115
116 116
117 117 indirect divergence with known changeset
118 118 -------------------------------------------
119 119
120 120 $ newcase indirect_known
121 121 $ hg debugobsolete `getid A_0` `getid A_1`
122 122 obsoleted 1 changesets
123 123 $ hg debugobsolete `getid A_0` `getid A_2`
124 124 2 new content-divergent changesets
125 125 $ mkcommit A_3
126 126 created new head
127 127 $ hg debugobsolete `getid A_2` `getid A_3`
128 128 obsoleted 1 changesets
129 129 $ hg log -G --hidden
130 130 @ 4:01f36c5a8fda A_3
131 131 |
132 132 | x 3:392fd25390da A_2 [rewritten as 4:01f36c5a8fda]
133 133 |/
134 134 | * 2:82623d38b9ba A_1
135 135 |/
136 136 | x 1:007dc284c1f8 A_0 [rewritten as 2:82623d38b9ba; rewritten as 3:392fd25390da]
137 137 |/
138 138 o 0:d20a80d4def3 base
139 139
140 140 $ hg debugsuccessorssets --hidden 'all()'
141 141 d20a80d4def3
142 142 d20a80d4def3
143 143 007dc284c1f8
144 144 82623d38b9ba
145 145 01f36c5a8fda
146 146 82623d38b9ba
147 147 82623d38b9ba
148 148 392fd25390da
149 149 01f36c5a8fda
150 150 01f36c5a8fda
151 151 01f36c5a8fda
152 152 $ hg log -r 'contentdivergent()'
153 153 2:82623d38b9ba A_1
154 154 4:01f36c5a8fda A_3
155 155 $ hg debugsuccessorssets 'all()' --closest
156 156 d20a80d4def3
157 157 d20a80d4def3
158 158 82623d38b9ba
159 159 82623d38b9ba
160 160 01f36c5a8fda
161 161 01f36c5a8fda
162 162 $ hg debugsuccessorssets 'all()' --closest --hidden
163 163 d20a80d4def3
164 164 d20a80d4def3
165 165 007dc284c1f8
166 166 82623d38b9ba
167 167 392fd25390da
168 168 82623d38b9ba
169 169 82623d38b9ba
170 170 392fd25390da
171 171 392fd25390da
172 172 01f36c5a8fda
173 173 01f36c5a8fda
174 174 $ cd ..
175 175
176 176
177 177 indirect divergence with known changeset
178 178 -------------------------------------------
179 179
180 180 $ newcase indirect_unknown
181 181 $ hg debugobsolete `getid A_0` aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
182 182 obsoleted 1 changesets
183 183 $ hg debugobsolete aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa `getid A_1`
184 184 $ hg debugobsolete `getid A_0` `getid A_2`
185 185 2 new content-divergent changesets
186 186 $ hg log -G --hidden
187 187 * 3:392fd25390da A_2
188 188 |
189 189 | * 2:82623d38b9ba A_1
190 190 |/
191 191 | x 1:007dc284c1f8 A_0 [rewritten as 2:82623d38b9ba; rewritten as 3:392fd25390da]
192 192 |/
193 193 @ 0:d20a80d4def3 base
194 194
195 195 $ hg debugsuccessorssets --hidden 'all()'
196 196 d20a80d4def3
197 197 d20a80d4def3
198 198 007dc284c1f8
199 199 82623d38b9ba
200 200 392fd25390da
201 201 82623d38b9ba
202 202 82623d38b9ba
203 203 392fd25390da
204 204 392fd25390da
205 205 $ hg log -r 'contentdivergent()'
206 206 2:82623d38b9ba A_1
207 207 3:392fd25390da A_2
208 208 $ hg debugsuccessorssets 'all()' --closest
209 209 d20a80d4def3
210 210 d20a80d4def3
211 211 82623d38b9ba
212 212 82623d38b9ba
213 213 392fd25390da
214 214 392fd25390da
215 215 $ hg debugsuccessorssets 'all()' --closest --hidden
216 216 d20a80d4def3
217 217 d20a80d4def3
218 218 007dc284c1f8
219 219 82623d38b9ba
220 220 392fd25390da
221 221 82623d38b9ba
222 222 82623d38b9ba
223 223 392fd25390da
224 224 392fd25390da
225 225 $ cd ..
226 226
227 227 do not take unknown node in account if they are final
228 228 -----------------------------------------------------
229 229
230 230 $ newcase final-unknown
231 231 $ hg debugobsolete `getid A_0` `getid A_1`
232 232 obsoleted 1 changesets
233 233 $ hg debugobsolete `getid A_1` `getid A_2`
234 234 obsoleted 1 changesets
235 235 $ hg debugobsolete `getid A_0` bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
236 236 $ hg debugobsolete bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccc
237 237 $ hg debugobsolete `getid A_1` dddddddddddddddddddddddddddddddddddddddd
238 238
239 239 $ hg debugsuccessorssets --hidden 'desc('A_0')'
240 240 007dc284c1f8
241 241 392fd25390da
242 242 $ hg debugsuccessorssets 'desc('A_0')' --closest
243 243 $ hg debugsuccessorssets 'desc('A_0')' --closest --hidden
244 244 007dc284c1f8
245 245 82623d38b9ba
246 246
247 247 $ cd ..
248 248
249 249 divergence that converge again is not divergence anymore
250 250 -----------------------------------------------------
251 251
252 252 $ newcase converged_divergence
253 253 $ hg debugobsolete `getid A_0` `getid A_1`
254 254 obsoleted 1 changesets
255 255 $ hg debugobsolete `getid A_0` `getid A_2`
256 256 2 new content-divergent changesets
257 257 $ mkcommit A_3
258 258 created new head
259 259 $ hg debugobsolete `getid A_1` `getid A_3`
260 260 obsoleted 1 changesets
261 261 $ hg debugobsolete `getid A_2` `getid A_3`
262 262 obsoleted 1 changesets
263 263 $ hg log -G --hidden
264 264 @ 4:01f36c5a8fda A_3
265 265 |
266 266 | x 3:392fd25390da A_2 [rewritten as 4:01f36c5a8fda]
267 267 |/
268 268 | x 2:82623d38b9ba A_1 [rewritten as 4:01f36c5a8fda]
269 269 |/
270 270 | x 1:007dc284c1f8 A_0 [rewritten as 2:82623d38b9ba; rewritten as 3:392fd25390da]
271 271 |/
272 272 o 0:d20a80d4def3 base
273 273
274 274 $ hg debugsuccessorssets --hidden 'all()'
275 275 d20a80d4def3
276 276 d20a80d4def3
277 277 007dc284c1f8
278 278 01f36c5a8fda
279 279 82623d38b9ba
280 280 01f36c5a8fda
281 281 392fd25390da
282 282 01f36c5a8fda
283 283 01f36c5a8fda
284 284 01f36c5a8fda
285 285 $ hg log -r 'contentdivergent()'
286 286 $ hg debugsuccessorssets 'all()' --closest
287 287 d20a80d4def3
288 288 d20a80d4def3
289 289 01f36c5a8fda
290 290 01f36c5a8fda
291 291 $ hg debugsuccessorssets 'all()' --closest --hidden
292 292 d20a80d4def3
293 293 d20a80d4def3
294 294 007dc284c1f8
295 295 82623d38b9ba
296 296 392fd25390da
297 297 82623d38b9ba
298 298 82623d38b9ba
299 299 392fd25390da
300 300 392fd25390da
301 301 01f36c5a8fda
302 302 01f36c5a8fda
303 303 $ cd ..
304 304
305 305 split is not divergences
306 306 -----------------------------
307 307
308 308 $ newcase split
309 309 $ hg debugobsolete `getid A_0` `getid A_1` `getid A_2`
310 310 obsoleted 1 changesets
311 311 $ hg log -G --hidden
312 312 o 3:392fd25390da A_2
313 313 |
314 314 | o 2:82623d38b9ba A_1
315 315 |/
316 316 | x 1:007dc284c1f8 A_0 [split as 2:82623d38b9ba, 3:392fd25390da]
317 317 |/
318 318 @ 0:d20a80d4def3 base
319 319
320 320 $ hg debugsuccessorssets --hidden 'all()'
321 321 d20a80d4def3
322 322 d20a80d4def3
323 323 007dc284c1f8
324 324 82623d38b9ba 392fd25390da
325 325 82623d38b9ba
326 326 82623d38b9ba
327 327 392fd25390da
328 328 392fd25390da
329 329 $ hg log -r 'contentdivergent()'
330 330 $ hg debugsuccessorssets 'all()' --closest
331 331 d20a80d4def3
332 332 d20a80d4def3
333 333 82623d38b9ba
334 334 82623d38b9ba
335 335 392fd25390da
336 336 392fd25390da
337 337 $ hg debugsuccessorssets 'all()' --closest --hidden
338 338 d20a80d4def3
339 339 d20a80d4def3
340 340 007dc284c1f8
341 341 82623d38b9ba 392fd25390da
342 342 82623d38b9ba
343 343 82623d38b9ba
344 344 392fd25390da
345 345 392fd25390da
346 346
347 347 Even when subsequent rewriting happen
348 348
349 349 $ mkcommit A_3
350 350 created new head
351 351 $ hg debugobsolete `getid A_1` `getid A_3`
352 352 obsoleted 1 changesets
353 353 $ hg up 0
354 354 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
355 355 $ mkcommit A_4
356 356 created new head
357 357 $ hg debugobsolete `getid A_2` `getid A_4`
358 358 obsoleted 1 changesets
359 359 $ hg up 0
360 360 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
361 361 $ mkcommit A_5
362 362 created new head
363 363 $ hg debugobsolete `getid A_4` `getid A_5`
364 364 obsoleted 1 changesets
365 365 $ hg log -G --hidden
366 366 @ 6:e442cfc57690 A_5
367 367 |
368 368 | x 5:6a411f0d7a0a A_4 [rewritten as 6:e442cfc57690]
369 369 |/
370 370 | o 4:01f36c5a8fda A_3
371 371 |/
372 372 | x 3:392fd25390da A_2 [rewritten as 5:6a411f0d7a0a]
373 373 |/
374 374 | x 2:82623d38b9ba A_1 [rewritten as 4:01f36c5a8fda]
375 375 |/
376 376 | x 1:007dc284c1f8 A_0 [split as 2:82623d38b9ba, 3:392fd25390da]
377 377 |/
378 378 o 0:d20a80d4def3 base
379 379
380 380 $ hg debugsuccessorssets --hidden 'all()'
381 381 d20a80d4def3
382 382 d20a80d4def3
383 383 007dc284c1f8
384 384 01f36c5a8fda e442cfc57690
385 385 82623d38b9ba
386 386 01f36c5a8fda
387 387 392fd25390da
388 388 e442cfc57690
389 389 01f36c5a8fda
390 390 01f36c5a8fda
391 391 6a411f0d7a0a
392 392 e442cfc57690
393 393 e442cfc57690
394 394 e442cfc57690
395 395 $ hg debugsuccessorssets 'all()' --closest
396 396 d20a80d4def3
397 397 d20a80d4def3
398 398 01f36c5a8fda
399 399 01f36c5a8fda
400 400 e442cfc57690
401 401 e442cfc57690
402 402 $ hg debugsuccessorssets 'all()' --closest --hidden
403 403 d20a80d4def3
404 404 d20a80d4def3
405 405 007dc284c1f8
406 406 82623d38b9ba 392fd25390da
407 407 82623d38b9ba
408 408 82623d38b9ba
409 409 392fd25390da
410 410 392fd25390da
411 411 01f36c5a8fda
412 412 01f36c5a8fda
413 413 6a411f0d7a0a
414 414 e442cfc57690
415 415 e442cfc57690
416 416 e442cfc57690
417 417 $ hg log -r 'contentdivergent()'
418 418
419 419 Check more complex obsolescence graft (with divergence)
420 420
421 421 $ mkcommit B_0; hg up 0
422 422 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
423 423 $ hg debugobsolete `getid B_0` `getid A_2`
424 424 obsoleted 1 changesets
425 425 $ mkcommit A_7; hg up 0
426 426 created new head
427 427 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
428 428 $ mkcommit A_8; hg up 0
429 429 created new head
430 430 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
431 431 $ hg debugobsolete `getid A_5` `getid A_7` `getid A_8`
432 432 obsoleted 1 changesets
433 433 $ mkcommit A_9; hg up 0
434 434 created new head
435 435 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
436 436 $ hg debugobsolete `getid A_5` `getid A_9`
437 437 4 new content-divergent changesets
438 438 $ hg log -G --hidden
439 439 * 10:bed64f5d2f5a A_9
440 440 |
441 441 | * 9:14608b260df8 A_8
442 442 |/
443 443 | * 8:7ae126973a96 A_7
444 444 |/
445 445 | x 7:3750ebee865d B_0 [rewritten as 3:392fd25390da]
446 446 | |
447 447 | x 6:e442cfc57690 A_5 [rewritten as 10:bed64f5d2f5a; split as 8:7ae126973a96, 9:14608b260df8]
448 448 |/
449 449 | x 5:6a411f0d7a0a A_4 [rewritten as 6:e442cfc57690]
450 450 |/
451 451 | * 4:01f36c5a8fda A_3
452 452 |/
453 453 | x 3:392fd25390da A_2 [rewritten as 5:6a411f0d7a0a]
454 454 |/
455 455 | x 2:82623d38b9ba A_1 [rewritten as 4:01f36c5a8fda]
456 456 |/
457 457 | x 1:007dc284c1f8 A_0 [split as 2:82623d38b9ba, 3:392fd25390da]
458 458 |/
459 459 @ 0:d20a80d4def3 base
460 460
461 461 $ hg debugsuccessorssets --hidden 'all()'
462 462 d20a80d4def3
463 463 d20a80d4def3
464 464 007dc284c1f8
465 465 01f36c5a8fda bed64f5d2f5a
466 466 01f36c5a8fda 7ae126973a96 14608b260df8
467 467 82623d38b9ba
468 468 01f36c5a8fda
469 469 392fd25390da
470 470 bed64f5d2f5a
471 471 7ae126973a96 14608b260df8
472 472 01f36c5a8fda
473 473 01f36c5a8fda
474 474 6a411f0d7a0a
475 475 bed64f5d2f5a
476 476 7ae126973a96 14608b260df8
477 477 e442cfc57690
478 478 bed64f5d2f5a
479 479 7ae126973a96 14608b260df8
480 480 3750ebee865d
481 481 bed64f5d2f5a
482 482 7ae126973a96 14608b260df8
483 483 7ae126973a96
484 484 7ae126973a96
485 485 14608b260df8
486 486 14608b260df8
487 487 bed64f5d2f5a
488 488 bed64f5d2f5a
489 489 $ hg debugsuccessorssets 'all()' --closest
490 490 d20a80d4def3
491 491 d20a80d4def3
492 492 01f36c5a8fda
493 493 01f36c5a8fda
494 494 7ae126973a96
495 495 7ae126973a96
496 496 14608b260df8
497 497 14608b260df8
498 498 bed64f5d2f5a
499 499 bed64f5d2f5a
500 500 $ hg debugsuccessorssets 'all()' --closest --hidden
501 501 d20a80d4def3
502 502 d20a80d4def3
503 503 007dc284c1f8
504 504 82623d38b9ba 392fd25390da
505 505 82623d38b9ba
506 506 82623d38b9ba
507 507 392fd25390da
508 508 392fd25390da
509 509 01f36c5a8fda
510 510 01f36c5a8fda
511 511 6a411f0d7a0a
512 512 e442cfc57690
513 513 e442cfc57690
514 514 e442cfc57690
515 515 3750ebee865d
516 516 392fd25390da
517 517 7ae126973a96
518 518 7ae126973a96
519 519 14608b260df8
520 520 14608b260df8
521 521 bed64f5d2f5a
522 522 bed64f5d2f5a
523 523 $ hg log -r 'contentdivergent()'
524 524 4:01f36c5a8fda A_3
525 525 8:7ae126973a96 A_7
526 526 9:14608b260df8 A_8
527 527 10:bed64f5d2f5a A_9
528 528
529 529 fix the divergence
530 530
531 531 $ mkcommit A_A; hg up 0
532 532 created new head
533 533 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
534 534 $ hg debugobsolete `getid A_9` `getid A_A`
535 535 obsoleted 1 changesets
536 536 $ hg debugobsolete `getid A_7` `getid A_A`
537 537 obsoleted 1 changesets
538 538 $ hg debugobsolete `getid A_8` `getid A_A`
539 539 obsoleted 1 changesets
540 540 $ hg log -G --hidden
541 541 o 11:a139f71be9da A_A
542 542 |
543 543 | x 10:bed64f5d2f5a A_9 [rewritten as 11:a139f71be9da]
544 544 |/
545 545 | x 9:14608b260df8 A_8 [rewritten as 11:a139f71be9da]
546 546 |/
547 547 | x 8:7ae126973a96 A_7 [rewritten as 11:a139f71be9da]
548 548 |/
549 549 | x 7:3750ebee865d B_0 [rewritten as 3:392fd25390da]
550 550 | |
551 551 | x 6:e442cfc57690 A_5 [rewritten as 10:bed64f5d2f5a; split as 8:7ae126973a96, 9:14608b260df8]
552 552 |/
553 553 | x 5:6a411f0d7a0a A_4 [rewritten as 6:e442cfc57690]
554 554 |/
555 555 | o 4:01f36c5a8fda A_3
556 556 |/
557 557 | x 3:392fd25390da A_2 [rewritten as 5:6a411f0d7a0a]
558 558 |/
559 559 | x 2:82623d38b9ba A_1 [rewritten as 4:01f36c5a8fda]
560 560 |/
561 561 | x 1:007dc284c1f8 A_0 [split as 2:82623d38b9ba, 3:392fd25390da]
562 562 |/
563 563 @ 0:d20a80d4def3 base
564 564
565 565 $ hg debugsuccessorssets --hidden 'all()'
566 566 d20a80d4def3
567 567 d20a80d4def3
568 568 007dc284c1f8
569 569 01f36c5a8fda a139f71be9da
570 570 82623d38b9ba
571 571 01f36c5a8fda
572 572 392fd25390da
573 573 a139f71be9da
574 574 01f36c5a8fda
575 575 01f36c5a8fda
576 576 6a411f0d7a0a
577 577 a139f71be9da
578 578 e442cfc57690
579 579 a139f71be9da
580 580 3750ebee865d
581 581 a139f71be9da
582 582 7ae126973a96
583 583 a139f71be9da
584 584 14608b260df8
585 585 a139f71be9da
586 586 bed64f5d2f5a
587 587 a139f71be9da
588 588 a139f71be9da
589 589 a139f71be9da
590 590 $ hg debugsuccessorssets 'all()' --closest
591 591 d20a80d4def3
592 592 d20a80d4def3
593 593 01f36c5a8fda
594 594 01f36c5a8fda
595 595 a139f71be9da
596 596 a139f71be9da
597 597 $ hg debugsuccessorssets 'all()' --closest --hidden
598 598 d20a80d4def3
599 599 d20a80d4def3
600 600 007dc284c1f8
601 601 82623d38b9ba 392fd25390da
602 602 82623d38b9ba
603 603 82623d38b9ba
604 604 392fd25390da
605 605 392fd25390da
606 606 01f36c5a8fda
607 607 01f36c5a8fda
608 608 6a411f0d7a0a
609 609 e442cfc57690
610 610 e442cfc57690
611 611 e442cfc57690
612 612 3750ebee865d
613 613 392fd25390da
614 614 7ae126973a96
615 615 a139f71be9da
616 616 14608b260df8
617 617 a139f71be9da
618 618 bed64f5d2f5a
619 619 a139f71be9da
620 620 a139f71be9da
621 621 a139f71be9da
622 622 $ hg log -r 'contentdivergent()'
623 623
624 624 #if serve
625 625
626 626 $ hg serve -n test -p $HGPORT -d --pid-file=hg.pid --config web.view=all \
627 627 > -A access.log -E errors.log
628 628 $ cat hg.pid >> $DAEMON_PIDS
629 629
630 630 check an obsolete changeset that was rewritten and also split
631 631
632 632 $ get-with-headers.py localhost:$HGPORT 'rev/e442cfc57690?style=paper' | egrep 'rewritten|split'
633 <td>rewritten as <a href="/rev/bed64f5d2f5a?style=paper">bed64f5d2f5a</a> by &#116;&#101;&#115;&#116; <span class="age">Thu, 01 Jan 1970 00:00:00 +0000</span>split as <a href="/rev/7ae126973a96?style=paper">7ae126973a96</a> <a href="/rev/14608b260df8?style=paper">14608b260df8</a> by &#116;&#101;&#115;&#116; <span class="age">Thu, 01 Jan 1970 00:00:00 +0000</span></td>
633 <td>rewritten as <a href="/rev/bed64f5d2f5a?style=paper">bed64f5d2f5a</a> by &#116;&#101;&#115;&#116; <span class="age">Thu, 01 Jan 1970 00:00:00 +0000</span><br>
634 split as <a href="/rev/7ae126973a96?style=paper">7ae126973a96</a> <a href="/rev/14608b260df8?style=paper">14608b260df8</a> by &#116;&#101;&#115;&#116; <span class="age">Thu, 01 Jan 1970 00:00:00 +0000</span></td>
634 635 $ get-with-headers.py localhost:$HGPORT 'rev/e442cfc57690?style=coal' | egrep 'rewritten|split'
635 <td>rewritten as <a href="/rev/bed64f5d2f5a?style=coal">bed64f5d2f5a</a> by &#116;&#101;&#115;&#116; <span class="age">Thu, 01 Jan 1970 00:00:00 +0000</span>split as <a href="/rev/7ae126973a96?style=coal">7ae126973a96</a> <a href="/rev/14608b260df8?style=coal">14608b260df8</a> by &#116;&#101;&#115;&#116; <span class="age">Thu, 01 Jan 1970 00:00:00 +0000</span></td>
636 <td>rewritten as <a href="/rev/bed64f5d2f5a?style=coal">bed64f5d2f5a</a> by &#116;&#101;&#115;&#116; <span class="age">Thu, 01 Jan 1970 00:00:00 +0000</span><br>
637 split as <a href="/rev/7ae126973a96?style=coal">7ae126973a96</a> <a href="/rev/14608b260df8?style=coal">14608b260df8</a> by &#116;&#101;&#115;&#116; <span class="age">Thu, 01 Jan 1970 00:00:00 +0000</span></td>
636 638 $ get-with-headers.py localhost:$HGPORT 'rev/e442cfc57690?style=gitweb' | egrep 'rewritten|split'
637 <tr><td>obsolete</td><td>rewritten as <a class="list" href="/rev/bed64f5d2f5a?style=gitweb">bed64f5d2f5a</a> by &#116;&#101;&#115;&#116; <span class="age">Thu, 01 Jan 1970 00:00:00 +0000</span>split as <a class="list" href="/rev/7ae126973a96?style=gitweb">7ae126973a96</a> <a class="list" href="/rev/14608b260df8?style=gitweb">14608b260df8</a> by &#116;&#101;&#115;&#116; <span class="age">Thu, 01 Jan 1970 00:00:00 +0000</span></td></tr>
639 <td>rewritten as <a class="list" href="/rev/bed64f5d2f5a?style=gitweb">bed64f5d2f5a</a> by &#116;&#101;&#115;&#116; <span class="age">Thu, 01 Jan 1970 00:00:00 +0000</span></td>
640 <td>split as <a class="list" href="/rev/7ae126973a96?style=gitweb">7ae126973a96</a> <a class="list" href="/rev/14608b260df8?style=gitweb">14608b260df8</a> by &#116;&#101;&#115;&#116; <span class="age">Thu, 01 Jan 1970 00:00:00 +0000</span></td>
638 641 $ get-with-headers.py localhost:$HGPORT 'rev/e442cfc57690?style=monoblue' | egrep 'rewritten|split'
639 <dt>obsolete</dt><dd>rewritten as <a href="/rev/bed64f5d2f5a?style=monoblue">bed64f5d2f5a</a> by &#116;&#101;&#115;&#116; <span class="age">Thu, 01 Jan 1970 00:00:00 +0000</span>split as <a href="/rev/7ae126973a96?style=monoblue">7ae126973a96</a> <a href="/rev/14608b260df8?style=monoblue">14608b260df8</a> by &#116;&#101;&#115;&#116; <span class="age">Thu, 01 Jan 1970 00:00:00 +0000</span></dd>
642 <dd>rewritten as <a href="/rev/bed64f5d2f5a?style=monoblue">bed64f5d2f5a</a> by &#116;&#101;&#115;&#116; <span class="age">Thu, 01 Jan 1970 00:00:00 +0000</span></dd>
643 <dd>split as <a href="/rev/7ae126973a96?style=monoblue">7ae126973a96</a> <a href="/rev/14608b260df8?style=monoblue">14608b260df8</a> by &#116;&#101;&#115;&#116; <span class="age">Thu, 01 Jan 1970 00:00:00 +0000</span></dd>
640 644 $ get-with-headers.py localhost:$HGPORT 'rev/e442cfc57690?style=spartan' | egrep 'rewritten|split'
641 <td class="obsolete">rewritten as <a href="/rev/bed64f5d2f5a?style=spartan">bed64f5d2f5a</a> by &#116;&#101;&#115;&#116; <span class="age">Thu, 01 Jan 1970 00:00:00 +0000</span>split as <a href="/rev/7ae126973a96?style=spartan">7ae126973a96</a> <a href="/rev/14608b260df8?style=spartan">14608b260df8</a> by &#116;&#101;&#115;&#116; <span class="age">Thu, 01 Jan 1970 00:00:00 +0000</span></td>
645 <td class="obsolete">rewritten as <a href="/rev/bed64f5d2f5a?style=spartan">bed64f5d2f5a</a> by &#116;&#101;&#115;&#116; <span class="age">Thu, 01 Jan 1970 00:00:00 +0000</span></td>
646 <td class="obsolete">split as <a href="/rev/7ae126973a96?style=spartan">7ae126973a96</a> <a href="/rev/14608b260df8?style=spartan">14608b260df8</a> by &#116;&#101;&#115;&#116; <span class="age">Thu, 01 Jan 1970 00:00:00 +0000</span></td>
642 647
643 648 $ killdaemons.py
644 649
645 650 #endif
646 651
647 652 $ cd ..
648 653
649 654
650 655 Subset does not diverge
651 656 ------------------------------
652 657
653 658 Do not report divergent successors-set if it is a subset of another
654 659 successors-set. (report [A,B] not [A] + [A,B])
655 660
656 661 $ newcase subset
657 662 $ hg debugobsolete `getid A_0` `getid A_2`
658 663 obsoleted 1 changesets
659 664 $ hg debugobsolete `getid A_0` `getid A_1` `getid A_2`
660 665 $ hg debugsuccessorssets --hidden 'desc('A_0')'
661 666 007dc284c1f8
662 667 82623d38b9ba 392fd25390da
663 668 $ hg debugsuccessorssets 'desc('A_0')' --closest
664 669 $ hg debugsuccessorssets 'desc('A_0')' --closest --hidden
665 670 007dc284c1f8
666 671 82623d38b9ba 392fd25390da
667 672
668 673 $ cd ..
669 674
670 675 Use scmutil.cleanupnodes API to create divergence
671 676
672 677 $ hg init cleanupnodes
673 678 $ cd cleanupnodes
674 679 $ hg debugdrawdag <<'EOS'
675 680 > B1 B3 B4
676 681 > | \|
677 682 > A Z
678 683 > EOS
679 684
680 685 $ hg update -q B1
681 686 $ echo 3 >> B
682 687 $ hg commit --amend -m B2
683 688 $ cat > $TESTTMP/scmutilcleanup.py <<EOF
684 689 > from mercurial import registrar, scmutil
685 690 > cmdtable = {}
686 691 > command = registrar.command(cmdtable)
687 692 > @command('cleanup')
688 693 > def cleanup(ui, repo):
689 694 > def node(expr):
690 695 > unfi = repo.unfiltered()
691 696 > rev = unfi.revs(expr).first()
692 697 > return unfi.changelog.node(rev)
693 698 > with repo.wlock(), repo.lock(), repo.transaction('delayedstrip'):
694 699 > mapping = {node('desc(B1)'): [node('desc(B3)')],
695 700 > node('desc(B3)'): [node('desc(B4)')]}
696 701 > scmutil.cleanupnodes(repo, mapping, 'test')
697 702 > EOF
698 703
699 704 $ rm .hg/localtags
700 705 $ hg cleanup --config extensions.t=$TESTTMP/scmutilcleanup.py
701 706 2 new content-divergent changesets
702 707 $ hg log -G -T '{rev}:{node|short} {desc} {instabilities}' -r 'sort(all(), topo)'
703 708 @ 5:1a2a9b5b0030 B2 content-divergent
704 709 |
705 710 | * 4:70d5a63ca112 B4 content-divergent
706 711 | |
707 712 | o 1:48b9aae0607f Z
708 713 |
709 714 o 0:426bada5c675 A
710 715
711 716 $ hg debugobsolete
712 717 a178212c3433c4e77b573f6011e29affb8aefa33 1a2a9b5b0030632400aa78e00388c20f99d3ec44 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'test'}
713 718 a178212c3433c4e77b573f6011e29affb8aefa33 ad6478fb94ecec98b86daae98722865d494ac561 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '13', 'operation': 'test', 'user': 'test'}
714 719 ad6478fb94ecec98b86daae98722865d494ac561 70d5a63ca112acb3764bc1d7320ca90ea688d671 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '9', 'operation': 'test', 'user': 'test'}
@@ -1,1571 +1,1571
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 updating to a hidden changeset 97b7c2d76b18
66 66 (hidden revision '97b7c2d76b18' is pruned)
67 67
68 68 Killing a single changeset with itself should fail
69 69 (simple local safeguard)
70 70
71 71 $ hg debugobsolete `getid kill_me` `getid kill_me`
72 72 abort: bad obsmarker input: in-marker cycle with 97b7c2d76b1845ed3eb988cd612611e72406cef0
73 73 [255]
74 74
75 75 $ cd ..
76 76
77 77 Killing a single changeset with replacement
78 78 (and testing the format option)
79 79
80 80 $ hg init tmpb
81 81 $ cd tmpb
82 82 $ mkcommit a
83 83 $ mkcommit b
84 84 $ mkcommit original_c
85 85 $ hg up "desc('b')"
86 86 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
87 87 $ mkcommit new_c
88 88 created new head
89 89 $ hg log -r 'hidden()' --template '{rev}:{node|short} {desc}\n' --hidden
90 90 $ hg debugobsolete --config format.obsstore-version=0 --flag 12 `getid original_c` `getid new_c` -d '121 120'
91 91 obsoleted 1 changesets
92 92 $ hg log -r 'hidden()' --template '{rev}:{node|short} {desc}\n' --hidden
93 93 2:245bde4270cd add original_c
94 94 $ hg debugrevlog -cd
95 95 # rev p1rev p2rev start end deltastart base p1 p2 rawsize totalsize compression heads chainlen
96 96 0 -1 -1 0 59 0 0 0 0 58 58 0 1 0
97 97 1 0 -1 59 118 59 59 0 0 58 116 0 1 0
98 98 2 1 -1 118 193 118 118 59 0 76 192 0 1 0
99 99 3 1 -1 193 260 193 193 59 0 66 258 0 2 0
100 100 $ hg debugobsolete
101 101 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
102 102
103 103 (check for version number of the obsstore)
104 104
105 105 $ dd bs=1 count=1 if=.hg/store/obsstore 2>/dev/null
106 106 \x00 (no-eol) (esc)
107 107
108 108 do it again (it read the obsstore before adding new changeset)
109 109
110 110 $ hg up '.^'
111 111 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
112 112 $ mkcommit new_2_c
113 113 created new head
114 114 $ hg debugobsolete -d '1337 0' `getid new_c` `getid new_2_c`
115 115 obsoleted 1 changesets
116 116 $ hg debugobsolete
117 117 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
118 118 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
119 119
120 120 Register two markers with a missing node
121 121
122 122 $ hg up '.^'
123 123 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
124 124 $ mkcommit new_3_c
125 125 created new head
126 126 $ hg debugobsolete -d '1338 0' `getid new_2_c` 1337133713371337133713371337133713371337
127 127 obsoleted 1 changesets
128 128 $ hg debugobsolete -d '1339 0' 1337133713371337133713371337133713371337 `getid new_3_c`
129 129 $ hg debugobsolete
130 130 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
131 131 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
132 132 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
133 133 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
134 134
135 135 Test the --index option of debugobsolete command
136 136 $ hg debugobsolete --index
137 137 0 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
138 138 1 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
139 139 2 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
140 140 3 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
141 141
142 142 Refuse pathological nullid successors
143 143 $ hg debugobsolete -d '9001 0' 1337133713371337133713371337133713371337 0000000000000000000000000000000000000000
144 144 transaction abort!
145 145 rollback completed
146 146 abort: bad obsolescence marker detected: invalid successors nullid
147 147 [255]
148 148
149 149 Check that graphlog detect that a changeset is obsolete:
150 150
151 151 $ hg log -G
152 152 @ 5:5601fb93a350 (draft) [tip ] add new_3_c
153 153 |
154 154 o 1:7c3bad9141dc (draft) [ ] add b
155 155 |
156 156 o 0:1f0dee641bb7 (draft) [ ] add a
157 157
158 158
159 159 check that heads does not report them
160 160
161 161 $ hg heads
162 162 5:5601fb93a350 (draft) [tip ] add new_3_c
163 163 $ hg heads --hidden
164 164 5:5601fb93a350 (draft) [tip ] add new_3_c
165 165 4:ca819180edb9 (draft *obsolete*) [ ] add new_2_c [rewritten as 5:5601fb93a350]
166 166 3:cdbce2fbb163 (draft *obsolete*) [ ] add new_c [rewritten as 4:ca819180edb9]
167 167 2:245bde4270cd (draft *obsolete*) [ ] add original_c [rewritten as 3:cdbce2fbb163]
168 168
169 169
170 170 check that summary does not report them
171 171
172 172 $ hg init ../sink
173 173 $ echo '[paths]' >> .hg/hgrc
174 174 $ echo 'default=../sink' >> .hg/hgrc
175 175 $ hg summary --remote
176 176 parent: 5:5601fb93a350 tip
177 177 add new_3_c
178 178 branch: default
179 179 commit: (clean)
180 180 update: (current)
181 181 phases: 3 draft
182 182 remote: 3 outgoing
183 183
184 184 $ hg summary --remote --hidden
185 185 parent: 5:5601fb93a350 tip
186 186 add new_3_c
187 187 branch: default
188 188 commit: (clean)
189 189 update: 3 new changesets, 4 branch heads (merge)
190 190 phases: 6 draft
191 191 remote: 3 outgoing
192 192
193 193 check that various commands work well with filtering
194 194
195 195 $ hg tip
196 196 5:5601fb93a350 (draft) [tip ] add new_3_c
197 197 $ hg log -r 6
198 198 abort: unknown revision '6'!
199 199 [255]
200 200 $ hg log -r 4
201 201 abort: hidden revision '4' was rewritten as: 5601fb93a350!
202 202 (use --hidden to access hidden revisions)
203 203 [255]
204 204 $ hg debugrevspec 'rev(6)'
205 205 $ hg debugrevspec 'rev(4)'
206 206 $ hg debugrevspec 'null'
207 207 -1
208 208
209 209 Check that public changeset are not accounted as obsolete:
210 210
211 211 $ hg --hidden phase --public 2
212 212 1 new phase-divergent changesets
213 213 $ hg log -G
214 214 @ 5:5601fb93a350 (draft phase-divergent) [tip ] add new_3_c
215 215 |
216 216 | o 2:245bde4270cd (public) [ ] add original_c
217 217 |/
218 218 o 1:7c3bad9141dc (public) [ ] add b
219 219 |
220 220 o 0:1f0dee641bb7 (public) [ ] add a
221 221
222 222
223 223 And that bumped changeset are detected
224 224 --------------------------------------
225 225
226 226 If we didn't filtered obsolete changesets out, 3 and 4 would show up too. Also
227 227 note that the bumped changeset (5:5601fb93a350) is not a direct successor of
228 228 the public changeset
229 229
230 230 $ hg log --hidden -r 'phasedivergent()'
231 231 5:5601fb93a350 (draft phase-divergent) [tip ] add new_3_c
232 232
233 233 And that we can't push bumped changeset
234 234
235 235 $ hg push ../tmpa -r 0 --force #(make repo related)
236 236 pushing to ../tmpa
237 237 searching for changes
238 238 warning: repository is unrelated
239 239 adding changesets
240 240 adding manifests
241 241 adding file changes
242 242 added 1 changesets with 1 changes to 1 files (+1 heads)
243 243 $ hg push ../tmpa
244 244 pushing to ../tmpa
245 245 searching for changes
246 246 abort: push includes phase-divergent changeset: 5601fb93a350!
247 247 [255]
248 248
249 249 Fixing "bumped" situation
250 250 We need to create a clone of 5 and add a special marker with a flag
251 251
252 252 $ hg summary
253 253 parent: 5:5601fb93a350 tip (phase-divergent)
254 254 add new_3_c
255 255 branch: default
256 256 commit: (clean)
257 257 update: 1 new changesets, 2 branch heads (merge)
258 258 phases: 1 draft
259 259 phase-divergent: 1 changesets
260 260 $ hg up '5^'
261 261 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
262 262 $ hg revert -ar 5
263 263 adding new_3_c
264 264 $ hg ci -m 'add n3w_3_c'
265 265 created new head
266 266 $ hg debugobsolete -d '1338 0' --flags 1 `getid new_3_c` `getid n3w_3_c`
267 267 obsoleted 1 changesets
268 268 $ hg log -r 'phasedivergent()'
269 269 $ hg log -G
270 270 @ 6:6f9641995072 (draft) [tip ] add n3w_3_c
271 271 |
272 272 | o 2:245bde4270cd (public) [ ] add original_c
273 273 |/
274 274 o 1:7c3bad9141dc (public) [ ] add b
275 275 |
276 276 o 0:1f0dee641bb7 (public) [ ] add a
277 277
278 278
279 279 Basic exclusive testing
280 280
281 281 $ hg log -G --hidden
282 282 @ 6:6f9641995072 (draft) [tip ] add n3w_3_c
283 283 |
284 284 | x 5:5601fb93a350 (draft *obsolete*) [ ] add new_3_c [rewritten as 6:6f9641995072]
285 285 |/
286 286 | x 4:ca819180edb9 (draft *obsolete*) [ ] add new_2_c [rewritten as 5:5601fb93a350]
287 287 |/
288 288 | x 3:cdbce2fbb163 (draft *obsolete*) [ ] add new_c [rewritten as 4:ca819180edb9]
289 289 |/
290 290 | o 2:245bde4270cd (public) [ ] add original_c
291 291 |/
292 292 o 1:7c3bad9141dc (public) [ ] add b
293 293 |
294 294 o 0:1f0dee641bb7 (public) [ ] add a
295 295
296 296 $ hg debugobsolete --rev 6f9641995072
297 297 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
298 298 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
299 299 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
300 300 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
301 301 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
302 302 $ hg debugobsolete --rev 6f9641995072 --exclusive
303 303 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
304 304 $ hg debugobsolete --rev 5601fb93a350 --hidden
305 305 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
306 306 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
307 307 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
308 308 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
309 309 $ hg debugobsolete --rev 5601fb93a350 --hidden --exclusive
310 310 $ hg debugobsolete --rev 5601fb93a350+6f9641995072 --hidden --exclusive
311 311 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
312 312 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
313 313 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
314 314
315 315 $ cd ..
316 316
317 317 Revision 0 is hidden
318 318 --------------------
319 319
320 320 $ hg init rev0hidden
321 321 $ cd rev0hidden
322 322
323 323 $ mkcommit kill0
324 324 $ hg up -q null
325 325 $ hg debugobsolete `getid kill0`
326 326 obsoleted 1 changesets
327 327 $ mkcommit a
328 328 $ mkcommit b
329 329
330 330 Should pick the first visible revision as "repo" node
331 331
332 332 $ hg archive ../archive-null
333 333 $ cat ../archive-null/.hg_archival.txt
334 334 repo: 1f0dee641bb7258c56bd60e93edfa2405381c41e
335 335 node: 7c3bad9141dcb46ff89abf5f61856facd56e476c
336 336 branch: default
337 337 latesttag: null
338 338 latesttagdistance: 2
339 339 changessincelatesttag: 2
340 340
341 341
342 342 $ cd ..
343 343
344 344 Can disable transaction summary report
345 345
346 346 $ hg init transaction-summary
347 347 $ cd transaction-summary
348 348 $ mkcommit a
349 349 $ mkcommit b
350 350 $ hg up -q null
351 351 $ hg --config experimental.evolution.report-instabilities=false debugobsolete `getid a`
352 352 obsoleted 1 changesets
353 353 $ cd ..
354 354
355 355 Exchange Test
356 356 ============================
357 357
358 358 Destination repo does not have any data
359 359 ---------------------------------------
360 360
361 361 Simple incoming test
362 362
363 363 $ hg init tmpc
364 364 $ cd tmpc
365 365 $ hg incoming ../tmpb
366 366 comparing with ../tmpb
367 367 0:1f0dee641bb7 (public) [ ] add a
368 368 1:7c3bad9141dc (public) [ ] add b
369 369 2:245bde4270cd (public) [ ] add original_c
370 370 6:6f9641995072 (draft) [tip ] add n3w_3_c
371 371
372 372 Try to pull markers
373 373 (extinct changeset are excluded but marker are pushed)
374 374
375 375 $ hg pull ../tmpb
376 376 pulling from ../tmpb
377 377 requesting all changes
378 378 adding changesets
379 379 adding manifests
380 380 adding file changes
381 381 added 4 changesets with 4 changes to 4 files (+1 heads)
382 382 5 new obsolescence markers
383 383 new changesets 1f0dee641bb7:6f9641995072
384 384 (run 'hg heads' to see heads, 'hg merge' to merge)
385 385 $ hg debugobsolete
386 386 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
387 387 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
388 388 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
389 389 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
390 390 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
391 391
392 392 Rollback//Transaction support
393 393
394 394 $ hg debugobsolete -d '1340 0' aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
395 395 $ hg debugobsolete
396 396 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
397 397 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
398 398 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
399 399 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
400 400 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
401 401 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb 0 (Thu Jan 01 00:22:20 1970 +0000) {'user': 'test'}
402 402 $ hg rollback -n
403 403 repository tip rolled back to revision 3 (undo debugobsolete)
404 404 $ hg rollback
405 405 repository tip rolled back to revision 3 (undo debugobsolete)
406 406 $ hg debugobsolete
407 407 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
408 408 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
409 409 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
410 410 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
411 411 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
412 412
413 413 $ cd ..
414 414
415 415 Try to push markers
416 416
417 417 $ hg init tmpd
418 418 $ hg -R tmpb push tmpd
419 419 pushing to tmpd
420 420 searching for changes
421 421 adding changesets
422 422 adding manifests
423 423 adding file changes
424 424 added 4 changesets with 4 changes to 4 files (+1 heads)
425 425 5 new obsolescence markers
426 426 $ hg -R tmpd debugobsolete | sort
427 427 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
428 428 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
429 429 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
430 430 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
431 431 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
432 432
433 433 Check obsolete keys are exchanged only if source has an obsolete store
434 434
435 435 $ hg init empty
436 436 $ hg --config extensions.debugkeys=debugkeys.py -R empty push tmpd
437 437 pushing to tmpd
438 438 listkeys phases
439 439 listkeys bookmarks
440 440 no changes found
441 441 listkeys phases
442 442 [1]
443 443
444 444 clone support
445 445 (markers are copied and extinct changesets are included to allow hardlinks)
446 446
447 447 $ hg clone tmpb clone-dest
448 448 updating to branch default
449 449 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
450 450 $ hg -R clone-dest log -G --hidden
451 451 @ 6:6f9641995072 (draft) [tip ] add n3w_3_c
452 452 |
453 453 | x 5:5601fb93a350 (draft *obsolete*) [ ] add new_3_c [rewritten as 6:6f9641995072]
454 454 |/
455 455 | x 4:ca819180edb9 (draft *obsolete*) [ ] add new_2_c [rewritten as 5:5601fb93a350]
456 456 |/
457 457 | x 3:cdbce2fbb163 (draft *obsolete*) [ ] add new_c [rewritten as 4:ca819180edb9]
458 458 |/
459 459 | o 2:245bde4270cd (public) [ ] add original_c
460 460 |/
461 461 o 1:7c3bad9141dc (public) [ ] add b
462 462 |
463 463 o 0:1f0dee641bb7 (public) [ ] add a
464 464
465 465 $ hg -R clone-dest debugobsolete
466 466 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
467 467 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
468 468 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
469 469 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
470 470 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
471 471
472 472
473 473 Destination repo have existing data
474 474 ---------------------------------------
475 475
476 476 On pull
477 477
478 478 $ hg init tmpe
479 479 $ cd tmpe
480 480 $ hg debugobsolete -d '1339 0' 1339133913391339133913391339133913391339 ca819180edb99ed25ceafb3e9584ac287e240b00
481 481 $ hg pull ../tmpb
482 482 pulling from ../tmpb
483 483 requesting all changes
484 484 adding changesets
485 485 adding manifests
486 486 adding file changes
487 487 added 4 changesets with 4 changes to 4 files (+1 heads)
488 488 5 new obsolescence markers
489 489 new changesets 1f0dee641bb7:6f9641995072
490 490 (run 'hg heads' to see heads, 'hg merge' to merge)
491 491 $ hg debugobsolete
492 492 1339133913391339133913391339133913391339 ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
493 493 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
494 494 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
495 495 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
496 496 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
497 497 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
498 498
499 499
500 500 On push
501 501
502 502 $ hg push ../tmpc
503 503 pushing to ../tmpc
504 504 searching for changes
505 505 no changes found
506 506 1 new obsolescence markers
507 507 [1]
508 508 $ hg -R ../tmpc debugobsolete
509 509 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
510 510 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
511 511 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
512 512 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
513 513 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
514 514 1339133913391339133913391339133913391339 ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
515 515
516 516 detect outgoing obsolete and unstable
517 517 ---------------------------------------
518 518
519 519
520 520 $ hg log -G
521 521 o 3:6f9641995072 (draft) [tip ] add n3w_3_c
522 522 |
523 523 | o 2:245bde4270cd (public) [ ] add original_c
524 524 |/
525 525 o 1:7c3bad9141dc (public) [ ] add b
526 526 |
527 527 o 0:1f0dee641bb7 (public) [ ] add a
528 528
529 529 $ hg up 'desc("n3w_3_c")'
530 530 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
531 531 $ mkcommit original_d
532 532 $ mkcommit original_e
533 533 $ hg debugobsolete --record-parents `getid original_d` -d '0 0'
534 534 obsoleted 1 changesets
535 535 1 new orphan changesets
536 536 $ hg debugobsolete | grep `getid original_d`
537 537 94b33453f93bdb8d457ef9b770851a618bf413e1 0 {6f96419950729f3671185b847352890f074f7557} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
538 538 $ hg log -r 'obsolete()'
539 539 4:94b33453f93b (draft *obsolete*) [ ] add original_d [pruned]
540 540 $ hg summary
541 541 parent: 5:cda648ca50f5 tip (orphan)
542 542 add original_e
543 543 branch: default
544 544 commit: (clean)
545 545 update: 1 new changesets, 2 branch heads (merge)
546 546 phases: 3 draft
547 547 orphan: 1 changesets
548 548 $ hg log -G -r '::orphan()'
549 549 @ 5:cda648ca50f5 (draft orphan) [tip ] add original_e
550 550 |
551 551 x 4:94b33453f93b (draft *obsolete*) [ ] add original_d [pruned]
552 552 |
553 553 o 3:6f9641995072 (draft) [ ] add n3w_3_c
554 554 |
555 555 o 1:7c3bad9141dc (public) [ ] add b
556 556 |
557 557 o 0:1f0dee641bb7 (public) [ ] add a
558 558
559 559
560 560 refuse to push obsolete changeset
561 561
562 562 $ hg push ../tmpc/ -r 'desc("original_d")'
563 563 pushing to ../tmpc/
564 564 searching for changes
565 565 abort: push includes obsolete changeset: 94b33453f93b!
566 566 [255]
567 567
568 568 refuse to push unstable changeset
569 569
570 570 $ hg push ../tmpc/
571 571 pushing to ../tmpc/
572 572 searching for changes
573 573 abort: push includes orphan changeset: cda648ca50f5!
574 574 [255]
575 575
576 576 Test that extinct changeset are properly detected
577 577
578 578 $ hg log -r 'extinct()'
579 579
580 580 Don't try to push extinct changeset
581 581
582 582 $ hg init ../tmpf
583 583 $ hg out ../tmpf
584 584 comparing with ../tmpf
585 585 searching for changes
586 586 0:1f0dee641bb7 (public) [ ] add a
587 587 1:7c3bad9141dc (public) [ ] add b
588 588 2:245bde4270cd (public) [ ] add original_c
589 589 3:6f9641995072 (draft) [ ] add n3w_3_c
590 590 4:94b33453f93b (draft *obsolete*) [ ] add original_d [pruned]
591 591 5:cda648ca50f5 (draft orphan) [tip ] add original_e
592 592 $ hg push ../tmpf -f # -f because be push unstable too
593 593 pushing to ../tmpf
594 594 searching for changes
595 595 adding changesets
596 596 adding manifests
597 597 adding file changes
598 598 added 6 changesets with 6 changes to 6 files (+1 heads)
599 599 7 new obsolescence markers
600 600 1 new orphan changesets
601 601
602 602 no warning displayed
603 603
604 604 $ hg push ../tmpf
605 605 pushing to ../tmpf
606 606 searching for changes
607 607 no changes found
608 608 [1]
609 609
610 610 Do not warn about new head when the new head is a successors of a remote one
611 611
612 612 $ hg log -G
613 613 @ 5:cda648ca50f5 (draft orphan) [tip ] add original_e
614 614 |
615 615 x 4:94b33453f93b (draft *obsolete*) [ ] add original_d [pruned]
616 616 |
617 617 o 3:6f9641995072 (draft) [ ] add n3w_3_c
618 618 |
619 619 | o 2:245bde4270cd (public) [ ] add original_c
620 620 |/
621 621 o 1:7c3bad9141dc (public) [ ] add b
622 622 |
623 623 o 0:1f0dee641bb7 (public) [ ] add a
624 624
625 625 $ hg up -q 'desc(n3w_3_c)'
626 626 $ mkcommit obsolete_e
627 627 created new head
628 628 $ hg debugobsolete `getid 'original_e'` `getid 'obsolete_e'` \
629 629 > -u 'test <test@example.net>'
630 630 obsoleted 1 changesets
631 631 $ hg outgoing ../tmpf # parasite hg outgoing testin
632 632 comparing with ../tmpf
633 633 searching for changes
634 634 6:3de5eca88c00 (draft) [tip ] add obsolete_e
635 635 $ hg push ../tmpf
636 636 pushing to ../tmpf
637 637 searching for changes
638 638 adding changesets
639 639 adding manifests
640 640 adding file changes
641 641 added 1 changesets with 1 changes to 1 files (+1 heads)
642 642 1 new obsolescence markers
643 643 obsoleted 1 changesets
644 644
645 645 test relevance computation
646 646 ---------------------------------------
647 647
648 648 Checking simple case of "marker relevance".
649 649
650 650
651 651 Reminder of the repo situation
652 652
653 653 $ hg log --hidden --graph
654 654 @ 6:3de5eca88c00 (draft) [tip ] add obsolete_e
655 655 |
656 656 | x 5:cda648ca50f5 (draft *obsolete*) [ ] add original_e [rewritten as 6:3de5eca88c00 by test <test@example.net>]
657 657 | |
658 658 | x 4:94b33453f93b (draft *obsolete*) [ ] add original_d [pruned]
659 659 |/
660 660 o 3:6f9641995072 (draft) [ ] add n3w_3_c
661 661 |
662 662 | o 2:245bde4270cd (public) [ ] add original_c
663 663 |/
664 664 o 1:7c3bad9141dc (public) [ ] add b
665 665 |
666 666 o 0:1f0dee641bb7 (public) [ ] add a
667 667
668 668
669 669 List of all markers
670 670
671 671 $ hg debugobsolete
672 672 1339133913391339133913391339133913391339 ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
673 673 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
674 674 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
675 675 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
676 676 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
677 677 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
678 678 94b33453f93bdb8d457ef9b770851a618bf413e1 0 {6f96419950729f3671185b847352890f074f7557} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
679 679 cda648ca50f50482b7055c0b0c4c117bba6733d9 3de5eca88c00aa039da7399a220f4a5221faa585 0 (*) {'user': 'test <test@example.net>'} (glob)
680 680
681 681 List of changesets with no chain
682 682
683 683 $ hg debugobsolete --hidden --rev ::2
684 684
685 685 List of changesets that are included on marker chain
686 686
687 687 $ hg debugobsolete --hidden --rev 6
688 688 cda648ca50f50482b7055c0b0c4c117bba6733d9 3de5eca88c00aa039da7399a220f4a5221faa585 0 (*) {'user': 'test <test@example.net>'} (glob)
689 689
690 690 List of changesets with a longer chain, (including a pruned children)
691 691
692 692 $ hg debugobsolete --hidden --rev 3
693 693 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
694 694 1339133913391339133913391339133913391339 ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
695 695 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
696 696 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
697 697 94b33453f93bdb8d457ef9b770851a618bf413e1 0 {6f96419950729f3671185b847352890f074f7557} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
698 698 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
699 699 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
700 700
701 701 List of both
702 702
703 703 $ hg debugobsolete --hidden --rev 3::6
704 704 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
705 705 1339133913391339133913391339133913391339 ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
706 706 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
707 707 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
708 708 94b33453f93bdb8d457ef9b770851a618bf413e1 0 {6f96419950729f3671185b847352890f074f7557} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
709 709 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
710 710 cda648ca50f50482b7055c0b0c4c117bba6733d9 3de5eca88c00aa039da7399a220f4a5221faa585 0 (*) {'user': 'test <test@example.net>'} (glob)
711 711 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
712 712
713 713 List of all markers in JSON
714 714
715 715 $ hg debugobsolete -Tjson
716 716 [
717 717 {
718 718 "date": [1339.0, 0],
719 719 "flag": 0,
720 720 "metadata": {"user": "test"},
721 721 "prednode": "1339133913391339133913391339133913391339",
722 722 "succnodes": ["ca819180edb99ed25ceafb3e9584ac287e240b00"]
723 723 },
724 724 {
725 725 "date": [1339.0, 0],
726 726 "flag": 0,
727 727 "metadata": {"user": "test"},
728 728 "prednode": "1337133713371337133713371337133713371337",
729 729 "succnodes": ["5601fb93a350734d935195fee37f4054c529ff39"]
730 730 },
731 731 {
732 732 "date": [121.0, 120],
733 733 "flag": 12,
734 734 "metadata": {"user": "test"},
735 735 "prednode": "245bde4270cd1072a27757984f9cda8ba26f08ca",
736 736 "succnodes": ["cdbce2fbb16313928851e97e0d85413f3f7eb77f"]
737 737 },
738 738 {
739 739 "date": [1338.0, 0],
740 740 "flag": 1,
741 741 "metadata": {"user": "test"},
742 742 "prednode": "5601fb93a350734d935195fee37f4054c529ff39",
743 743 "succnodes": ["6f96419950729f3671185b847352890f074f7557"]
744 744 },
745 745 {
746 746 "date": [1338.0, 0],
747 747 "flag": 0,
748 748 "metadata": {"user": "test"},
749 749 "prednode": "ca819180edb99ed25ceafb3e9584ac287e240b00",
750 750 "succnodes": ["1337133713371337133713371337133713371337"]
751 751 },
752 752 {
753 753 "date": [1337.0, 0],
754 754 "flag": 0,
755 755 "metadata": {"user": "test"},
756 756 "prednode": "cdbce2fbb16313928851e97e0d85413f3f7eb77f",
757 757 "succnodes": ["ca819180edb99ed25ceafb3e9584ac287e240b00"]
758 758 },
759 759 {
760 760 "date": [0.0, 0],
761 761 "flag": 0,
762 762 "metadata": {"user": "test"},
763 763 "parentnodes": ["6f96419950729f3671185b847352890f074f7557"],
764 764 "prednode": "94b33453f93bdb8d457ef9b770851a618bf413e1",
765 765 "succnodes": []
766 766 },
767 767 {
768 768 "date": *, (glob)
769 769 "flag": 0,
770 770 "metadata": {"user": "test <test@example.net>"},
771 771 "prednode": "cda648ca50f50482b7055c0b0c4c117bba6733d9",
772 772 "succnodes": ["3de5eca88c00aa039da7399a220f4a5221faa585"]
773 773 }
774 774 ]
775 775
776 776 Template keywords
777 777
778 778 $ hg debugobsolete -r6 -T '{succnodes % "{node|short}"} {date|shortdate}\n'
779 779 3de5eca88c00 ????-??-?? (glob)
780 780 $ hg debugobsolete -r6 -T '{join(metadata % "{key}={value}", " ")}\n'
781 781 user=test <test@example.net>
782 782 $ hg debugobsolete -r6 -T '{metadata}\n{metadata}\n'
783 783 'user': 'test <test@example.net>'
784 784 'user': 'test <test@example.net>'
785 785 $ hg debugobsolete -r6 -T '{succnodes}\n{succnodes}\n'
786 786 3de5eca88c00aa039da7399a220f4a5221faa585
787 787 3de5eca88c00aa039da7399a220f4a5221faa585
788 788 $ hg debugobsolete -r6 -T '{flag} {get(metadata, "user")}\n'
789 789 0 test <test@example.net>
790 790
791 791 Test the debug output for exchange
792 792 ----------------------------------
793 793
794 794 $ hg pull ../tmpb --config 'experimental.obsmarkers-exchange-debug=True' # bundle2
795 795 pulling from ../tmpb
796 796 searching for changes
797 797 no changes found
798 798 obsmarker-exchange: 346 bytes received
799 799
800 800 check hgweb does not explode
801 801 ====================================
802 802
803 803 $ hg unbundle $TESTDIR/bundles/hgweb+obs.hg
804 804 adding changesets
805 805 adding manifests
806 806 adding file changes
807 807 added 62 changesets with 63 changes to 9 files (+60 heads)
808 808 new changesets 50c51b361e60:c15e9edfca13
809 809 (run 'hg heads .' to see heads, 'hg merge' to merge)
810 810 $ for node in `hg log -r 'desc(babar_)' --template '{node}\n'`;
811 811 > do
812 812 > hg debugobsolete $node
813 813 > done
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 obsoleted 1 changesets
859 859 obsoleted 1 changesets
860 860 obsoleted 1 changesets
861 861 obsoleted 1 changesets
862 862 obsoleted 1 changesets
863 863 obsoleted 1 changesets
864 864 obsoleted 1 changesets
865 865 obsoleted 1 changesets
866 866 obsoleted 1 changesets
867 867 obsoleted 1 changesets
868 868 obsoleted 1 changesets
869 869 obsoleted 1 changesets
870 870 obsoleted 1 changesets
871 871 obsoleted 1 changesets
872 872 obsoleted 1 changesets
873 873 obsoleted 1 changesets
874 874 $ hg up tip
875 875 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
876 876
877 877 #if serve
878 878
879 879 $ hg serve -n test -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
880 880 $ cat hg.pid >> $DAEMON_PIDS
881 881
882 882 check changelog view
883 883
884 884 $ get-with-headers.py --headeronly localhost:$HGPORT 'shortlog/'
885 885 200 Script output follows
886 886
887 887 check graph view
888 888
889 889 $ get-with-headers.py --headeronly localhost:$HGPORT 'graph'
890 890 200 Script output follows
891 891
892 892 check filelog view
893 893
894 894 $ get-with-headers.py --headeronly localhost:$HGPORT 'log/'`hg log -r . -T "{node}"`/'babar'
895 895 200 Script output follows
896 896
897 897 $ get-with-headers.py --headeronly localhost:$HGPORT 'rev/68'
898 898 200 Script output follows
899 899 $ get-with-headers.py --headeronly localhost:$HGPORT 'rev/67'
900 900 404 Not Found
901 901 [1]
902 902
903 903 check that web.view config option:
904 904
905 905 $ killdaemons.py hg.pid
906 906 $ cat >> .hg/hgrc << EOF
907 907 > [web]
908 908 > view=all
909 909 > EOF
910 910 $ wait
911 911 $ hg serve -n test -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
912 912 $ get-with-headers.py --headeronly localhost:$HGPORT 'rev/67'
913 913 200 Script output follows
914 914 $ killdaemons.py hg.pid
915 915
916 916 Checking _enable=False warning if obsolete marker exists
917 917
918 918 $ echo '[experimental]' >> $HGRCPATH
919 919 $ echo "evolution=" >> $HGRCPATH
920 920 $ hg log -r tip
921 921 68:c15e9edfca13 (draft) [tip ] add celestine
922 922
923 923 reenable for later test
924 924
925 925 $ echo '[experimental]' >> $HGRCPATH
926 926 $ echo "evolution.exchange=True" >> $HGRCPATH
927 927 $ echo "evolution.createmarkers=True" >> $HGRCPATH
928 928
929 929 $ rm hg.pid access.log errors.log
930 930 #endif
931 931
932 932 Several troubles on the same changeset (create an unstable and bumped changeset)
933 933
934 934 $ hg debugobsolete `getid obsolete_e`
935 935 obsoleted 1 changesets
936 936 2 new orphan changesets
937 937 $ hg debugobsolete `getid original_c` `getid babar`
938 938 1 new phase-divergent changesets
939 939 $ hg log --config ui.logtemplate= -r 'phasedivergent() and orphan()'
940 940 changeset: 7:50c51b361e60
941 941 user: test
942 942 date: Thu Jan 01 00:00:00 1970 +0000
943 943 instability: orphan, phase-divergent
944 944 summary: add babar
945 945
946 946
947 947 test the "obsolete" templatekw
948 948
949 949 $ hg log -r 'obsolete()'
950 950 6:3de5eca88c00 (draft *obsolete*) [ ] add obsolete_e [pruned]
951 951
952 952 test the "troubles" templatekw
953 953
954 954 $ hg log -r 'phasedivergent() and orphan()'
955 955 7:50c51b361e60 (draft orphan phase-divergent) [ ] add babar
956 956
957 957 test the default cmdline template
958 958
959 959 $ hg log -T default -r 'phasedivergent()'
960 960 changeset: 7:50c51b361e60
961 961 user: test
962 962 date: Thu Jan 01 00:00:00 1970 +0000
963 963 instability: orphan, phase-divergent
964 964 summary: add babar
965 965
966 966 $ hg log -T default -r 'obsolete()'
967 967 changeset: 6:3de5eca88c00
968 968 parent: 3:6f9641995072
969 969 user: test
970 970 date: Thu Jan 01 00:00:00 1970 +0000
971 971 obsolete: pruned
972 972 summary: add obsolete_e
973 973
974 974
975 975 test the obsolete labels
976 976
977 977 $ hg log --config ui.logtemplate= --color=debug -r 'phasedivergent()'
978 978 [log.changeset changeset.draft changeset.unstable instability.orphan instability.phase-divergent|changeset: 7:50c51b361e60]
979 979 [log.user|user: test]
980 980 [log.date|date: Thu Jan 01 00:00:00 1970 +0000]
981 981 [log.instability|instability: orphan, phase-divergent]
982 982 [log.summary|summary: add babar]
983 983
984 984
985 985 $ hg log -T default -r 'phasedivergent()' --color=debug
986 986 [log.changeset changeset.draft changeset.unstable instability.orphan instability.phase-divergent|changeset: 7:50c51b361e60]
987 987 [log.user|user: test]
988 988 [log.date|date: Thu Jan 01 00:00:00 1970 +0000]
989 989 [log.instability|instability: orphan, phase-divergent]
990 990 [log.summary|summary: add babar]
991 991
992 992
993 993 $ hg log --config ui.logtemplate= --color=debug -r "obsolete()"
994 994 [log.changeset changeset.draft changeset.obsolete|changeset: 6:3de5eca88c00]
995 995 [log.parent changeset.draft|parent: 3:6f9641995072]
996 996 [log.user|user: test]
997 997 [log.date|date: Thu Jan 01 00:00:00 1970 +0000]
998 998 [log.obsfate|obsolete: pruned]
999 999 [log.summary|summary: add obsolete_e]
1000 1000
1001 1001
1002 1002 $ hg log -T default -r 'obsolete()' --color=debug
1003 1003 [log.changeset changeset.draft changeset.obsolete|changeset: 6:3de5eca88c00]
1004 1004 [log.parent changeset.draft|parent: 3:6f9641995072]
1005 1005 [log.user|user: test]
1006 1006 [log.date|date: Thu Jan 01 00:00:00 1970 +0000]
1007 1007 [log.obsfate|obsolete: pruned]
1008 1008 [log.summary|summary: add obsolete_e]
1009 1009
1010 1010
1011 1011 test summary output
1012 1012
1013 1013 $ hg up -r 'phasedivergent() and orphan()'
1014 1014 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
1015 1015 $ hg summary
1016 1016 parent: 7:50c51b361e60 (orphan, phase-divergent)
1017 1017 add babar
1018 1018 branch: default
1019 1019 commit: (clean)
1020 1020 update: 2 new changesets (update)
1021 1021 phases: 4 draft
1022 1022 orphan: 2 changesets
1023 1023 phase-divergent: 1 changesets
1024 1024 $ hg up -r 'obsolete()'
1025 1025 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
1026 1026 $ hg summary
1027 1027 parent: 6:3de5eca88c00 (obsolete)
1028 1028 add obsolete_e
1029 1029 branch: default
1030 1030 commit: (clean)
1031 1031 update: 3 new changesets (update)
1032 1032 phases: 4 draft
1033 1033 orphan: 2 changesets
1034 1034 phase-divergent: 1 changesets
1035 1035
1036 1036 #if serve
1037 1037
1038 1038 $ hg serve -n test -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
1039 1039 $ cat hg.pid >> $DAEMON_PIDS
1040 1040
1041 1041 check obsolete changeset
1042 1042
1043 1043 $ get-with-headers.py localhost:$HGPORT 'log?rev=first(obsolete())&style=paper' | grep '<span class="obsolete">'
1044 1044 <span class="phase">draft</span> <span class="obsolete">obsolete</span>
1045 1045 $ get-with-headers.py localhost:$HGPORT 'log?rev=first(obsolete())&style=coal' | grep '<span class="obsolete">'
1046 1046 <span class="phase">draft</span> <span class="obsolete">obsolete</span>
1047 1047 $ get-with-headers.py localhost:$HGPORT 'log?rev=first(obsolete())&style=gitweb' | grep '<span class="logtags">'
1048 1048 <span class="logtags"><span class="phasetag" title="draft">draft</span> <span class="obsoletetag" title="obsolete">obsolete</span> </span>
1049 1049 $ get-with-headers.py localhost:$HGPORT 'log?rev=first(obsolete())&style=monoblue' | grep '<span class="logtags">'
1050 1050 <span class="logtags"><span class="phasetag" title="draft">draft</span> <span class="obsoletetag" title="obsolete">obsolete</span> </span>
1051 1051 $ get-with-headers.py localhost:$HGPORT 'log?rev=first(obsolete())&style=spartan' | grep 'class="obsolete"'
1052 <th class="obsolete">obsolete:</th>
1053 <td class="obsolete">pruned by &#116;&#101;&#115;&#116; <span class="age">Thu, 01 Jan 1970 00:00:00 +0000</span></td>
1052 <th class="obsolete">obsolete:</th>
1053 <td class="obsolete">pruned by &#116;&#101;&#115;&#116; <span class="age">Thu, 01 Jan 1970 00:00:00 +0000</span></td>
1054 1054
1055 1055 check changeset with instabilities
1056 1056
1057 1057 $ get-with-headers.py localhost:$HGPORT 'log?rev=first(phasedivergent())&style=paper' | grep '<span class="instability">'
1058 1058 <span class="phase">draft</span> <span class="instability">orphan</span> <span class="instability">phase-divergent</span>
1059 1059 $ get-with-headers.py localhost:$HGPORT 'log?rev=first(phasedivergent())&style=coal' | grep '<span class="instability">'
1060 1060 <span class="phase">draft</span> <span class="instability">orphan</span> <span class="instability">phase-divergent</span>
1061 1061 $ get-with-headers.py localhost:$HGPORT 'log?rev=first(phasedivergent())&style=gitweb' | grep '<span class="logtags">'
1062 1062 <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>
1063 1063 $ get-with-headers.py localhost:$HGPORT 'log?rev=first(phasedivergent())&style=monoblue' | grep '<span class="logtags">'
1064 1064 <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>
1065 1065 $ get-with-headers.py localhost:$HGPORT 'log?rev=first(phasedivergent())&style=spartan' | grep 'class="instabilities"'
1066 1066 <th class="instabilities">instabilities:</th>
1067 1067 <td class="instabilities">orphan phase-divergent </td>
1068 1068
1069 1069 $ killdaemons.py
1070 1070
1071 1071 $ rm hg.pid access.log errors.log
1072 1072 #endif
1073 1073
1074 1074 Test incoming/outcoming with changesets obsoleted remotely, known locally
1075 1075 ===============================================================================
1076 1076
1077 1077 This test issue 3805
1078 1078
1079 1079 $ hg init repo-issue3805
1080 1080 $ cd repo-issue3805
1081 1081 $ echo "base" > base
1082 1082 $ hg ci -Am "base"
1083 1083 adding base
1084 1084 $ echo "foo" > foo
1085 1085 $ hg ci -Am "A"
1086 1086 adding foo
1087 1087 $ hg clone . ../other-issue3805
1088 1088 updating to branch default
1089 1089 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
1090 1090 $ echo "bar" >> foo
1091 1091 $ hg ci --amend
1092 1092 $ cd ../other-issue3805
1093 1093 $ hg log -G
1094 1094 @ 1:29f0c6921ddd (draft) [tip ] A
1095 1095 |
1096 1096 o 0:d20a80d4def3 (draft) [ ] base
1097 1097
1098 1098 $ hg log -G -R ../repo-issue3805
1099 1099 @ 2:323a9c3ddd91 (draft) [tip ] A
1100 1100 |
1101 1101 o 0:d20a80d4def3 (draft) [ ] base
1102 1102
1103 1103 $ hg incoming
1104 1104 comparing with $TESTTMP/tmpe/repo-issue3805
1105 1105 searching for changes
1106 1106 2:323a9c3ddd91 (draft) [tip ] A
1107 1107 $ hg incoming --bundle ../issue3805.hg
1108 1108 comparing with $TESTTMP/tmpe/repo-issue3805
1109 1109 searching for changes
1110 1110 2:323a9c3ddd91 (draft) [tip ] A
1111 1111 $ hg outgoing
1112 1112 comparing with $TESTTMP/tmpe/repo-issue3805
1113 1113 searching for changes
1114 1114 1:29f0c6921ddd (draft) [tip ] A
1115 1115
1116 1116 #if serve
1117 1117
1118 1118 $ hg serve -R ../repo-issue3805 -n test -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
1119 1119 $ cat hg.pid >> $DAEMON_PIDS
1120 1120
1121 1121 $ hg incoming http://localhost:$HGPORT
1122 1122 comparing with http://localhost:$HGPORT/
1123 1123 searching for changes
1124 1124 2:323a9c3ddd91 (draft) [tip ] A
1125 1125 $ hg outgoing http://localhost:$HGPORT
1126 1126 comparing with http://localhost:$HGPORT/
1127 1127 searching for changes
1128 1128 1:29f0c6921ddd (draft) [tip ] A
1129 1129
1130 1130 $ killdaemons.py
1131 1131
1132 1132 #endif
1133 1133
1134 1134 This test issue 3814
1135 1135
1136 1136 (nothing to push but locally hidden changeset)
1137 1137
1138 1138 $ cd ..
1139 1139 $ hg init repo-issue3814
1140 1140 $ cd repo-issue3805
1141 1141 $ hg push -r 323a9c3ddd91 ../repo-issue3814
1142 1142 pushing to ../repo-issue3814
1143 1143 searching for changes
1144 1144 adding changesets
1145 1145 adding manifests
1146 1146 adding file changes
1147 1147 added 2 changesets with 2 changes to 2 files
1148 1148 1 new obsolescence markers
1149 1149 $ hg out ../repo-issue3814
1150 1150 comparing with ../repo-issue3814
1151 1151 searching for changes
1152 1152 no changes found
1153 1153 [1]
1154 1154
1155 1155 Test that a local tag blocks a changeset from being hidden
1156 1156
1157 1157 $ hg tag -l visible -r 1 --hidden
1158 1158 $ hg log -G
1159 1159 @ 2:323a9c3ddd91 (draft) [tip ] A
1160 1160 |
1161 1161 | x 1:29f0c6921ddd (draft *obsolete*) [visible ] A [rewritten using amend as 2:323a9c3ddd91]
1162 1162 |/
1163 1163 o 0:d20a80d4def3 (draft) [ ] base
1164 1164
1165 1165 Test that removing a local tag does not cause some commands to fail
1166 1166
1167 1167 $ hg tag -l -r tip tiptag
1168 1168 $ hg tags
1169 1169 tiptag 2:323a9c3ddd91
1170 1170 tip 2:323a9c3ddd91
1171 1171 visible 1:29f0c6921ddd
1172 1172 $ hg --config extensions.strip= strip -r tip --no-backup
1173 1173 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
1174 1174 $ hg tags
1175 1175 visible 1:29f0c6921ddd
1176 1176 tip 1:29f0c6921ddd
1177 1177
1178 1178 Test bundle overlay onto hidden revision
1179 1179
1180 1180 $ cd ..
1181 1181 $ hg init repo-bundleoverlay
1182 1182 $ cd repo-bundleoverlay
1183 1183 $ echo "A" > foo
1184 1184 $ hg ci -Am "A"
1185 1185 adding foo
1186 1186 $ echo "B" >> foo
1187 1187 $ hg ci -m "B"
1188 1188 $ hg up 0
1189 1189 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1190 1190 $ echo "C" >> foo
1191 1191 $ hg ci -m "C"
1192 1192 created new head
1193 1193 $ hg log -G
1194 1194 @ 2:c186d7714947 (draft) [tip ] C
1195 1195 |
1196 1196 | o 1:44526ebb0f98 (draft) [ ] B
1197 1197 |/
1198 1198 o 0:4b34ecfb0d56 (draft) [ ] A
1199 1199
1200 1200
1201 1201 $ hg clone -r1 . ../other-bundleoverlay
1202 1202 adding changesets
1203 1203 adding manifests
1204 1204 adding file changes
1205 1205 added 2 changesets with 2 changes to 1 files
1206 1206 new changesets 4b34ecfb0d56:44526ebb0f98
1207 1207 updating to branch default
1208 1208 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1209 1209 $ cd ../other-bundleoverlay
1210 1210 $ echo "B+" >> foo
1211 1211 $ hg ci --amend -m "B+"
1212 1212 $ hg log -G --hidden
1213 1213 @ 2:b7d587542d40 (draft) [tip ] B+
1214 1214 |
1215 1215 | x 1:44526ebb0f98 (draft *obsolete*) [ ] B [rewritten using amend as 2:b7d587542d40]
1216 1216 |/
1217 1217 o 0:4b34ecfb0d56 (draft) [ ] A
1218 1218
1219 1219
1220 1220 $ hg incoming ../repo-bundleoverlay --bundle ../bundleoverlay.hg
1221 1221 comparing with ../repo-bundleoverlay
1222 1222 searching for changes
1223 1223 1:44526ebb0f98 (draft) [ ] B
1224 1224 2:c186d7714947 (draft) [tip ] C
1225 1225 $ hg log -G -R ../bundleoverlay.hg
1226 1226 o 3:c186d7714947 (draft) [tip ] C
1227 1227 |
1228 1228 | @ 2:b7d587542d40 (draft) [ ] B+
1229 1229 |/
1230 1230 o 0:4b34ecfb0d56 (draft) [ ] A
1231 1231
1232 1232
1233 1233 #if serve
1234 1234
1235 1235 Test issue 4506
1236 1236
1237 1237 $ cd ..
1238 1238 $ hg init repo-issue4506
1239 1239 $ cd repo-issue4506
1240 1240 $ echo "0" > foo
1241 1241 $ hg add foo
1242 1242 $ hg ci -m "content-0"
1243 1243
1244 1244 $ hg up null
1245 1245 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
1246 1246 $ echo "1" > bar
1247 1247 $ hg add bar
1248 1248 $ hg ci -m "content-1"
1249 1249 created new head
1250 1250 $ hg up 0
1251 1251 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
1252 1252 $ hg graft 1
1253 1253 grafting 1:1c9eddb02162 "content-1" (tip)
1254 1254
1255 1255 $ hg debugobsolete `hg log -r1 -T'{node}'` `hg log -r2 -T'{node}'`
1256 1256 obsoleted 1 changesets
1257 1257
1258 1258 $ hg serve -n test -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
1259 1259 $ cat hg.pid >> $DAEMON_PIDS
1260 1260
1261 1261 $ get-with-headers.py --headeronly localhost:$HGPORT 'rev/1'
1262 1262 404 Not Found
1263 1263 [1]
1264 1264 $ get-with-headers.py --headeronly localhost:$HGPORT 'file/tip/bar'
1265 1265 200 Script output follows
1266 1266 $ get-with-headers.py --headeronly localhost:$HGPORT 'annotate/tip/bar'
1267 1267 200 Script output follows
1268 1268
1269 1269 $ killdaemons.py
1270 1270
1271 1271 #endif
1272 1272
1273 1273 Test heads computation on pending index changes with obsolescence markers
1274 1274 $ cd ..
1275 1275 $ cat >$TESTTMP/test_extension.py << EOF
1276 1276 > from __future__ import absolute_import
1277 1277 > from mercurial.i18n import _
1278 1278 > from mercurial import cmdutil, registrar
1279 1279 >
1280 1280 > cmdtable = {}
1281 1281 > command = registrar.command(cmdtable)
1282 1282 > @command(b"amendtransient",[], _('hg amendtransient [rev]'))
1283 1283 > def amend(ui, repo, *pats, **opts):
1284 1284 > opts['message'] = 'Test'
1285 1285 > opts['logfile'] = None
1286 1286 > cmdutil.amend(ui, repo, repo['.'], {}, pats, opts)
1287 1287 > ui.write('%s\n' % repo.changelog.headrevs())
1288 1288 > EOF
1289 1289 $ cat >> $HGRCPATH << EOF
1290 1290 > [extensions]
1291 1291 > testextension=$TESTTMP/test_extension.py
1292 1292 > EOF
1293 1293 $ hg init repo-issue-nativerevs-pending-changes
1294 1294 $ cd repo-issue-nativerevs-pending-changes
1295 1295 $ mkcommit a
1296 1296 $ mkcommit b
1297 1297 $ hg up ".^"
1298 1298 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
1299 1299 $ echo aa > a
1300 1300 $ hg amendtransient
1301 1301 1 new orphan changesets
1302 1302 [1, 2]
1303 1303
1304 1304 Test cache consistency for the visible filter
1305 1305 1) We want to make sure that the cached filtered revs are invalidated when
1306 1306 bookmarks change
1307 1307 $ cd ..
1308 1308 $ cat >$TESTTMP/test_extension.py << EOF
1309 1309 > from __future__ import absolute_import, print_function
1310 1310 > import weakref
1311 1311 > from mercurial import (
1312 1312 > bookmarks,
1313 1313 > cmdutil,
1314 1314 > extensions,
1315 1315 > repoview,
1316 1316 > )
1317 1317 > def _bookmarkchanged(orig, bkmstoreinst, *args, **kwargs):
1318 1318 > reporef = weakref.ref(bkmstoreinst._repo)
1319 1319 > def trhook(tr):
1320 1320 > repo = reporef()
1321 1321 > hidden1 = repoview.computehidden(repo)
1322 1322 > hidden = repoview.filterrevs(repo, 'visible')
1323 1323 > if sorted(hidden1) != sorted(hidden):
1324 1324 > print("cache inconsistency")
1325 1325 > bkmstoreinst._repo.currenttransaction().addpostclose('test_extension', trhook)
1326 1326 > orig(bkmstoreinst, *args, **kwargs)
1327 1327 > def extsetup(ui):
1328 1328 > extensions.wrapfunction(bookmarks.bmstore, '_recordchange',
1329 1329 > _bookmarkchanged)
1330 1330 > EOF
1331 1331
1332 1332 $ hg init repo-cache-inconsistency
1333 1333 $ cd repo-issue-nativerevs-pending-changes
1334 1334 $ mkcommit a
1335 1335 a already tracked!
1336 1336 $ mkcommit b
1337 1337 $ hg id
1338 1338 13bedc178fce tip
1339 1339 $ echo "hello" > b
1340 1340 $ hg commit --amend -m "message"
1341 1341 $ hg book bookb -r 13bedc178fce --hidden
1342 1342 bookmarking hidden changeset 13bedc178fce
1343 1343 (hidden revision '13bedc178fce' was rewritten as: a9b1f8652753)
1344 1344 $ hg log -r 13bedc178fce
1345 1345 4:13bedc178fce (draft *obsolete*) [ bookb] add b [rewritten using amend as 5:a9b1f8652753]
1346 1346 $ hg book -d bookb
1347 1347 $ hg log -r 13bedc178fce
1348 1348 abort: hidden revision '13bedc178fce' was rewritten as: a9b1f8652753!
1349 1349 (use --hidden to access hidden revisions)
1350 1350 [255]
1351 1351
1352 1352 Empty out the test extension, as it isn't compatible with later parts
1353 1353 of the test.
1354 1354 $ echo > $TESTTMP/test_extension.py
1355 1355
1356 1356 Test ability to pull changeset with locally applying obsolescence markers
1357 1357 (issue4945)
1358 1358
1359 1359 $ cd ..
1360 1360 $ hg init issue4845
1361 1361 $ cd issue4845
1362 1362
1363 1363 $ echo foo > f0
1364 1364 $ hg add f0
1365 1365 $ hg ci -m '0'
1366 1366 $ echo foo > f1
1367 1367 $ hg add f1
1368 1368 $ hg ci -m '1'
1369 1369 $ echo foo > f2
1370 1370 $ hg add f2
1371 1371 $ hg ci -m '2'
1372 1372
1373 1373 $ echo bar > f2
1374 1374 $ hg commit --amend --config experimental.evolution.createmarkers=True
1375 1375 $ hg log -G
1376 1376 @ 3:b0551702f918 (draft) [tip ] 2
1377 1377 |
1378 1378 o 1:e016b03fd86f (draft) [ ] 1
1379 1379 |
1380 1380 o 0:a78f55e5508c (draft) [ ] 0
1381 1381
1382 1382 $ hg log -G --hidden
1383 1383 @ 3:b0551702f918 (draft) [tip ] 2
1384 1384 |
1385 1385 | x 2:e008cf283490 (draft *obsolete*) [ ] 2 [rewritten using amend as 3:b0551702f918]
1386 1386 |/
1387 1387 o 1:e016b03fd86f (draft) [ ] 1
1388 1388 |
1389 1389 o 0:a78f55e5508c (draft) [ ] 0
1390 1390
1391 1391
1392 1392 $ hg strip --hidden -r 2 --config extensions.strip= --config devel.strip-obsmarkers=no
1393 1393 saved backup bundle to $TESTTMP/tmpe/issue4845/.hg/strip-backup/e008cf283490-ede36964-backup.hg
1394 1394 $ hg debugobsolete
1395 1395 e008cf2834908e5d6b0f792a9d4b0e2272260fb8 b0551702f918510f01ae838ab03a463054c67b46 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '8', 'operation': 'amend', 'user': 'test'}
1396 1396 $ hg log -G
1397 1397 @ 2:b0551702f918 (draft) [tip ] 2
1398 1398 |
1399 1399 o 1:e016b03fd86f (draft) [ ] 1
1400 1400 |
1401 1401 o 0:a78f55e5508c (draft) [ ] 0
1402 1402
1403 1403 $ hg log -G --hidden
1404 1404 @ 2:b0551702f918 (draft) [tip ] 2
1405 1405 |
1406 1406 o 1:e016b03fd86f (draft) [ ] 1
1407 1407 |
1408 1408 o 0:a78f55e5508c (draft) [ ] 0
1409 1409
1410 1410 $ hg debugbundle .hg/strip-backup/e008cf283490-*-backup.hg
1411 1411 Stream params: {Compression: BZ}
1412 1412 changegroup -- {nbchanges: 1, version: 02}
1413 1413 e008cf2834908e5d6b0f792a9d4b0e2272260fb8
1414 1414 phase-heads -- {}
1415 1415 e008cf2834908e5d6b0f792a9d4b0e2272260fb8 draft
1416 1416
1417 1417 $ hg pull .hg/strip-backup/e008cf283490-*-backup.hg
1418 1418 pulling from .hg/strip-backup/e008cf283490-ede36964-backup.hg
1419 1419 searching for changes
1420 1420 no changes found
1421 1421 $ hg debugobsolete
1422 1422 e008cf2834908e5d6b0f792a9d4b0e2272260fb8 b0551702f918510f01ae838ab03a463054c67b46 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '8', 'operation': 'amend', 'user': 'test'}
1423 1423 $ hg log -G
1424 1424 @ 2:b0551702f918 (draft) [tip ] 2
1425 1425 |
1426 1426 o 1:e016b03fd86f (draft) [ ] 1
1427 1427 |
1428 1428 o 0:a78f55e5508c (draft) [ ] 0
1429 1429
1430 1430 $ hg log -G --hidden
1431 1431 @ 2:b0551702f918 (draft) [tip ] 2
1432 1432 |
1433 1433 o 1:e016b03fd86f (draft) [ ] 1
1434 1434 |
1435 1435 o 0:a78f55e5508c (draft) [ ] 0
1436 1436
1437 1437
1438 1438 Testing that strip remove markers:
1439 1439
1440 1440 $ hg strip -r 1 --config extensions.strip=
1441 1441 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
1442 1442 saved backup bundle to $TESTTMP/tmpe/issue4845/.hg/strip-backup/e016b03fd86f-65ede734-backup.hg
1443 1443 $ hg debugobsolete
1444 1444 $ hg log -G
1445 1445 @ 0:a78f55e5508c (draft) [tip ] 0
1446 1446
1447 1447 $ hg log -G --hidden
1448 1448 @ 0:a78f55e5508c (draft) [tip ] 0
1449 1449
1450 1450 $ hg debugbundle .hg/strip-backup/e016b03fd86f-*-backup.hg
1451 1451 Stream params: {Compression: BZ}
1452 1452 changegroup -- {nbchanges: 2, version: 02}
1453 1453 e016b03fd86fcccc54817d120b90b751aaf367d6
1454 1454 b0551702f918510f01ae838ab03a463054c67b46
1455 1455 obsmarkers -- {}
1456 1456 version: 1 (92 bytes)
1457 1457 e008cf2834908e5d6b0f792a9d4b0e2272260fb8 b0551702f918510f01ae838ab03a463054c67b46 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '8', 'operation': 'amend', 'user': 'test'}
1458 1458 phase-heads -- {}
1459 1459 b0551702f918510f01ae838ab03a463054c67b46 draft
1460 1460
1461 1461 $ hg unbundle .hg/strip-backup/e016b03fd86f-*-backup.hg
1462 1462 adding changesets
1463 1463 adding manifests
1464 1464 adding file changes
1465 1465 added 2 changesets with 2 changes to 2 files
1466 1466 1 new obsolescence markers
1467 1467 new changesets e016b03fd86f:b0551702f918
1468 1468 (run 'hg update' to get a working copy)
1469 1469 $ hg debugobsolete | sort
1470 1470 e008cf2834908e5d6b0f792a9d4b0e2272260fb8 b0551702f918510f01ae838ab03a463054c67b46 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '8', 'operation': 'amend', 'user': 'test'}
1471 1471 $ hg log -G
1472 1472 o 2:b0551702f918 (draft) [tip ] 2
1473 1473 |
1474 1474 o 1:e016b03fd86f (draft) [ ] 1
1475 1475 |
1476 1476 @ 0:a78f55e5508c (draft) [ ] 0
1477 1477
1478 1478 $ hg log -G --hidden
1479 1479 o 2:b0551702f918 (draft) [tip ] 2
1480 1480 |
1481 1481 o 1:e016b03fd86f (draft) [ ] 1
1482 1482 |
1483 1483 @ 0:a78f55e5508c (draft) [ ] 0
1484 1484
1485 1485 Test that 'hg debugobsolete --index --rev' can show indices of obsmarkers when
1486 1486 only a subset of those are displayed (because of --rev option)
1487 1487 $ hg init doindexrev
1488 1488 $ cd doindexrev
1489 1489 $ echo a > a
1490 1490 $ hg ci -Am a
1491 1491 adding a
1492 1492 $ hg ci --amend -m aa
1493 1493 $ echo b > b
1494 1494 $ hg ci -Am b
1495 1495 adding b
1496 1496 $ hg ci --amend -m bb
1497 1497 $ echo c > c
1498 1498 $ hg ci -Am c
1499 1499 adding c
1500 1500 $ hg ci --amend -m cc
1501 1501 $ echo d > d
1502 1502 $ hg ci -Am d
1503 1503 adding d
1504 1504 $ hg ci --amend -m dd --config experimental.evolution.track-operation=1
1505 1505 $ hg debugobsolete --index --rev "3+7"
1506 1506 1 6fdef60fcbabbd3d50e9b9cbc2a240724b91a5e1 d27fb9b066076fd921277a4b9e8b9cb48c95bc6a 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'test'}
1507 1507 3 4715cf767440ed891755448016c2b8cf70760c30 7ae79c5d60f049c7b0dd02f5f25b9d60aaf7b36d 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'test'}
1508 1508 $ hg debugobsolete --index --rev "3+7" -Tjson
1509 1509 [
1510 1510 {
1511 1511 "date": [0.0, 0],
1512 1512 "flag": 0,
1513 1513 "index": 1,
1514 1514 "metadata": {"ef1": "1", "operation": "amend", "user": "test"},
1515 1515 "prednode": "6fdef60fcbabbd3d50e9b9cbc2a240724b91a5e1",
1516 1516 "succnodes": ["d27fb9b066076fd921277a4b9e8b9cb48c95bc6a"]
1517 1517 },
1518 1518 {
1519 1519 "date": [0.0, 0],
1520 1520 "flag": 0,
1521 1521 "index": 3,
1522 1522 "metadata": {"ef1": "1", "operation": "amend", "user": "test"},
1523 1523 "prednode": "4715cf767440ed891755448016c2b8cf70760c30",
1524 1524 "succnodes": ["7ae79c5d60f049c7b0dd02f5f25b9d60aaf7b36d"]
1525 1525 }
1526 1526 ]
1527 1527
1528 1528 Test the --delete option of debugobsolete command
1529 1529 $ hg debugobsolete --index
1530 1530 0 cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b f9bd49731b0b175e42992a3c8fa6c678b2bc11f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'test'}
1531 1531 1 6fdef60fcbabbd3d50e9b9cbc2a240724b91a5e1 d27fb9b066076fd921277a4b9e8b9cb48c95bc6a 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'test'}
1532 1532 2 1ab51af8f9b41ef8c7f6f3312d4706d870b1fb74 29346082e4a9e27042b62d2da0e2de211c027621 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'test'}
1533 1533 3 4715cf767440ed891755448016c2b8cf70760c30 7ae79c5d60f049c7b0dd02f5f25b9d60aaf7b36d 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'test'}
1534 1534 $ hg debugobsolete --delete 1 --delete 3
1535 1535 deleted 2 obsolescence markers
1536 1536 $ hg debugobsolete
1537 1537 cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b f9bd49731b0b175e42992a3c8fa6c678b2bc11f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'test'}
1538 1538 1ab51af8f9b41ef8c7f6f3312d4706d870b1fb74 29346082e4a9e27042b62d2da0e2de211c027621 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'test'}
1539 1539
1540 1540 Test adding changeset after obsmarkers affecting it
1541 1541 (eg: during pull, or unbundle)
1542 1542
1543 1543 $ mkcommit e
1544 1544 $ hg bundle -r . --base .~1 ../bundle-2.hg
1545 1545 1 changesets found
1546 1546 $ getid .
1547 1547 $ hg --config extensions.strip= strip -r .
1548 1548 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
1549 1549 saved backup bundle to $TESTTMP/tmpe/issue4845/doindexrev/.hg/strip-backup/9bc153528424-ee80edd4-backup.hg
1550 1550 $ hg debugobsolete 9bc153528424ea266d13e57f9ff0d799dfe61e4b
1551 1551 $ hg unbundle ../bundle-2.hg
1552 1552 adding changesets
1553 1553 adding manifests
1554 1554 adding file changes
1555 1555 added 1 changesets with 1 changes to 1 files
1556 1556 (run 'hg update' to get a working copy)
1557 1557 $ hg log -G
1558 1558 @ 7:7ae79c5d60f0 (draft) [tip ] dd
1559 1559 |
1560 1560 | o 6:4715cf767440 (draft) [ ] d
1561 1561 |/
1562 1562 o 5:29346082e4a9 (draft) [ ] cc
1563 1563 |
1564 1564 o 3:d27fb9b06607 (draft) [ ] bb
1565 1565 |
1566 1566 | o 2:6fdef60fcbab (draft) [ ] b
1567 1567 |/
1568 1568 o 1:f9bd49731b0b (draft) [ ] aa
1569 1569
1570 1570
1571 1571 $ cd ..
General Comments 0
You need to be logged in to leave comments. Login now