[U-Boot] patman: add support for omitting bouncing addresses

Chris Packham judge.packham at gmail.com
Tue Aug 29 07:51:20 UTC 2017


On Tue, Aug 29, 2017 at 6:37 AM, Philipp Tomsich
<philipp.tomsich at theobroma-systems.com> wrote:
>
>
> On Mon, 28 Aug 2017, Chris Packham wrote:
>
>> Add a --bounce-file option which can be used to omit addresses that are
>> known to bounce. The option specifies a file which lists addresses (one
>> per line) that are stripped from the Cc list.
>
>
> Reviewed-by: Philipp Tomsich <philipp.tomsich at theobroma-systems.com>
>
> Absolutely love this (in fact, I had something like this on my to-do list as
> the number of bounces seemed to grow over time).
>
> A few comments below.
>
>>
>> Signed-off-by: Chris Packham <judge.packham at gmail.com>
>> ---
>> Here's a quick proof of concept. Right now the .bounces file has to
>> match exactly the addresses that are extracted by patman. This makes it
>> easy to do set(a) - set(b) to remove all the bounces in one hit.
>>
>> tools/patman/patman.py | 6 +++++-
>> tools/patman/series.py | 5 ++++-
>> tools/patman/tools.py  | 8 ++++++++
>> 3 files changed, 17 insertions(+), 2 deletions(-)
>>
>> diff --git a/tools/patman/patman.py b/tools/patman/patman.py
>> index 4b3bc787453e..567226a4d3ce 100755
>> --- a/tools/patman/patman.py
>> +++ b/tools/patman/patman.py
>> @@ -56,6 +56,9 @@ parser.add_option('-v', '--verbose',
>> action='store_true', dest='verbose',
>>        default=False, help='Verbose output of errors and warnings')
>> parser.add_option('--cc-cmd', dest='cc_cmd', type='string',
>> action='store',
>>        default=None, help='Output cc list for patch file (used by git)')
>> +parser.add_option('--bounce-file', dest='bounce_fname', type='string',
>> +                  default='.bounces',
>
>
> The '.bounces' default doesn't really fit with how such settings are handled
> throughout patman.
>
> My gut feeling is that
>  (a) we want to have a project-wide bounces config (doc/git-bounces ???)
>      that complements doc/git-mailrc
>  (b) that any overrides/user-local additional settings should be picked up
>      via ~/.patman (either by referencing a local overrides file or by
>      having some additional overrides directly there)
>  (c) this entire mechanism needs to be tied into Setup(...) in settings.py
>

Makes sense. The .bounces file was just convenient. But yeah you are
likely to have project-wide settings that are stored in-tree and user
additions that aren't shared.

>
>> +                  help='File containing addresses to skip [default:
>> %default]')
>> parser.add_option('--no-check', action='store_false', dest='check_patch',
>>                   default=True,
>>                   help="Don't check for patch compliance")
>> @@ -158,7 +161,8 @@ else:
>>
>>     cc_file = series.MakeCcFile(options.process_tags, cover_fname,
>>                                 not options.ignore_bad_tags,
>> -                                options.add_maintainers)
>> +                                options.add_maintainers,
>> +                                options.bounce_fname)
>>
>>     # Email the patches out (giving the user time to check / cancel)
>>     cmd = ''
>> diff --git a/tools/patman/series.py b/tools/patman/series.py
>> index d3947a7c2ac5..b6533ab5ee58 100644
>> --- a/tools/patman/series.py
>> +++ b/tools/patman/series.py
>> @@ -11,6 +11,7 @@ import os
>> import get_maintainer
>> import gitutil
>> import terminal
>> +from tools import FindBounces
>>
>> # Series-xxx tags that we understand
>> valid_series = ['to', 'cc', 'version', 'changes', 'prefix', 'notes',
>> 'name',
>> @@ -202,7 +203,7 @@ class Series(dict):
>>             print(col.Color(col.RED, str))
>>
>>     def MakeCcFile(self, process_tags, cover_fname, raise_on_error,
>> -                   add_maintainers):
>> +                   add_maintainers, bounce_fname):
>>         """Make a cc file for us to use for per-commit Cc automation
>>
>>         Also stores in self._generated_cc to make ShowActions() faster.
>> @@ -222,6 +223,7 @@ class Series(dict):
>>         fname = '/tmp/patman.%d' % os.getpid()
>>         fd = open(fname, 'w')
>>         all_ccs = []
>> +        bounces = FindBounces(bounce_fname)
>>         for commit in self.commits:
>>             cc = []
>>             if process_tags:
>> @@ -234,6 +236,7 @@ class Series(dict):
>>             elif add_maintainers:
>>                 cc += get_maintainer.GetMaintainer(commit.patch)
>>             cc = [m.encode('utf-8') if type(m) != str else m for m in cc]
>> +            cc = set(cc) - set(bounces)
>>             all_ccs += cc
>>             print(commit.patch, ', '.join(set(cc)), file=fd)
>>             self._generated_cc[commit.patch] = cc
>> diff --git a/tools/patman/tools.py b/tools/patman/tools.py
>> index ba2485303037..9d206a390b02 100644
>> --- a/tools/patman/tools.py
>> +++ b/tools/patman/tools.py
>> @@ -118,3 +118,11 @@ def Align(pos, align):
>>
>> def NotPowerOfTwo(num):
>>     return num and (num & (num - 1))
>> +
>> +def FindBounces(bounce_fname):
>> +    """generate a list of bouncing addresses from a file"""
>> +    try:
>> +        with open(bounce_fname) as fd:
>> +            return [line.strip() for line in fd]
>> +    except IOError:
>> +        return []
>>
>
> Shouldn't this be merged into gitutil.BuildEmailList or into
> gitutil.LookupEmail? It would also be nice if the bounces would be handled
> in analogy to aliases and referenced via settings.alias

I struggled to find a home for this. 'tools.py' was just the first
place I found for a reasonably generic helper function. If this code
follows the way aliases work it makes sense for it to live there.

>
> Regards,
> Philipp.


More information about the U-Boot mailing list