Hi all,
I am not sure I am posting to the right mailing list, but I did not find
anything specific to mailer.py nor to contrib hook-scripts. Maybe would you be
kind enough to forward to interested people.
One very useful case of mappings would be to have, say, several authors in
to_addr value so that the commit e-mail would be sent to all the e-mail
addresses of these authors. Something like
[project_foo]
for_repos = .*/repos
from_addr = %(author)s
to_addr = john sarah
[maps]
from_addr = [authors]
to_addr = [authors]
[authors]
john = jconnor_at_example.com
sarah = sconnor_at_example.com
With such a configuration, the current version of mailer.py would send "To:
john, sarah" to the SMTP server, because the string "john sarah" has no mapping
in [authors].
With the patch below, it is still possible to map values with white spaces in
other options than to_addr. Only when we get the value of to_addr, we first
expand all words with defined mappings, and then collate them back into one
string. We had to add an argument to Config.get, expand, which defaults to
False, and this method is called with expand=True when we want to get the value
of to_addr.
There is probably a better way to do that, more generic, and cleaner. Indeed, it
is the first time I read and write code in Python, so please be indulgent. But I
dare submit this patch to give an idea of what sort of improvement I meant.
Best regards,
Philippe Combes
--- mailer.py (révision 1)
+++ mailer.py (copie de travail)
@@ -2,6 +2,10 @@
#
# mailer.py: send email describing a commit
#
+## This is a patched version that makes it possible to specify several mapped
+## values in to_addr option. The value is a whitespace separated list of single
+## values that are each transformed according to the [maps] section.
+#
# $HeadURL:
http://svn.collab.net/repos/svn/branches/1.4.x/tools/hook-scripts/mailer/mailer.py $
# $LastChangedDate$
# $LastChangedBy: dlr $
@@ -185,7 +189,7 @@
def start(self, group, params):
# whitespace-separated list of addresses; split into a clean list:
self.to_addrs = \
- filter(None, string.split(self.cfg.get('to_addr', group, params)))
+ filter(None, string.split(self.cfg.get('to_addr', group, params, True)))
self.from_addr = self.cfg.get('from_addr', group, params) \
or self.repos.author or 'no_author'
self.reply_to = self.cfg.get('reply_to', group, params)
@@ -1078,7 +1082,7 @@
ob = getattr(ob, part)
return ob
- def get(self, option, group, params):
+ def get(self, option, group, params, expand=False ):
"Get a config value with appropriate substitutions and value mapping."
# find the right value
@@ -1096,13 +1100,18 @@
# apply any mapper
mapper = getattr(self.maps, option, None)
if mapper is not None:
- value = mapper(value)
+ if expand:
+ value = string.join(map(mapper,string.split(value)))
+ else:
+ value = mapper(value)
# Apply any parameters that may now be available for
# substitution that were not before the mapping.
if value is not None and params is not None:
value = value % params
+ # Now if expand is required and nothing has changed
+
return value
def get_diff_cmd(self, group, args):
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe_at_subversion.tigris.org
For additional commands, e-mail: dev-help_at_subversion.tigris.org
Received on 2008-03-30 19:40:22 CEST