From patchwork Tue Jan 17 14:27:17 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Strawbridge X-Patchwork-Id: 13104751 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 83B55C677F1 for ; Tue, 17 Jan 2023 14:29:07 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230222AbjAQO3D (ORCPT ); Tue, 17 Jan 2023 09:29:03 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48526 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229830AbjAQO2V (ORCPT ); Tue, 17 Jan 2023 09:28:21 -0500 Received: from NAM04-DM6-obe.outbound.protection.outlook.com (mail-dm6nam04on2067.outbound.protection.outlook.com [40.107.102.67]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 377BA3FF0B for ; Tue, 17 Jan 2023 06:27:20 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=eGQa/Eqxfma/WNiCUbbh/RWVLG/wSU2F75TYj/lZKh04YwnG2GXOaoHbqavLtr7XNbD75qOdU1TT08mTWlzJBrhm6Xj2MVeSmi+DvM/G1qCV7j2EKanhmGF/Kjpxnkhoj+7v3rFIlrnk0I9d0gPlGLfhvb/4ShAIvqLBjPSDxVsnXwm0Ibev4Sdvp4cBBgNuM6oipIiq5DYGFID+xNWRfz3iyQxYXCp91Jtmcyw5sI9rIDRiMMjhCXHaY+Nd+8AbOJNMHJEgXwzJiYEN4REJ58sYPm2wRrI65VaQV1/R2VR21MLSJqluDn7N1vOpoidMR6xqUMc3tpv5HO34bGXTYg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=GPIobfVFG/P8PWg3jcQlDUDAgoIFBgntpWB6wQ1/f/A=; b=NGSOYHf/OGyEi232NcS1aLZ98roB+/HFJPUdODqRxSdiHR8/V11StaTDO9OvuK7cEXvDKWPqHiSk7Z4Fk9IDaR+r20yKojTHfMsFYLydmBpOKX/gDJq+dIIvus9uEj/HadtmgRls0v9fNdiBDW2Sy+h8nDfe0hZhnDJyZrHf9ZaYXNIm0VL3d3aMv/9xsof4UOGwnmaA2Jsa2TSaknhAzaMQAGJTiwvdngem0SwHvViIeSwKVqTmT1OW4dWEqM+JMZSu9zLhM4iwIN/cKq50ir464/cqyrwYY67pK1LwBlzbDvk3UWaPWqTXYUPj4YX5MfhxCTCszE7vFZqdN8fPaw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass header.d=amd.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=GPIobfVFG/P8PWg3jcQlDUDAgoIFBgntpWB6wQ1/f/A=; b=aAeHsTbWUDz6/lvWLUNUu1bElZzttH/dp91j9nlnS92v5+gIQeQChGXzIR9XfMMuUTCT689PBItOtQ0CnzCRYUpeINgVQSB5YcV5D4mhJBWhK0rDA1sVvXRL0UeByCK5e0o93egMozaWR5AZLiFhpT59FJSmQ+pnNljJHOe4lws= Received: from DM6PR12MB4356.namprd12.prod.outlook.com (2603:10b6:5:2aa::8) by SA1PR12MB6678.namprd12.prod.outlook.com (2603:10b6:806:251::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5986.23; Tue, 17 Jan 2023 14:27:18 +0000 Received: from DM6PR12MB4356.namprd12.prod.outlook.com ([fe80::5484:99ef:2b52:eb77]) by DM6PR12MB4356.namprd12.prod.outlook.com ([fe80::5484:99ef:2b52:eb77%3]) with mapi id 15.20.5986.019; Tue, 17 Jan 2023 14:27:17 +0000 From: "Strawbridge, Michael" To: "git@vger.kernel.org" CC: "Strawbridge, Michael" , "Tuikov, Luben" , Junio C Hamano Subject: [PATCH v7 1/2] send-email: refactor header generation functions Thread-Topic: [PATCH v7 1/2] send-email: refactor header generation functions Thread-Index: AQHZKn/NAKZ9rntskEioK2L680jtMw== Date: Tue, 17 Jan 2023 14:27:17 +0000 Message-ID: <20230117142706.230404-2-michael.strawbridge@amd.com> References: <20230117142706.230404-1-michael.strawbridge@amd.com> In-Reply-To: <20230117142706.230404-1-michael.strawbridge@amd.com> Accept-Language: en-GB, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-mailer: git-send-email 2.34.1 authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=amd.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: DM6PR12MB4356:EE_|SA1PR12MB6678:EE_ x-ms-office365-filtering-correlation-id: 24d759ba-d9c9-40e8-4d9a-08daf896efd5 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: 5cod6p1ngJhRJyBYho97OYDiVca02UhZ5JPGM/z7huIOcHTgdsPYs1pLEgfM3ILhjqIjbaf2czC6w7SU/AdgAiX3p46X938JpIrxM1ply1FTDGENwMHodSfHgfQ7Bu+l8B5NRp1I+lKmGE5z+5UCD5CnPVd2Ww0yv9w1bmn/TNBxHeGCcvv2weMADaHituWgRFgGKGysB/FZ3B198+Tof+tY9Ffrt3NY7zllL8jbYGDGvnK/YMxa3gTY/THxQGKcurYPZxpgFd4t1elWIUyK/HyQF3l4bM4utCsEA1+Beu5DRgIJPFwcgFoUPYuId4RTReVlrhSkZ6ONuFDCQjRGlfbpgDaaZzmkhdjb8cgWP/JPm6tb2GPuaAyxyGGHXnzviEFpR2dULUjlSDAPDBfkFEgAGQfkumButLG/Ixy1IPfEwPBWNZh5GyW5UGeu+oN+tYIyKqGmz+guwwqnxev77OhbNS2CKKRS9CjY45p1Zws8dWC4HV9Xn2gFa44mngWadyThmdZ1httFHhgULN+kWVVY2zfgXYAUgGNUgwq2xOoGmUQmE9kxCrfbrplHqSuBiYD+w1ojO/szxNQxIuK1+R72HqMw0UBRydXf6NfbKuMnz01hdTd5/iW5+0I7qK4/KOxHvNB8CvGE6LmWH/y/wO2MtStaHk+SoPM4I/ceBWPOYnJZrhO1vRQv5JmWslWSlqK/gzPU2toaKpnE4vfqPw== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM6PR12MB4356.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(4636009)(39860400002)(376002)(366004)(136003)(346002)(396003)(451199015)(64756008)(6916009)(66946007)(66446008)(76116006)(66556008)(26005)(41300700001)(66476007)(186003)(91956017)(6512007)(8676002)(4326008)(2616005)(86362001)(36756003)(5660300002)(1076003)(8936002)(54906003)(478600001)(83380400001)(6506007)(316002)(38100700002)(71200400001)(38070700005)(6486002)(122000001)(2906002);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?q?+l3cdKarMLbKgy0NFlC5VdO?= =?iso-8859-1?q?I2KGGPJj/P9K3MY8VO0teTuoWt4D67f+fkjkG+Cfq0myudksT4R/MRsrnuc3?= =?iso-8859-1?q?l32n+BpyNMccymKRq9N0Vb7Z58Ht4S5V03jr/DSOFZx7W8l6fVw17eTfNtbp?= =?iso-8859-1?q?vG1xFwQXWXjQmqG6gDc5F+9wuu4REfqgtaHHi3TIbHtTTe8mf3numJueU3Vw?= =?iso-8859-1?q?r92yKH1bkJJ4tM6tlFTbXF/9uGmBUsGy+YlLxEAxW/nY5IOsAXH1GdBE0MDF?= =?iso-8859-1?q?vUzbVpuRl+XHfP+GF2SLUn1SWOix3B6jcSerLNvgRcD/qrhfERdI9SYJL04a?= =?iso-8859-1?q?sMs0X39IsuUelofrPkJY+1JwVQqu4MC1QzstMu4s02I8kpnIQtjUOvg7dNne?= =?iso-8859-1?q?wmp6/xTzrkJ92YgjY16MYSKTbeWGc3J7K0ZmoILPbHpPIgyRxZK2rPEF/BDX?= =?iso-8859-1?q?1YzPUkedzor5QNBGtS3TOKT8q/TFw+rnsI3vQbA5CtkApccbBLuTtKyDjAhW?= =?iso-8859-1?q?+WRdFJJFywUwwjSjFy5i1NsJelLCzvh6YUHyHbOzwJxciMwwV6CagnyOV5uf?= =?iso-8859-1?q?TNhmHK+VWikH2RadtQ7T8F5xf/CSf4Q5HUXaAUTJWnQThUOqQNjwAGlPzHiQ?= =?iso-8859-1?q?ZcfGaXxoELgbRJPI/vCjeWbeFMFEmECiAYvEf/2H6ER214ps9CPq/MVUvupI?= =?iso-8859-1?q?ybhkCs+yKZVPwwKiHh1Q71TvcguaxOcJtCiQ/J6HDRGfePYzMnglYfbHLLaf?= =?iso-8859-1?q?ejst7Y3Did3TUsedtytXC8cGlFpKZCRQ4GgeZELH0T0/ZT2SPMFF7ny1c5n1?= =?iso-8859-1?q?7W9oGkL3/3hytv78pyccpQryR4w/kPHdn3uYrax3FaEihXyx4Lu40ScZDZDM?= =?iso-8859-1?q?DSHyfjjHGgByGxMna8hOc0K30jHFKURIzclUMgE+UB5+TsriMNpArCLmGPuU?= =?iso-8859-1?q?np1qmIcBYYj1kEs8Qr6WxXwd2a9DmpobLXXErw78uvBags1GcZRGnXLWhT2T?= =?iso-8859-1?q?ja2Sn/ais4zMcbYnd7BElteG1R/vZzEC1JP1l2sbMh++JUk+0QQBhazPemg0?= =?iso-8859-1?q?HuHsO3hNiYafjN7rL1q4eS3NPEY3igrETjgxNYnu+TwfPX2/8uNPSAcNj4P1?= =?iso-8859-1?q?QnDLvJfilBylnFa0zZJgDkHFJ+vEAe0FVTCHu8tiI+nqodTzsP7Toh8AWUXH?= =?iso-8859-1?q?0rfyESKu2bvwPBvxXrdTfKluhB+OWGK5Sa9uyl+JvhECPTjpCKznawkMOIE2?= =?iso-8859-1?q?suYqESUmnEopCgI38QX4L4p/CKmvwJVORXdZxENYRSxj9Ao5fPZFNQPIQSHC?= =?iso-8859-1?q?bWFjUuOiCAuFNrwQFNBXG2/gwd6lni01fAtPFwmjxOxTeky8hozSJbvvbhB+?= =?iso-8859-1?q?IMkUlH6Y2SBqHJ0NKQxMX2nNtEeXY9yy7kOB/RT0EHjtj6srF5HPnKkybOl8?= =?iso-8859-1?q?i0oCfrdhqZbf+GLEg+bdybDfQtO9uNA9bU+60d0K3z1tT03vAi7Y4iYqFBy8?= =?iso-8859-1?q?1OXx1UWeD8apijqASS9pqBjNr3PCIvoB+tGFexK5Se8RzkG14HFSF4EGS/te?= =?iso-8859-1?q?TAHNEZanCHrcYVDxetdl2sXdIGoR3aQjr70Qe8xZ4HjLbPd2AVVEsSNMUxWx?= =?iso-8859-1?q?nSeXhoh4r4BYtMUjl?= MIME-Version: 1.0 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DM6PR12MB4356.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 24d759ba-d9c9-40e8-4d9a-08daf896efd5 X-MS-Exchange-CrossTenant-originalarrivaltime: 17 Jan 2023 14:27:17.8394 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: ndPD8s87omLhyxVbP4SzjlpIT/Q67m2xP7fYbFwnB67s4UMQPQ1QKICq57VE9Krz/M5DQBrzLxonaUt//FtOFQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR12MB6678 Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Split process_file and send_message into easier to use functions. Making SMTP header information widely available. Cc: Luben Tuikov Cc: Junio C Hamano Signed-off-by: Michael Strawbridge --- git-send-email.perl | 49 ++++++++++++++++++++++++++++----------------- 1 file changed, 31 insertions(+), 18 deletions(-) diff --git a/git-send-email.perl b/git-send-email.perl index 5861e99a6e..42f135a266 100755 --- a/git-send-email.perl +++ b/git-send-email.perl @@ -1495,16 +1495,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 +1537,22 @@ sub send_message { if (@xh) { $header .= join("\n", @xh) . "\n"; } + my $recipients_ref = \@recipients; + return ($recipients_ref, $to, $date, $gitversion, $cc, $ccline, $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_ref, $to, $date, $gitversion, $cc, $ccline, $header) = gen_header(); + my @recipients = @$recipients_ref; my @sendmail_parameters = ('-i', @recipients); my $raw_from = $sender; @@ -1735,11 +1742,8 @@ sub send_message { $references = $initial_in_reply_to || ''; $message_num = 0; -# Prepares the email, prompts the user, sends it out -# Returns 0 if an edit was done and the function should be called again, or 1 -# otherwise. -sub process_file { - my ($t) = @_; +sub pre_process_file { + my ($t, $quiet) = @_; open my $fh, "<", $t or die sprintf(__("can't open file %s"), $t); @@ -1893,9 +1897,9 @@ sub process_file { } close $fh; - push @to, recipients_cmd("to-cmd", "to", $to_cmd, $t) + push @to, recipients_cmd("to-cmd", "to", $to_cmd, $t, $quiet) if defined $to_cmd; - push @cc, recipients_cmd("cc-cmd", "cc", $cc_cmd, $t) + push @cc, recipients_cmd("cc-cmd", "cc", $cc_cmd, $t, $quiet) if defined $cc_cmd && !$suppress_cc{'cccmd'}; if ($broken_encoding{$t} && !$has_content_type) { @@ -1954,6 +1958,15 @@ sub process_file { @initial_to = @to; } } +} + +# Prepares the email, prompts the user, and sends it out +# Returns 0 if an edit was done and the function should be called again, or 1 +# on the email being successfully sent out. +sub process_file { + my ($t) = @_; + + pre_process_file($t, $quiet); my $message_was_sent = send_message(); if ($message_was_sent == -1) { @@ -2002,7 +2015,7 @@ sub process_file { # Execute a command (e.g. $to_cmd) to get a list of email addresses # and return a results array sub recipients_cmd { - my ($prefix, $what, $cmd, $file) = @_; + my ($prefix, $what, $cmd, $file, $quiet) = @_; my @addresses = (); open my $fh, "-|", "$cmd \Q$file\E" From patchwork Tue Jan 17 14:27:20 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Strawbridge X-Patchwork-Id: 13104752 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 681BAC3DA78 for ; Tue, 17 Jan 2023 14:29:10 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232120AbjAQO3I (ORCPT ); Tue, 17 Jan 2023 09:29:08 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48580 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229891AbjAQO2Y (ORCPT ); Tue, 17 Jan 2023 09:28:24 -0500 Received: from NAM04-DM6-obe.outbound.protection.outlook.com (mail-dm6nam04on2072.outbound.protection.outlook.com [40.107.102.72]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id AD77F402C6 for ; Tue, 17 Jan 2023 06:27:22 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=kAm1AjD0ke4FBn0RqJc2mM8NWUVQmzbF081j9KNbaV/3ijxSrq+6l79VcxDok2PriLPXRlm3iJjAfCepDTQY+XUreiP5U5DBI1y3/rLNb/bakRWVa0rBVuoaKUq41fv2GLk+N/wpNgT1y2QaD4jOmwSpQoPNC6Tg90nZ1YMQ93Q36dz3An4a9Yn0fg1Od5Bd6u4iW+jYfAjVMVUkb2+PmZ9/++6tqg3qUi4dTILeISjB2s6omt/Rv4bziKAiizKzgUC839vnyzUVTBxpTtwxz6q6wD8TjYFXJA5RegNRtqsaUsg5Um/PFNCoLIfs/ZSfXzcNJ0ajN3V4v8opcsyAOQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=5Ru/S+lN6ddJUrmPVrpBxo2nZ/6fWH1/e/TYk3WL11U=; b=OhoIwyLgmo4Bw18MZQcVLqgyWtsMDk9iIAdDBepREXgPGUDNbccltLQEo4MUv24T8Nditocjre6LHiDXIyktSHtchFuO5REd6OM9ZaRXbdzd+jAKgAQhFOg64Vc+/xslfg6zlSKSpy8q3xiIQiGxihTa39Qe2KYluZZjHkwiCaeAwBbzx2efSwaW1yxoI+q7upxf/6RP4Epk1apLVAEtwpfNh/57KYHKYBTYydp2sNHeeuOEGTVbno2JMN3EpWnSueRNGuiLg4bHrSeZEsDehPTTwi0wWpOkZHlJBO90c4PI42CH+8MTcFwZFQFu3LtiMWfKLEOS+31QS1HNY57YiQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass header.d=amd.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=5Ru/S+lN6ddJUrmPVrpBxo2nZ/6fWH1/e/TYk3WL11U=; b=tPa20K8Y1+EPnKYW+hzzo8qGCM0DclpEn+vkP+GjKDga6hf2ipwQG9QrCaFXZZbJA1B0nCdknwdDJeg94aKUlrkoZT1Ulo01a1zF3yn67B9rIG7bfEcpLvHttsIUOhLwLk5ruGbdSjE6ZoY3QM4yuKy8KqKAC8ig6crMqOl9dHM= Received: from DM6PR12MB4356.namprd12.prod.outlook.com (2603:10b6:5:2aa::8) by SA1PR12MB6678.namprd12.prod.outlook.com (2603:10b6:806:251::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5986.23; Tue, 17 Jan 2023 14:27:21 +0000 Received: from DM6PR12MB4356.namprd12.prod.outlook.com ([fe80::5484:99ef:2b52:eb77]) by DM6PR12MB4356.namprd12.prod.outlook.com ([fe80::5484:99ef:2b52:eb77%3]) with mapi id 15.20.5986.019; Tue, 17 Jan 2023 14:27:20 +0000 From: "Strawbridge, Michael" To: "git@vger.kernel.org" CC: "Strawbridge, Michael" , "Tuikov, Luben" , Junio C Hamano Subject: [PATCH v7 2/2] send-email: expose header information to git-send-email's sendemail-validate hook Thread-Topic: [PATCH v7 2/2] send-email: expose header information to git-send-email's sendemail-validate hook Thread-Index: AQHZKn/P6HNrNIjDP0url1PLFspUOA== Date: Tue, 17 Jan 2023 14:27:20 +0000 Message-ID: <20230117142706.230404-3-michael.strawbridge@amd.com> References: <20230117142706.230404-1-michael.strawbridge@amd.com> In-Reply-To: <20230117142706.230404-1-michael.strawbridge@amd.com> Accept-Language: en-GB, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-mailer: git-send-email 2.34.1 authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=amd.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: DM6PR12MB4356:EE_|SA1PR12MB6678:EE_ x-ms-office365-filtering-correlation-id: bf596a66-556d-4dbd-754b-08daf896f19a x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: LfZmUANVsoSvY1CIqflDF2JHkEiplUztvX5uadNC+rtivPbI5xPfisU54BZ0UouE1lyqrB2rLVeQ77ikFscS1PQpQte4S4l/bk5CdBXJ4h6VSTzWlv1ZMevUbHprjP4UYdlN7B3+NVvjAupb/hmPizHGUo7wdZzskCZaeiSg+PLFTtwH76yu89WD0ILKbu3AfVTC5KQ5wBJMMxtafuBWzKPEwU2fGcJKVfdC1oNkBFfn09sPhsXaMlvcbmeL8rQzXefe8XnNs/zSVfSYIiwrYIq2TjxhSXXI9fsQDvXsaevDA4pEoOIWCbwIMLcFBLfICvTuefKPl8zByN+2FViGzdTBoY/OeiImJxvM6qOZ/y6KGqQwHbML3mRiOHx5T/oDQ3Dlw8Yxb4nTtd+7CJqEVzqFyp0F5F96jiV3zptuZYlQwG7uJyW2f405bGUvlw9iUA80VnEHjn7abHfR396sLrJtTcvc/Hc6V6qVQkr6vZpNx4DGNaRXOcGwAh5QJFZVWEyXhrpu6pkx/OLBrQw1gLvJICPx0ReFXkjU39z4knzsdcPC3kVWC8N2cM6RcgFuvYjMDeMcyms95pgPs6JryKrGKJ3irRW3smPsGLEI3sCj7b/UWZ8B7XPcv9WNkYns6M6xdN2Z/AQ/H4bvHKrNMw9/2wOnEepPr1Pugm9IodHWPOsX/uekGOUe58bcE/cVg2La0g7/46Z73H8a6erV+A== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM6PR12MB4356.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(4636009)(39860400002)(376002)(366004)(136003)(346002)(396003)(451199015)(64756008)(6916009)(66946007)(66446008)(76116006)(66556008)(26005)(41300700001)(66476007)(186003)(91956017)(6512007)(8676002)(4326008)(2616005)(86362001)(36756003)(5660300002)(1076003)(8936002)(54906003)(478600001)(83380400001)(6506007)(316002)(38100700002)(15650500001)(71200400001)(38070700005)(6486002)(122000001)(2906002);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?q?L5ojgWRvGwlSadHGo/mapmK?= =?iso-8859-1?q?BjzrboyqBjutcaCMhdLl/mF9F3C+RngVC4YAppe2+ZPOL9G+5X/J2Y7nw8dm?= =?iso-8859-1?q?GSTzWSlJlUwusu3E7tRGc/upP41U0TOM7GMiWlSZUgEmW85ucCXVn7u4Ussd?= =?iso-8859-1?q?RzbBIHDoEEa4mGqTkKcQKp0sttmQoSS7MW9v00Xws6mcyN9+kCcLaeJ7PV6X?= =?iso-8859-1?q?yVYzN1Vlbehozg78N8mHZI8+nIwtRZqBZw32t4utNyfVjBEZRwNadTN9hB4z?= =?iso-8859-1?q?o63mul0oUYGjtJA4TB45MQFni97GnwPKfMKnE27apQxX6kaM1z3mwGbA0KtD?= =?iso-8859-1?q?vjPh/SRqgUVdYszC/coIBB7IntXY4J+rGUmOG4k9q7cRbGzeZuTYXwX5l5HV?= =?iso-8859-1?q?wal7tFLUkcXuXq2Wwa0geLVBanyAQrTWQWGDBFuuJLnYYsqmRcUwRavHNaf3?= =?iso-8859-1?q?yc7vr61eftn5Ah0jx2muk9qVfeKniVrnuOF8oQf21D3nesnGn38/RVUkuPmx?= =?iso-8859-1?q?qps6jl2lZiZswCJI8GoTYRAN/X+PPPE60BDhPEkMDmxzZ5Nmtf2EHv5Sk1dx?= =?iso-8859-1?q?50DeBZNTNCIHw28PFwQ3DeWYf8wTOpeAIcFEhJZzJDJSpGgg/+aKwcELpcZI?= =?iso-8859-1?q?AGpl+bxz01fFV9uvES5Ye79PbNGwbp8dWCjjwEjHFQyN2Mkc1tkGAp893V48?= =?iso-8859-1?q?SvDIolaVA9WCHHdpl+iTjL9Sgmk73EMbH7PtVlshSIhiFPno9h5gKiBjp09y?= =?iso-8859-1?q?qnwFBpGfa4Qi/MwFZR/pU5a6KCnwm7NV3RMv92QTU7NhLN1RpCrar1KHLbxa?= =?iso-8859-1?q?Sllyaq9uhx3OLpVcLixNZFN+qb1LRWr/yV6cvnpWfIkPKzv7JYpy/vraRfkr?= =?iso-8859-1?q?1uqcIQyq8T/VPp15lm+s981gb82wAzhoiPQfHDfKBGB0Ob0vDjdp6rdjPTNV?= =?iso-8859-1?q?nw7ijwphUunFt3fPPdDXe5XHS/RPfBpfL2n/cLe1OP2E8qW7bCFex/oqvKfE?= =?iso-8859-1?q?XUEbu1n5zJQkxnLV0MLHBfgvd6HuPASbmi07e5+YQjds+T5Ct4GEVEvbDaTs?= =?iso-8859-1?q?/euYsEnbCaFHfBIrgsGxclH1FxUQ+ecpslWDTIPQ27Ld+6jlQGbSebboLoAQ?= =?iso-8859-1?q?Ly048mzZj5YHMk8mAxQvlGHmWJV4WSS5HYZcOjUoENwUqZ844EN7GAdZWGH9?= =?iso-8859-1?q?u2L1hxUpbVbnhBc5wSrL/FWfszUiVBzuVk0q0QGArefN8xbnhkzbeNHUDItR?= =?iso-8859-1?q?uBdPGOiPXZscNosUdhx0OCtWnrNdaY7oFZ7hbWKKfoboCcBBw26yVljoDzTe?= =?iso-8859-1?q?CO5zQ6agwJEzwSLWd1Zeza1YvlDzTH/RLI6maThWCUtm8hbxtvUegN7swIe3?= =?iso-8859-1?q?6UZ6y7u6ZYvj3Yzknlk4RASjF1b8gsIfV8ohXbtZYqHyl6zVemnDtAVqps14?= =?iso-8859-1?q?a1T8uxYdc36vhsOA5V6vk/FILArieKV1MbGf0W/piE+UxFfSfAb3AkJykE43?= =?iso-8859-1?q?p9vZ/3MZXMjQ8TJKBJxFezmqPud8LQ/FDjcXTJoWHLaIGZvpL3yX5bh3FUp6?= =?iso-8859-1?q?jH6VsTHbjOwt8kI4sW3CaF65KZH1OK8T/8Er0ScpQFS9mV7kZCwAiN04eJGs?= =?iso-8859-1?q?eSLXM5Yvx6ksFESVO?= MIME-Version: 1.0 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DM6PR12MB4356.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: bf596a66-556d-4dbd-754b-08daf896f19a X-MS-Exchange-CrossTenant-originalarrivaltime: 17 Jan 2023 14:27:20.8248 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: 9Zo1HnENV/z2+i0WD9V66+aHOuhvnFY3BlcWt4GDSgX7whGnPYb1TJa9QptlCUb7nyrbVchbmYhVrGZd/GkOdA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR12MB6678 Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org To allow further flexibility in the Git hook, the SMTP header information of the email which git-send-email intends to send, is now passed as the 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 Cc: Junio C Hamano Signed-off-by: Michael Strawbridge --- Documentation/githooks.txt | 28 +++++++++++++++++++++++---- git-send-email.perl | 31 ++++++++++++++++++++---------- t/t9001-send-email.sh | 39 ++++++++++++++++++++++++++++++++++++-- 3 files changed, 82 insertions(+), 16 deletions(-) diff --git a/Documentation/githooks.txt b/Documentation/githooks.txt index a16e62bc8c..978d599be5 100644 --- a/Documentation/githooks.txt +++ b/Documentation/githooks.txt @@ -583,10 +583,30 @@ 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 these command line arguments. They are, +1. the name of the file which holds the contents of the email to be sent. +2. The name of the file which holds the SMTP envelope and headers of the email. + +The SMTP envelope and headers are passed in the exact same way as they +are passed to the user's Mail Transport Agent (MTA). In effect, the email +given to the user's MTA, is the contents of $2 followed by the contents +of $1. + +Below is an example for a few common headers. Take notice of the +capitalization and multi-line tab structure. + + From: Example + To: to@example.com + Cc: cc@example.com, + A , + One , + two@example.com + Subject: PATCH-STRING + +Exiting with a non-zero status causes `git send-email` to abort +before sending any e-mails. fsmonitor-watchman ~~~~~~~~~~~~~~~~~~ diff --git a/git-send-email.perl b/git-send-email.perl index 42f135a266..4f2039284e 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); @@ -1738,6 +1730,16 @@ sub send_message { return 1; } +if ($validate) { + foreach my $f (@files) { + unless (-p $f) { + pre_process_file($f, 1); + + validate_patch($f, $target_xfer_encoding); + } + } +} + $in_reply_to = $initial_in_reply_to; $references = $initial_in_reply_to || ''; $message_num = 0; @@ -2101,11 +2103,20 @@ sub validate_patch { chdir($repo->wc_path() or $repo->repo_path()) or die("chdir: $!"); local $ENV{"GIT_DIR"} = $repo->repo_path(); + + my ($recipients_ref, $to, $date, $gitversion, $cc, $ccline, $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, ""); - my @cmd_run = (@cmd, $target); + my @cmd_msg = (@cmd, "", "
"); + 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) { diff --git a/t/t9001-send-email.sh b/t/t9001-send-email.sh index 1130ef21b3..c0fcbacdaa 100755 --- a/t/t9001-send-email.sh +++ b/t/t9001-send-email.sh @@ -540,7 +540,7 @@ test_expect_success $PREREQ "--validate respects relative core.hooksPath path" ' 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 -- '"'"' died with exit code 1 + fatal: command '"'"'git hook run --ignore-missing sendemail-validate --
'"'"' died with exit code 1 warning: no patches were sent EOF test_cmp expect actual @@ -559,12 +559,47 @@ test_expect_success $PREREQ "--validate respects absolute core.hooksPath path" ' 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 -- '"'"' died with exit code 1 + fatal: command '"'"'git hook run --ignore-missing sendemail-validate --
'"'"' died with exit code 1 warning: no patches were sent EOF test_cmp expect actual ' +test_expect_success $PREREQ 'setup expect' " +cat >expected-headers <<\EOF +From: Example +To: to@example.com +Cc: cc@example.com, + A , + One , + two@example.com +Subject: [PATCH 1/1] Second. +Date: DATE-STRING +Message-Id: MESSAGE-ID-STRING +X-Mailer: X-MAILER-STRING +Reply-To: Reply +MIME-Version: 1.0 +Content-Transfer-Encoding: quoted-printable +EOF +" + +test_expect_success $PREREQ "--validate hook supports header argument" ' + write_script my-hooks/sendemail-validate <<-\EOF && + grep "X-test-header: v1.0" "$2" + EOF + test_config core.hooksPath "my-hooks" && + rm -fr outdir && + git format-patch \ + --add-header="X-test-header: v1.0" \ + -n HEAD^1 -o outdir && + git send-email \ + --dry-run \ + --to=nobody@example.com \ + --smtp-server="$(pwd)/fake.sendmail" \ + --validate \ + outdir/000?-*.patch +' + for enc in 7bit 8bit quoted-printable base64 do test_expect_success $PREREQ "--transfer-encoding=$enc produces correct header" '