git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
* [PATCH] Change git-send-email's sendemail-validate hook to use header information
@ 2022-11-09 18:23 Strawbridge, Michael
  2022-11-09 23:13 ` Taylor Blau
  2022-11-09 23:16 ` brian m. carlson
  0 siblings, 2 replies; 3+ messages in thread
From: Strawbridge, Michael @ 2022-11-09 18:23 UTC (permalink / raw)
  To: git@vger.kernel.org
  Cc: Strawbridge, Michael, Tuikov, Luben, brian m . carlson

Since commit-msg and pre-commit git hooks already expose commit
contents, switch sendemail-validate to use the header information
of the email that git-send-email intends to send.

Cc: Luben Tuikov <luben.tuikov@amd.com>
Cc: brian m. carlson <sandals@crustytoothpaste.net>
---
 git-send-email.perl | 57 +++++++++++++++++++++++++++++----------------
 1 file changed, 37 insertions(+), 20 deletions(-)

diff --git a/git-send-email.perl b/git-send-email.perl
index 5861e99a6e..3ea6fda48e 100755
--- a/git-send-email.perl
+++ b/git-send-email.perl
@@ -787,14 +787,6 @@ sub is_format_patch_arg {
 
 @files = handle_backup_files(@files);
 
-if ($validate) {
-	foreach my $f (@files) {
-		unless (-p $f) {
-			validate_patch($f, $target_xfer_encoding);
-		}
-	}
-}
-
 if (@files) {
 	unless ($quiet) {
 		print $_,"\n" for (@files);
@@ -1495,16 +1487,7 @@ sub file_name_is_absolute {
 	return File::Spec::Functions::file_name_is_absolute($path);
 }
 
-# Prepares the email, then asks the user what to do.
-#
-# If the user chooses to send the email, it's sent and 1 is returned.
-# If the user chooses not to send the email, 0 is returned.
-# If the user decides they want to make further edits, -1 is returned and the
-# caller is expected to call send_message again after the edits are performed.
-#
-# If an error occurs sending the email, this just dies.
-
-sub send_message {
+sub gen_header {
 	my @recipients = unique_email_list(@to);
 	@cc = (grep { my $cc = extract_valid_address_or_die($_);
 		      not grep { $cc eq $_ || $_ =~ /<\Q${cc}\E>$/ } @recipients
@@ -1546,6 +1529,22 @@ sub send_message {
 	if (@xh) {
 		$header .= join("\n", @xh) . "\n";
 	}
+	return $header;
+}
+
+# Prepares the email, then asks the user what to do.
+#
+# If the user chooses to send the email, it's sent and 1 is returned.
+# If the user chooses not to send the email, 0 is returned.
+# If the user decides they want to make further edits, -1 is returned and the
+# caller is expected to call send_message again after the edits are performed.
+#
+# If an error occurs sending the email, this just dies.
+
+sub send_message {
+	my @recipients = unique_email_list(@to);
+
+        my $header = gen_header();
 
 	my @sendmail_parameters = ('-i', @recipients);
 	my $raw_from = $sender;
@@ -1955,6 +1954,15 @@ sub process_file {
 		}
 	}
 
+
+	if ($validate) {
+		foreach my $f (@files) {
+			unless (-p $f) {
+				validate_patch($f, $target_xfer_encoding);
+			}
+		}
+	}
+
 	my $message_was_sent = send_message();
 	if ($message_was_sent == -1) {
 		do_edit($t);
@@ -2088,11 +2096,20 @@ sub validate_patch {
 			chdir($repo->wc_path() or $repo->repo_path())
 				or die("chdir: $!");
 			local $ENV{"GIT_DIR"} = $repo->repo_path();
+
+			my $header = gen_header();
+
+			require File::Temp;
+			my ($header_filehandle, $header_filename) = File::Temp::tempfile(
+                            ".gitsendemail.header.XXXXXX", DIR => $repo->repo_path());
+			print $header_filehandle $header;
+
 			my @cmd = ("git", "hook", "run", "--ignore-missing",
 				    $hook_name, "--");
-			my @cmd_msg = (@cmd, "<patch>");
-			my @cmd_run = (@cmd, $target);
+			my @cmd_msg = (@cmd, "<header>");
+			my @cmd_run = (@cmd, $header_filename);
 			$hook_error = system_or_msg(\@cmd_run, undef, "@cmd_msg");
+			unlink($header_filehandle);
 			chdir($cwd_save) or die("chdir: $!");
 		}
 		if ($hook_error) {
-- 
2.34.1

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH] Change git-send-email's sendemail-validate hook to use header information
  2022-11-09 18:23 [PATCH] Change git-send-email's sendemail-validate hook to use header information Strawbridge, Michael
@ 2022-11-09 23:13 ` Taylor Blau
  2022-11-09 23:16 ` brian m. carlson
  1 sibling, 0 replies; 3+ messages in thread
From: Taylor Blau @ 2022-11-09 23:13 UTC (permalink / raw)
  To: Strawbridge, Michael
  Cc: git@vger.kernel.org, Tuikov, Luben, brian m . carlson

Hi Michael,

On Wed, Nov 09, 2022 at 06:23:06PM +0000, Strawbridge, Michael wrote:
> Since commit-msg and pre-commit git hooks already expose commit
> contents, switch sendemail-validate to use the header information
> of the email that git-send-email intends to send.
>
> Cc: Luben Tuikov <luben.tuikov@amd.com>
> Cc: brian m. carlson <sandals@crustytoothpaste.net>

Without having looked at the patch below, would you mind re-submitting
it with your Signed-off-by? Please see Documentation/SubmittingPatches
for more.


Thanks,
Taylor

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] Change git-send-email's sendemail-validate hook to use header information
  2022-11-09 18:23 [PATCH] Change git-send-email's sendemail-validate hook to use header information Strawbridge, Michael
  2022-11-09 23:13 ` Taylor Blau
@ 2022-11-09 23:16 ` brian m. carlson
  1 sibling, 0 replies; 3+ messages in thread
From: brian m. carlson @ 2022-11-09 23:16 UTC (permalink / raw)
  To: Strawbridge, Michael; +Cc: git@vger.kernel.org, Tuikov, Luben

[-- Attachment #1: Type: text/plain, Size: 1151 bytes --]

On 2022-11-09 at 18:23:06, Strawbridge, Michael wrote:
> Since commit-msg and pre-commit git hooks already expose commit
> contents, switch sendemail-validate to use the header information
> of the email that git-send-email intends to send.

I have a couple of thoughts here, and maybe you can explain them a bit
better in the commit message for v2.  First, I'm not sure why this is
valuable.  What do we gain from this that we don't have now?  Why is the
current state inadequate?

Also, how does this handle encoded headers?  I'd like to see some tests
before and after here, especially some including non-ASCII user.name
values so that we can test that we do the right thing here.  If there's
some beneficial improvement here that results in a behaviour change,
then of course we'd want to test that as well.

Finally, since we move the validation code farther down instead of first
thing, is there any place that this would result in a different
behaviour?  For example, --dry-run mode?  Is there any way we could send
data that isn't validated but should be?
-- 
brian m. carlson (he/him or they/them)
Toronto, Ontario, CA

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 263 bytes --]

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2022-11-09 23:17 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-11-09 18:23 [PATCH] Change git-send-email's sendemail-validate hook to use header information Strawbridge, Michael
2022-11-09 23:13 ` Taylor Blau
2022-11-09 23:16 ` brian m. carlson

Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

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 read-only IMAP folder(s) and NNTP newsgroup(s).