git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
* [PATCH 0/2] Expose header information to git-send-email's sendemail-validate hook
@ 2022-11-11  2:15 Strawbridge, Michael
  2022-11-11  2:15 ` [PATCH 1/2] " Strawbridge, Michael
  2022-11-11  2:15 ` [PATCH 2/2] Update sendemail-validate hook docs to add header file parameter Strawbridge, Michael
  0 siblings, 2 replies; 5+ messages in thread
From: Strawbridge, Michael @ 2022-11-11  2:15 UTC (permalink / raw)
  To: git@vger.kernel.org
  Cc: Strawbridge, Michael, Tuikov, Luben, brian m . carlson

Sure.  Thank you for the quick feedback.  Let me see if I can explain the idea.

Sometimes it can be helpful to react to special keywords in a git send-email subject line or specific email address.  Like perhaps one wants to do some kind of sorting of patches by mailing list or "to" email address.  You could use the sendemail-validate hook as a way to copy the patch to a specific location locally based on who you are emailing.  I'm sure there could be other uses for the smtp header information as well.  Presumably the header information is printed to stdout before sending an email, for other reasons too (this happens already).  My patch makes it possible to now automate any checks one might be doing manually with these headers.

With some testing I can confirm that encoded headers (like a utf8 string) get passed in encoded form.  The random example I tried was with the subject "Rhyddhewch y racŵn" and it is showns as "Subject: [PATCH] =?UTF-8?q?Rhyddhewch=20y=20rac=C5=B5n?=".  However, the original print of the smtp headers doesn't handle encoded text either, so it is no worse than current.

Lastly, with the validate code moving later there are some changes in output.  After my change, the user will get asked about: composed email (compose argument code), 8 bit encoding, who to send to, and which message-ID to reply to before validation.  Since these change the header information, validation needs to happen after.

Michael
PS- I fixed the Signed-off-by as well.


Michael Strawbridge (2):
  Expose header information to git-send-email's sendemail-validate hook
  Update sendemail-validate hook docs to add header file parameter

 Documentation/githooks.txt |  8 +++---
 git-send-email.perl        | 57 +++++++++++++++++++++++++-------------
 2 files changed, 41 insertions(+), 24 deletions(-)

Cc: Luben Tuikov <luben.tuikov@amd.com>
Cc: brian m. carlson <sandals@crustytoothpaste.net>

-- 
2.34.1

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

* [PATCH 1/2] Expose header information to git-send-email's sendemail-validate hook
  2022-11-11  2:15 [PATCH 0/2] Expose header information to git-send-email's sendemail-validate hook Strawbridge, Michael
@ 2022-11-11  2:15 ` Strawbridge, Michael
  2022-11-11  2:15 ` [PATCH 2/2] Update sendemail-validate hook docs to add header file parameter Strawbridge, Michael
  1 sibling, 0 replies; 5+ messages in thread
From: Strawbridge, Michael @ 2022-11-11  2:15 UTC (permalink / raw)
  To: git@vger.kernel.org
  Cc: Strawbridge, Michael, Tuikov, Luben, brian m . carlson

To allow further flexibility in the git hook, the smtp header
information of the email that git-send-email intends to send, is now
passed as a 2nd argument to the sendemail-validate hook.

As an example, this can be useful for acting upon keywords in the
subject or specific email addresses.

Cc: Luben Tuikov <luben.tuikov@amd.com>
Cc: brian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: Michael Strawbridge <michael.strawbridge@amd.com>
---
 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..3ce5b1aad3 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, "<patch>", "<header>");
+			my @cmd_run = (@cmd, $target, $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] 5+ messages in thread

* [PATCH 2/2] Update sendemail-validate hook docs to add header file parameter
  2022-11-11  2:15 [PATCH 0/2] Expose header information to git-send-email's sendemail-validate hook Strawbridge, Michael
  2022-11-11  2:15 ` [PATCH 1/2] " Strawbridge, Michael
@ 2022-11-11  2:15 ` Strawbridge, Michael
  2022-11-11 15:10   ` Ævar Arnfjörð Bjarmason
  2022-11-11 19:12   ` Luben Tuikov
  1 sibling, 2 replies; 5+ messages in thread
From: Strawbridge, Michael @ 2022-11-11  2:15 UTC (permalink / raw)
  To: git@vger.kernel.org
  Cc: Strawbridge, Michael, Tuikov, Luben, brian m . carlson

Add documentation for the new smtp header file parameter used by the
sendemail-validate git-send-email hook.

sendemail-validate accepts the patch file as the first parameter (same as
before) and now also adds the smtp header information as the second parameter.

Cc: Luben Tuikov <luben.tuikov@amd.com>
Cc: brian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: Michael Strawbridge <michael.strawbridge@amd.com>
---
 Documentation/githooks.txt | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/Documentation/githooks.txt b/Documentation/githooks.txt
index a16e62bc8c..c1baf34454 100644
--- a/Documentation/githooks.txt
+++ b/Documentation/githooks.txt
@@ -583,10 +583,10 @@ processed by rebase.
 sendemail-validate
 ~~~~~~~~~~~~~~~~~~
 
-This hook is invoked by linkgit:git-send-email[1].  It takes a single parameter,
-the name of the file that holds the e-mail to be sent.  Exiting with a
-non-zero status causes `git send-email` to abort before sending any
-e-mails.
+This hook is invoked by linkgit:git-send-email[1].  It takes two parameters,
+the name of a file that holds the patch and the name of a file that holds the
+smtp headers.  Exiting with a non-zero status causes `git send-email` to abort
+before sending any e-mails.
 
 fsmonitor-watchman
 ~~~~~~~~~~~~~~~~~~
-- 
2.34.1

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

* Re: [PATCH 2/2] Update sendemail-validate hook docs to add header file parameter
  2022-11-11  2:15 ` [PATCH 2/2] Update sendemail-validate hook docs to add header file parameter Strawbridge, Michael
@ 2022-11-11 15:10   ` Ævar Arnfjörð Bjarmason
  2022-11-11 19:12   ` Luben Tuikov
  1 sibling, 0 replies; 5+ messages in thread
From: Ævar Arnfjörð Bjarmason @ 2022-11-11 15:10 UTC (permalink / raw)
  To: Strawbridge, Michael
  Cc: git@vger.kernel.org, Tuikov, Luben, brian m . carlson


On Fri, Nov 11 2022, Strawbridge, Michael wrote:

> Add documentation for the new smtp header file parameter used by the
> sendemail-validate git-send-email hook.
>
> sendemail-validate accepts the patch file as the first parameter (same as
> before) and now also adds the smtp header information as the second parameter.
>
> Cc: Luben Tuikov <luben.tuikov@amd.com>
> Cc: brian m. carlson <sandals@crustytoothpaste.net>
> Signed-off-by: Michael Strawbridge <michael.strawbridge@amd.com>
> ---
>  Documentation/githooks.txt | 8 ++++----
>  1 file changed, 4 insertions(+), 4 deletions(-)
>
> diff --git a/Documentation/githooks.txt b/Documentation/githooks.txt
> index a16e62bc8c..c1baf34454 100644
> --- a/Documentation/githooks.txt
> +++ b/Documentation/githooks.txt
> @@ -583,10 +583,10 @@ processed by rebase.
>  sendemail-validate
>  ~~~~~~~~~~~~~~~~~~
>  
> -This hook is invoked by linkgit:git-send-email[1].  It takes a single parameter,
> -the name of the file that holds the e-mail to be sent.  Exiting with a
> -non-zero status causes `git send-email` to abort before sending any
> -e-mails.
> +This hook is invoked by linkgit:git-send-email[1].  It takes two parameters,
> +the name of a file that holds the patch and the name of a file that holds the
> +smtp headers.  Exiting with a non-zero status causes `git send-email` to abort
> +before sending any e-mails.
>  
>  fsmonitor-watchman
>  ~~~~~~~~~~~~~~~~~~

As this is just documenting the change in 1/2 after-the-fact, we really
should squash it into that.

If you are doing another commit, the better thing to do would be to
first change the docs to say e.g.:
	
	This hook is invoked by linkgit:git-send-email[1]. It's provided with
	these parameters, in order:
	
	* A file that holds the....
	
Then instead of your "actual" change being a reword change etc. you can
just add another bullet-point.

Or you could just squash this as-is...

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

* Re: [PATCH 2/2] Update sendemail-validate hook docs to add header file parameter
  2022-11-11  2:15 ` [PATCH 2/2] Update sendemail-validate hook docs to add header file parameter Strawbridge, Michael
  2022-11-11 15:10   ` Ævar Arnfjörð Bjarmason
@ 2022-11-11 19:12   ` Luben Tuikov
  1 sibling, 0 replies; 5+ messages in thread
From: Luben Tuikov @ 2022-11-11 19:12 UTC (permalink / raw)
  To: Strawbridge, Michael, git@vger.kernel.org; +Cc: brian m . carlson

On 2022-11-10 21:15, Strawbridge, Michael wrote:
> Add documentation for the new smtp header file parameter used by the
> sendemail-validate git-send-email hook.
> 
> sendemail-validate accepts the patch file as the first parameter (same as
> before) and now also adds the smtp header information as the second parameter.
> 
> Cc: Luben Tuikov <luben.tuikov@amd.com>
> Cc: brian m. carlson <sandals@crustytoothpaste.net>
> Signed-off-by: Michael Strawbridge <michael.strawbridge@amd.com>
> ---
>  Documentation/githooks.txt | 8 ++++----
>  1 file changed, 4 insertions(+), 4 deletions(-)
> 
> diff --git a/Documentation/githooks.txt b/Documentation/githooks.txt
> index a16e62bc8c..c1baf34454 100644
> --- a/Documentation/githooks.txt
> +++ b/Documentation/githooks.txt
> @@ -583,10 +583,10 @@ processed by rebase.
>  sendemail-validate
>  ~~~~~~~~~~~~~~~~~~
>  
> -This hook is invoked by linkgit:git-send-email[1].  It takes a single parameter,
> -the name of the file that holds the e-mail to be sent.  Exiting with a
> -non-zero status causes `git send-email` to abort before sending any
> -e-mails.
> +This hook is invoked by linkgit:git-send-email[1].  It takes two parameters,
> +the name of a file that holds the patch and the name of a file that holds the
> +smtp headers.  Exiting with a non-zero status causes `git send-email` to abort
> +before sending any e-mails.

Fix this: smtp --> SMTP

Regards,
Luben

>  
>  fsmonitor-watchman
>  ~~~~~~~~~~~~~~~~~~


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

end of thread, other threads:[~2022-11-11 19:12 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-11-11  2:15 [PATCH 0/2] Expose header information to git-send-email's sendemail-validate hook Strawbridge, Michael
2022-11-11  2:15 ` [PATCH 1/2] " Strawbridge, Michael
2022-11-11  2:15 ` [PATCH 2/2] Update sendemail-validate hook docs to add header file parameter Strawbridge, Michael
2022-11-11 15:10   ` Ævar Arnfjörð Bjarmason
2022-11-11 19:12   ` Luben Tuikov

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).