[svn.haxx.se] · SVN Dev · SVN Users · SVN Org · TSVN Dev · TSVN Users · Subclipse Dev · Subclipse Users · this month's index

mailer.py bug fixes

From: <Servatius.Brandt_at_fujitsu-siemens.com>
Date: 2005-06-24 17:00:07 CEST


I found some bugs in tools/hook-scripts/mailer/mailer.py. A patch with
the fixes is included below. It is based on revision 14358 in the
1.2.x branch.

The docs in mailer.conf.example talks about "truncate_subject" (with
underline) but mailer.py looks for "truncate-subject" (with dash).
Since all other option values use an underline, I fixed this in
mailer.py for consistency.

generate_content() forgot to set "show_nonmatching_paths" in the "data"
it passes to the render() method of the TextCommitRenderer. I added it.

When the [maps] section specifies the same mapping specification to be
used by more than one option (e.g. reply_to = [mail-addresses] and
to_addr = [mail-addresses]), the script fails. I postponed the removal
of a map section name from the self._groups list in Config._prep_maps()
until all map specifications have been processed.

Mappings are only applied when the option value is a single word, e.g.
"to_addr = sally". When adding another recipient as in
"to_addr = sally harry", mappings are not applied. This is because
Config.get() passes the whole string "sally harry" to the mapper
function. I changed this to apply mappings wordwise.

The "exclude_paths" option is very helpful but not documented in
mailer.conf.example. I made only changes to mailer.py itself, so please
update the documentation.

- Servatius

Index: mailer.py
--- mailer.py (revision 20)
+++ mailer.py (working copy)
@@ -132,7 +132,7 @@
       truncate_subject = int(
- self.cfg.get('truncate-subject', group, params))
+ self.cfg.get('truncate_subject', group, params))
     except ValueError:
       truncate_subject = 0
@@ -594,6 +594,7 @@
     added_data=generate_list('A', changelist, paths, True),
     removed_data=generate_list('R', changelist, paths, True),
     modified_data=generate_list('M', changelist, paths, True),
+ show_nonmatching_paths=show_nonmatching_paths,
@@ -997,7 +998,7 @@
     # apply any mapper
     mapper = getattr(self.maps, option, None)
     if mapper is not None:
- value = mapper(value)
+ value = " ".join(map(mapper, value.split()))
     return value
@@ -1014,6 +1015,8 @@
   def _prep_maps(self):
     "Rewrite the [maps] options into callables that look up values."
+ mapsections = []
     for optname, mapvalue in vars(self.maps).items():
       if mapvalue[:1] == '[':
         # a section is acting as a mapping
@@ -1027,8 +1030,9 @@
                 lambda value,
                        sect=getattr(self, sectname): getattr(sect,
- # remove the mapping section from consideration as a group
- self._groups.remove(sectname)
+ # mark for removal when all optnames are done
+ if sectname not in mapsections:
+ mapsections.append(sectname)
       # elif test for other mapper types. possible examples:
       # dbm:filename.db
@@ -1039,6 +1043,11 @@
         raise UnknownMappingSpec(mapvalue)
+ # remove each mapping section from consideration as a group
+ for sectname in mapsections:
+ self._groups.remove(sectname)
   def _prep_groups(self, repos):
     self._group_re = [ ]

Servatius Brandt Phone: +49 89 636-41504
Fujitsu Siemens Computers Fax: +49 89 636-48716
EP SW AD C++ Email: Servatius.Brandt@fujitsu-siemens.com

To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org
Received on Fri Jun 24 18:27:37 2005

This is an archived mail posted to the Subversion Dev mailing list.