Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.kernel.org/pub/scm/git/git.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xgit-send-email.perl35
1 files changed, 26 insertions, 9 deletions
diff --git a/git-send-email.perl b/git-send-email.perl
index 73e3d3fd26..de62cbf250 100755
--- a/git-send-email.perl
+++ b/git-send-email.perl
@@ -347,11 +347,13 @@ $SIG{INT} = \&signal_handler;
# Read our sendemail.* config
sub read_config {
- my ($configured, $prefix) = @_;
+ my ($known_keys, $configured, $prefix) = @_;
foreach my $setting (keys %config_bool_settings) {
my $target = $config_bool_settings{$setting};
- my $v = Git::config_bool(@repo, "$prefix.$setting");
+ my $key = "$prefix.$setting";
+ next unless exists $known_keys->{$key};
+ my $v = Git::config_bool(@repo, $key);
next unless defined $v;
next if $configured->{$setting}++;
$$target = $v;
@@ -359,8 +361,10 @@ sub read_config {
foreach my $setting (keys %config_path_settings) {
my $target = $config_path_settings{$setting};
+ my $key = "$prefix.$setting";
+ next unless exists $known_keys->{$key};
if (ref($target) eq "ARRAY") {
- my @values = Git::config_path(@repo, "$prefix.$setting");
+ my @values = Git::config_path(@repo, $key);
next unless @values;
next if $configured->{$setting}++;
@$target = @values;
@@ -375,14 +379,16 @@ sub read_config {
foreach my $setting (keys %config_settings) {
my $target = $config_settings{$setting};
+ my $key = "$prefix.$setting";
+ next unless exists $known_keys->{$key};
if (ref($target) eq "ARRAY") {
- my @values = Git::config(@repo, "$prefix.$setting");
+ my @values = Git::config(@repo, $key);
next unless @values;
next if $configured->{$setting}++;
@$target = @values;
}
else {
- my $v = Git::config(@repo, "$prefix.$setting");
+ my $v = Git::config(@repo, $key);
next unless defined $v;
next if $configured->{$setting}++;
$$target = $v;
@@ -408,9 +414,20 @@ sub config_regexp {
return @ret;
}
+# Save ourselves a lot of work of shelling out to 'git config' (it
+# parses 'bool' etc.) by only doing so for config keys that exist.
+my %known_config_keys;
+{
+ my @known_config_keys = config_regexp("^sende?mail[.]");
+ @known_config_keys{@known_config_keys} = ();
+}
+
# sendemail.identity yields to --identity. We must parse this
# special-case first before the rest of the config is read.
-$identity = Git::config(@repo, "sendemail.identity");
+{
+ my $key = "sendemail.identity";
+ $identity = Git::config(@repo, $key) if exists $known_config_keys{$key};
+}
my $rc = GetOptions(
"identity=s" => \$identity,
"no-identity" => \$no_identity,
@@ -421,8 +438,8 @@ undef $identity if $no_identity;
# Now we know enough to read the config
{
my %configured;
- read_config(\%configured, "sendemail.$identity") if defined $identity;
- read_config(\%configured, "sendemail");
+ read_config(\%known_config_keys, \%configured, "sendemail.$identity") if defined $identity;
+ read_config(\%known_config_keys, \%configured, "sendemail");
}
# Begin by accumulating all the variables (defined above), that we will end up
@@ -506,7 +523,7 @@ unless ($rc) {
usage();
}
-if ($forbid_sendmail_variables && (scalar config_regexp("^sendmail[.]")) != 0) {
+if ($forbid_sendmail_variables && grep { /^sendmail/s } keys %known_config_keys) {
die __("fatal: found configuration options for 'sendmail'\n" .
"git-send-email is configured with the sendemail.* options - note the 'e'.\n" .
"Set sendemail.forbidSendmailVariables to false to disable this check.\n");