diff options
author | Junio C Hamano <gitster@pobox.com> | 2023-11-07 02:26:44 +0100 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2023-11-07 02:26:44 +0100 |
commit | 00f372e2a419266fc9a41cb7b7935c9217e05ca7 (patch) | |
tree | 873c5a9e5c012207d17fbe304596d46eee2d5002 | |
parent | Merge branch 'rs/reflog-expire-single-worktree-fix' (diff) | |
parent | send-email: move validation code below process_address_list (diff) | |
download | git-00f372e2a419266fc9a41cb7b7935c9217e05ca7.tar.xz git-00f372e2a419266fc9a41cb7b7935c9217e05ca7.zip |
Merge branch 'ms/send-email-validate-fix'
"git send-email" did not have certain pieces of data computed yet
when it tried to validate the outging messages and its recipient
addresses, which has been sorted out.
* ms/send-email-validate-fix:
send-email: move validation code below process_address_list
-rwxr-xr-x | git-send-email.perl | 60 | ||||
-rwxr-xr-x | t/t9001-send-email.sh | 19 |
2 files changed, 51 insertions, 28 deletions
diff --git a/git-send-email.perl b/git-send-email.perl index 9e21b0b3f4..cacdbd6bb2 100755 --- a/git-send-email.perl +++ b/git-send-email.perl @@ -799,30 +799,6 @@ $sender = sanitize_address($sender); $time = time - scalar $#files; -if ($validate) { - # FIFOs can only be read once, exclude them from validation. - my @real_files = (); - foreach my $f (@files) { - unless (-p $f) { - push(@real_files, $f); - } - } - - # Run the loop once again to avoid gaps in the counter due to FIFO - # arguments provided by the user. - my $num = 1; - my $num_files = scalar @real_files; - $ENV{GIT_SENDEMAIL_FILE_TOTAL} = "$num_files"; - foreach my $r (@real_files) { - $ENV{GIT_SENDEMAIL_FILE_COUNTER} = "$num"; - pre_process_file($r, 1); - validate_patch($r, $target_xfer_encoding); - $num += 1; - } - delete $ENV{GIT_SENDEMAIL_FILE_COUNTER}; - delete $ENV{GIT_SENDEMAIL_FILE_TOTAL}; -} - @files = handle_backup_files(@files); if (@files) { @@ -1726,10 +1702,6 @@ EOF return 1; } -$in_reply_to = $initial_in_reply_to; -$references = $initial_in_reply_to || ''; -$message_num = 0; - sub pre_process_file { my ($t, $quiet) = @_; @@ -1995,6 +1967,38 @@ sub process_file { return 1; } +sub initialize_modified_loop_vars { + $in_reply_to = $initial_in_reply_to; + $references = $initial_in_reply_to || ''; + $message_num = 0; +} + +if ($validate) { + # FIFOs can only be read once, exclude them from validation. + my @real_files = (); + foreach my $f (@files) { + unless (-p $f) { + push(@real_files, $f); + } + } + + # Run the loop once again to avoid gaps in the counter due to FIFO + # arguments provided by the user. + my $num = 1; + my $num_files = scalar @real_files; + $ENV{GIT_SENDEMAIL_FILE_TOTAL} = "$num_files"; + initialize_modified_loop_vars(); + foreach my $r (@real_files) { + $ENV{GIT_SENDEMAIL_FILE_COUNTER} = "$num"; + pre_process_file($r, 1); + validate_patch($r, $target_xfer_encoding); + $num += 1; + } + delete $ENV{GIT_SENDEMAIL_FILE_COUNTER}; + delete $ENV{GIT_SENDEMAIL_FILE_TOTAL}; +} + +initialize_modified_loop_vars(); foreach my $t (@files) { while (!process_file($t)) { # user edited the file diff --git a/t/t9001-send-email.sh b/t/t9001-send-email.sh index 2e8e8137fb..dc7785eadb 100755 --- a/t/t9001-send-email.sh +++ b/t/t9001-send-email.sh @@ -633,6 +633,25 @@ test_expect_success $PREREQ "--validate respects absolute core.hooksPath path" ' test_cmp expect actual ' +test_expect_success $PREREQ "--validate hook supports multiple addresses in arguments" ' + hooks_path="$(pwd)/my-hooks" && + test_config core.hooksPath "$hooks_path" && + test_when_finished "rm my-hooks.ran" && + test_must_fail git send-email \ + --from="Example <nobody@example.com>" \ + --to=nobody@example.com,abc@example.com \ + --smtp-server="$(pwd)/fake.sendmail" \ + --validate \ + longline.patch 2>actual && + test_path_is_file my-hooks.ran && + cat >expect <<-EOF && + fatal: longline.patch: rejected by sendemail-validate hook + fatal: command '"'"'git hook run --ignore-missing sendemail-validate -- <patch> <header>'"'"' died with exit code 1 + warning: no patches were sent + EOF + test_cmp expect actual +' + test_expect_success $PREREQ "--validate hook supports header argument" ' write_script my-hooks/sendemail-validate <<-\EOF && if test "$#" -ge 2 |