From patchwork Sun May 23 08:56:06 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= X-Patchwork-Id: 12274793 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 51E92C4707A for ; Sun, 23 May 2021 08:56:25 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 2387261263 for ; Sun, 23 May 2021 08:56:25 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231665AbhEWI5u (ORCPT ); Sun, 23 May 2021 04:57:50 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36794 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231628AbhEWI5t (ORCPT ); Sun, 23 May 2021 04:57:49 -0400 Received: from mail-wr1-x436.google.com (mail-wr1-x436.google.com [IPv6:2a00:1450:4864:20::436]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 845AEC06138A for ; Sun, 23 May 2021 01:56:23 -0700 (PDT) Received: by mail-wr1-x436.google.com with SMTP id j14so23534980wrq.5 for ; Sun, 23 May 2021 01:56:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=UpeMz3y3RWSIHk9RE94ubJZ4MOERpwjJonYtxayf4BM=; b=qGBwf5qAEhbaoVpIYSIhuOyXPnkF0wCdyAgh1si/qJC1x2AcD9gRe8g3ACfBRgVGAN R6V6z3Pnnvr6CKU17egqWg4SBXKlFpFJFqZIiczR+GLiH5+LeCflTRSe7b+D1niurGvU v8aGx2lwIX3NTp38EtQjUyzhtPD8GaFtcyaqDlWeVXpV3lqXVDf5NaCLSnrS5uj9UbBw +J5rC0f7el8ZdOrzC9vbSD1iQaJpzcyatRieZUw+YZMMzG+A6H0BbxCeiYVftiMbNMcP j+jxMyOecdT3Z3wB6ymR3GZzdKAsWKMqZGqht7M04SeFrdTiauvT2SxWazldgfIpnltL r8Gw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=UpeMz3y3RWSIHk9RE94ubJZ4MOERpwjJonYtxayf4BM=; b=ecgHIcL45AxMSucBBoLOF4bGkSmq2a2LHt0BvKf+cQdbgBXrcSqqlf2wft93G4kwwq F3DhlRBzcuJBZyMarqRq6ViyxXdyr1Zgg59gAtLvsIvuZOzVom0slEBUJ8s9i1g3IfLZ Rb+YiFis3+dZG3pidXgHQ6L7zGxw6yF6UWOiY2McUZW2GgVTArFds5cQoJdse5e8wpfQ GfJTrPFQAeQfpfGd6TRaeEN9LmN9V7Lz0+k+ry04KNne2GCM+wg9wZQvbTDSaLvqVvXV 7dEGpx6SeqaEbIeXGa3Qbgl8CoRrPBcCiaUqbAMKniSDhUixm+Y5Fi5QxfDwL/VoD50Y fJfw== X-Gm-Message-State: AOAM533YC27qr7PyaUpijt17Pcote3DSt3RPo/O4dvGPxJHOGDxs9snu 1/NghD84gvEZxcA4RDCOfRAYPZ10nxYermJk X-Google-Smtp-Source: ABdhPJz8b3Q2BSAFWtf3dwv8v4yZbYB37Hdj0/T9pvQ/7bdDZM0t9tNheY1r1OEiJrzWW2Ujfg4wjw== X-Received: by 2002:a5d:4c86:: with SMTP id z6mr16752172wrs.403.1621760181822; Sun, 23 May 2021 01:56:21 -0700 (PDT) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id s15sm9577839wrt.54.2021.05.23.01.56.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 May 2021 01:56:21 -0700 (PDT) From: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= To: git@vger.kernel.org Cc: Junio C Hamano , Gregory Anders , =?utf-8?b?xJBvw6BuIFRy4bqnbiBDw7RuZyBEYW5o?= , Jeff King , Eric Sunshine , Eric Wong , Felipe Contreras , =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= Subject: [PATCH v3 01/13] send-email tests: support GIT_TEST_PERL_FATAL_WARNINGS=true Date: Sun, 23 May 2021 10:56:06 +0200 Message-Id: X-Mailer: git-send-email 2.32.0.rc0.406.g05cb3eebfc In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Add support for the "GIT_TEST_PERL_FATAL_WARNINGS=true" test mode to "send-email". This was added to e.g. git-svn in 5338ed2b26 (perl: check for perl warnings while running tests, 2020-10-21), but not "send-email". Let's rectify that. Signed-off-by: Ævar Arnfjörð Bjarmason --- git-send-email.perl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/git-send-email.perl b/git-send-email.perl index 175da07d94..cffdfdacfb 100755 --- a/git-send-email.perl +++ b/git-send-email.perl @@ -18,7 +18,7 @@ use 5.008; use strict; -use warnings; +use warnings $ENV{GIT_PERL_FATAL_WARNINGS} ? qw(FATAL all) : (); use POSIX qw/strftime/; use Term::ReadLine; use Getopt::Long; From patchwork Sun May 23 08:56:07 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= X-Patchwork-Id: 12274795 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 91DAFC47080 for ; Sun, 23 May 2021 08:56:27 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 63C7A6128A for ; Sun, 23 May 2021 08:56:27 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231678AbhEWI5w (ORCPT ); Sun, 23 May 2021 04:57:52 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36800 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231669AbhEWI5v (ORCPT ); Sun, 23 May 2021 04:57:51 -0400 Received: from mail-wr1-x432.google.com (mail-wr1-x432.google.com [IPv6:2a00:1450:4864:20::432]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 62109C06138A for ; Sun, 23 May 2021 01:56:24 -0700 (PDT) Received: by mail-wr1-x432.google.com with SMTP id a4so25331926wrr.2 for ; Sun, 23 May 2021 01:56:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=YG+mJZgA876oHyPSj8cYG7ZzeIbk3a63/EZuYLPqS/8=; b=TyEdBAKkyCoDjWF6DPb7kWZ1L453SSQOARrAwr5sKbml+LGPsp8IpIcMuBWzTAgVMD mHk8r9+cFAcgIXSC5S0rTGZVb2sBsXuzG6Uj/c7tO2UN/+wmVs4OhkIKDZTA3CKdjBO2 s7uI4/bymos1sXjiQPD6sUf8nqgXWogRbqZUEnEDzsLVh9KKrWhN1GNz7In2Xv8/Az5B IRHoJjbkIInJnkdv3yYbCJX/ddGohCr69UULGs9k4ugRAQkmV1dLRo4g5yIovtPQmglr BBAzkhfuhso3g5JRQ9jokk0A2oEL8SMMH4aeNpdPIBGAVYmzCTHBeqMgjR3jyfdxCJEM sPTg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=YG+mJZgA876oHyPSj8cYG7ZzeIbk3a63/EZuYLPqS/8=; b=B5hfp4o5nWQOJ4NueDJ03+0BBVwbAl/MokLkHXXSZV3V4ARQ7QWifmyUMY0N+syvvV sJUFjwXJFdk7ariZ1aisQOa53aOpr4D2U3qoc1paLlJhCEqybmF4fXMLpoVT7tyV61SW OU/G925wpTbLAzjSQ7Biz1c7XjtBNeQnRFzmQRWXjKUZUXt5jx/1AUQ1viQbIU9tpfMb 7JkPBdcjhDXV1mxGC2XLKDZRxL3yDUcU7k37YNsCnJbGPbZ3cyYVB1rAY+pmwC3y8Z8g owIixmuCb7e5VLo0r/NA7sZt6aX00LgW1Aa13cXzdjvbTwYjZ1SLH6X+5nX3ePQyVVXk tF9A== X-Gm-Message-State: AOAM530LLqVmTelhu+dOfoiqF2pL1WYrMLPhIjNzT77NSXYhwzoHpJac ykY1W50HUwqBf5ss9nleBfrr/aUHx4UYsu/l X-Google-Smtp-Source: ABdhPJyG0sHwO89jeY5Ri/eAUeWT2DWsTTtt9r5/fMRUi8jQBSofDt+rsBp2uQayRQsOh+hbFijmuA== X-Received: by 2002:adf:f647:: with SMTP id x7mr16712921wrp.107.1621760182807; Sun, 23 May 2021 01:56:22 -0700 (PDT) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id s15sm9577839wrt.54.2021.05.23.01.56.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 May 2021 01:56:22 -0700 (PDT) From: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= To: git@vger.kernel.org Cc: Junio C Hamano , Gregory Anders , =?utf-8?b?xJBvw6BuIFRy4bqnbiBDw7RuZyBEYW5o?= , Jeff King , Eric Sunshine , Eric Wong , Felipe Contreras , =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= Subject: [PATCH v3 02/13] send-email tests: test for boolean variables without a value Date: Sun, 23 May 2021 10:56:07 +0200 Message-Id: X-Mailer: git-send-email 2.32.0.rc0.406.g05cb3eebfc In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org The Git.pm code does its own Perl-ifying of boolean variables, let's ensure that empty values = true for boolean variables, as in the C code. Signed-off-by: Ævar Arnfjörð Bjarmason --- t/t9001-send-email.sh | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/t/t9001-send-email.sh b/t/t9001-send-email.sh index 65b3035371..6bf79c816a 100755 --- a/t/t9001-send-email.sh +++ b/t/t9001-send-email.sh @@ -1349,6 +1349,16 @@ test_expect_success $PREREQ 'sendemail.identity: bool variable fallback' ' ! grep "X-Mailer" stdout ' +test_expect_success $PREREQ 'sendemail.identity: bool variable without a value' ' + git -c sendemail.xmailer \ + send-email \ + --dry-run \ + --from="nobody@example.com" \ + $patches >stdout && + grep "To: default@example.com" stdout && + grep "X-Mailer" stdout +' + test_expect_success $PREREQ '--no-to overrides sendemail.to' ' git send-email \ --dry-run \ @@ -2073,6 +2083,18 @@ test_expect_success $PREREQ '--[no-]xmailer with sendemail.xmailer=true' ' do_xmailer_test 1 "--xmailer" ' +test_expect_success $PREREQ '--[no-]xmailer with sendemail.xmailer' ' + test_when_finished "test_unconfig sendemail.xmailer" && + cat >>.git/config <<-\EOF && + [sendemail] + xmailer + EOF + test_config sendemail.xmailer true && + do_xmailer_test 1 "" && + do_xmailer_test 0 "--no-xmailer" && + do_xmailer_test 1 "--xmailer" +' + test_expect_success $PREREQ '--[no-]xmailer with sendemail.xmailer=false' ' test_config sendemail.xmailer false && do_xmailer_test 0 "" && @@ -2080,6 +2102,13 @@ test_expect_success $PREREQ '--[no-]xmailer with sendemail.xmailer=false' ' do_xmailer_test 1 "--xmailer" ' +test_expect_success $PREREQ '--[no-]xmailer with sendemail.xmailer=' ' + test_config sendemail.xmailer "" && + do_xmailer_test 0 "" && + do_xmailer_test 0 "--no-xmailer" && + do_xmailer_test 1 "--xmailer" +' + test_expect_success $PREREQ 'setup expected-list' ' git send-email \ --dry-run \ From patchwork Sun May 23 08:56:08 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= X-Patchwork-Id: 12274797 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 60AF5C4707A for ; Sun, 23 May 2021 08:56:28 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 43638610C8 for ; Sun, 23 May 2021 08:56:28 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231691AbhEWI5w (ORCPT ); Sun, 23 May 2021 04:57:52 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36804 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231666AbhEWI5v (ORCPT ); Sun, 23 May 2021 04:57:51 -0400 Received: from mail-wr1-x433.google.com (mail-wr1-x433.google.com [IPv6:2a00:1450:4864:20::433]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3E26BC06138B for ; Sun, 23 May 2021 01:56:25 -0700 (PDT) Received: by mail-wr1-x433.google.com with SMTP id a4so25331955wrr.2 for ; Sun, 23 May 2021 01:56:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=PtS+FhXoyW4TpEbjjsXvf2/lJgdnxzzPVrMWMgHQdjc=; b=XqSPjYXUAY6pSroIdyLqem+0NWFiDEx5DriRohqiRAzRRxIZfe6MzY5v1pQWhmjcNz oCH6EY0B3nm3jG10K+PzakyPKg670/6YtV0TCM3RKVQLQvlXRy0PkKbE7sPxiJ+iFqyT mqyu0Z4OrzWHVl4OGb09lg2xJQX3n9mXmbWuJCQ6abVWrvbb9HMgGYritcXnFlDltoFW qhc3h86e/HGP5/wbCQkTbL3N/Qz8yrJv8+H4fPFwwvjQULKRsYJ+yWrO879cqlHUJtnK x09Xl0+iMothb5wiMkYwWugl7F47sjj6yhz4khmDrng1Xf/FiKoVTDz6huRwEJoQ5S+d BmSg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=PtS+FhXoyW4TpEbjjsXvf2/lJgdnxzzPVrMWMgHQdjc=; b=ZAoyAW+z3JxNGwtQm1sVkKixFdz5SEMcmlJ31a0vHlr178SFXKXYTuoOg+46F32CT5 GeH4HKeXi8aDUwfg9COeYM+gjNSwJX3c3o/Daw2+QN5MPEl1GqPd6wN6KNbUqyW+Ml0C r19as5Fqa6x+JOCQkJ4YpT39JLPAAOpO/+WLCrlOHVVHN1UuQ4y5mG9sWFWFtbh2HU9l GP6faucCl5NTiPReiFON1NF0LHxdGxZX54Y99XgMj/v8CRtTLxU/UxSSNTUT23i0vyUq U6BCEK4lbw9N+/ei/3R+OXfv5QIJ2c3+1f8ZNNTvsIWQnDp+SoRbmnSARGvMVekLq6HQ 02fw== X-Gm-Message-State: AOAM530JE4BI5PALQ+/0QQ5JyI3if/2rG7iyd5RqbStSVciDqJHVEaun /oYAyKrcm+yGjAkArJZ/jOFOI8Qpr3xZgtNj X-Google-Smtp-Source: ABdhPJyyHjiyiy4o04hfl78+jm2Mmqb3BLRYHKEtgz2SWj8bLHAdnWKh5eir/RdC46G+s5HjEf9kZg== X-Received: by 2002:adf:f392:: with SMTP id m18mr16809389wro.69.1621760183609; Sun, 23 May 2021 01:56:23 -0700 (PDT) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id s15sm9577839wrt.54.2021.05.23.01.56.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 May 2021 01:56:23 -0700 (PDT) From: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= To: git@vger.kernel.org Cc: Junio C Hamano , Gregory Anders , =?utf-8?b?xJBvw6BuIFRy4bqnbiBDw7RuZyBEYW5o?= , Jeff King , Eric Sunshine , Eric Wong , Felipe Contreras , =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= Subject: [PATCH v3 03/13] send-email: remove non-working support for "sendemail.smtpssl" Date: Sun, 23 May 2021 10:56:08 +0200 Message-Id: X-Mailer: git-send-email 2.32.0.rc0.406.g05cb3eebfc In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Remove the already dead code to support "sendemail.smtpssl" by finally removing the dead code supporting the configuration option. In f6bebd121ac (git-send-email: add support for TLS via Net::SMTP::SSL, 2008-06-25) the --smtp-ssl command-line option was documented as deprecated, later in 65180c66186 (List send-email config options in config.txt., 2009-07-22) the "sendemail.smtpssl" configuration option was also documented as such. Then in in 3ff15040e22 (send-email: fix regression in sendemail.identity parsing, 2019-05-17) I unintentionally removed support for it by introducing a bug in read_config(). As can be seen from the diff context we've already returned unless $enc i defined, so it's not possible for us to reach the "elsif" branch here. This code was therefore already dead since Git v2.23.0. So let's just remove it. We were already 11 years into a stated deprecation period of this variable when 3ff15040e22 landed, now it's around 13. Since it hasn't worked anyway for around 2 years it looks like we can safely remove it. The --smtp-ssl option is still deprecated, if someone cares they can follow-up and remove that too, but unlike the config option that one could still be in use in the wild. I'm just removing this code that's provably unused already. Signed-off-by: Ævar Arnfjörð Bjarmason --- Documentation/config/sendemail.txt | 3 --- git-send-email.perl | 6 +----- 2 files changed, 1 insertion(+), 8 deletions(-) diff --git a/Documentation/config/sendemail.txt b/Documentation/config/sendemail.txt index cbc5af42fd..50baa5d6bf 100644 --- a/Documentation/config/sendemail.txt +++ b/Documentation/config/sendemail.txt @@ -8,9 +8,6 @@ sendemail.smtpEncryption:: See linkgit:git-send-email[1] for description. Note that this setting is not subject to the 'identity' mechanism. -sendemail.smtpssl (deprecated):: - Deprecated alias for 'sendemail.smtpEncryption = ssl'. - sendemail.smtpsslcertpath:: Path to ca-certificates (either a directory or a single file). Set it to an empty string to disable certificate verification. diff --git a/git-send-email.perl b/git-send-email.perl index cffdfdacfb..24d73df5a3 100755 --- a/git-send-email.perl +++ b/git-send-email.perl @@ -383,11 +383,7 @@ sub read_config { my $enc = Git::config(@repo, $setting); return unless defined $enc; return if $configured->{$setting}++; - if (defined $enc) { - $smtp_encryption = $enc; - } elsif (Git::config_bool(@repo, "$prefix.smtpssl")) { - $smtp_encryption = 'ssl'; - } + $smtp_encryption = $enc; } } From patchwork Sun May 23 08:56:09 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= X-Patchwork-Id: 12274803 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 9D66FC47081 for ; Sun, 23 May 2021 08:56:29 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 6D22C6128E for ; Sun, 23 May 2021 08:56:29 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231704AbhEWI5y (ORCPT ); Sun, 23 May 2021 04:57:54 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36812 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231687AbhEWI5w (ORCPT ); Sun, 23 May 2021 04:57:52 -0400 Received: from mail-wm1-x32f.google.com (mail-wm1-x32f.google.com [IPv6:2a00:1450:4864:20::32f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0A9BEC061574 for ; Sun, 23 May 2021 01:56:26 -0700 (PDT) Received: by mail-wm1-x32f.google.com with SMTP id f20-20020a05600c4e94b0290181f6edda88so2814944wmq.2 for ; Sun, 23 May 2021 01:56:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=byr4yJC9ROPMCKi7PPdnsfcvJT5jvK/p2/l7tGio7C8=; b=nUESit1rRvAdGpOtEIIYJy9Jt1hktAyp1LBAFIm1TwpKUi5Is2mFvh8YGiRwxYUf6T 9iPY9pi40x0cOiOhV4mdQUhQxddJP6xIhfnBtYHKLlNGHczkmbqTajS19EOJSyDa1asI MIbon0zLaWh6k7ixRR/vKIT6OJpOHAYJt8QqqVRqp3CEnR+hVbU/UmwP6Jms3s27uxLA Eoy0W1xv32goZ3IVRHS9PoHuNPeshXD3uWlfrgV3RtcCz6H96Kdu6n6PnJN2NqpWOVrM ziDX/SkZ5HZzTu3NSF8KOxzt+DcFa4+zhU9ph3docoeOYiQyYcpzIcFia+6ymAeujtYD IvbQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=byr4yJC9ROPMCKi7PPdnsfcvJT5jvK/p2/l7tGio7C8=; b=IeHdRXXOdLPmA0g1Gh5g5QKxE8cm+nkO61ygmbSR9O03SvYUDT7thLz+gpjpqAMPPp WsiVh3J0tk00C18UUUzulUXt7fdCKH7lAAMU30MoHQINsR4W5MWxMSFc97na2tcZlLmE BiTDyqBi+78eUirxIFWGF4kJEf/ifI4CFKnXvGXoSwmtuKx84LNc6br7jXum781ydJru p6BarF4k8EC7dMUpbrCoNNBJpNBjfc4TEoym4AWqumig8sNiJ+fczYV/G3I3TGfZKfNn AYk3x8ouPMeT/A/gyFh3jfnLxjZIFvG9uBhweX97Q8tBh+t9Zez3tV5RDHJ1POiwHcsI O4tA== X-Gm-Message-State: AOAM530K1PBhCJJwF37ALH3E4SpMDlG7s4RaRje+saRjLSxEwF9k9cYh +jOQI0qXFmwKeCHCnEiZNMffjs6XpnlUtOfc X-Google-Smtp-Source: ABdhPJxRWEmIE+kcI/87HHX++15jkOo6/TK9rKGP7jjz+X1gVrpYc1lNP8P5K5TA3Ggu4hfNr0aPcg== X-Received: by 2002:a1c:1d8e:: with SMTP id d136mr14946298wmd.80.1621760184399; Sun, 23 May 2021 01:56:24 -0700 (PDT) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id s15sm9577839wrt.54.2021.05.23.01.56.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 May 2021 01:56:24 -0700 (PDT) From: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= To: git@vger.kernel.org Cc: Junio C Hamano , Gregory Anders , =?utf-8?b?xJBvw6BuIFRy4bqnbiBDw7RuZyBEYW5o?= , Jeff King , Eric Sunshine , Eric Wong , Felipe Contreras , =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= Subject: [PATCH v3 04/13] send-email: refactor sendemail.smtpencryption config parsing Date: Sun, 23 May 2021 10:56:09 +0200 Message-Id: X-Mailer: git-send-email 2.32.0.rc0.406.g05cb3eebfc In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org With the removal of the support for sendemail.smtpssl in the preceding commit the parsing of sendemail.smtpencryption is no longer special, and can by moved to %config_settings. This gets us rid of an unconditional call to Git::config(), which as we'll see in subsequent commits matters for startup performance. Signed-off-by: Ævar Arnfjörð Bjarmason --- git-send-email.perl | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/git-send-email.perl b/git-send-email.perl index 24d73df5a3..3d8362b5f0 100755 --- a/git-send-email.perl +++ b/git-send-email.perl @@ -277,6 +277,7 @@ sub do_edit { ); my %config_settings = ( + "smtpencryption" => \$smtp_encryption, "smtpserver" => \$smtp_server, "smtpserverport" => \$smtp_server_port, "smtpserveroption" => \@smtp_server_options, @@ -377,14 +378,6 @@ sub read_config { $$target = $v; } } - - if (!defined $smtp_encryption) { - my $setting = "$prefix.smtpencryption"; - my $enc = Git::config(@repo, $setting); - return unless defined $enc; - return if $configured->{$setting}++; - $smtp_encryption = $enc; - } } # sendemail.identity yields to --identity. We must parse this From patchwork Sun May 23 08:56:10 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= X-Patchwork-Id: 12274799 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 17637C47083 for ; Sun, 23 May 2021 08:56:30 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id EA103610C8 for ; Sun, 23 May 2021 08:56:29 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231709AbhEWI5z (ORCPT ); Sun, 23 May 2021 04:57:55 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36814 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231666AbhEWI5x (ORCPT ); Sun, 23 May 2021 04:57:53 -0400 Received: from mail-wr1-x431.google.com (mail-wr1-x431.google.com [IPv6:2a00:1450:4864:20::431]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E3784C061574 for ; Sun, 23 May 2021 01:56:26 -0700 (PDT) Received: by mail-wr1-x431.google.com with SMTP id x8so25278056wrq.9 for ; Sun, 23 May 2021 01:56:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=taEm+52K+03ydelXLmfAaSTlfwMRye4C6IG43ggL5G0=; b=Kv1LTaLOHn1rCLzpcuOFVSSXTsEj2pAi++6YXadyjz+CQIoCZXZO3g0FJ50d4BiBUA 9GExylPSXs8J2l20popebhyXhScPabgIBs24ZdBuoDbFpLZ1V/mVaeTCavhzYWpwMJQB +RxuxAdPsS9R9FqRnHOxdOarQ27ekVTb/hado42yOd+YAxfc+R9QzfBgmGjWv0h0CFkP vjnVyBY9te5OHzAbypiDqx/oK/kpBX3crhHizYamJYlJFYyDyKkKlhLlkpzswfDfLR9G zzFpMPmnd+zPE1Ot6/9URrAANscNbO3BnellKSpklqE61ijcJ++sPJaKHXyvt1ZTsLFB Y43g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=taEm+52K+03ydelXLmfAaSTlfwMRye4C6IG43ggL5G0=; b=n7ZD08rVqLdOOMrt6xoZcFoU8SFshJ3+crp1YrqHLC0SYtWUpIjZs1xDhePCW9VLJw Wz65jM3imDF5L8IZQE1o3VyUWRv3vmtLXQV6yqJNFYP0P8C3Jf34oDXf9t9xYM0MegEW a2aWmWTCKp9oA1kCy7VkE3Qonh+CMpbVs4Dcgt0rGnfwULBqkyeGW/eIVhwyCV7KLcxy Wi0VaQmMSuSKO+W/QZN2xZpNwQYNyd3k6XYwOJGELaMI/G9cDgd7/JE6crd+uNd5IuMa j2hs3iR9How7AJgzA8cVno4V1AgdPnDVuPr2r9cWjR6+GLUENNO7h6mS+YMj+pfjUrCe aPiw== X-Gm-Message-State: AOAM530BZyhuxPQkIXM0f26csG/OwwiTHmQOUubCAl3YL1hQDjXUQnrb YuExl/lTu887E9FPOeg4OXIbiUK0x9+cJbkB X-Google-Smtp-Source: ABdhPJxmgECse1P0rq5HlqOhbhQvCdJRkLVJdK+bn204fOKCRBMWBw+DkCqH4v1xL30KadIhQfi/oA== X-Received: by 2002:a5d:4ccc:: with SMTP id c12mr17126052wrt.137.1621760185324; Sun, 23 May 2021 01:56:25 -0700 (PDT) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id s15sm9577839wrt.54.2021.05.23.01.56.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 May 2021 01:56:24 -0700 (PDT) From: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= To: git@vger.kernel.org Cc: Junio C Hamano , Gregory Anders , =?utf-8?b?xJBvw6BuIFRy4bqnbiBDw7RuZyBEYW5o?= , Jeff King , Eric Sunshine , Eric Wong , Felipe Contreras , =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= Subject: [PATCH v3 05/13] send-email: copy "config_regxp" into git-send-email.perl Date: Sun, 23 May 2021 10:56:10 +0200 Message-Id: X-Mailer: git-send-email 2.32.0.rc0.406.g05cb3eebfc In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org The config_regexp() function was added in dd84e528a3 (git-send-email: die if sendmail.* config is set, 2020-07-23) for use in git-send-email, and it's the only in-tree user of it. However, the consensus is that Git.pm is a public interface, so even though it's a recently added function we can't change it. So let's copy over a minimal version of it to git-send-email.perl itself. In a subsequent commit it'll be changed further for our own use. Signed-off-by: Ævar Arnfjörð Bjarmason --- git-send-email.perl | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/git-send-email.perl b/git-send-email.perl index 3d8362b5f0..95a69d4c51 100755 --- a/git-send-email.perl +++ b/git-send-email.perl @@ -380,6 +380,24 @@ sub read_config { } } +sub config_regexp { + my ($regex) = @_; + my @ret; + eval { + @ret = Git::command( + 'config', + '--name-only', + '--get-regexp', + $regex, + ); + 1; + } or do { + # If we have no keys we're OK, otherwise re-throw + die $@ if $@->value != 1; + }; + return @ret; +} + # sendemail.identity yields to --identity. We must parse this # special-case first before the rest of the config is read. $identity = Git::config(@repo, "sendemail.identity"); @@ -478,7 +496,7 @@ sub read_config { usage(); } -if ($forbid_sendmail_variables && (scalar Git::config_regexp("^sendmail[.]")) != 0) { +if ($forbid_sendmail_variables && (scalar config_regexp("^sendmail[.]")) != 0) { die __("fatal: found configuration options for 'sendmail'\n" . "git-send-email is configured with the sendemail.* options - note the 'e'.\n" . "Set sendemail.forbidSendmailVariables to false to disable this check.\n"); From patchwork Sun May 23 08:56:11 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= X-Patchwork-Id: 12274805 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 68097C4707A for ; Sun, 23 May 2021 08:56:34 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 4885E6100B for ; Sun, 23 May 2021 08:56:34 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231716AbhEWI54 (ORCPT ); Sun, 23 May 2021 04:57:56 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36818 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231710AbhEWI5z (ORCPT ); Sun, 23 May 2021 04:57:55 -0400 Received: from mail-wr1-x436.google.com (mail-wr1-x436.google.com [IPv6:2a00:1450:4864:20::436]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C9E6CC061574 for ; Sun, 23 May 2021 01:56:27 -0700 (PDT) Received: by mail-wr1-x436.google.com with SMTP id a4so25332109wrr.2 for ; Sun, 23 May 2021 01:56:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=4uXRXbzmcd1m6B3Cejqy+b1SstDdecG/6SPsIWtzP+U=; b=XdNQEyFtF3ocCg77FRneXkZJrx7SKhbXM6JOqIzkw9vCYXdgpgH9Y+4osP1XhgcDtE om+se3sIV1Uc0CpChNiJIhJOdtMppj0y1Wcc9DPriA3tram2R4ffKm9CVDNgkN18KnfZ 6zO6ofyUHGoe6nqzy57x0ZM2g3+xJEQzN+ZbhjB3mcKYm5MNd5PAz1mplXbfZoZslKel PtOBXMNNX0AK87VaXM4bjKNZ7f04p4f5oNqvyHf4NVszFX/NwUjfyTyUr7xNyw3K3qTI utnHIRWAkFL8h1AZEMMzaLKNH4697rSf+NlmyhNvZikk0n7loyEOTWcsoCV6Y9V7dhag x9tg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=4uXRXbzmcd1m6B3Cejqy+b1SstDdecG/6SPsIWtzP+U=; b=Hnjlr4ZshoqYSIjrGEM7SMNH/ackxb8TNJ6GHR9BF4Xd3n7L8G8ZDzS/nYW92QrMsO AFtraukXPt0IyuAchlewip3zdpdPJNpYOQhjbOM3AakNFwh5iiOpUsF5MmcfmaOkE4S8 wMjaI7YBrT9ZobMiuUAg1QiZttvBnZGbTG3Jaa1bvqKtQK7UHnJ/O8G4DN3OWjIKn201 ZvKSr4u5CPpDrZsjVkPyMvM2fYDHfqRLsQMTirygkRH0UpUMrFTSwpDsp0uX5Po7S8nz VMac6gGifTP6DGr5wVolac1f9l+MH8BxDZ/iZHM0SZVaj5eG025yZqEJvgrLdsiyRb6a tsig== X-Gm-Message-State: AOAM533QP0ZMPJYPayv0me7xxOq9mvj9F44I6aswpvXgYx5phXMcpAdf GsoXu8SZROotcFpDbOJVoe6/pGiJ1hAjr8Ui X-Google-Smtp-Source: ABdhPJyS8fJqN06FqAOgmipgPoe2KZwNRGVmzw/vBmAYmp7z53X0H0DepKOZ1quSVZetaWLonUbulw== X-Received: by 2002:a05:6000:156d:: with SMTP id 13mr17031526wrz.181.1621760186153; Sun, 23 May 2021 01:56:26 -0700 (PDT) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id s15sm9577839wrt.54.2021.05.23.01.56.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 May 2021 01:56:25 -0700 (PDT) From: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= To: git@vger.kernel.org Cc: Junio C Hamano , Gregory Anders , =?utf-8?b?xJBvw6BuIFRy4bqnbiBDw7RuZyBEYW5o?= , Jeff King , Eric Sunshine , Eric Wong , Felipe Contreras , =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= Subject: [PATCH v3 06/13] send-email: lazily load config for a big speedup Date: Sun, 23 May 2021 10:56:11 +0200 Message-Id: X-Mailer: git-send-email 2.32.0.rc0.406.g05cb3eebfc In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Reduce the time it takes git-send-email to get to even the most trivial of tasks (such as serving up its "-h" output) by first listing config keys that exist, and only then only call e.g. "git config --bool" on them if they do. Over a lot of runs this speeds the time to "-h" up for me from ~250ms to ~150ms, and the runtime of t9001-send-email.sh goes from ~25s to ~20s. This introduces a race condition where we'll do the "wrong" thing if a config key were to be inserted between us discovering the list and calling read_config(), i.e. we won't know about the racily added key. In theory this is a change in behavior, in practice it doesn't matter. The config_regexp() function being changed here was added in dd84e528a34 (git-send-email: die if sendmail.* config is set, 2020-07-23) for use by git-send-email. So we can change its odd return value in the case where no values are found by "git config". The difference in the *.pm code would matter if it was invoked in scalar context, but now it no longer is. Arguably this caching belongs in Git.pm itself, but in lieu of modifying it for all its callers let's only do this for "git send-email". The other big potential win would be "git svn", but unlike "git send-email" it doesn't check tens of config variables one at a time at startup (in my brief testing it doesn't check any). Signed-off-by: Ævar Arnfjörð Bjarmason --- git-send-email.perl | 35 ++++++++++++++++++++++++++--------- 1 file changed, 26 insertions(+), 9 deletions(-) diff --git a/git-send-email.perl b/git-send-email.perl index 95a69d4c51..d294681cf3 100755 --- a/git-send-email.perl +++ b/git-send-email.perl @@ -337,11 +337,13 @@ sub signal_handler { # Read our sendemail.* config sub read_config { - my ($configured, $prefix) = @_; + my ($known_keys, $configured, $prefix) = @_; foreach my $setting (keys %config_bool_settings) { my $target = $config_bool_settings{$setting}; - my $v = Git::config_bool(@repo, "$prefix.$setting"); + my $key = "$prefix.$setting"; + next unless exists $known_keys->{$key}; + my $v = Git::config_bool(@repo, $key); next unless defined $v; next if $configured->{$setting}++; $$target = $v; @@ -349,8 +351,10 @@ sub read_config { foreach my $setting (keys %config_path_settings) { my $target = $config_path_settings{$setting}; + my $key = "$prefix.$setting"; + next unless exists $known_keys->{$key}; if (ref($target) eq "ARRAY") { - my @values = Git::config_path(@repo, "$prefix.$setting"); + my @values = Git::config_path(@repo, $key); next unless @values; next if $configured->{$setting}++; @$target = @values; @@ -365,14 +369,16 @@ sub read_config { foreach my $setting (keys %config_settings) { my $target = $config_settings{$setting}; + my $key = "$prefix.$setting"; + next unless exists $known_keys->{$key}; if (ref($target) eq "ARRAY") { - my @values = Git::config(@repo, "$prefix.$setting"); + my @values = Git::config(@repo, $key); next unless @values; next if $configured->{$setting}++; @$target = @values; } else { - my $v = Git::config(@repo, "$prefix.$setting"); + my $v = Git::config(@repo, $key); next unless defined $v; next if $configured->{$setting}++; $$target = $v; @@ -398,9 +404,20 @@ sub config_regexp { return @ret; } +# Save ourselves a lot of work of shelling out to 'git config' (it +# parses 'bool' etc.) by only doing so for config keys that exist. +my %known_config_keys; +{ + my @known_config_keys = config_regexp("^sende?mail[.]"); + @known_config_keys{@known_config_keys} = (); +} + # sendemail.identity yields to --identity. We must parse this # special-case first before the rest of the config is read. -$identity = Git::config(@repo, "sendemail.identity"); +{ + my $key = "sendemail.identity"; + $identity = Git::config(@repo, $key) if exists $known_config_keys{$key}; +} my $rc = GetOptions( "identity=s" => \$identity, "no-identity" => \$no_identity, @@ -411,8 +428,8 @@ sub config_regexp { # Now we know enough to read the config { my %configured; - read_config(\%configured, "sendemail.$identity") if defined $identity; - read_config(\%configured, "sendemail"); + read_config(\%known_config_keys, \%configured, "sendemail.$identity") if defined $identity; + read_config(\%known_config_keys, \%configured, "sendemail"); } # Begin by accumulating all the variables (defined above), that we will end up @@ -496,7 +513,7 @@ sub config_regexp { usage(); } -if ($forbid_sendmail_variables && (scalar config_regexp("^sendmail[.]")) != 0) { +if ($forbid_sendmail_variables && grep { /^sendmail/s } keys %known_config_keys) { die __("fatal: found configuration options for 'sendmail'\n" . "git-send-email is configured with the sendemail.* options - note the 'e'.\n" . "Set sendemail.forbidSendmailVariables to false to disable this check.\n"); From patchwork Sun May 23 08:56:12 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= X-Patchwork-Id: 12274807 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 51BFAC47081 for ; Sun, 23 May 2021 08:56:36 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 2ED03610C8 for ; Sun, 23 May 2021 08:56:36 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231724AbhEWI6A (ORCPT ); Sun, 23 May 2021 04:58:00 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36824 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231717AbhEWI55 (ORCPT ); Sun, 23 May 2021 04:57:57 -0400 Received: from mail-wm1-x32d.google.com (mail-wm1-x32d.google.com [IPv6:2a00:1450:4864:20::32d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A8482C06138A for ; Sun, 23 May 2021 01:56:28 -0700 (PDT) Received: by mail-wm1-x32d.google.com with SMTP id h3so581951wmq.3 for ; Sun, 23 May 2021 01:56:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=QxFgfqPIcJMBUXRoqrB4xHKVNoLCiFWUqE4eHlP1NPQ=; b=OXVOCOp7acIJ3hYna7VCscevwEBlVcGlYIc6O8bgtc3U/iNls41UmLBt/oIgzGq2+J ZriCCMAad4TXOMbOhtDrsQuXNp+JioUt49NGR59M/92iDhoYReLI4cUBmMdGZDQvU9ws NNvdQ6IyatfkwGyULLAlN5Qw/M+l4u9MwbdQ7SlEXMAuE4iVhieABeEHqQemXs/pcuYl yvRwpTA3y90kRwcBEecyc8oGJyfx7787rF6eWXLdXOfib2LyX05ncOCmy5hhNKtFZ65R 1/FN6Gq5p5NB150nKsUB+8s5y9Jibj9z5ihcGgy93Z6Vn+AppvlPlbLZw69D4bP/du/b gpvQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=QxFgfqPIcJMBUXRoqrB4xHKVNoLCiFWUqE4eHlP1NPQ=; b=e94xXqFWyWscuHYV09FwT1Lgbr6C6WwrK1jnek+ugcxUwG14rdUXVCwKAWO51U1rVI 4mf69sGAZDpfh570ij0gUdJV9EJdUce9ZxZWBmB59h0FK9tSRyoYFuMhdZKKkLYphsAk ZdnZLDah3CtEGiDxjIz990ihJXla29J2k7/be1C897cdilmdn47cCQpMWKfrtGbD5bbQ HrEqkfVLPHM580Xji1zniDn8W8VLQmYKPOHejQMzYFtJO9oGqOAHtuHOGeeyJ1t/FCXX IR5mloLkPOD8Zqu22V0GEO5IS6TTTMGJNH+TiwVZK5Ie9TCVYTAiw2Nj4Q1lOXMVETDX Mg5A== X-Gm-Message-State: AOAM532zUhwN2IjmyOldlSwIO7cPoZNmth7lNDeNluJwg/1T9Be0r28I Y8Y2hgsdV3JKJZx52qHwy2wzzxs0uJ1ZtBHQ X-Google-Smtp-Source: ABdhPJyOIcB+7U5MJZbTb4uVuIFzV2JiLiWLrRjaQJYA7KHUWyRfjbM7WdQ2d0GxoEPqGem9D/65qA== X-Received: by 2002:a1c:b646:: with SMTP id g67mr14997824wmf.117.1621760186951; Sun, 23 May 2021 01:56:26 -0700 (PDT) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id s15sm9577839wrt.54.2021.05.23.01.56.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 May 2021 01:56:26 -0700 (PDT) From: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= To: git@vger.kernel.org Cc: Junio C Hamano , Gregory Anders , =?utf-8?b?xJBvw6BuIFRy4bqnbiBDw7RuZyBEYW5o?= , Jeff King , Eric Sunshine , Eric Wong , Felipe Contreras , =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= Subject: [PATCH v3 07/13] send-email: lazily shell out to "git var" Date: Sun, 23 May 2021 10:56:12 +0200 Message-Id: X-Mailer: git-send-email 2.32.0.rc0.406.g05cb3eebfc In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Optimize git-send-email by only shelling out to "git var" if we need to. This is easily done by re-inventing our own small version of perl's Memoize module. I suppose I could just use Memoize itself, but in a subsequent patch I'll be micro-optimizing send-email's use of dependencies. Using Memoize is a measly extra 5-10 milliseconds, but as we'll see that'll end up mattering for us in the end. This brings the runtime of a plain "send-email" from around ~160-170ms to ~140m-150ms. The runtime of the tests is around the same, or around ~20s. Signed-off-by: Ævar Arnfjörð Bjarmason --- git-send-email.perl | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/git-send-email.perl b/git-send-email.perl index d294681cf3..56bd5b0e50 100755 --- a/git-send-email.perl +++ b/git-send-email.perl @@ -578,8 +578,18 @@ sub config_regexp { } my ($repoauthor, $repocommitter); -($repoauthor) = Git::ident_person(@repo, 'author'); -($repocommitter) = Git::ident_person(@repo, 'committer'); +{ + my %cache; + my ($author, $committer); + my $common = sub { + my ($what) = @_; + return $cache{$what} if exists $cache{$what}; + ($cache{$what}) = Git::ident_person(@repo, $what); + return $cache{$what}; + }; + $repoauthor = sub { $common->('author') }; + $repocommitter = sub { $common->('committer') }; +} sub parse_address_line { return map { $_->format } Mail::Address->parse($_[0]); @@ -767,7 +777,7 @@ sub get_patch_subject { or die sprintf(__("Failed to open for writing %s: %s"), $compose_filename, $!); - my $tpl_sender = $sender || $repoauthor || $repocommitter || ''; + my $tpl_sender = $sender || $repoauthor->() || $repocommitter->() || ''; my $tpl_subject = $initial_subject || ''; my $tpl_in_reply_to = $initial_in_reply_to || ''; my $tpl_reply_to = $reply_to || ''; @@ -973,7 +983,7 @@ sub file_declares_8bit_cte { $sender =~ s/^\s+|\s+$//g; ($sender) = expand_aliases($sender); } else { - $sender = $repoauthor || $repocommitter || ''; + $sender = $repoauthor->() || $repocommitter->() || ''; } # $sender could be an already sanitized address @@ -1122,7 +1132,7 @@ sub make_message_id { $uniq = "$message_id_stamp-$message_id_serial"; my $du_part; - for ($sender, $repocommitter, $repoauthor) { + for ($sender, $repocommitter->(), $repoauthor->()) { $du_part = extract_valid_address(sanitize_address($_)); last if (defined $du_part and $du_part ne ''); } From patchwork Sun May 23 08:56:13 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= X-Patchwork-Id: 12274811 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 4EDEBC47081 for ; Sun, 23 May 2021 08:56:38 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 33BA3610C8 for ; Sun, 23 May 2021 08:56:38 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231731AbhEWI6C (ORCPT ); Sun, 23 May 2021 04:58:02 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36828 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231718AbhEWI55 (ORCPT ); Sun, 23 May 2021 04:57:57 -0400 Received: from mail-wr1-x42e.google.com (mail-wr1-x42e.google.com [IPv6:2a00:1450:4864:20::42e]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5B9B4C06138B for ; Sun, 23 May 2021 01:56:29 -0700 (PDT) Received: by mail-wr1-x42e.google.com with SMTP id r12so25287691wrp.1 for ; Sun, 23 May 2021 01:56:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=wmftQ5mGCEZYWpgi2EdyIEenIjUFZnD+t9yLMJSTulE=; b=l+uTJf62TyatVjPYq5xW/GBcOWjCwzTSg4khZxaP1vWOJ9HROmyrSvKQrvUS6FJEng 3irj1chdafljLohooAaxrZjigNWwV5RCWNgzSNMcJNf8R6efBmHcsTyVXCFe3rnGlNbq EQNdgHNEsu+t5Rl6OCoL0f8EcTG1lGg9qqagG/35kCJRYAc6M5cM1OT/Y/M7nHwTNbxj i4NRLFWdPA1uEPn0dL9/5DeeY1BVZDzFb2BQUvRFJxQ9yY8y8lpkGe8SZmCnEYIbkSv3 KHumXrLU8dd0gUq1PxI+OIPVP1PCG5H47Jcd21fAeGXbXSDxKfYoGCvPKVFPGFG6Yns6 dK/Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=wmftQ5mGCEZYWpgi2EdyIEenIjUFZnD+t9yLMJSTulE=; b=LzxN6Q1c4EwUlNFdH6iXOfebwv333PVbzS0hPUClyStRr5jRgS2VRZo7JtxjAED43X Pd/2M8UUPR6PV4XD5hBt1lojvndaQvEggboKuf+Or/BkbGf7v9CR8xlHG03tFjbsygMW sINSAmNKu2bEOD7EX8S7YL0+/yEgYwIUZICH8QvabJJRaHkQDPAgV87JiaPV6x0Cuot4 +ky5MApFVZrzogFeNyulpJduHflbZNdZwRtIy1hLfaUatcrM+riU93ZIKTix06K95X1G vrnYklgMxB0Hq0V0lPq+se6tp89ZCcH+KXPH3WNuPONnuLnOO0xaw/7gfkzwdFJJoD6K MsdA== X-Gm-Message-State: AOAM532mbV66wstGN5pjwKXXXNtKIdN5ZF8AZg93aBPN+jE43G8IThc7 JJiXm7XigqJ5qbiG1Ck07fxMNaqNHZ9x3Its X-Google-Smtp-Source: ABdhPJyIIFCJ3akiBj5EjIh3nSU2RVDXZp1uxNvQD9SYYHvKyHtI41n6bGQsDuWnE4gzSHL6ZiTHRw== X-Received: by 2002:a5d:4046:: with SMTP id w6mr17240695wrp.15.1621760187833; Sun, 23 May 2021 01:56:27 -0700 (PDT) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id s15sm9577839wrt.54.2021.05.23.01.56.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 May 2021 01:56:27 -0700 (PDT) From: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= To: git@vger.kernel.org Cc: Junio C Hamano , Gregory Anders , =?utf-8?b?xJBvw6BuIFRy4bqnbiBDw7RuZyBEYW5o?= , Jeff King , Eric Sunshine , Eric Wong , Felipe Contreras , =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= Subject: [PATCH v3 08/13] send-email: use function syntax instead of barewords Date: Sun, 23 May 2021 10:56:13 +0200 Message-Id: X-Mailer: git-send-email 2.32.0.rc0.406.g05cb3eebfc In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Change calls like "__ 'foo'" to "__('foo')" so the Perl compiler doesn't have to guess that "__" is a function. This makes the code more readable. Signed-off-by: Ævar Arnfjörð Bjarmason --- git-send-email.perl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/git-send-email.perl b/git-send-email.perl index 56bd5b0e50..83f764a8bf 100755 --- a/git-send-email.perl +++ b/git-send-email.perl @@ -696,7 +696,7 @@ sub is_format_patch_arg { if (defined($format_patch)) { return $format_patch; } - die sprintf(__ < X-Patchwork-Id: 12274809 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2B700C4707A for ; Sun, 23 May 2021 08:56:37 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 0DF8C6100B for ; Sun, 23 May 2021 08:56:37 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231727AbhEWI6B (ORCPT ); Sun, 23 May 2021 04:58:01 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36836 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231715AbhEWI54 (ORCPT ); Sun, 23 May 2021 04:57:56 -0400 Received: from mail-wm1-x334.google.com (mail-wm1-x334.google.com [IPv6:2a00:1450:4864:20::334]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3B45EC061574 for ; Sun, 23 May 2021 01:56:30 -0700 (PDT) Received: by mail-wm1-x334.google.com with SMTP id l11-20020a05600c4f0bb029017a7cd488f5so6756270wmq.0 for ; Sun, 23 May 2021 01:56:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=2vvH+sGTEs9tavLp8UCC7MGppAaEii1IXfkTEMjcJIc=; b=hZPvps6LLmym6J8u7k+kSbf8Jfw9HTc8h+aIdllYY08YzlSiyo+FHmpHqTzIw4j0fq LhTpCH5NqLeB7n7DGzGkWJvtJwpkyoVxXq+J8V0NbWRpYIEQFDmx2CzYhnr0sEbK/SV7 tCGge1D/3hL0Yn6dVX70ZDdV5F21corfth44aO0IbawPDxDS9KWSvMUhL8pQCjpHGBB4 jQYa05YNQRGKGOcKOovHnzyQwt/Z14O7jc5r/UdpOPYGqtnNYR/oioa9CVeGXXgzwCEu sw47teYuc/nJBtUBZ+R3NNCh80mG2PwcskbrhC6HLjs5epR92bxFGGcx2+ZyzCL2H4vv MQFA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=2vvH+sGTEs9tavLp8UCC7MGppAaEii1IXfkTEMjcJIc=; b=WlHmDdU0HIk5uT8z7MxXnCHP7fetcbscMOUxcoz3Xp+Fc+Uqa7S3UkeU/IwNnLt91M Jxh3oN2s+JPLHdz3rGTEQg0KE3IC4Zb0qm5QVjShefBtXOQfEN2Kx7YKAE2PTNp3DS6w ckOpYmDoLjvwrjuWpnRR92NRNwiKfM9MADp41jnmXU4b3ZClnwlGjr/HXSIXfdOCuUfO OUNtUgPlVfo0H01OR4sHMCoYSYcV1Vml25GAPdr7xMPwzozctLJaediwxLtQPmYzMfIy XUXazz4/CaQdATLSwuo8uPdeRLPbxWEiudXVI69JxmkfxdpKy106Qz+8V1myjEhPOpSW MbZA== X-Gm-Message-State: AOAM530CuskA96JQ4icAQLhhe3bmvYSBl7e8EG5+pQ0TSUCKtSeqXs5v 89PE36Mx7O7jnFFohojC7xoma5JJB0vWxgpG X-Google-Smtp-Source: ABdhPJz2jhsdEpkGDYwBRQrv7B9N9s9rLH+qRDdhTY33xGMe2grnFPDP++M0ouwl4hPDLkyVmLkoQA== X-Received: by 2002:a1c:2743:: with SMTP id n64mr15486883wmn.76.1621760188608; Sun, 23 May 2021 01:56:28 -0700 (PDT) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id s15sm9577839wrt.54.2021.05.23.01.56.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 May 2021 01:56:28 -0700 (PDT) From: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= To: git@vger.kernel.org Cc: Junio C Hamano , Gregory Anders , =?utf-8?b?xJBvw6BuIFRy4bqnbiBDw7RuZyBEYW5o?= , Jeff King , Eric Sunshine , Eric Wong , Felipe Contreras , =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= Subject: [PATCH v3 09/13] send-email: get rid of indirect object syntax Date: Sun, 23 May 2021 10:56:14 +0200 Message-Id: X-Mailer: git-send-email 2.32.0.rc0.406.g05cb3eebfc In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Change indirect object syntax such as "new X ARGS" to "X->new(ARGS)". This allows perl to see what "new" is at compile-time without having loaded Term::ReadLine. This doesn't matter now, but will in a subsequent commit when we start lazily loading it. Let's do the same for the adjacent "FakeTerm" package for consistency, even though we're not going to conditionally load it. Signed-off-by: Ævar Arnfjörð Bjarmason --- git-send-email.perl | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/git-send-email.perl b/git-send-email.perl index 83f764a8bf..f1542cb3ea 100755 --- a/git-send-email.perl +++ b/git-send-email.perl @@ -194,11 +194,11 @@ sub format_2822_time { my @repo = $repo ? ($repo) : (); my $term = eval { $ENV{"GIT_SEND_EMAIL_NOTTY"} - ? new Term::ReadLine 'git-send-email', \*STDIN, \*STDOUT - : new Term::ReadLine 'git-send-email'; + ? Term::ReadLine->new('git-send-email', \*STDIN, \*STDOUT) + : Term::ReadLine->new('git-send-email'); }; if ($@) { - $term = new FakeTerm "$@: going non-interactive"; + $term = FakeTerm->new("$@: going non-interactive"); } # Behavior modification variables From patchwork Sun May 23 08:56:15 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= X-Patchwork-Id: 12274813 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1A705C47080 for ; Sun, 23 May 2021 08:56:39 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id F3C446100B for ; Sun, 23 May 2021 08:56:38 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231733AbhEWI6D (ORCPT ); Sun, 23 May 2021 04:58:03 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36846 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231719AbhEWI6A (ORCPT ); Sun, 23 May 2021 04:58:00 -0400 Received: from mail-wm1-x333.google.com (mail-wm1-x333.google.com [IPv6:2a00:1450:4864:20::333]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 52109C06138C for ; Sun, 23 May 2021 01:56:31 -0700 (PDT) Received: by mail-wm1-x333.google.com with SMTP id f20-20020a05600c4e94b0290181f6edda88so2814993wmq.2 for ; Sun, 23 May 2021 01:56:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=NrYsvH8iVf8OgsuTPo0XdXBlpf/jfpg+PNt0ZkV74bc=; b=pZ3i8dxUC+e6FBmMYjv2XFm7W0kSUQaZxXCHIIW+e6TAhKehktZA5y5rDBt5S9wmye g7yPPK+IVRxmT9NC+42Oa+otCK/sIk8Aw0k2C+whAy2A9T63jJcxrpI2dZajMnSNki0S gaOdiMfcIwvTcfBMFNa7m/x6ulHcqOGvtJ3mjhM+G2wtblvanmojA1XK/QbUvCNYfyr5 gpi8BLao/aK6wv8qvjSm6XMcuRml/uq9Y19Yq2VO71pry5hDgLY/ILLgaoViOCNuR7g5 I1wwyYmseK6gTVTCXez0MtxAf5GIeQIzmr53ixCQeob74zytAv4jngYNa7ZSWJRalaQv sV+A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=NrYsvH8iVf8OgsuTPo0XdXBlpf/jfpg+PNt0ZkV74bc=; b=YUANHP9c5JZABN4gxUcoWx1jLzTk24xAau7RogR9pkZQzS+q2gklBzReLUxpudDYfX WdAIe+gznSE1sUiLcc7gVOLsVUqCbZVrjBs2JPup0male35fzjTPjGholADbKVmvjgMc gefCpyv+rBzDLf39Jnc2rq0OOvvtNWemDlFdqfbp+miGPcif+NMM6R5lkEbURk0gSfPD sasJ1XK+bYzmlSyQzNQSK/8kNp/4WO38zl+zAYDxRfsax5+iQoeLOZr/Bdinv1qrpwEt EYSu710DNzte39xgcfyfQFGb6czD6JOnf6pu0B8QnyfWEnjyDKKo7KlQOqeUNY0b7OWl v1hw== X-Gm-Message-State: AOAM530Tt3GsIQuzO5JPQXLDwwJTnK39VspAXwq0vsI2ui386AIVB8AJ hVlXhp+jPhcQYhyZSGnjWDrgKnqnnB260WY2 X-Google-Smtp-Source: ABdhPJwjHDi5aPA6l/g/bzTo4AQryP3horsPIFaFsndOZZJMPwq40AogqwpFVhUDwLDoHVaPQBqh+w== X-Received: by 2002:a7b:c304:: with SMTP id k4mr15945917wmj.68.1621760189463; Sun, 23 May 2021 01:56:29 -0700 (PDT) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id s15sm9577839wrt.54.2021.05.23.01.56.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 May 2021 01:56:28 -0700 (PDT) From: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= To: git@vger.kernel.org Cc: Junio C Hamano , Gregory Anders , =?utf-8?b?xJBvw6BuIFRy4bqnbiBDw7RuZyBEYW5o?= , Jeff King , Eric Sunshine , Eric Wong , Felipe Contreras , =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= Subject: [PATCH v3 10/13] send-email: lazily load modules for a big speedup Date: Sun, 23 May 2021 10:56:15 +0200 Message-Id: X-Mailer: git-send-email 2.32.0.rc0.406.g05cb3eebfc In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Optimize the time git-send-email takes to do even the simplest of things (such as serving up "-h") from around ~150ms to ~80ms-~90ms by lazily loading the modules it requires. Before this change Devel::TraceUse would report 99/97 used modules under NO_GETTEXT=[|Y], respectively. Now it's 52/37. It now takes ~15s to run t9001-send-email.sh, down from ~20s. Signed-off-by: Ævar Arnfjörð Bjarmason --- git-send-email.perl | 71 +++++++++++++++++++++++++-------------------- 1 file changed, 39 insertions(+), 32 deletions(-) diff --git a/git-send-email.perl b/git-send-email.perl index f1542cb3ea..1e9273fd4f 100755 --- a/git-send-email.perl +++ b/git-send-email.perl @@ -19,20 +19,10 @@ use 5.008; use strict; use warnings $ENV{GIT_PERL_FATAL_WARNINGS} ? qw(FATAL all) : (); -use POSIX qw/strftime/; -use Term::ReadLine; use Getopt::Long; -use Text::ParseWords; -use Term::ANSIColor; -use File::Temp qw/ tempdir tempfile /; -use File::Spec::Functions qw(catdir catfile); use Git::LoadCPAN::Error qw(:try); -use Cwd qw(abs_path cwd); use Git; use Git::I18N; -use Net::Domain (); -use Net::SMTP (); -use Git::LoadCPAN::Mail::Address; Getopt::Long::Configure qw/ pass_through /; @@ -166,7 +156,6 @@ sub format_2822_time { ); } -my $have_email_valid = eval { require Email::Valid; 1 }; my $smtp; my $auth; my $num_sent = 0; @@ -192,14 +181,6 @@ sub format_2822_time { my $repo = eval { Git->repository() }; my @repo = $repo ? ($repo) : (); -my $term = eval { - $ENV{"GIT_SEND_EMAIL_NOTTY"} - ? Term::ReadLine->new('git-send-email', \*STDIN, \*STDOUT) - : Term::ReadLine->new('git-send-email'); -}; -if ($@) { - $term = FakeTerm->new("$@: going non-interactive"); -} # Behavior modification variables my ($quiet, $dry_run) = (0, 0); @@ -309,9 +290,9 @@ sub do_edit { # Handle Uncouth Termination sub signal_handler { - # Make text normal - print color("reset"), "\n"; + require Term::ANSIColor; + print Term::ANSIColor::color("reset"), "\n"; # SMTP password masked system "stty echo"; @@ -592,11 +573,13 @@ sub config_regexp { } sub parse_address_line { + require Git::LoadCPAN::Mail::Address; return map { $_->format } Mail::Address->parse($_[0]); } sub split_addrs { - return quotewords('\s*,\s*', 1, @_); + require Text::ParseWords; + return Text::ParseWords::quotewords('\s*,\s*', 1, @_); } my %aliases; @@ -645,10 +628,11 @@ sub parse_sendmail_aliases { s/\\"/"/g foreach @addr; $aliases{$alias} = \@addr }}}, - mailrc => sub { my $fh = shift; while (<$fh>) { + mailrc => sub { my $fh = shift; while (<$fh>) { if (/^alias\s+(\S+)\s+(.*?)\s*$/) { + require Text::ParseWords; # spaces delimit multiple addresses - $aliases{$1} = [ quotewords('\s+', 0, $2) ]; + $aliases{$1} = [ Text::ParseWords::quotewords('\s+', 0, $2) ]; }}}, pine => sub { my $fh = shift; my $f='\t[^\t]*'; for (my $x = ''; defined($x); $x = $_) { @@ -720,7 +704,8 @@ sub is_format_patch_arg { opendir my $dh, $f or die sprintf(__("Failed to opendir %s: %s"), $f, $!); - push @files, grep { -f $_ } map { catfile($f, $_) } + require File::Spec; + push @files, grep { -f $_ } map { File::Spec->catfile($f, $_) } sort readdir $dh; closedir $dh; } elsif ((-f $f or -p $f) and !is_format_patch_arg($f)) { @@ -733,7 +718,8 @@ sub is_format_patch_arg { if (@rev_list_opts) { die __("Cannot run git format-patch from outside a repository\n") unless $repo; - push @files, $repo->command('format-patch', '-o', tempdir(CLEANUP => 1), @rev_list_opts); + require File::Temp; + push @files, $repo->command('format-patch', '-o', File::Temp::tempdir(CLEANUP => 1), @rev_list_opts); } @files = handle_backup_files(@files); @@ -770,9 +756,10 @@ sub get_patch_subject { if ($compose) { # Note that this does not need to be secure, but we will make a small # effort to have it be unique + require File::Temp; $compose_filename = ($repo ? - tempfile(".gitsendemail.msg.XXXXXX", DIR => $repo->repo_path()) : - tempfile(".gitsendemail.msg.XXXXXX", DIR => "."))[1]; + File::Temp::tempfile(".gitsendemail.msg.XXXXXX", DIR => $repo->repo_path()) : + File::Temp::tempfile(".gitsendemail.msg.XXXXXX", DIR => "."))[1]; open my $c, ">", $compose_filename or die sprintf(__("Failed to open for writing %s: %s"), $compose_filename, $!); @@ -879,6 +866,19 @@ sub get_patch_subject { do_edit(@files); } +sub term { + my $term = eval { + require Term::ReadLine; + $ENV{"GIT_SEND_EMAIL_NOTTY"} + ? Term::ReadLine->new('git-send-email', \*STDIN, \*STDOUT) + : Term::ReadLine->new('git-send-email'); + }; + if ($@) { + $term = FakeTerm->new("$@: going non-interactive"); + } + return $term; +} + sub ask { my ($prompt, %arg) = @_; my $valid_re = $arg{valid_re}; @@ -886,6 +886,7 @@ sub ask { my $confirm_only = $arg{confirm_only}; my $resp; my $i = 0; + my $term = term(); return defined $default ? $default : undef unless defined $term->IN and defined fileno($term->IN) and defined $term->OUT and defined fileno($term->OUT); @@ -1066,6 +1067,7 @@ sub extract_valid_address { return $address if ($address =~ /^($local_part_regexp)$/); $address =~ s/^\s*<(.*)>\s*$/$1/; + my $have_email_valid = eval { require Email::Valid; 1 }; if ($have_email_valid) { return scalar Email::Valid->address($address); } @@ -1125,7 +1127,8 @@ sub validate_address_list { sub make_message_id { my $uniq; if (!defined $message_id_stamp) { - $message_id_stamp = strftime("%Y%m%d%H%M%S.$$", gmtime(time)); + require POSIX; + $message_id_stamp = POSIX::strftime("%Y%m%d%H%M%S.$$", gmtime(time)); $message_id_serial = 0; } $message_id_serial++; @@ -1295,6 +1298,7 @@ sub valid_fqdn { sub maildomain_net { my $maildomain; + require Net::Domain; my $domain = Net::Domain::domainname(); $maildomain = $domain if valid_fqdn($domain); @@ -1305,6 +1309,7 @@ sub maildomain_mta { my $maildomain; for my $host (qw(mailhost localhost)) { + require Net::SMTP; my $smtp = Net::SMTP->new($host); if (defined $smtp) { my $domain = $smtp->domain; @@ -1983,13 +1988,15 @@ sub validate_patch { my ($fn, $xfer_encoding) = @_; if ($repo) { - my $validate_hook = catfile($repo->hooks_path(), + require File::Spec; + my $validate_hook = File::Spec->catfile($repo->hooks_path(), 'sendemail-validate'); my $hook_error; if (-x $validate_hook) { - my $target = abs_path($fn); + require Cwd; + my $target = Cwd::abs_path($fn); # The hook needs a correct cwd and GIT_DIR. - my $cwd_save = cwd(); + my $cwd_save = Cwd::cwd(); chdir($repo->wc_path() or $repo->repo_path()) or die("chdir: $!"); local $ENV{"GIT_DIR"} = $repo->repo_path(); From patchwork Sun May 23 08:56:16 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= X-Patchwork-Id: 12274815 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 354F1C4707A for ; Sun, 23 May 2021 08:56:40 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 0980D61263 for ; Sun, 23 May 2021 08:56:39 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231735AbhEWI6E (ORCPT ); Sun, 23 May 2021 04:58:04 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36848 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231720AbhEWI6A (ORCPT ); Sun, 23 May 2021 04:58:00 -0400 Received: from mail-wr1-x436.google.com (mail-wr1-x436.google.com [IPv6:2a00:1450:4864:20::436]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4A5FAC06138D for ; Sun, 23 May 2021 01:56:32 -0700 (PDT) Received: by mail-wr1-x436.google.com with SMTP id q5so25280623wrs.4 for ; Sun, 23 May 2021 01:56:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=7snwvzrzmtFNZ1YA9658lbuYBwjP0VYrjN107S7yhsA=; b=dQ5SK8v9uR3HLwEvgrWFXQNXi323Lv2MXXkCvTU2JLSyI1YTlEfbrrMSqeJte6Df4Y JnoxAjvy8Vsn1f2Ui0HLnqkFLAaoOC+xMKV/shjxtUoydUbSgBlFjxjsNi0LtxklF1P1 KtLwYRCtUDSOIEcp/7JZTQlCgCXF5rlvOAVrnFiTa2jjqO0ouDiSzzfdT/PIrMxNPEwZ YFe2Pcm5kX2AK6gegozVv728K5FkjviEv+PkMHpLpFeX0Igcnp0iMVWrwqWXXt58efTy +nNMxsjccN+7ofUZjBxX/wq0HAuEInt3Mnx/deCZo5g4SSagJRSCGecKZv8/q9owXzKK LRTw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=7snwvzrzmtFNZ1YA9658lbuYBwjP0VYrjN107S7yhsA=; b=qhM4gZnY0kyKpBpJMaahtcK60f3bgiUphfsPgpgcvOnR4x5KmCENr7XtFkO5/Z0LRA El4Z7MdbMkj+40ksEt184Pb6yz+ypd6SFaWRKrg+PY2Guc0ULjMUDSy+Y2N+F1cLH16i JWgsSZORBfVPP6UJgt92E16QVhqtWbUBZKL1wwKqyQbQAJPFnOYUtcgBWjsHwMWx4Sj3 GQEtPIN5cVWXG3oMiN4T7AohV1T2lJKd47o8uAq7tjWh73MhjuzySapz73Ylb+AjB9aT Wn2VmdhN/DsgADh8W2zg7QvgzEfQE9LnCGKm2B/Dq6xiGcS8A5f4KaAPAI6Wu2e9oKqa Wp2Q== X-Gm-Message-State: AOAM530fV+W52cUOM2nwm0z7SqmcPvSEjYoLo+Di6xj7TzJbLg27gkOH ccETs5LGAMzZQwdAEKg7Qt3kHa8rGoUdJd+T X-Google-Smtp-Source: ABdhPJwjdxYzecF+JP203EQJR1J91ZPvwvJRlfgVRwSd/N2sO8TNSdfZJ5VOu9a651US3ut8bmWWkA== X-Received: by 2002:adf:9d8c:: with SMTP id p12mr17400266wre.310.1621760190553; Sun, 23 May 2021 01:56:30 -0700 (PDT) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id s15sm9577839wrt.54.2021.05.23.01.56.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 May 2021 01:56:29 -0700 (PDT) From: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= To: git@vger.kernel.org Cc: Junio C Hamano , Gregory Anders , =?utf-8?b?xJBvw6BuIFRy4bqnbiBDw7RuZyBEYW5o?= , Jeff King , Eric Sunshine , Eric Wong , Felipe Contreras , =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= Subject: [PATCH v3 11/13] perl: lazily load some common Git.pm setup code Date: Sun, 23 May 2021 10:56:16 +0200 Message-Id: X-Mailer: git-send-email 2.32.0.rc0.406.g05cb3eebfc In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Instead of unconditionally requiring modules such as File::Spec, let's only load them when needed. This speeds up code that only needs a subset of the features Git.pm provides. This brings a plain invocation of "git send-email" down from 52/37 loaded modules under NO_GETTEXT=[|Y] to 39/18, and it now takes ~60-~70ms instead of ~80-~90ms. The runtime of t9001-send-email.sh test is down to ~13s from ~15s. Signed-off-by: Ævar Arnfjörð Bjarmason --- perl/Git.pm | 35 ++++++++++++++++++----------------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/perl/Git.pm b/perl/Git.pm index 73ebbf80cc..4d048f307b 100644 --- a/perl/Git.pm +++ b/perl/Git.pm @@ -11,9 +11,6 @@ package Git; use strict; use warnings $ENV{GIT_PERL_FATAL_WARNINGS} ? qw(FATAL all) : (); -use File::Temp (); -use File::Spec (); - BEGIN { our ($VERSION, @ISA, @EXPORT, @EXPORT_OK); @@ -103,12 +100,9 @@ =head1 DESCRIPTION =cut -use Carp qw(carp croak); # but croak is bad - throw instead +sub carp { require Carp; goto &Carp::carp } +sub croak { require Carp; goto &Carp::croak } use Git::LoadCPAN::Error qw(:try); -use Cwd qw(abs_path cwd); -use IPC::Open2 qw(open2); -use Fcntl qw(SEEK_SET SEEK_CUR); -use Time::Local qw(timegm); } @@ -191,13 +185,15 @@ sub repository { $dir = undef; }; + require Cwd; if ($dir) { + require File::Spec; File::Spec->file_name_is_absolute($dir) or $dir = $opts{Directory} . '/' . $dir; - $opts{Repository} = abs_path($dir); + $opts{Repository} = Cwd::abs_path($dir); # If --git-dir went ok, this shouldn't die either. my $prefix = $search->command_oneline('rev-parse', '--show-prefix'); - $dir = abs_path($opts{Directory}) . '/'; + $dir = Cwd::abs_path($opts{Directory}) . '/'; if ($prefix) { if (substr($dir, -length($prefix)) ne $prefix) { throw Error::Simple("rev-parse confused me - $dir does not have trailing $prefix"); @@ -223,7 +219,7 @@ sub repository { throw Error::Simple("fatal: Not a git repository: $dir"); } - $opts{Repository} = abs_path($dir); + $opts{Repository} = Cwd::abs_path($dir); } delete $opts{Directory}; @@ -408,10 +404,12 @@ sub command_bidi_pipe { my $cwd_save = undef; if ($self) { shift; - $cwd_save = cwd(); + require Cwd; + $cwd_save = Cwd::cwd(); _setup_git_cmd_env($self); } - $pid = open2($in, $out, 'git', @_); + require IPC::Open2; + $pid = IPC::Open2::open2($in, $out, 'git', @_); chdir($cwd_save) if $cwd_save; return ($pid, $in, $out, join(' ', @_)); } @@ -538,7 +536,8 @@ sub get_tz_offset { my $t = shift || time; my @t = localtime($t); $t[5] += 1900; - my $gm = timegm(@t); + require Time::Local; + my $gm = Time::Local::timegm(@t); my $sign = qw( + + - )[ $gm <=> $t ]; return sprintf("%s%02d%02d", $sign, (gmtime(abs($t - $gm)))[2,1]); } @@ -629,7 +628,8 @@ sub hooks_path { my ($self) = @_; my $dir = $self->command_oneline('rev-parse', '--git-path', 'hooks'); - my $abs = abs_path($dir); + require Cwd; + my $abs = Cwd::abs_path($dir); return $abs; } @@ -1353,6 +1353,7 @@ sub _temp_cache { my $n = $name; $n =~ s/\W/_/g; # no strange chars + require File::Temp; ($$temp_fd, $fname) = File::Temp::tempfile( "Git_${n}_XXXXXX", UNLINK => 1, DIR => $tmpdir, ) or throw Error::Simple("couldn't open new temp file"); @@ -1375,9 +1376,9 @@ sub temp_reset { truncate $temp_fd, 0 or throw Error::Simple("couldn't truncate file"); - sysseek($temp_fd, 0, SEEK_SET) and seek($temp_fd, 0, SEEK_SET) + sysseek($temp_fd, 0, Fcntl::SEEK_SET()) and seek($temp_fd, 0, Fcntl::SEEK_SET()) or throw Error::Simple("couldn't seek to beginning of file"); - sysseek($temp_fd, 0, SEEK_CUR) == 0 and tell($temp_fd) == 0 + sysseek($temp_fd, 0, Fcntl::SEEK_CUR()) == 0 and tell($temp_fd) == 0 or throw Error::Simple("expected file position to be reset"); } From patchwork Sun May 23 08:56:17 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= X-Patchwork-Id: 12274817 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 4331FC47082 for ; Sun, 23 May 2021 08:56:41 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 157BF6100B for ; Sun, 23 May 2021 08:56:41 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231738AbhEWI6F (ORCPT ); Sun, 23 May 2021 04:58:05 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36850 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231721AbhEWI6A (ORCPT ); Sun, 23 May 2021 04:58:00 -0400 Received: from mail-wr1-x432.google.com (mail-wr1-x432.google.com [IPv6:2a00:1450:4864:20::432]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2A078C06138E for ; Sun, 23 May 2021 01:56:33 -0700 (PDT) Received: by mail-wr1-x432.google.com with SMTP id p7so21572312wru.10 for ; Sun, 23 May 2021 01:56:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=CcqQsIoDgyi1uRVQSNdjT00K+sIWr/Tsq0tsQUXX18Y=; b=qvouc1HQ6YFw8Rtyb2bA4PHMjGG7LZGgJRQnqsa8FCpOAH6l4M/1YNRdkDVi+daR3G lCgTrXScCexl6vD3/lvbMNo9sRWr0EAIu1Cy9++zM9vURYk44Lr6HGjoRj1lIm3wtrbM W7cNpTL/hppmMRn8yB4rcoky/ZbbTvY3G2IJgyZg6iUK7JSw4bMsBMzJgcS4vTYkx+67 9wdOdbeVJt62jMPbhLE8GDnoIwmiSCpkfHxxK1jwIZKqrfVTNLG50j/wvFM92tA/Zp61 QmbUN62uPYBtkHHQvRD1iSQiFD7F8D0VLFp6Fjj5RAKeG9askqUE3YwvBry+ZOLom0BV ImzQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=CcqQsIoDgyi1uRVQSNdjT00K+sIWr/Tsq0tsQUXX18Y=; b=c761z3MxeIxr9xUer8tpqzBnB5p5sYSrpeW/eO5Uv5IgqhlgQVgbHHcFoUWznx6TTl 4jST46gfMR19+rbWnoiI8om3j8xV9sqCM1ZvwZGPTJhElrHqKgrF/vM/dn0IxGLr9prC 5lFF9RauQIx6BZykAKUmJBAOWuMsR/svQ87Ez2ZOxd3K0RysSyOk0UKRs2sq/4364+ZO NItXIkgo8e5JwY5HZiKzuFycQy3ixGyRm4DIQ8anj2UacjpurSKCfwiP+W9E2qEkMyXG tzGTpueVYxiC22uCBat7A713IWoDzNsrHRvWtlqKrtqRU+SNUduZLFXuGVelAOJVUMEu Kd/Q== X-Gm-Message-State: AOAM532IWabnfzY9ofLqK+iW7PHrRipzSLvnNEMCsWtApyVg9AIzVZqZ Zk8ghnS4euGDxeQr54SupR8E8cDzNXAOC65F X-Google-Smtp-Source: ABdhPJxiWfbjoCJjs5+w3EHQZF4NSaIUXMf3BQb3BbBTMDleGhdy/I4Cvd/SKzd5Vvpaiio+uoDemA== X-Received: by 2002:a05:6000:1189:: with SMTP id g9mr16833973wrx.385.1621760191446; Sun, 23 May 2021 01:56:31 -0700 (PDT) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id s15sm9577839wrt.54.2021.05.23.01.56.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 May 2021 01:56:30 -0700 (PDT) From: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= To: git@vger.kernel.org Cc: Junio C Hamano , Gregory Anders , =?utf-8?b?xJBvw6BuIFRy4bqnbiBDw7RuZyBEYW5o?= , Jeff King , Eric Sunshine , Eric Wong , Felipe Contreras , =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= Subject: [PATCH v3 12/13] send-email: move trivial config handling to Perl Date: Sun, 23 May 2021 10:56:17 +0200 Message-Id: X-Mailer: git-send-email 2.32.0.rc0.406.g05cb3eebfc In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Optimize the startup time of git-send-email by using an amended config_regexp() function to retrieve the list of config keys and values we're interested in. For boolean keys we can handle the [true|false] case ourselves, and the "--get" case didn't need any parsing. Let's leave "--path" and other "--bool" cases to "git config". I'm not bothering with the "undef" or "" case (true and false, respectively), let's just punt on those and others and have "git config --type=bool" handle it. This brings the runtime of "git send-email" from ~60-~70ms to a very steady ~40ms on my test box. We now run just one "git config" invocation on startup instead of 8, the exact number will differ based on the local sendemail.* config. I happen to have 8 of those set. This brings the runtime of t9001-send-email.sh from ~13s down to ~12s for me. The change there is less impressive as many of those tests set various config values, and we're also getting to the point of diminishing returns for optimizing "git send-email" itself. Signed-off-by: Ævar Arnfjörð Bjarmason diff --git a/git-send-email.perl b/git-send-email.perl index 1e9273fd4f..1ea4d9589d 100755 --- a/git-send-email.perl +++ b/git-send-email.perl @@ -324,7 +324,11 @@ sub read_config { my $target = $config_bool_settings{$setting}; my $key = "$prefix.$setting"; next unless exists $known_keys->{$key}; - my $v = Git::config_bool(@repo, $key); + my $v = (@{$known_keys->{$key}} == 1 && + (defined $known_keys->{$key}->[0] && + $known_keys->{$key}->[0] =~ /^(?:true|false)$/s)) + ? $known_keys->{$key}->[0] eq 'true' + : Git::config_bool(@repo, $key); next unless defined $v; next if $configured->{$setting}++; $$target = $v; @@ -353,14 +357,12 @@ sub read_config { my $key = "$prefix.$setting"; next unless exists $known_keys->{$key}; if (ref($target) eq "ARRAY") { - my @values = Git::config(@repo, $key); - next unless @values; + my @values = @{$known_keys->{$key}}; next if $configured->{$setting}++; @$target = @values; } else { - my $v = Git::config(@repo, $key); - next unless defined $v; + my $v = $known_keys->{$key}->[0]; next if $configured->{$setting}++; $$target = $v; } @@ -371,12 +373,19 @@ sub config_regexp { my ($regex) = @_; my @ret; eval { - @ret = Git::command( + my $ret = Git::command( 'config', - '--name-only', + '--null', '--get-regexp', $regex, ); + @ret = map { + # We must always return ($k, $v) here, since + # empty config values will be just "key\0", + # not "key\nvalue\0". + my ($k, $v) = split /\n/, $_, 2; + ($k, $v); + } split /\0/, $ret; 1; } or do { # If we have no keys we're OK, otherwise re-throw @@ -389,8 +398,10 @@ sub config_regexp { # parses 'bool' etc.) by only doing so for config keys that exist. my %known_config_keys; { - my @known_config_keys = config_regexp("^sende?mail[.]"); - @known_config_keys{@known_config_keys} = (); + my @kv = config_regexp("^sende?mail[.]"); + while (my ($k, $v) = splice @kv, 0, 2) { + push @{$known_config_keys{$k}} => $v; + } } # sendemail.identity yields to --identity. We must parse this --- git-send-email.perl | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/git-send-email.perl b/git-send-email.perl index 1e9273fd4f..1ea4d9589d 100755 --- a/git-send-email.perl +++ b/git-send-email.perl @@ -324,7 +324,11 @@ sub read_config { my $target = $config_bool_settings{$setting}; my $key = "$prefix.$setting"; next unless exists $known_keys->{$key}; - my $v = Git::config_bool(@repo, $key); + my $v = (@{$known_keys->{$key}} == 1 && + (defined $known_keys->{$key}->[0] && + $known_keys->{$key}->[0] =~ /^(?:true|false)$/s)) + ? $known_keys->{$key}->[0] eq 'true' + : Git::config_bool(@repo, $key); next unless defined $v; next if $configured->{$setting}++; $$target = $v; @@ -353,14 +357,12 @@ sub read_config { my $key = "$prefix.$setting"; next unless exists $known_keys->{$key}; if (ref($target) eq "ARRAY") { - my @values = Git::config(@repo, $key); - next unless @values; + my @values = @{$known_keys->{$key}}; next if $configured->{$setting}++; @$target = @values; } else { - my $v = Git::config(@repo, $key); - next unless defined $v; + my $v = $known_keys->{$key}->[0]; next if $configured->{$setting}++; $$target = $v; } @@ -371,12 +373,19 @@ sub config_regexp { my ($regex) = @_; my @ret; eval { - @ret = Git::command( + my $ret = Git::command( 'config', - '--name-only', + '--null', '--get-regexp', $regex, ); + @ret = map { + # We must always return ($k, $v) here, since + # empty config values will be just "key\0", + # not "key\nvalue\0". + my ($k, $v) = split /\n/, $_, 2; + ($k, $v); + } split /\0/, $ret; 1; } or do { # If we have no keys we're OK, otherwise re-throw @@ -389,8 +398,10 @@ sub config_regexp { # parses 'bool' etc.) by only doing so for config keys that exist. my %known_config_keys; { - my @known_config_keys = config_regexp("^sende?mail[.]"); - @known_config_keys{@known_config_keys} = (); + my @kv = config_regexp("^sende?mail[.]"); + while (my ($k, $v) = splice @kv, 0, 2) { + push @{$known_config_keys{$k}} => $v; + } } # sendemail.identity yields to --identity. We must parse this From patchwork Sun May 23 08:56:18 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= X-Patchwork-Id: 12274819 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 3A790C47080 for ; Sun, 23 May 2021 08:56:43 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 1ABC9610C8 for ; Sun, 23 May 2021 08:56:43 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231742AbhEWI6G (ORCPT ); Sun, 23 May 2021 04:58:06 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36836 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231728AbhEWI6B (ORCPT ); Sun, 23 May 2021 04:58:01 -0400 Received: from mail-wr1-x42a.google.com (mail-wr1-x42a.google.com [IPv6:2a00:1450:4864:20::42a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 019B8C06138F for ; Sun, 23 May 2021 01:56:34 -0700 (PDT) Received: by mail-wr1-x42a.google.com with SMTP id q5so25280661wrs.4 for ; Sun, 23 May 2021 01:56:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=1LRloA5jbWOWCIZFXLZ6FANZWgBZkMT0RGdVlQzw9ZQ=; b=pxDIYXLXxVTi1b9fzxX7wd9GcomNfGdRVokpbbB82gE+r9svoXWdb/4jYfzZsqXFAP XfBj25Nsi0TNj1v4fWOrtYhc4Ija/ymbfj0kRgct6AF9Cl+1ZfO1O9W+2TOk0tO5S74J sGv16Jd/rjmCh9BIQ6EegntimFWf/DAUEHQoDRrFlA7hzTh1/+7Rl/OOcNkNlcPpebbH 4AQl/+imF3IafD4zc4eW52SJ67H30djMk6T7vC3Rc0o1QVg7L2c5ZqEdALxgplaICKWJ yjVzns+zkfwCqpUlu9+g04B2TetCUnqo/T1nP7pI0awp7k5T4rBsZnEsduYOZagEINOD K19Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=1LRloA5jbWOWCIZFXLZ6FANZWgBZkMT0RGdVlQzw9ZQ=; b=GGAlB5SPu4UJILcgI5KVs1CEFYei2uy8t8bXyAatqrjPHks/mOSfOqcEydU0gvd1vK R1feL0kamDdvT4prw5NXbcsRQxG/HIGvwIMPVifLVL5wgYMzm+7cbEVQ3Qk3rfuyE4sb dsVlvy/vciiwrVxSuWlo0iNbvYmqtto2EeSK5pCLkbEIcNL3pa5nH8U2zImwllmSQ4bv 6n0qFyn53LQyF6zpHm7mCmAr1h4K8ziq0y0jhIewWkPnvnhX2PgqNTCk8H0wUTX17xNz sztz34MR8LrbBMdNq4fBawwTvVGHnbFz4Uy5l1P9+Q2I6JlRO7KdHSdzf0OU6TWlkL61 BVjg== X-Gm-Message-State: AOAM5323N4JL65kqAVqKTZGXmbPs9kMmFlTcz9XvAo0iW+5B+rWcQp4H ECwmsQuhWcRYopE91ySzk7ry9rU5y73B+S0A X-Google-Smtp-Source: ABdhPJzjR1kPELiBeuyfUOKQphqDNeCN9I3zREX7SylA+cnxUx1DlmJEzfcqlvj8ubTRvXsjH82OYA== X-Received: by 2002:a5d:45c6:: with SMTP id b6mr17016154wrs.333.1621760192389; Sun, 23 May 2021 01:56:32 -0700 (PDT) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id s15sm9577839wrt.54.2021.05.23.01.56.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 May 2021 01:56:31 -0700 (PDT) From: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= To: git@vger.kernel.org Cc: Junio C Hamano , Gregory Anders , =?utf-8?b?xJBvw6BuIFRy4bqnbiBDw7RuZyBEYW5o?= , Jeff King , Eric Sunshine , Eric Wong , Felipe Contreras , =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= Subject: [PATCH v3 13/13] perl: nano-optimize by replacing Cwd::cwd() with Cwd::getcwd() Date: Sun, 23 May 2021 10:56:18 +0200 Message-Id: X-Mailer: git-send-email 2.32.0.rc0.406.g05cb3eebfc In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org It has been pointed out[1] that cwd() invokes "pwd(1)" while getcwd() is a Perl-native XS function. For what we're using these for we can use getcwd(). The performance difference is miniscule, we're saving on the order of a millisecond or so, see [2] below for the benchmark. I don't think this matters in practice for optimizing git-send-email or perl execution (unlike the patches leading up to this one). But let's do it regardless of that, if only so we don't have to think about this as a low-hanging fruit anymore. 1. https://lore.kernel.org/git/20210512180517.GA11354@dcvr/ 2. $ perl -MBenchmark=:all -MCwd -wE 'cmpthese(10000, { getcwd => sub { getcwd }, cwd => sub { cwd }, pwd => sub { system "pwd >/dev/null" }})' (warning: too few iterations for a reliable count) Rate pwd cwd getcwd pwd 982/s -- -48% -100% cwd 1890/s 92% -- -100% getcwd 10000000000000000000/s 1018000000000000000% 529000000000000064% - Signed-off-by: Ævar Arnfjörð Bjarmason --- git-send-email.perl | 2 +- perl/Git.pm | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/git-send-email.perl b/git-send-email.perl index 1ea4d9589d..c6af05e8a3 100755 --- a/git-send-email.perl +++ b/git-send-email.perl @@ -2007,7 +2007,7 @@ sub validate_patch { require Cwd; my $target = Cwd::abs_path($fn); # The hook needs a correct cwd and GIT_DIR. - my $cwd_save = Cwd::cwd(); + my $cwd_save = Cwd::getcwd(); chdir($repo->wc_path() or $repo->repo_path()) or die("chdir: $!"); local $ENV{"GIT_DIR"} = $repo->repo_path(); diff --git a/perl/Git.pm b/perl/Git.pm index 4d048f307b..863bd80694 100644 --- a/perl/Git.pm +++ b/perl/Git.pm @@ -405,7 +405,7 @@ sub command_bidi_pipe { if ($self) { shift; require Cwd; - $cwd_save = Cwd::cwd(); + $cwd_save = Cwd::getcwd(); _setup_git_cmd_env($self); } require IPC::Open2;