Mercurial > hg
changeset 9947:4600e6222efb
patchbomb: fix parsing of multiple addresses, allow multiple addrs in --to/cc/bcc
Instead of using custom code to split apart addresses, we now use
mail.parseaddrlist() which always does the Right Thing as it relies on Python's
email.Utils.getaddresses().
Previously, 'hg email --to=foo,bar' only respected foo and discarded bar. Also,
commas in names were not allowed in hgrc or the interactive prompt; specifying
'"Lastname, Firstname" <foo>' would confuse patchbomb.
The testcase uses '-m tmp.mbox' because -n (like in other tests) would disable
address mangling.
author | Marti Raudsepp <marti@juffo.org> |
---|---|
date | Thu, 26 Nov 2009 12:23:28 +0200 |
parents | 2059be77d4f8 |
children | e5b44a7986d0 |
files | hgext/patchbomb.py tests/test-patchbomb tests/test-patchbomb.out |
diffstat | 3 files changed, 51 insertions(+), 11 deletions(-) [+] |
line wrap: on
line diff
--- a/hgext/patchbomb.py Fri Nov 27 13:53:27 2009 +0100 +++ b/hgext/patchbomb.py Thu Nov 26 12:23:28 2009 +0200 @@ -379,20 +379,21 @@ else: msgs = getpatchmsgs(list(getpatches(revs))) - def getaddrs(opt, prpt, default = None): - addrs = opts.get(opt) or (ui.config('email', opt) or - ui.config('patchbomb', opt) or - prompt(ui, prpt, default)).split(',') - return [mail.addressencode(ui, a.strip(), _charsets, opts.get('test')) - for a in addrs if a.strip()] + def getaddrs(opt, prpt=None, default=None): + if opts.get(opt): + return mail.addrlistencode(ui, opts.get(opt), _charsets, + opts.get('test')) + + addrs = (ui.config('email', opt) or + ui.config('patchbomb', opt) or '') + if not addrs and prpt: + addrs = prompt(ui, prpt, default) + + return mail.addrlistencode(ui, [addrs], _charsets, opts.get('test')) to = getaddrs('to', 'To') cc = getaddrs('cc', 'Cc', '') - - bcc = opts.get('bcc') or (ui.config('email', 'bcc') or - ui.config('patchbomb', 'bcc') or '').split(',') - bcc = [mail.addressencode(ui, a.strip(), _charsets, opts.get('test')) - for a in bcc if a.strip()] + bcc = getaddrs('bcc') ui.write('\n')
--- a/tests/test-patchbomb Fri Nov 27 13:53:27 2009 +0100 +++ b/tests/test-patchbomb Thu Nov 26 12:23:28 2009 +0200 @@ -169,6 +169,12 @@ hg email --date '1970-1-1 0:1' -n --flag fooFlag --flag barFlag -f quux -t foo \ -c bar -s test -r 0:1 | fixheaders +echo "% test multi-address parsing" +hg email --date '1980-1-1 0:1' -m tmp.mbox -f quux -t 'spam<spam><eggs>' \ + -t toast -c 'foo,bar@example.com' -c '"A, B <>" <a@example.com>' -s test -r 0 \ + --config email.bcc='"Quux, A." <quux>' +cat tmp.mbox | fixheaders + echo "% test multi-byte domain parsing" UUML=`printf '\374'` HGENCODING=iso-8859-1
--- a/tests/test-patchbomb.out Fri Nov 27 13:53:27 2009 +0100 +++ b/tests/test-patchbomb.out Thu Nov 26 12:23:28 2009 +0200 @@ -1469,6 +1469,39 @@ @@ -0,0 +1,1 @@ +b +% test multi-address parsing +This patch series consists of 1 patches. + + +Writing [PATCH] test ... +From quux Tue Jan 01 00:01:01 1980 +Content-Type: text/plain; charset="us-ascii" +MIME-Version: 1.0 +Content-Transfer-Encoding: 7bit +Subject: [PATCH] test +X-Mercurial-Node: 8580ff50825a50c8f716709acdf8de0deddcd6ab +Message-Id: <8580ff50825a50c8f716.315532860@ +User-Agent: Mercurial-patchbomb +Date: Tue, 01 Jan 1980 00:01:00 +0000 +From: quux +To: spam <spam>, eggs, toast +Cc: foo, bar@example.com, "A, B <>" <a@example.com> +Bcc: "Quux, A." <quux> + +# HG changeset patch +# User test +# Date 1 0 +# Node ID 8580ff50825a50c8f716709acdf8de0deddcd6ab +# Parent 0000000000000000000000000000000000000000 +a + +diff -r 000000000000 -r 8580ff50825a a +--- /dev/null Thu Jan 01 00:00:00 1970 +0000 ++++ b/a Thu Jan 01 00:00:01 1970 +0000 +@@ -0,0 +1,1 @@ ++a + + % test multi-byte domain parsing This patch series consists of 1 patches.