Skip to content

Commit b7b1265

Browse files
author
daniel
committed
Merged rocky's patch for ''downloadable diffs'' in Changesets. Fixes #87.
git-svn-id: http://trac.edgewall.org/intertrac/log:/trunk@421 af82e41b-90c4-0310-8c96-b1721e28e2e2
1 parent 0ac9ebf commit b7b1265

File tree

2 files changed

+51
-8
lines changed

2 files changed

+51
-8
lines changed

templates/changeset.cs

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
<?cs include "header.cs"?>
22
<div id="page-content">
3-
<div id="subheader-links">
4-
<br />
5-
</div>
3+
<ul class="subheader-links">
4+
<li><a href="?format=diff">Download Diff</a></li>
5+
</ul>
66
<div id="main">
77
<div id="main-content">
88

@@ -76,6 +76,12 @@ Output below might not be useful.
7676
<?cs var:changeset.diff_output ?>
7777
</div>
7878

79+
<div id="main-footer">
80+
Download in other formats: <br />
81+
<a href="?format=diff">Unified Diff</a>
82+
<br />
83+
</div>
84+
7985
</div>
8086
</div>
8187
</div>

trac/Changeset.py

Lines changed: 42 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -112,14 +112,15 @@ def close(self):
112112
self.out.write('</table>')
113113

114114

115-
class DiffEditor (delta.Editor):
115+
class HtmlDiffEditor (delta.Editor):
116116
"""
117-
generates a unified diff of the changes for a given changeset.
117+
generates a htmlized unified diff of the changes for a given changeset.
118118
the output is written to stdout.
119119
"""
120-
def __init__(self, old_root, new_root, output):
120+
def __init__(self, old_root, new_root, rev, output):
121121
self.old_root = old_root
122122
self.new_root = new_root
123+
self.rev = rev
123124
self.output = output
124125

125126
def print_diff (self, old_path, new_path, pool):
@@ -149,8 +150,33 @@ def open_file(self, path, parent_baton, base_revision, file_pool):
149150

150151
def apply_textdelta(self, file_baton, base_checksum):
151152
self.print_diff (*file_baton)
153+
154+
class UnifiedDiffEditor(HtmlDiffEditor):
155+
"""
156+
generates a unified diff of the changes for a given changeset.
157+
the output is written to stdout.
158+
"""
159+
def print_diff (self, old_path, new_path, pool):
160+
if not old_path or not new_path:
161+
return
162+
163+
options = ['-u']
164+
options.append('-L')
165+
options.append("%s\t(revision %d)" % (old_path, self.rev-1))
166+
options.append('-L')
167+
options.append("%s\t(revision %d)" % (new_path, self.rev))
168+
169+
differ = fs.FileDiff(self.old_root, old_path,
170+
self.new_root, new_path, pool, options)
171+
differ.get_files()
172+
pobj = differ.get_pipe()
173+
line = pobj.readline()
174+
while line:
175+
self.output.write(line)
176+
line = pobj.readline()
177+
152178

153-
def render_diffs(fs_ptr, rev, pool):
179+
def render_diffs(fs_ptr, rev, pool, diff_class=HtmlDiffEditor):
154180
"""
155181
generates a unified diff of the changes for a given changeset.
156182
the output is written to stdout.
@@ -159,7 +185,9 @@ def render_diffs(fs_ptr, rev, pool):
159185
new_root = fs.revision_root(fs_ptr, rev, pool)
160186

161187
output = StringIO()
162-
editor = DiffEditor(old_root, new_root, output)
188+
189+
editor = diff_class(old_root, new_root, rev, output)
190+
163191
e_ptr, e_baton = delta.make_editor(editor, pool)
164192

165193
if util.SVN_VER_MAJOR == 0 and util.SVN_VER_MINOR == 37:
@@ -230,3 +258,12 @@ def render (self):
230258

231259
difftext = render_diffs(self.fs_ptr, int(self.rev), self.pool)
232260
self.req.hdf.setValue('changeset.diff_output', difftext)
261+
262+
def display_diff (self):
263+
self.req.send_response(200)
264+
self.req.send_header('Content-Type', 'text/plain')
265+
self.req.end_headers()
266+
difftext = render_diffs(self.fs_ptr, int(self.rev), self.pool, UnifiedDiffEditor)
267+
self.req.write(difftext)
268+
269+

0 commit comments

Comments
 (0)