Subject: Re: [PATCH] fix alias expansion with new Git::config_path()

From: Michael J Gruber <[email-masked]>
Date: Fri, 14 Oct 2011 16:30:25 +0200

Cord Seele venit, vidit, dixit 14.10.2011 16:25:
> On Fri 14 Oct 2011 14:29:27 +0200, Michael J Gruber <[email-masked]> wrote:
> 
>> cec5dae (use new Git::config_path() for aliasesfile, 2011-09-30)
>>
>> broke the expansion of aliases for me:
>>
>> ./git-send-email --cc=junio  --dry-run
>> 0001-t7800-avoid-arithmetic-expansion-notation.patch
>> 0001-t7800-avoid-arithmetic-expansion-notation.patch
>> Who should the emails appear to be from? [Michael J Gruber
>> <[email-masked]>]
>> Emails will be sent from: Michael J Gruber <[email-masked]>
>> Dry-OK. Log says:
>> Sendmail: /home/mjg/bin/msmtp-fastmail-git -i [email-masked] junio
>> [email-masked]
>> From: Michael J Gruber <[email-masked]>
>> To: [email-masked]
>> Cc: junio
>> ...
>>
>> Happens with both "--cc junio" and "--cc=junio".
>>
>> Reverting cec5dae brings my aliases back. Relevant config:
>>
>> git config --get-regexp sendemail.alias\*
>> sendemail.aliasesfile /home/mjg/git/gitauthors
>> sendemail.aliasfiletype mutt
>>
>> Can I please have alias expansion back?
> 
> The following patch fixes it for me, please give it a try.
> 
> Since this fix is simply copy&pasting some code from the config_settings path
> someone with better perl understanding might wnat to refactor it
> (Junio/Jacob)?
> 
> -- Cord
> 
> 
> Signed-off-by: Cord Seele <[email-masked]>

Tested-by: Michael J Gruber <[email-masked]>

Thanks. (Though I'm still wondering what this is about overall.)

> ---
>  git-send-email.perl |   12 ++++++++++--
>  1 files changed, 10 insertions(+), 2 deletions(-)
> 
> diff --git a/git-send-email.perl b/git-send-email.perl
> index 91607c5..6885dfa 100755
> --- a/git-send-email.perl
> +++ b/git-send-email.perl
> @@ -337,8 +337,16 @@ sub read_config {
>  	}
>  
>  	foreach my $setting (keys %config_path_settings) {
> -		my $target = $config_path_settings{$setting}->[0];
> -		$$target = Git::config_path(@repo, "$prefix.$setting") unless (defined $$target);
> +		my $target = $config_path_settings{$setting};
> +		if (ref($target) eq "ARRAY") {
> +			unless (@$target) {
> +				my @values = Git::config_path(@repo, "$prefix.$setting");
> +				@$target = @values if (@values && defined $values[0]);
> +			}
> +		}
> +		else {
> +			$$target = Git::config_path(@repo, "$prefix.$setting") unless (defined $$target);
> +		}
>  	}
>  
>  	foreach my $setting (keys %config_settings) {