git: backport git-send-email regression fix
This commit is contained in:
parent
6f2b8abf09
commit
4baf6bc30a
2 changed files with 109 additions and 1 deletions
|
@ -0,0 +1,108 @@
|
|||
From b996f84989f78c8f6d2429b5f0b9785e13f7af23 Mon Sep 17 00:00:00 2001
|
||||
From: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
|
||||
Date: Mon, 6 Sep 2021 09:33:29 +0200
|
||||
Subject: [PATCH] send-email: fix a "first config key wins" regression in
|
||||
v2.33.0
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Fix a regression in my c95e3a3f0b8 (send-email: move trivial config
|
||||
handling to Perl, 2021-05-28) where we'd pick the first config key out
|
||||
of multiple defined ones, instead of using the normal "last key wins"
|
||||
semantics of "git config --get".
|
||||
|
||||
This broke e.g. cases where a .git/config would have a different
|
||||
sendemail.smtpServer than ~/.gitconfig. We'd pick the ~/.gitconfig
|
||||
over .git/config, instead of preferring the repository-local
|
||||
version. The same would go for /etc/gitconfig etc.
|
||||
|
||||
The full list of impacted config keys (the %config_settings values
|
||||
which are references to scalars, not arrays) is:
|
||||
|
||||
sendemail.smtpencryption
|
||||
sendemail.smtpserver
|
||||
sendemail.smtpserverport
|
||||
sendemail.smtpuser
|
||||
sendemail.smtppass
|
||||
sendemail.smtpdomain
|
||||
sendemail.smtpauth
|
||||
sendemail.smtpbatchsize
|
||||
sendemail.smtprelogindelay
|
||||
sendemail.tocmd
|
||||
sendemail.cccmd
|
||||
sendemail.aliasfiletype
|
||||
sendemail.envelopesender
|
||||
sendemail.confirm
|
||||
sendemail.from
|
||||
sendemail.assume8bitencoding
|
||||
sendemail.composeencoding
|
||||
sendemail.transferencoding
|
||||
sendemail.sendmailcmd
|
||||
|
||||
I.e. having any of these set in say ~/.gitconfig and in-repo
|
||||
.git/config regressed in v2.33.0 to prefer the --global one over the
|
||||
--local.
|
||||
|
||||
To test this add a test of config priority to one of these config
|
||||
variables, most don't have tests at all, but there was an existing one
|
||||
for sendemail.8bitEncoding.
|
||||
|
||||
The "git config" (instead of "test_config") is somewhat of an
|
||||
anti-pattern, but follows established conventions in
|
||||
t9001-send-email.sh, likewise with any other pattern or idiom in this
|
||||
test.
|
||||
|
||||
The populating of home/.gitconfig and setting of HOME= is copied from
|
||||
a test in t0017-env-helper.sh added in 1ff750b128e (tests: make
|
||||
GIT_TEST_GETTEXT_POISON a boolean, 2019-06-21). This test fails
|
||||
without this bugfix, but now it works.
|
||||
|
||||
Reported-by: Eli Schwartz <eschwartz@archlinux.org>
|
||||
Tested-by: Eli Schwartz <eschwartz@archlinux.org>
|
||||
Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
|
||||
Signed-off-by: Junio C Hamano <gitster@pobox.com>
|
||||
---
|
||||
git-send-email.perl | 2 +-
|
||||
t/t9001-send-email.sh | 15 +++++++++++++++
|
||||
2 files changed, 16 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/git-send-email.perl b/git-send-email.perl
|
||||
index 5791138683..0a6dcc1f88 100755
|
||||
--- a/git-send-email.perl
|
||||
+++ b/git-send-email.perl
|
||||
@@ -373,7 +373,7 @@ sub read_config {
|
||||
@$target = @values;
|
||||
}
|
||||
else {
|
||||
- my $v = $known_keys->{$key}->[0];
|
||||
+ my $v = $known_keys->{$key}->[-1];
|
||||
next unless defined $v;
|
||||
next if $configured->{$setting}++;
|
||||
$$target = $v;
|
||||
diff --git a/t/t9001-send-email.sh b/t/t9001-send-email.sh
|
||||
index 612de095fd..fd680a90ac 100755
|
||||
--- a/t/t9001-send-email.sh
|
||||
+++ b/t/t9001-send-email.sh
|
||||
@@ -1533,6 +1533,21 @@ test_expect_success $PREREQ 'sendemail.8bitEncoding works' '
|
||||
test_cmp content-type-decl actual
|
||||
'
|
||||
|
||||
+test_expect_success $PREREQ 'sendemail.8bitEncoding in .git/config overrides --global .gitconfig' '
|
||||
+ clean_fake_sendmail &&
|
||||
+ git config sendemail.assume8bitEncoding UTF-8 &&
|
||||
+ test_when_finished "rm -rf home" &&
|
||||
+ mkdir home &&
|
||||
+ git config -f home/.gitconfig sendemail.assume8bitEncoding "bogus too" &&
|
||||
+ echo bogus |
|
||||
+ env HOME="$(pwd)/home" DEBUG=1 \
|
||||
+ git send-email --from=author@example.com --to=nobody@example.com \
|
||||
+ --smtp-server="$(pwd)/fake.sendmail" \
|
||||
+ email-using-8bit >stdout &&
|
||||
+ egrep "Content|MIME" msgtxt1 >actual &&
|
||||
+ test_cmp content-type-decl actual
|
||||
+'
|
||||
+
|
||||
test_expect_success $PREREQ '--8bit-encoding overrides sendemail.8bitEncoding' '
|
||||
clean_fake_sendmail &&
|
||||
git config sendemail.assume8bitEncoding "bogus too" &&
|
|
@ -1,7 +1,7 @@
|
|||
# Template file for 'git'
|
||||
pkgname=git
|
||||
version=2.33.0
|
||||
revision=2
|
||||
revision=3
|
||||
hostmakedepends="asciidoc gettext perl pkg-config tk xmlto"
|
||||
makedepends="libglib-devel libcurl-devel libsecret-devel pcre2-devel tk-devel"
|
||||
# Required by https://
|
||||
|
|
Loading…
Reference in a new issue