[[[
Add truncate_diff_lines feature to mailer.py hook script. If this
is set to a non-zero value, then diffs longer than the specified
number of lines will be truncated in email messages.
mailer.py (TextCommitRenderer::generate_content): Obtain
truncate_diff_lines value from cfg, and pass it through in the data sent
to renderer.render().
(TextCommitRenderer::render): Pass data.truncate_diff_lines through to
self._render_diffs().
(TextCommitRenderer::render::_render_diffs): New truncate_diff_lines
arg, and new logic to implement the truncation.
mailer.conf.example: Add commented-out example for truncate_diff_lines.
]]]
=== tools/hook-scripts/mailer.py
==================================================================
--- mailer.py (revision 18531)
+++ mailer.py (revision 18532)
@@ -589,6 +589,12 @@
show_nonmatching_paths = cfg.get('show_nonmatching_paths', group, params) \
or 'yes'
+ try:
+ truncate_diff_lines = int(
+ cfg.get('truncate_diff_lines', group, params))
+ except ValueError:
+ truncate_diff_lines = 0
+
# figure out the lists of changes outside the selected path-space
other_added_data = other_removed_data = other_modified_data = [ ]
if len(paths) != len(changelist) and show_nonmatching_paths != 'no':
@@ -617,6 +623,7 @@
diffs=DiffGenerator(changelist, paths, True, cfg, repos, date, group,
params, diffsels, diffurls, pool),
other_diffs=other_diffs,
+ truncate_diff_lines=truncate_diff_lines,
)
renderer.render(data)
@@ -900,10 +907,10 @@
w('\nLog:\n%s\n' % data.log)
- self._render_diffs(data.diffs)
+ self._render_diffs(data.diffs, data.truncate_diff_lines)
if data.other_diffs:
w('\nDiffs of changes in other areas also in this revision:\n')
- self._render_diffs(data.other_diffs)
+ self._render_diffs(data.other_diffs, data.truncate_diff_lines)
def _render_list(self, header, data_list):
if not data_list:
@@ -934,7 +941,7 @@
w(' - copied%s from r%d, %s%s\n'
% (text, d.base_rev, d.base_path, is_dir))
- def _render_diffs(self, diffs):
+ def _render_diffs(self, diffs, truncate_diff_lines):
w = self.output.write
for diff in diffs:
@@ -971,8 +978,15 @@
w('Binary files. No diff available.\n')
continue
+ nlines = 0
for line in diff.content:
- w(line.raw)
+ if truncate_diff_lines > 0 and nlines >= truncate_diff_lines:
+ w('*** Diff too large. Truncated after %d lines.\n' \
+ % (truncate_diff_lines))
+ break
+ else:
+ w(line.raw)
+ nlines = nlines + 1
class Repository:
=== tools/hook-scripts/mailer.conf.example
==================================================================
--- mailer.conf.example (revision 18531)
+++ mailer.conf.example (revision 18532)
@@ -224,6 +224,12 @@
# Set to 0 to turn off.
#truncate_subject = 200
+# Diff length limit. The generated diff will be truncated after this many
+# lines. The limit applies independently to each file for which a diff
+# is generated.
+# Set to 0 to turn off.
+#truncate_diff_lines = 200
+
# --------------------------------------------------------------------------
[maps]
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org
Received on Wed Nov 2 14:11:52 2005