Re: [PATCH] mailer.py: truncate_diff_lines feature
From: <kfogel_at_collab.net>
Date: 2005-11-03 16:55:35 CET
I came into this thread late, sorry.
It's pointless to include anything less than 100% of a diff. There is
See http://subversion.tigris.org/issues/show_bug.cgi?id=2213 and the
Best,
--
www.collab.net <> CollabNet | Distributed Development On Demand
Alan Barrett <apb@cequrux.com> writes:
> On Wed, 02 Nov 2005, C. Michael Pilato wrote:
> > "truncate_diff_lines" sounds like you're chopping characters off the
> > ends of long lines, not chopping lines off the end of a long diff.
> > Suggest "truncate_diff".
>
> I went with "truncate_diffs". A plural word seemed better to me.
>
> > I'm somewhat ambivalent about this feature addition, but do have one
> > concern: I'd prefer it if the act of truncating a diff would cause an
> > application of that diff data as a patch to fail in some noticable
> > way.
>
> Done. I append a new patch.
>
> [[[
> Add truncate_diffs 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_diffs value from cfg, and pass it through in the data sent
> to renderer.render().
> (TextCommitRenderer.render): Pass data.truncate_diffs through to
> self._render_diffs().
> (TextCommitRenderer.render._render_diffs): New truncate_diffs
> arg, and new logic to implement the truncation.
> * mailer.conf.example: Add commented-out example for truncate_diffs.
> ]]]
> === mailer.py
> ==================================================================
> --- mailer.py (revision 18413)
> +++ mailer.py (revision 18535)
> @@ -589,6 +589,12 @@
> show_nonmatching_paths = cfg.get('show_nonmatching_paths', group, params) \
> or 'yes'
>
> + try:
> + truncate_diffs = int(
> + cfg.get('truncate_diffs', group, params))
> + except ValueError:
> + truncate_diffs = 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_diffs=truncate_diffs,
> )
> 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_diffs)
> 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_diffs)
>
> 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_diffs):
> w = self.output.write
>
> for diff in diffs:
> @@ -971,8 +978,29 @@
> w('Binary files. No diff available.\n')
> continue
>
> + nlines = 0
> for line in diff.content:
> - w(line.raw)
> + if truncate_diffs > 0 and nlines >= truncate_diffs:
> + #
> + # Truncate the diff, inform the reader, and ensure that
> + # "patch" will see the truncated diff as an error.
> + #
> + # If somebody accidentally feeds the truncated diff to the
> + # "patch" program, then either the "@@" line or the "***"
> + # line will be seen by "patch" as a fatal error. (Which line
> + # gets reported as an error will depend on exactly where the
> + # truncation occurs, and it doesn't seem possible to construct
> + # a single line that will always be reported as an error
> + # regardless of where it appears.)
> + #
> + w('@@ -0,0 +0,1 @@ Diff truncated after %d lines.\n' \
> + % (truncate_diffs))
> + w('*** Diff truncated after %d lines.\n' \
> + % (truncate_diffs))
> + break
> + else:
> + w(line.raw)
> + nlines = nlines + 1
>
>
> class Repository:
> === mailer.conf.example
> ==================================================================
> --- mailer.conf.example (revision 18413)
> +++ mailer.conf.example (revision 18535)
> @@ -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_diffs = 200
> +
> # --------------------------------------------------------------------------
>
> [maps]
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
> For additional commands, e-mail: dev-help@subversion.tigris.org
>
--
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org
Received on Thu Nov 3 18:13:14 2005
|
This is an archived mail posted to the Subversion Dev mailing list.
This site is subject to the Apache Privacy Policy and the Apache Public Forum Archive Policy.