From: "Ævar Arnfjörð Bjarmason" <avarab@gmail.com>
To: git@vger.kernel.org
Cc: "Junio C Hamano" <gitster@pobox.com>,
"Eli Schwartz" <eschwartz@archlinux.org>,
"Jeff King" <peff@peff.net>,
"Eric Sunshine" <sunshine@sunshineco.com>,
"Elijah Newren" <newren@gmail.com>,
"Ævar Arnfjörð Bjarmason" <avarab@gmail.com>
Subject: [PATCH] send-email: fix a "first config key wins" regression in v2.33.0
Date: Mon, 6 Sep 2021 09:33:29 +0200 [thread overview]
Message-ID: <patch-1.1-ae6ff9f77f1-20210906T073306Z-avarab@gmail.com> (raw)
In-Reply-To: <96814e5e-54be-1eca-0d75-68be53b1be3d@archlinux.org>
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 not 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>
---
On Sun, Sep 05 2021, Eli Schwartz wrote:
> [[PGP Signed Part:Undecided]]
> On 9/5/21 8:04 PM, Ævar Arnfjörð Bjarmason wrote:
>>
>> On Sun, Sep 05 2021, Eli Schwartz wrote:
>>
>>> I recently noticed that git send-email was attempting to send emails
>>> using the wrong email address. I have a global email configuration in
>>> XDG_CONFIG_HOME, and a specific one set in the {repo}/.git/config of
>>> some repos... this was trying to use the global configuration.
>>>
>>> `git config -l | grep ^sendemail.smtpserver=` reports two emails
[...]
>>> `git config --get sendemail.smtpserver` reports only the second,
>>> repo-specific one
>>>
>>>
>>> I bisected the issue to commit c95e3a3f0b8107b5dc7eac9dfdb9e5238280c9fb
>>>
>>> send-email: move trivial config handling to Perl
>>>
>>>
>>> Using this commit, git-send-email disagrees with git config --get on
>>> which email to use.
>>>
>>> Using commit f4dc9432fd287bde9100488943baf3c6a04d90d1 immediately
>>> preceding this commit, git send-email agrees with git config --get.
>>
>> That's a pretty bad bug, sorry about that. I believe that the following
>> patch should fix it (needs tests obviously). I.e. when we had N config
>> keys we'd previously pick the normal "last key wins", which my
>> c95e3a3f0b8107b5dc7eac9dfdb9e5238280c9fb changed to "first wins":
>>
>> diff --git a/git-send-email.perl b/git-send-email.perl
>> index e65d969d0bb..6c7ab3d2e91 100755
>> --- a/git-send-email.perl
>> +++ b/git-send-email.perl
>> @@ -376,7 +376,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;
>>
>
>
>
> Thanks, this worked for me and fixed my problem! Feel free to add my
> tested-by.
Added, and here's a properly formatted patch with a regression test.
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 e65d969d0bb..6c7ab3d2e91 100755
--- a/git-send-email.perl
+++ b/git-send-email.perl
@@ -376,7 +376,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 57fc10e7f82..eae172e0a05 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" &&
--
2.33.0.821.gfd4106eadbd
next prev parent reply other threads:[~2021-09-06 7:33 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-09-05 23:01 Regression in git send-email parsing sendemail.* config values Eli Schwartz
2021-09-06 0:04 ` Ævar Arnfjörð Bjarmason
2021-09-06 1:44 ` Eli Schwartz
2021-09-06 7:33 ` Ævar Arnfjörð Bjarmason [this message]
2021-09-06 8:32 ` [PATCH] send-email: fix a "first config key wins" regression in v2.33.0 Carlo Arenas
2021-09-06 11:05 ` Bagas Sanjaya
2021-09-07 9:15 ` Ævar Arnfjörð Bjarmason
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=patch-1.1-ae6ff9f77f1-20210906T073306Z-avarab@gmail.com \
--to=avarab@gmail.com \
--cc=eschwartz@archlinux.org \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=newren@gmail.com \
--cc=peff@peff.net \
--cc=sunshine@sunshineco.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).