From: Junio C Hamano <gitster@pobox.com>
To: Zheng Yuting <05zyt30@gmail.com>
Cc: git@vger.kernel.org
Subject: Re: [GSoC PATCH v3 1/1] Unify SMTP auth error handling
Date: Thu, 13 Mar 2025 12:58:51 -0700 [thread overview]
Message-ID: <xmqqsengn1ms.fsf@gitster.g> (raw)
In-Reply-To: <20250312064639.668875-2-05ZYT30@gmail.com> (Zheng Yuting's message of "Wed, 12 Mar 2025 14:46:36 +0800")
Zheng Yuting <05zyt30@gmail.com> writes:
> Refactored SMTP authentication to use a unified error capture block for
> both SASL and plain methods. Errors are now handled by parsing SMTP status
> codes (4yz for transient, 5yz for permanent) instead of relying on regex
> matching. This change improves clarity .
"improves clarity ." is (not well formatted and) a bit subjective
and does not apply to all three changes the patch is making here,
does it?
> Signed-off-by: Zheng Yuting <05ZYT30@gmail.com>
> ---
> git-send-email.perl | 72 +++++++++++++++++++++++++++------------------
> 1 file changed, 43 insertions(+), 29 deletions(-)
>
> diff --git a/git-send-email.perl b/git-send-email.perl
> index a012d61abb..532dda264c 100755
> --- a/git-send-email.perl
> +++ b/git-send-email.perl
> @@ -1411,7 +1411,7 @@ sub smtp_auth_maybe {
> eval {
> require Authen::SASL;
> Authen::SASL->import(qw(Perl));
> - };
> + }
Hmph, the interpreter may tolerate the new block-eval "eval {}"
simple statement that lacks terminating ';' but is this an
improvement? The original look more kosher from syntactic point of
view. It seems to be totally unrelated change from the rest of the
patch.
> @@ -1426,42 +1426,56 @@ sub smtp_auth_maybe {
> 'protocol' => 'smtp',
> 'host' => smtp_host_string(),
> 'username' => $smtp_authuser,
> + # if there's no password, "git credential fill" will
> + # give us one, otherwise it'll just pass this one.
> 'password' => $smtp_authpass
> -
We seem to already have the comment added by this hunk, since
4d31a44a (git-send-email: use git credential to obtain password,
2013-02-12). Am I looking at a wrong version of the source (or a
wrong version of the patch)?
> }, sub {
> my $cred = shift;
> my $result;
> my $error;
> - if ($smtp_auth) {
> - my $sasl = Authen::SASL->new(
> - mechanism => $smtp_auth,
> - callback => {
> - user => $cred->{'username'},
> - pass => $cred->{'password'},
> - authname => $cred->{'username'},
> - }
> - );
> - return !!$smtp->auth($sasl);
> - } else {
> - # Handle plain authentication errors
> - eval {
And curiously we do not seem to have this else clause with the
comment that is getting removed.
> + # catch all SMTP auth error
> + eval {
> + if ($smtp_auth) {
> + my $sasl = Authen::SASL->new(
> + mechanism => $smtp_auth,
> + callback => {
> + user => $cred->{'username'},
> + pass => $cred->{'password'},
> + authname => $cred->{'username'},
> + }
> + );
> + $result = $smtp->auth($sasl);
> + } else {
> $result = $smtp->auth($cred->{'username'}, $cred->{'password'});
> - 1; # Ensure true value is returned
> - } or do {
> - $error = $@ || 'Unknown error';
> - };
> - }
> - # Unified error handling logic
> + }
> + 1; # Ensure true value is returned if no exception is thrown.
> + } or do {
> + $error = $@ || 'Unknown error';
> + };
> +
> + #check if an error was captured
As I do not see two evals in our copy of git-send-email.perl source,
it may be moot at this point to comment on this patch, but if we did
have a eval block each of the if/else arms, moving the control
structure around and turning "if eval {} else eval {}" into "eval {
if ... else ...}" may make it cleaner to see what is going on,
especially if we plan to extend the choices and add elsif to the
chain later.
> if ($error) {
> - # Match temporary errors
> - if ($error =~ /timeout|temporary|greylist|throttled|quota\s+exceeded|queue|overload|try\s+again|connection\s+lost|network\s+error/i) {
> - warn "SMTP temporary error: $error";
> - return 1;
> + #Parse SMTP status code from error message in:
> + #https://www.rfc-editor.org/rfc/rfc5321.html
Have a SP between "#" and the comment body.
Using the numeric error codes allows us to give more precise errors,
which should be a good change that can be done regardless of the
eval change. IOW, this part should be in a separate patch on its
own, either before or after the if-eval-else-eval change.
I'll stop here, as the patch does not seem to be designed to apply
to our source tree.
next prev parent reply other threads:[~2025-03-13 19:58 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-03-12 6:46 [GSoC PATCH v3 0/1] Refactor SMTP Auth Error Handling Zheng Yuting
2025-03-12 6:46 ` [GSoC PATCH v3 1/1] Unify SMTP auth error handling Zheng Yuting
2025-03-13 19:58 ` Junio C Hamano [this message]
2025-03-14 12:55 ` Yuting Zheng
2025-03-16 5:09 ` [GSoC PATCH v4 0/2] smtp_auth_maybe: unified error capture and status code processing optimization Zheng Yuting
2025-03-16 5:09 ` [GSoC PATCH v4 1/2] Unify capture of SMTP errors Zheng Yuting
2025-03-16 5:09 ` [GSoC PATCH v4 2/2] Error handling for SMTP status codes Zheng Yuting
2025-03-17 23:01 ` [GSoC PATCH v4 0/2] smtp_auth_maybe: unified error capture and status code processing optimization Junio C Hamano
2025-03-19 2:02 ` [GSoC PATCH v5 0/2] sendemail: improve error capture and status code handling Zheng Yuting
2025-03-19 2:02 ` [GSoC PATCH v5 1/2] sendemail: capture errors in an eval {} block Zheng Yuting
2025-03-19 2:02 ` [GSoC PATCH v5 2/2] sendemail: finer-grained SMTP error handling Zheng Yuting
2025-03-19 6:35 ` [GSoC PATCH v5 0/2] sendemail: improve error capture and status code handling Meet Soni
2025-03-21 2:51 ` [GSoC PATCH v6 0/2] send-email: " Zheng Yuting
2025-03-21 2:51 ` [GSoC PATCH v6 1/2] send-email: capture errors in an eval {} block Zheng Yuting
2025-03-21 2:51 ` [GSoC PATCH v6 2/2] send-email: finer-grained SMTP error handling Zheng Yuting
2025-03-21 15:38 ` [GSoC PATCH v6 0/2] send-email: improve error capture and status code handling Junio C Hamano
2025-03-23 2:21 ` [GSoC PATCH v7 " Zheng Yuting
2025-03-23 2:21 ` [GSoC PATCH v7 1/2] send-email: capture errors in an eval {} block Zheng Yuting
2025-03-23 2:21 ` [GSoC PATCH v7 2/2] send-email: finer-grained SMTP error handling Zheng Yuting
2025-03-24 6:00 ` Junio C Hamano
2025-03-24 14:53 ` [GSoC PATCH v8 0/2] send-email: improve error capture and status code handling Zheng Yuting
2025-03-24 14:53 ` [GSoC PATCH v8 1/2] send-email: capture errors in an eval {} block Zheng Yuting
2025-03-24 14:53 ` [GSoC PATCH v8 2/2] send-email: finer-grained SMTP error handling Zheng Yuting
2025-03-25 15:34 ` Junio C Hamano
2025-03-26 7:52 ` [GSoC PATCH v9 0/2] send-email: improve error capture and status code handling Zheng Yuting
2025-03-26 7:52 ` [GSoC PATCH v9 1/2] send-email: capture errors in an eval {} block Zheng Yuting
2025-03-26 7:52 ` [GSoC PATCH v9 2/2] send-email: finer-grained SMTP error handling Zheng Yuting
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=xmqqsengn1ms.fsf@gitster.g \
--to=gitster@pobox.com \
--cc=05zyt30@gmail.com \
--cc=git@vger.kernel.org \
/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).