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