* [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; +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; +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; +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, 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; +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).