[PATCH] git-send-email: die if sendmail.* config is set
From: Drew DeVault <hidden>
Date: 2020-07-18 13:33:17
Subsystem:
the rest · Maintainer:
Linus Torvalds
I've seen several people mis-configure git send-email on their first attempt because they set the sendmail.* config options - not sendemail.*. This patch detects this mistake and bails out with a friendly warning. Signed-off-by: Drew DeVault <redacted> --- git-send-email.perl | 6 ++++++ perl/Git.pm | 26 ++++++++++++++++++++++++++ 2 files changed, 32 insertions(+)
diff --git a/git-send-email.perl b/git-send-email.perl
index 36c47bae1d..8e42ba00c1 100755
--- a/git-send-email.perl
+++ b/git-send-email.perl@@ -478,6 +478,12 @@ sub read_config { usage(); } +if ((scalar Git::config_regexp("sendmail.*")) != 0) { + die __("fatal: found configuration options for 'sendmail'\n" . + "git-send-email is configured with the sendemail.* options - note the 'e'.\n" . + "Assuming this is a mistake and bailing out.\n"); +} + die __("Cannot run git format-patch from outside a repository\n") if $format_patch and not $repo;
diff --git a/perl/Git.pm b/perl/Git.pm
index 54c9ed0dde..10df990959 100644
--- a/perl/Git.pm
+++ b/perl/Git.pm@@ -723,6 +723,32 @@ sub config_int { return scalar _config_common({'kind' => '--int'}, @_); } +=item config_regexp ( RE ) + +Retrieve the list of configuration key names matching the regular +expression C<RE>. The return value is a list of strings matching +this regex. + +=cut + +sub config_regexp { + my ($self, $regex) = _maybe_self(@_); + try { + my @cmd = ('config', '--name-only', '--get-regexp', $regex); + unshift @cmd, $self if $self; + my @matches = command(@cmd); + return @matches; + } catch Git::Error::Command with { + my $E = shift; + if ($E->value() == 1) { + my @matches = (); + return @matches; + } else { + throw $E; + } + }; +} + # Common subroutine to implement bulk of what the config* family of methods # do. This currently wraps command('config') so it is not so fast. sub _config_common {
--
2.27.0