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

Re: [PATCH] make mailer.py able to use mappings on several to_addr fields

From: Daniel Shahaf <d.s_at_daniel.shahaf.co.il>
Date: Mon, 31 Mar 2008 13:15:10 +0300

[ CCing the list ]

Philippe Combes wrote on Mon, 31 Mar 2008 at 01:33 +0200:
> Hi,
>
> thank you for the interest you gave to this patch.
> Unfortunately, as a Python beginner, I do not know how to modify the trunk
> version to add the same feature.

Unfortunately, new features must be written against trunk to be accepted;
Subversion does not add new features directly to release branches.

> Because of this separator given between brackets at the beginning of the
> value, I would have to duplicate code or create another function. I am not
> sure of what I should do exactly, because I even fear that it would require
> changes in parts of the design itself.
>
> And I really do not have time for that, sorry.
>

I'm not familiar with mailer.py, but I'm sure someone who is could
advise you how to implement this feature with minimal changes to
existing code. In other words, if you are in doubts about the design,
ask!

Thanks for the patch,

Daniel

> Regards,
>
> Philippe.
>
> Daniel Shahaf a écrit :
>> Philippe,
>>
>> Philippe Combes wrote on Sun, 30 Mar 2008 at 16:05 +0200:
>>> 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
>>
>> Could you please submit a new version of the patch against the trunk
>> version of mailer.py? Also, please provide a log message (see
>> http://subversion.tigris.org/hacking.html#patches).
>>
>>> $
>>> # $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
>>> +
>>
>> Incomplete sentence?
>>
>> Daniel
>>
>>> 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-31 12:15:51 CEST

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