You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@subversion.apache.org by Se...@fujitsu-siemens.com on 2005/06/24 15:00:07 UTC

mailer.py bug fixes

Hello,

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 @@
 
     try:
       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,
     other_added_data=other_added_data,
     other_removed_data=other_removed_data,
     other_modified_data=other_modified_data,
@@ -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,
value,
                                                              value))
-        # 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 @@
       else:
         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


Re: mailer.py bug fixes

Posted by "C. Michael Pilato" <cm...@collab.net>.
Patch applied, tested, and committed as revision r15160.  Thanks,
Servatius!

<Se...@fujitsu-siemens.com> writes:

> Hello,
> 
> 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 @@
>  
>      try:
>        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,
>      other_added_data=other_added_data,
>      other_removed_data=other_removed_data,
>      other_modified_data=other_modified_data,
> @@ -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,
> value,
>                                                               value))
> -        # 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 @@
>        else:
>          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

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org