send-email: allow multiple emails using --cc, --to and --bcc
Accept a list of emails separated by commas in flags --cc, --to and
--bcc.  Multiple addresses can already be given by using these options
multiple times, but it is more convenient to allow cutting-and-pasting
a list of addresses from the header of an existing e-mail message,
which already lists them as comma-separated list, as a value to a
single parameter.
The following format can now be used:
    $ git send-email --to='Jane <jdoe@example.com>, mike@example.com'
Remove the limitation imposed by 79ee555b (Check and document the
options to prevent mistakes, 2006-06-21) which rejected every argument
with comma in --cc, --to and --bcc.
Signed-off-by: Mathieu Lienard--Mayor <Mathieu.Lienard--Mayor@ensimag.imag.fr>
Signed-off-by: Jorge Juan Garcia Garcia <Jorge-Juan.Garcia-Garcia@ensimag.imag.fr>
Signed-off-by: Matthieu Moy <Matthieu.Moy@grenoble-inp.fr>
Signed-off-by: Remi Lespinet <remi.lespinet@ensimag.grenoble-inp.fr>
Signed-off-by: Matthieu Moy <Matthieu.Moy@imag.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
			
			
				maint
			
			
		
							parent
							
								
									1fe9703f08
								
							
						
					
					
						commit
						b1c8a11c80
					
				|  | @ -49,17 +49,17 @@ Composing | |||
| 	of 'sendemail.annotate'. See the CONFIGURATION section for | ||||
| 	'sendemail.multiEdit'. | ||||
|  | ||||
| --bcc=<address>:: | ||||
| --bcc=<address>,...:: | ||||
| 	Specify a "Bcc:" value for each email. Default is the value of | ||||
| 	'sendemail.bcc'. | ||||
| + | ||||
| The --bcc option must be repeated for each user you want on the bcc list. | ||||
| This option may be specified multiple times. | ||||
|  | ||||
| --cc=<address>:: | ||||
| --cc=<address>,...:: | ||||
| 	Specify a starting "Cc:" value for each email. | ||||
| 	Default is the value of 'sendemail.cc'. | ||||
| + | ||||
| The --cc option must be repeated for each user you want on the cc list. | ||||
| This option may be specified multiple times. | ||||
|  | ||||
| --compose:: | ||||
| 	Invoke a text editor (see GIT_EDITOR in linkgit:git-var[1]) | ||||
|  | @ -110,13 +110,13 @@ is not set, this will be prompted for. | |||
| 	Only necessary if --compose is also set.  If --compose | ||||
| 	is not set, this will be prompted for. | ||||
|  | ||||
| --to=<address>:: | ||||
| --to=<address>,...:: | ||||
| 	Specify the primary recipient of the emails generated. Generally, this | ||||
| 	will be the upstream maintainer of the project involved. Default is the | ||||
| 	value of the 'sendemail.to' configuration value; if that is unspecified, | ||||
| 	and --to-cmd is not specified, this will be prompted for. | ||||
| + | ||||
| The --to option must be repeated for each user you want on the to list. | ||||
| This option may be specified multiple times. | ||||
|  | ||||
| --8bit-encoding=<encoding>:: | ||||
| 	When encountering a non-ASCII message or subject that does not | ||||
|  |  | |||
|  | @ -460,20 +460,6 @@ my ($repoauthor, $repocommitter); | |||
| ($repoauthor) = Git::ident_person(@repo, 'author'); | ||||
| ($repocommitter) = Git::ident_person(@repo, 'committer'); | ||||
|  | ||||
| # Verify the user input | ||||
|  | ||||
| foreach my $entry (@initial_to) { | ||||
| 	die "Comma in --to entry: $entry'\n" unless $entry !~ m/,/; | ||||
| } | ||||
|  | ||||
| foreach my $entry (@initial_cc) { | ||||
| 	die "Comma in --cc entry: $entry'\n" unless $entry !~ m/,/; | ||||
| } | ||||
|  | ||||
| foreach my $entry (@bcclist) { | ||||
| 	die "Comma in --bcclist entry: $entry'\n" unless $entry !~ m/,/; | ||||
| } | ||||
|  | ||||
| sub parse_address_line { | ||||
| 	if ($have_mail_address) { | ||||
| 		return map { $_->format } Mail::Address->parse($_[0]); | ||||
|  | @ -1026,7 +1012,8 @@ sub sanitize_address_list { | |||
| } | ||||
|  | ||||
| sub process_address_list { | ||||
| 	my @addr_list = expand_aliases(@_); | ||||
| 	my @addr_list = map { parse_address_line($_) } @_; | ||||
| 	@addr_list = expand_aliases(@addr_list); | ||||
| 	@addr_list = sanitize_address_list(@addr_list); | ||||
| 	@addr_list = validate_address_list(@addr_list); | ||||
| 	return @addr_list; | ||||
|  |  | |||
|  | @ -1648,4 +1648,48 @@ test_expect_success $PREREQ '--[no-]xmailer with sendemail.xmailer=false' ' | |||
| 	do_xmailer_test 1 "--xmailer" | ||||
| ' | ||||
|  | ||||
| test_expect_success $PREREQ 'setup expected-list' ' | ||||
| 	git send-email \ | ||||
| 	--dry-run \ | ||||
| 	--from="Example <from@example.com>" \ | ||||
| 	--to="To 1 <to1@example.com>" \ | ||||
| 	--to="to2@example.com" \ | ||||
| 	--to="to3@example.com" \ | ||||
| 	--cc="Cc 1 <cc1@example.com>" \ | ||||
| 	--cc="Cc2 <cc2@example.com>" \ | ||||
| 	--bcc="bcc1@example.com" \ | ||||
| 	--bcc="bcc2@example.com" \ | ||||
| 	0001-add-master.patch | replace_variable_fields \ | ||||
| 	>expected-list | ||||
| ' | ||||
|  | ||||
| test_expect_success $PREREQ 'use email list in --cc --to and --bcc' ' | ||||
| 	git send-email \ | ||||
| 	--dry-run \ | ||||
| 	--from="Example <from@example.com>" \ | ||||
| 	--to="To 1 <to1@example.com>, to2@example.com" \ | ||||
| 	--to="to3@example.com" \ | ||||
| 	--cc="Cc 1 <cc1@example.com>, Cc2 <cc2@example.com>" \ | ||||
| 	--bcc="bcc1@example.com, bcc2@example.com" \ | ||||
| 	0001-add-master.patch | replace_variable_fields \ | ||||
| 	>actual-list && | ||||
| 	test_cmp expected-list actual-list | ||||
| ' | ||||
|  | ||||
| test_expect_success $PREREQ 'aliases work with email list' ' | ||||
| 	echo "alias to2 to2@example.com" >.mutt && | ||||
| 	echo "alias cc1 Cc 1 <cc1@example.com>" >>.mutt && | ||||
| 	test_config sendemail.aliasesfile ".mutt" && | ||||
| 	test_config sendemail.aliasfiletype mutt && | ||||
| 	git send-email \ | ||||
| 	--dry-run \ | ||||
| 	--from="Example <from@example.com>" \ | ||||
| 	--to="To 1 <to1@example.com>, to2, to3@example.com" \ | ||||
| 	--cc="cc1, Cc2 <cc2@example.com>" \ | ||||
| 	--bcc="bcc1@example.com, bcc2@example.com" \ | ||||
| 	0001-add-master.patch | replace_variable_fields \ | ||||
| 	>actual-list && | ||||
| 	test_cmp expected-list actual-list | ||||
| ' | ||||
|  | ||||
| test_done | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 Remi Lespinet
						Remi Lespinet