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:
Diffstat (limited to 'git-send-email.perl')
-rwxr-xr-xgit-send-email.perl59
1 files changed, 40 insertions, 19 deletions
diff --git a/git-send-email.perl b/git-send-email.perl
index 46a5242d25..474598339e 100755
--- a/git-send-email.perl
+++ b/git-send-email.perl
@@ -174,7 +174,7 @@ my (@to,@cc,@xh,$envelope_sender,
$author,$sender,$smtp_authpass,$annotate,$compose,$time);
# Things we either get from config, *or* are overridden on the
# command-line.
-my ($no_cc, $no_to, $no_bcc);
+my ($no_cc, $no_to, $no_bcc, $no_identity);
my (@config_to, @getopt_to);
my (@config_cc, @getopt_cc);
my (@config_bcc, @getopt_bcc);
@@ -317,44 +317,53 @@ $SIG{INT} = \&signal_handler;
# Read our sendemail.* config
sub read_config {
- my ($prefix) = @_;
+ my ($configured, $prefix) = @_;
foreach my $setting (keys %config_bool_settings) {
my $target = $config_bool_settings{$setting};
my $v = Git::config_bool(@repo, "$prefix.$setting");
- $$target = $v if defined $v;
+ next unless defined $v;
+ next if $configured->{$setting}++;
+ $$target = $v;
}
foreach my $setting (keys %config_path_settings) {
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]);
- }
+ my @values = Git::config_path(@repo, "$prefix.$setting");
+ next unless @values;
+ next if $configured->{$setting}++;
+ @$target = @values;
}
else {
my $v = Git::config_path(@repo, "$prefix.$setting");
- $$target = $v if defined $v;
+ next unless defined $v;
+ next if $configured->{$setting}++;
+ $$target = $v;
}
}
foreach my $setting (keys %config_settings) {
my $target = $config_settings{$setting};
if (ref($target) eq "ARRAY") {
- unless (@$target) {
- my @values = Git::config(@repo, "$prefix.$setting");
- @$target = @values if (@values && defined $values[0]);
- }
+ my @values = Git::config(@repo, "$prefix.$setting");
+ next unless @values;
+ next if $configured->{$setting}++;
+ @$target = @values;
}
else {
my $v = Git::config(@repo, "$prefix.$setting");
- $$target = $v if defined $v;
+ next unless defined $v;
+ next if $configured->{$setting}++;
+ $$target = $v;
}
}
if (!defined $smtp_encryption) {
- my $enc = Git::config(@repo, "$prefix.smtpencryption");
+ my $setting = "$prefix.smtpencryption";
+ my $enc = Git::config(@repo, $setting);
+ return unless defined $enc;
+ return if $configured->{$setting}++;
if (defined $enc) {
$smtp_encryption = $enc;
} elsif (Git::config_bool(@repo, "$prefix.smtpssl")) {
@@ -363,16 +372,29 @@ sub read_config {
}
}
+# 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");
-read_config("sendemail.$identity") if defined $identity;
-read_config("sendemail");
+my $rc = GetOptions(
+ "identity=s" => \$identity,
+ "no-identity" => \$no_identity,
+);
+usage() unless $rc;
+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");
+}
# Begin by accumulating all the variables (defined above), that we will end up
# needing, first, from the command line:
my $help;
-my $rc = GetOptions("h" => \$help,
- "dump-aliases" => \$dump_aliases);
+$rc = GetOptions("h" => \$help,
+ "dump-aliases" => \$dump_aliases);
usage() unless $rc;
die __("--dump-aliases incompatible with other options\n")
if !$help and $dump_aliases and @ARGV;
@@ -401,7 +423,6 @@ $rc = GetOptions(
"smtp-debug:i" => \$debug_net_smtp,
"smtp-domain:s" => \$smtp_domain,
"smtp-auth=s" => \$smtp_auth,
- "identity=s" => \$identity,
"annotate!" => \$annotate,
"no-annotate" => sub {$annotate = 0},
"compose" => \$compose,