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 | 	of 'sendemail.annotate'. See the CONFIGURATION section for | ||||||
| 	'sendemail.multiEdit'. | 	'sendemail.multiEdit'. | ||||||
|  |  | ||||||
| --bcc=<address>:: | --bcc=<address>,...:: | ||||||
| 	Specify a "Bcc:" value for each email. Default is the value of | 	Specify a "Bcc:" value for each email. Default is the value of | ||||||
| 	'sendemail.bcc'. | 	'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. | 	Specify a starting "Cc:" value for each email. | ||||||
| 	Default is the value of 'sendemail.cc'. | 	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:: | --compose:: | ||||||
| 	Invoke a text editor (see GIT_EDITOR in linkgit:git-var[1]) | 	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 | 	Only necessary if --compose is also set.  If --compose | ||||||
| 	is not set, this will be prompted for. | 	is not set, this will be prompted for. | ||||||
|  |  | ||||||
| --to=<address>:: | --to=<address>,...:: | ||||||
| 	Specify the primary recipient of the emails generated. Generally, this | 	Specify the primary recipient of the emails generated. Generally, this | ||||||
| 	will be the upstream maintainer of the project involved. Default is the | 	will be the upstream maintainer of the project involved. Default is the | ||||||
| 	value of the 'sendemail.to' configuration value; if that is unspecified, | 	value of the 'sendemail.to' configuration value; if that is unspecified, | ||||||
| 	and --to-cmd is not specified, this will be prompted for. | 	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>:: | --8bit-encoding=<encoding>:: | ||||||
| 	When encountering a non-ASCII message or subject that does not | 	When encountering a non-ASCII message or subject that does not | ||||||
|  |  | ||||||
|  | @ -460,20 +460,6 @@ my ($repoauthor, $repocommitter); | ||||||
| ($repoauthor) = Git::ident_person(@repo, 'author'); | ($repoauthor) = Git::ident_person(@repo, 'author'); | ||||||
| ($repocommitter) = Git::ident_person(@repo, 'committer'); | ($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 { | sub parse_address_line { | ||||||
| 	if ($have_mail_address) { | 	if ($have_mail_address) { | ||||||
| 		return map { $_->format } Mail::Address->parse($_[0]); | 		return map { $_->format } Mail::Address->parse($_[0]); | ||||||
|  | @ -1026,7 +1012,8 @@ sub sanitize_address_list { | ||||||
| } | } | ||||||
|  |  | ||||||
| sub process_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 = sanitize_address_list(@addr_list); | ||||||
| 	@addr_list = validate_address_list(@addr_list); | 	@addr_list = validate_address_list(@addr_list); | ||||||
| 	return @addr_list; | 	return @addr_list; | ||||||
|  |  | ||||||
|  | @ -1648,4 +1648,48 @@ test_expect_success $PREREQ '--[no-]xmailer with sendemail.xmailer=false' ' | ||||||
| 	do_xmailer_test 1 "--xmailer" | 	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 | test_done | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	 Remi Lespinet
						Remi Lespinet