1
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:py="http://purl.org/kid/ns#"
3
py:extends="'master.kid'">
5
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" py:replace="''"/>
6
<title> ${branch.friendly_name} : revision ${change.revno} </title>
8
<span py:strip="True" py:def="file_link(filename, file_id)">
9
<a href="${branch.url([ '/annotate', revid ],
10
**util.get_context(file_id=file_id))}" title="Annotate ${filename}">${filename}</a>
12
<span py:strip="True" py:def="file_link_rev(filename, file_id, revid)">
13
<a href="${branch.url([ '/annotate', revid ],
14
**util.get_context(file_id=file_id))}" title="Annotate ${filename} at revision ${history.get_revno(revid)}">${filename}</a>
17
<span py:replace="use_collapse_buttons()"></span>
19
<script type="text/javascript"> <!--
20
function show_sbs(path) {
21
collapseDisplay('style', 'sbs', 'table');
22
collapseDisplay('style', 'unified', 'none');
23
document.cookie='diff=sbs; path=' + path;
25
function show_unified(path) {
26
collapseDisplay('style', 'unified', 'table');
27
collapseDisplay('style', 'sbs', 'none');
28
document.cookie='diff=unified; path=' + path;
31
sortCollapseElements();
32
if (document.cookie.indexOf('diff=unified') >= 0) {
35
if (document.cookie.indexOf('stop=1') >= 0) {
38
if (document.cookie.indexOf('diff=unified') >= 0) {
39
window.location.hash = window.location.hash;
40
document.cookie='stop=1; max-age=5; path=' + window.location.pathname;
46
<body onload="javascript:load('${branch.url('/')}')">
50
<h1> <span class="branch-name">${branch.friendly_name}</span> : revision ${change.revno}
51
<span py:if="compare_revid is not None"> (compared to revision ${history.get_revno(compare_revid)}) </span>
54
<div> <b>→</b> <a href="${branch.context_url([ '/files', revid ])}">
55
browse files at revision ${change.revno} </a> </div>
56
<div> <b>→</b> <a href="${branch.context_url('/changes', start_revid=revid)}">
57
view history from revision ${change.revno} </a> </div>
58
<span py:if="compare_revid is not None" py:strip="True">
59
<div> <b>→</b> <a href="${branch.url([ '/bundle', revid, compare_revid, 'bundle.txt' ])}">
60
download bundle from ${history.get_revno(compare_revid)} to ${change.revno} </a> </div>
62
<span py:if="(remember is not None) and (compare_revid is None) and (revid != remember)" py:strip="True">
63
<div> <b>→</b> <a href="${branch.context_url([ '/revision', revid ], compare_revid=remember)}">
64
compare with revision ${history.get_revno(remember)} </a></div>
66
<span py:if="remember != revid" py:strip="True">
67
<div> <b>→</b> <a href="${branch.context_url([ '/revision', revid ], remember=revid, compare_revid=None)}">
68
compare with another revision </a></div>
70
<span py:if="compare_revid is not None" py:strip="True">
71
<div> <b>→</b> <a href="${branch.context_url([ '/revision', compare_revid ], remember=revid, compare_revid=revid)}">
72
reverse the comparison (${change.revno} to ${history.get_revno(compare_revid)})</a></div>
73
<div> <b>→</b> <a href="${branch.context_url([ '/revision', revid ], remember=None, compare_revid=None)}">
74
stop comparing with revision ${history.get_revno(compare_revid)} </a></div>
79
<div class="revision-info">
82
<th class="author">committed by:</th>
83
<td class="author"> ${util.hide_email(change.author)} </td>
86
<th class="date">date:</th>
87
<td class="date"> ${util.date_time(change.date)} </td>
90
<tr py:if="len(change.merge_points) > 0">
91
<th class="children"> merged in: </th>
93
<span py:for="child in change.merge_points">
94
${revision_link(child.revid, '(' + child.revno + util.if_present(' %s', child.branch_nick) + ')', clear=1, start_revid=child.revid)} <br />
98
<tr py:if="len(change.parents) > 1">
99
<th class="parents"> merged from: </th>
101
<span py:for="parent in change.parents"><span py:if="parent.revid != change.parents[0].revid">
102
${revision_link(parent.revid, '(' + parent.revno + util.if_present(' %s', parent.branch_nick) + ')', clear=1, start_revid=parent.revid)} <br />
108
<th class="description">description:</th>
109
<td class="description"><span py:for="line in change.comment_clean">${XML(line)} <br /></span> </td>
112
<tr class="divider"> <th></th> <td></td> </tr>
114
<tr py:if="change.changes.added">
115
<th class="files"> files added: </th>
116
<td class="files"> <span py:for="filename, file_id in change.changes.added" class="filename">${file_link(filename, file_id)} <br /></span> </td>
118
<tr py:if="change.changes.removed">
119
<th class="files"> files removed: </th>
120
<td class="files"> <span py:for="filename, file_id in change.changes.removed" class="filename">
121
${file_link_rev(filename, file_id, change.parents[0].revid)} <br /></span>
124
<tr py:if="change.changes.renamed">
125
<th class="files"> files renamed: </th>
126
<td class="files"> <span py:for="old_filename, new_filename, file_id in change.changes.renamed" class="filename">
127
${file_link(old_filename, file_id)} => ${file_link(new_filename, file_id)}<br />
130
<tr py:if="change.changes.modified">
131
<th class="files"> files modified: </th>
133
<span py:if="not show_plain_diffs" py:strip="True">
134
<span py:for="item in change.changes.modified" class="collapse-style-sbs-content">
135
<a href="#${item.filename}-s" class="filename" title="Jump to ${item.filename} below">${item.filename}</a><br />
137
<span py:for="item in change.changes.modified" class="collapse-style-unified-content">
138
<a href="#${item.filename}-u" class="filename" title="Jump to ${item.filename} below">${item.filename}</a><br />
141
<span py:if="show_plain_diffs" py:strip="True">
142
<span py:for="item in change.changes.modified" py:strip="True">
143
<a href="#${item.filename}" class="filename" title="Jump to ${item.filename} below">${item.filename}</a><br />
151
<div py:if="show_plain_diffs" py:strip="True">
152
Diff of ${line_count} lines is too long to display richly -- limit is ${line_count_limit} lines.
154
<pre class="diff-plain">
155
<span py:strip="True" py:for="item in change.changes.modified">
156
<a name="${item.filename}" />${item.raw_diff}
161
<div py:if="change.changes.modified and not show_plain_diffs" py:strip="True">
163
<table class="diff-option-buttons">
165
<td> ${collapse_all_button('file', 'table-row')} </td>
168
<a href="javascript:show_sbs('${branch.url('/')}')" class="hide-all collapse-style-sbs-show" title="collapse">
169
<img src="${tg.url('/static/images/nav-small-out.gif')}" width="22" height="10" class="collapse-triangle" />show side by side</a>
170
<a href="javascript:show_unified('${branch.url('/')}')" class="hide-all collapse-style-unified-show" title="expand">
171
<img src="${tg.url('/static/images/nav-small-in.gif')}" width="22" height="10" class="collapse-triangle" />show unified diff</a>
174
<td class="diff-key-block diff-insert"></td>
175
<td class="label"> added </td>
176
<td class="diff-key-block diff-delete"></td>
177
<td class="label"> removed</td>
181
<!-- ! i'm not a big fan of embedding python code here, but the alternatives all seem to be worse -->
182
<?python uniqs={}; ?>
185
<!-- ! side-by-side diff -->
186
<table class="diff-block collapse-style-sbs-content">
187
<span py:strip="True" py:for="item in change.changes.modified">
188
<tr><th class="filename" colspan="4">
189
${collapse_button('file', util.uniq(uniqs, item.file_id), 'table-row')}
190
<a href="${branch.url([ '/annotate', change.revid ], **util.get_context(file_id=item.file_id))}"
191
name="${item.filename}-s" title="Annotate ${item.filename}">${item.filename}</a>
194
<span py:strip="True" py:for="chunk in item.sbs_chunks">
195
<tr class="diff-chunk collapse-file-${util.uniq(uniqs, item.file_id)}-content">
196
<th class="lineno">old</th> <th></th> <th class="lineno">new</th> <th></th>
198
<tr py:for="line in chunk.diff" class="diff-chunk collapse-file-${util.uniq(uniqs, item.file_id)}-content">
199
<span py:if="line.old_lineno" py:strip="True">
200
<td class="lineno">${line.old_lineno}</td>
201
<td class="diff-${line.old_type}">${line.old_line}</td>
203
<span py:if="not line.old_lineno" py:strip="True">
204
<td class="lineno-skip">${line.old_lineno}</td>
205
<td class="diff-${line.old_type}-skip">${line.old_line}</td>
207
<span py:if="line.new_lineno" py:strip="True">
208
<td py:if="line.new_lineno" class="lineno">${line.new_lineno}</td>
209
<td class="diff-${line.new_type}">${line.new_line}</td>
211
<span py:if="not line.new_lineno" py:strip="True">
212
<td py:if="not line.new_lineno" class="lineno-skip">${line.new_lineno}</td>
213
<td class="diff-${line.new_type}-skip">${line.new_line}</td>
216
<tr class="diff-chunk-spacing collapse-file-${util.uniq(uniqs, item.file_id)}-content"> <td colspan="4"> </td> </tr>
218
<tr class="diff-spacing"> <td colspan="4"> </td> </tr>
222
<!-- ! unified diff -->
223
<table class="diff-block collapse-style-unified-content">
224
<span py:strip="True" py:for="item in change.changes.modified">
225
<tr><th class="filename" colspan="4">
226
${collapse_button('file', util.uniq(uniqs, item.file_id), 'table-row')}
227
<a href="${branch.url([ '/annotate', change.revid ], **util.get_context(file_id=item.file_id))}"
228
name="${item.filename}-u" title="Annotate ${item.filename}">${item.filename}</a>
231
<span py:strip="True" py:for="chunk in item.chunks">
232
<tr class="diff-chunk collapse-file-${util.uniq(uniqs, item.file_id)}-content"> <th class="lineno">old</th> <th class="lineno">new</th> <th></th> <th></th> </tr>
233
<tr py:for="line in chunk.diff" class="diff-chunk collapse-file-${util.uniq(uniqs, item.file_id)}-content">
234
<td class="lineno">${line.old_lineno}</td>
235
<td class="lineno">${line.new_lineno}</td>
236
<td class="diff-${line.type} text">${line.line}</td>
239
<tr class="diff-chunk-spacing collapse-file-${util.uniq(uniqs, item.file_id)}-content"> <td colspan="4"> </td> </tr>
241
<tr class="diff-spacing"> <td colspan="4"> </td> </tr>
247
<div py:if="navigation.prev_page_revid or navigation.next_page_revid" class="bar">
251
<a py:if="navigation.prev_page_revid" href="${navigation.prev_page_url}"> < revision ${history.get_revno(navigation.prev_page_revid)} </a>
253
<td class="rbuttons" align="right">
254
<a py:if="navigation.next_page_revid" href="${navigation.next_page_url}"> revision ${history.get_revno(navigation.next_page_revid)} > </a>