From patchwork Mon May 24 07:52:50 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: 12275609 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.8 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 D2FA1C04FF3 for ; Mon, 24 May 2021 07:53:16 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id A8CEF610CB for ; Mon, 24 May 2021 07:53:16 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232406AbhEXHym (ORCPT ); Mon, 24 May 2021 03:54:42 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55468 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232295AbhEXHyh (ORCPT ); Mon, 24 May 2021 03:54:37 -0400 Received: from mail-wm1-x332.google.com (mail-wm1-x332.google.com [IPv6:2a00:1450:4864:20::332]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 40590C061574 for ; Mon, 24 May 2021 00:53:08 -0700 (PDT) Received: by mail-wm1-x332.google.com with SMTP id l18-20020a1ced120000b029014c1adff1edso10889828wmh.4 for ; Mon, 24 May 2021 00:53:08 -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=nMCxiDw4EQgbaIBNco5GEB3n+7Mn1STtu8Yen9X/6Xc=; b=bAJ69DW7ukA2k+annVjoMjO3WIUu48KNtklope2VWe/Ru5Bp/GWPWbPRkOSPKgJeJt qUy5ZXGxXVcMRI3Mq0HiKuS8jBxf72qUMjRFBdGomlPNPIU1vBmHnbX9/tggYJUk9X5Y A41345Ow15Lc9X8KMw9Xx16R21X8uHQNL2kHHN0BmIXtrxDT+1Lx5wEYBjQonojeYEHy Bs7tfDwnmZMSD3qYC7hZ6+MOG/uJ9KkG9c3uaJCtQF/6svPpgL1h6/FFJr9WBRUTzfTq l5k1k+eBj/ZsPD0LTNYsvgFiXfnqDPwUHTiR870jskv/QqP0Ls2clfExsni2rUZc9bSp /SdQ== 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=nMCxiDw4EQgbaIBNco5GEB3n+7Mn1STtu8Yen9X/6Xc=; b=ZFNaoY1BHx94uS8pinmRbdwe9D0Ywv4BtXz2WDg22JXgqcMbZgI4hHp/ZVd5hXLoej /jl5zdk5EXyzj8vmncLEZX2hMDRvF0VYjnWO29G0qw7AiusiywL0856oJ3IM/vXBLm3u Adou7Ym19aP0kXfwI+WDOmK0sL0FS95caufymSA7nf5P3PGnL4Fd4uuaHgLmSJbj1rYi jhcZH3kBYr7uvoKZQEGz4dgY2z+mk0Wl+pFt5H+YjdsMj7hh833zblDAq+TvtUsgetFn RAlSlaIa3i391e3XWHKtvY0hHLl1IiJzAsmzk7YgS2zonQ+dF9E3fGj3+FV5EmfGmtqr DeJQ== X-Gm-Message-State: AOAM530Vj2UwAyRZ3U7+abAFghvHWXRlpp8T36sa50nTbLJjYpvOvJpp ZTTjrgyJtqjNkuqcvf4k0uK92AG7phawBv5y X-Google-Smtp-Source: ABdhPJxj3WhnhUxcnEgLuyzE1ctFtoMnOFQiCWlgLaui8S4k/G/xg/uT4qsTbVqezhin94fB6gK5Rg== X-Received: by 2002:a05:600c:2054:: with SMTP id p20mr19209098wmg.165.1621842786577; Mon, 24 May 2021 00:53:06 -0700 (PDT) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id u126sm8540459wmb.9.2021.05.24.00.53.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 May 2021 00:53:06 -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 v4 01/13] send-email tests: support GIT_TEST_PERL_FATAL_WARNINGS=true Date: Mon, 24 May 2021 09:52:50 +0200 Message-Id: X-Mailer: git-send-email 2.32.0.rc1.385.g46e826f1e55 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 175da07d946..cffdfdacfb9 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 Mon May 24 07:52:51 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: 12275611 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.8 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 CDEFCC04FF3 for ; Mon, 24 May 2021 07:53:18 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id ABC84610C7 for ; Mon, 24 May 2021 07:53:18 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232416AbhEXHyo (ORCPT ); Mon, 24 May 2021 03:54:44 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55474 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232266AbhEXHyi (ORCPT ); Mon, 24 May 2021 03:54:38 -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 2AB44C061756 for ; Mon, 24 May 2021 00:53:09 -0700 (PDT) Received: by mail-wm1-x333.google.com with SMTP id l18-20020a1ced120000b029014c1adff1edso10889853wmh.4 for ; Mon, 24 May 2021 00:53:09 -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=uaVkme/NdOkhzzrlmY82ejiFPLnrDxis0DwYi9zGQh8=; b=fUOgEIRAca6qO/hRKgzyN5+hhWld5hPJ6LFVY70Kwp+XD37tUtGgevRgeYYlUZ1elG MUY6hq2FMG7Sri9yuZnunKZj1gWt1T/rtN/kM4ZPu5oF8l+X7lJm5e5l03FkRWWslJtA C0LUWmctFhQ8jIDJZGzAa+p2lO5FUo5q6rS7FdB1HuX4i7fVBLAcPmV6vFppMwx+ObPR j0oAufeLLt5t4wHoq2qVynXuTj/R/CmBsWEf+ah9l0/UfKj8wD2tpjjfT6Z9OCUJG8TC KDmF7vCpnsXXEia0HCqHH4wtesBrWYeDEeKZnk+nl5a1shVbDOzYq7UVLgT/rHBzqEzf MuTA== 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=uaVkme/NdOkhzzrlmY82ejiFPLnrDxis0DwYi9zGQh8=; b=TrTt32g2ZKwucmkuhkyBQjV4rmTdMnILrnqMhroezXiqLQOx/33q2JpHjXAT3BrhUU U2pA9LgEXUIQd44PHhkfKvgj/oF8b8I7bAxfg3jhW5xnZTqoFDkq5QJ3B64fswPZMc/W 53TL8Xg48ZARBBIrvPy1wS4rAjjvTsxgAxFGqtrlFO+JhXNXTN51uhQJXCw09lKJZmce z8k4HBfS7eW2XzdwceUk7CJVoH4fqxHgbpz1PYJ7vzDTcMj5ZUdzozNQQp/4g0yCbq/C dMk3BHjYBVjbCl93nxOXwhh4QUilH7zZfIram75TSMYOt9tVfAPeexu8qNfL8UiSG6Lq obNw== X-Gm-Message-State: AOAM5332ML3zQO36H47XT5npN46z+6N271tAv3+i9njM6hIPnrY0JTFA 15+RzFqSjHJg1piVTH0Yh+u4/gqnkgNifOPQ X-Google-Smtp-Source: ABdhPJysNWzjCPdkSMAJoecHuclGllLVvbz1cG6RiF0q3RRGE3fOtKbs/Hyvh82Hr++gRCL6g4PKvw== X-Received: by 2002:a7b:c847:: with SMTP id c7mr18652653wml.168.1621842787550; Mon, 24 May 2021 00:53:07 -0700 (PDT) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id u126sm8540459wmb.9.2021.05.24.00.53.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 May 2021 00:53:07 -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 v4 02/13] send-email tests: test for boolean variables without a value Date: Mon, 24 May 2021 09:52:51 +0200 Message-Id: X-Mailer: git-send-email 2.32.0.rc1.385.g46e826f1e55 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 65b30353719..6bf79c816a6 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 Mon May 24 07:52:52 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: 12275613 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.8 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 60A19C47083 for ; Mon, 24 May 2021 07:53:20 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 4176161151 for ; Mon, 24 May 2021 07:53:20 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232382AbhEXHyq (ORCPT ); Mon, 24 May 2021 03:54:46 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55478 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232347AbhEXHyi (ORCPT ); Mon, 24 May 2021 03:54:38 -0400 Received: from mail-wm1-x32a.google.com (mail-wm1-x32a.google.com [IPv6:2a00:1450:4864:20::32a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 15D82C06138A for ; Mon, 24 May 2021 00:53:10 -0700 (PDT) Received: by mail-wm1-x32a.google.com with SMTP id u133so14400097wmg.1 for ; Mon, 24 May 2021 00:53:10 -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=dTN/s2phJJug/whbzoAGub3ykTCtikWBaAvewwao3XE=; b=eS4U5S9pULANoWDRsrmoCwbWdlMf+nJYCix6TAJ5KCEdQcuj30oUPoFGJnZGfRBmoB wxv3pkcpvmOvJOxY1ulC3VexukPPsAkL0oiTVWm/Wd6CtBZfsYkYb1krF31JZJ8rIjz9 49wBwx2CMy0lRgiiTz1DFE1Xnu5yLjNtvrmRBKe19MAKc512J2QigPxug2wivlNcc0IQ nkIYF1oioFvMvk/sFV2UxMdcAslkiVceIyp1QFf2w2prL4iherIE+pFP+6XP0Dg+ypBi Ly7NQEGb0SDYw+yHWYfsTYyPTmAZtXlRCELHLc4qhP+XppcCaNtYs2oten1C3jrSV95L RX7w== 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=dTN/s2phJJug/whbzoAGub3ykTCtikWBaAvewwao3XE=; b=MUPzjz6Eq96YdE3yW+KCcp7v1WSOnSpB4mKsnZsl2mtNKFQ7qgJQI4qmi82jjNsml0 wcofOk+oAZm/P0RY7C8BWhReNbPoQKhqX1VPrFVv4Wqpvfwq0dtzDLN6wx/7vWFiClXR Plp1wOvgUfZK1vAjMnjbomFaPrRXA1COvcpciRaZx+jKAplmYlyesatfCDhw6YRBdm9K d5NJjG+48CSU/KRaAyn9uaV45NS16oRlxT9IZXr64Y9UGqxi6DB4QjD4oa4oPcDZrA/9 etOc+/6RDrfs+Ie7vcU9Qb3awHo/tTiExWmnMaHXP+phj6CWI6Z1OwtmSifLOvMwye2+ 5zNQ== X-Gm-Message-State: AOAM531gtrGvxYpibh6jPMnIcOpj5++uMYZt5T8KBfvpXRo1Ke1j89N/ j+H2CVZ5kBiFPfx2pKSk1m3y4qJNxwtDCbuP X-Google-Smtp-Source: ABdhPJxIYWtw0fiG873n1OKCJhv7b/DN8wiV099FhofB6b6kuQV9QzE58ogXdI/6mQTbkW8tQJDY7w== X-Received: by 2002:a1c:4043:: with SMTP id n64mr18771175wma.9.1621842788370; Mon, 24 May 2021 00:53:08 -0700 (PDT) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id u126sm8540459wmb.9.2021.05.24.00.53.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 May 2021 00:53:08 -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 v4 03/13] send-email: remove non-working support for "sendemail.smtpssl" Date: Mon, 24 May 2021 09:52:52 +0200 Message-Id: X-Mailer: git-send-email 2.32.0.rc1.385.g46e826f1e55 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 cbc5af42fdf..50baa5d6bfb 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 cffdfdacfb9..24d73df5a3e 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 Mon May 24 07:52:53 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: 12275615 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.8 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 2FDADC47084 for ; Mon, 24 May 2021 07:53:22 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 149E26120A for ; Mon, 24 May 2021 07:53:22 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232408AbhEXHyr (ORCPT ); Mon, 24 May 2021 03:54:47 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55480 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232377AbhEXHyj (ORCPT ); Mon, 24 May 2021 03:54:39 -0400 Received: from mail-wm1-x32c.google.com (mail-wm1-x32c.google.com [IPv6:2a00:1450:4864:20::32c]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id ADB47C061574 for ; Mon, 24 May 2021 00:53:10 -0700 (PDT) Received: by mail-wm1-x32c.google.com with SMTP id f75-20020a1c1f4e0000b0290171001e7329so10457767wmf.1 for ; Mon, 24 May 2021 00:53:10 -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=w9AcjIYqKmFcagt4/PES6mLGK4BT9EqzTlgwGxsC3vs=; b=Zt/E7aTZ2DnH9IrWYkfvx0ylEU7Qnhw1Ejexi3yF28hCFsfVPDt70+LcwNiKXeWbrU l8+Moe+84JIgDx6a6KEm4bbKmoLQJxKaRotzybIoxQhxD9IYa+Uw6THPXXdSnh91Y4BX 6pE+PQKHA8VuuvrN/ncO2yKJNIdXtopWaPl7v//fo6e0z/3oTg0jlwgyrti9Yssf9DRe ptI0iV9ZJObNZFr5ZiKAiZTMYEdihTu4kRY184LXzAPfM/qeSfIcriQbu7hXmE83wjKg pz769k9nm2d3QVbS+DOgRe+VCUxQ8DZwK+j/SmgkKFzBDX7zOqwye43TatZuiqg25Bnt jHEg== 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=w9AcjIYqKmFcagt4/PES6mLGK4BT9EqzTlgwGxsC3vs=; b=Ues1r+q2YAOZqq15FLJ4+l/5oVWR0AaQDXL+G8uEyACLHOrbM4cKapvdPz4KWl2zJA uAK69ARWIf++vVsYTD31AkZY1trwDgF8/2fS4YCHJfYjG0Ql3rf6FgbVEsDqF8D555kt JpE5Og2dDbPOTeovq3ZJDO5oPp4wErLB8D6A6zi7vIGcG1avkvXbtdEhYsfpYcBF3/eZ hbsWU5gTBmfrWgKiZVUrDrmMt8w+myLAz6MqYJ+XgajK5/16dTEsJPZbowxty5zroUjA bieTztu9iaRNbJ99lSelVN4YHpCYwJD5uHf5G370eK/NhaTcAK2Nalj70ppkWHTo8UtT GeSQ== X-Gm-Message-State: AOAM532Emtv4HkqfJpbTMTSvisXXdJNdzVlPKV82JKEb3iLNXigNP3Da eEqFXuL+PbvGDCfUnu2WKFgZVoxSIAG9EQkx X-Google-Smtp-Source: ABdhPJySQZpVraVZ6t73Q/WIQvwp6vhHsL+q8+rsO09qRmjb/nRz928egJeqjSgxIrGR30licRQU2A== X-Received: by 2002:a1c:f316:: with SMTP id q22mr18373458wmq.152.1621842789118; Mon, 24 May 2021 00:53:09 -0700 (PDT) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id u126sm8540459wmb.9.2021.05.24.00.53.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 May 2021 00:53:08 -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 v4 04/13] send-email: refactor sendemail.smtpencryption config parsing Date: Mon, 24 May 2021 09:52:53 +0200 Message-Id: X-Mailer: git-send-email 2.32.0.rc1.385.g46e826f1e55 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 24d73df5a3e..3d8362b5f07 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 Mon May 24 07:52:54 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: 12275621 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.8 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 BD4EDC47084 for ; Mon, 24 May 2021 07:53:28 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 9BF35610CB for ; Mon, 24 May 2021 07:53:28 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232450AbhEXHyy (ORCPT ); Mon, 24 May 2021 03:54:54 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55490 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232401AbhEXHyl (ORCPT ); Mon, 24 May 2021 03:54:41 -0400 Received: from mail-wr1-x430.google.com (mail-wr1-x430.google.com [IPv6:2a00:1450:4864:20::430]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7EED3C061756 for ; Mon, 24 May 2021 00:53:11 -0700 (PDT) Received: by mail-wr1-x430.google.com with SMTP id p7so23770191wru.10 for ; Mon, 24 May 2021 00:53:11 -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=QdFLprq+Ozwp2Gg9PeKD5KBYE+gU65EEKjG/hgCM4uc=; b=URoSCZydDNmkmPkiF0wlFWTB6EwfkkblRRtwvnyaXF5Q7OYc86NHiYDHCFphXX64Ym /kW+WEsQgh/YehJK2iaeC+4yhntjg1BQ6F93XYJpw/fBrQNNIDOFe+Oc79uT02Hy1hNO zwvmfdYg4Y8dSbIEIVbnM1kKpXY6wk0uFfHx+KSbQMTBQU9DzSnnwkMAQcc0b19B89TH bp+m3yjd+UWncax4W3zXXz5XZFIo9NsHEOrpUvtXdUwdnaZqxWvinnhyzECht2Bcgz0U HIad7F8ac5qNVmZGo1DaeVmbopttQqyv/iUcxy7O/HbB8RBR0RVelLPVIM86Y/vigCXE lfCg== 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=QdFLprq+Ozwp2Gg9PeKD5KBYE+gU65EEKjG/hgCM4uc=; b=M3P7Ke0EHheLQ7JhOhcGrp80zQY8oleeyr9vzWdBCvjW1vtG6X86VbX6iNzlGY/fQP IwZRZ63TWW4YpawAmFdCIZU2Ayl6bvwtrnY67HVXz6Zlj3ecEQMmzU/o8QxWjyqp/WRE 6lLzhZFne6Wg24gpR89aqsrqDuBgXziQDUjHUOzpSqa/O4SRDqg0bynK0i//GZTzq4th gHeUcZ5wAJkBEGX0WJcQw/yF1qEzKW1a+G/dAvyN+t14sIvD00bvo0JM0eKJtB5YBKLE u7MjumpVtz9fsLrNQi5W9bcLqGgP/X7vMD+qvS2kamviPsX2w5c0xZWAuBxDwPvkVBn2 TKbQ== X-Gm-Message-State: AOAM533bVo8HwWbGEc12pE713IkrFPj9F4bAD1LQ2Ixj8G8PhtQnT2M5 p2D8tFlLIorPdQ6B3oQ7ipuhFVnn0A8A6LoM X-Google-Smtp-Source: ABdhPJwJ0aaWbNFSSeUgoxylT2nlHYYlvqdCQyIjN/zpKN3elgM0KxichXXXJOxDuNBq+GlH0SRpVw== X-Received: by 2002:adf:fd81:: with SMTP id d1mr20926229wrr.37.1621842789933; Mon, 24 May 2021 00:53:09 -0700 (PDT) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id u126sm8540459wmb.9.2021.05.24.00.53.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 May 2021 00:53:09 -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 v4 05/13] send-email: copy "config_regxp" into git-send-email.perl Date: Mon, 24 May 2021 09:52:54 +0200 Message-Id: X-Mailer: git-send-email 2.32.0.rc1.385.g46e826f1e55 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 3d8362b5f07..95a69d4c51f 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 Mon May 24 07:52:55 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: 12275619 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.8 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 C8C62C47080 for ; Mon, 24 May 2021 07:53:27 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id A38AC610C7 for ; Mon, 24 May 2021 07:53:27 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232447AbhEXHyw (ORCPT ); Mon, 24 May 2021 03:54:52 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55492 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232387AbhEXHyl (ORCPT ); Mon, 24 May 2021 03:54:41 -0400 Received: from mail-wr1-x42b.google.com (mail-wr1-x42b.google.com [IPv6:2a00:1450:4864:20::42b]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 58F92C06138A for ; Mon, 24 May 2021 00:53:12 -0700 (PDT) Received: by mail-wr1-x42b.google.com with SMTP id d11so27466802wrw.8 for ; Mon, 24 May 2021 00:53:12 -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=QMS0qe/boVAfFtq8AkN2SP76v6HsO9IppOQOvIxbmvY=; b=ZxsJws4r28f08+LI7Jju+ZFg0GeJ4PNVFFe//suiioxzisEsJBD7H50SY/idu6zjcZ U63Hle7ZaW1HwjLdx5qYl0JFeZ99S02V0h0ApPZFU6ZOQykcDaJfraPL2x34USScYGYr h3Og2rzqf92aX3QCvMDcaCic8vhfKpkEr/A4UXGfMaUNv6aWDFZfFybvhQFQy8uomE2D v7oR9d7Z46E9g9VJHZ9JN3D1IrRxcHJfx8wa0LU8DKn+G8yqv77CkbO0bG3eulhDdFG3 aMbNsn2XtpUX6VO4owP9o/XDnDiWYSpseZjVFNuFFiyCg8h3SAeLV3Q8IeFqAerxXiwL mnGg== 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=QMS0qe/boVAfFtq8AkN2SP76v6HsO9IppOQOvIxbmvY=; b=smtvCtsI7AiVHcoFkY00qc09ci4AjnAKMQUWYZYN2FoMeKGnQPm5ycX4l4YnUOZ6XK f4abbvu4JNPS8lTsa3d+qklErvFV/WMtYrfoXvlQ58xdEeajY7FVQtER6vRiTF85/3To K9dO/MTlnvwySrEyWT9u1UCfTdrCtGRXLnHGvwYA7JbEeABAlExc/5wA4+IwuhD1ROf0 QenB+rSIn6uPf59y/ezB2gWuckV/czUEh1zr75JMciutvIBhFlxPYZx3D1naJ5sNOX7g yWtTSCkVOstrn0Y/AIE6knTHSJnfkeFljrALYjoxsATu6fg0bF2AfJ5PCfGX5zA/paHc 4+AA== X-Gm-Message-State: AOAM531FBJNz+Otj8d9I1VR4irG4qc//IxbaIlKi1Igj5+IfuFhOOUwW TAz9dTLq8FIDxSjJDpCyxyz5vXmqx+Pp9Stw X-Google-Smtp-Source: ABdhPJwbmiP+hmrcLywm33THB0IngtG5OhuxbY27YDJCq1PQLmuCJ88ZJCwp/gcrGLQIQ1dhYWwm8A== X-Received: by 2002:adf:a35a:: with SMTP id d26mr20791353wrb.147.1621842790694; Mon, 24 May 2021 00:53:10 -0700 (PDT) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id u126sm8540459wmb.9.2021.05.24.00.53.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 May 2021 00:53:10 -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 v4 06/13] send-email: lazily load config for a big speedup Date: Mon, 24 May 2021 09:52:55 +0200 Message-Id: X-Mailer: git-send-email 2.32.0.rc1.385.g46e826f1e55 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 95a69d4c51f..d294681cf39 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 Mon May 24 07:52:56 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: 12275617 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.8 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 87451C47083 for ; Mon, 24 May 2021 07:53:23 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 6509E610CB for ; Mon, 24 May 2021 07:53:23 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232279AbhEXHyt (ORCPT ); Mon, 24 May 2021 03:54:49 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55508 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232409AbhEXHyn (ORCPT ); Mon, 24 May 2021 03:54:43 -0400 Received: from mail-wr1-x42d.google.com (mail-wr1-x42d.google.com [IPv6:2a00:1450:4864:20::42d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2443FC06138C for ; Mon, 24 May 2021 00:53:13 -0700 (PDT) Received: by mail-wr1-x42d.google.com with SMTP id r12so27487977wrp.1 for ; Mon, 24 May 2021 00:53:13 -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=WYjFULJOGIc0JTvqBMn8jvHhOJ9l2dnpvR9TfKTpmeU=; b=ppdTDtgT17YlgcVWql/i/dfGhSuLUh9JS3PFGq48w8FHeqf92tYE9pzn6yIY236L6L zTch+AA/TS/L0aWobTRw9UmgiW1wt7INNPbXMbpuR5NNL6wg55IPvwjOiHLrdX/dqnE/ hpvNN9IN+xqABB6qnYGVvFmYs1xrmNzUkygsma+5X782KfM1exfsyf4DntyPpveiLdNI jJlHJ77Fuy+f8LIn7DZEiSz1zoGAGdTZS9PT8ah9MXvUmixBipbGNx2VLAiWrQmbjQxp AGt19ok/30qt3jpegRjyilb67WsguiXJ3X1JLDGAnlgSJG//910l5Mlp5u475tEOXjYp ItgQ== 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=WYjFULJOGIc0JTvqBMn8jvHhOJ9l2dnpvR9TfKTpmeU=; b=BBmr0BbdCr6Jb6d8HzFb6orii8m6KwCRG2siyZ1nqu8jo9awg7ER2GefyRwMILU5h/ cDfKFq0i/ebIE9IKNpDAhfcttxiDKoD4jE/cTfzoQbM8jDz3yIkdnFdCPkzvKiq3G67s RvuohQ9LWlYSE1aLLfPB0s1UKTveLk709dsAGM5GvpZl9gAiebO/Li2DmGkLtt9CXZBu 9iOcAI+sU1PR9h4tZkHGS/GGy72OVGI18Zshvcs5r2dq+ihYSzpXPcCIJfC9xRADhtrs 3ISCKbY4vnwBP9RMUjLnu1u+DGduZv1vunP/jOOKibCrcNxMiyKy9Orq5u8X56ciXD2a YDlg== X-Gm-Message-State: AOAM5318xCREJWxbPY2qUqJXgRm3SOjRh+ONLsmE1KXmTN1gTu853QKi L11aQjxnSLripolFNyY5NbNBrLO5/BCenHvS X-Google-Smtp-Source: ABdhPJyatld6KzcBfOg7Zd6NZ0n+4u5R7/uPf+95elVP4v+xcFHPySgOT2AJ98X0bxjhfuqAlJav2w== X-Received: by 2002:a05:6000:1865:: with SMTP id d5mr16875699wri.126.1621842791575; Mon, 24 May 2021 00:53:11 -0700 (PDT) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id u126sm8540459wmb.9.2021.05.24.00.53.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 May 2021 00:53:10 -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 v4 07/13] send-email: lazily shell out to "git var" Date: Mon, 24 May 2021 09:52:56 +0200 Message-Id: X-Mailer: git-send-email 2.32.0.rc1.385.g46e826f1e55 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 d294681cf39..56bd5b0e50c 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 Mon May 24 07:52:57 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: 12275631 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.8 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 97F74C04FF3 for ; Mon, 24 May 2021 07:53:38 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 765D2610C7 for ; Mon, 24 May 2021 07:53:38 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232434AbhEXHzD (ORCPT ); Mon, 24 May 2021 03:55:03 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55510 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232415AbhEXHyp (ORCPT ); Mon, 24 May 2021 03:54:45 -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 07A26C06138D for ; Mon, 24 May 2021 00:53:13 -0700 (PDT) Received: by mail-wr1-x433.google.com with SMTP id j14so25739477wrq.5 for ; Mon, 24 May 2021 00:53:13 -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=xMO1tHD2ecEIx94xUNQOhjZxjAW7c/wY9QAU3b4fJv8=; b=g28XQoWtlIoZEorYJtXrWj8fpG9RGGjzXOF/+JeXN8y8iKYr6oWdnN478cf69YKAs6 0AjSBr+z49n7f1SrvteNQoefX2e3WXV6ZlsxN4BOcZld2vPf1vzOKbEGNXzLdfUaRUz3 3O9VkWpAb4oEpNXi4YN9jLJzlwJE7DGLPUeIDAv0qX3MPlii4I6fRA+sCkudCeoFFIug 8hdy3MuDLRX8EOMgW+EB9PoAR68Ug4yYtucj31ZWurmF3YVidK9DM6B6GcTl22xT9DBn blYiCd9P2NTtsRTdLKu5Hpwsqn3ST+Ag4bAi8vpZH3WuLjONbZEnxyaI9SUlTQZfNUqd F6Og== 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=xMO1tHD2ecEIx94xUNQOhjZxjAW7c/wY9QAU3b4fJv8=; b=mh2OrEv78YvhlX18rYODsa/S2HDmPcHU/iKwb5IkeOHj+5NIUSrvpWac2jfP8875iv PIyscfaOJ68KwrC3ZdNU89zvoixKWMFFE/jc5XMyvkrxdxb5DeI67DvolF4vhGQfmNSH CDERwBOvQsVupRvjKfjRVP3K+rrMODEG1pbFBtntwG8BNs6awKj2KysCuQ4lBunbUkLm LJiUjB9vob+0VzPq6Pn+VvX8Q5mke0JXQlJFO3nmp7xtwZKP9CDyNXcF2zlXeKjGCwaB tSd1nwRPqIxOlDkNLvbv+NcArSAvcpgESebm2b+SMPbhjnUfW6x5wRHKqLMVQjlsl1g1 tfrA== X-Gm-Message-State: AOAM533Km3b3zPg00eLR+8zU/+Io/BM6yIoH3aSPcmxjT/0dRskLeq2O EK4UhVHJBo7YK6c6gEyEnFapZuHb8IE+l7u9 X-Google-Smtp-Source: ABdhPJzksQOjnlLgYdaMN6/mf144/PLJsgcyRr34sz9dTw9hvrFnZ4Vjz71eh+QlTs84cvrwrBVZLA== X-Received: by 2002:a5d:4351:: with SMTP id u17mr20419959wrr.47.1621842792394; Mon, 24 May 2021 00:53:12 -0700 (PDT) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id u126sm8540459wmb.9.2021.05.24.00.53.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 May 2021 00:53:11 -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 v4 08/13] send-email: use function syntax instead of barewords Date: Mon, 24 May 2021 09:52:57 +0200 Message-Id: X-Mailer: git-send-email 2.32.0.rc1.385.g46e826f1e55 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 56bd5b0e50c..83f764a8bf9 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: 12275623 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.8 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 B36E2C04FF3 for ; Mon, 24 May 2021 07:53:30 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 95DB7611EE for ; Mon, 24 May 2021 07:53:30 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232456AbhEXHy4 (ORCPT ); Mon, 24 May 2021 03:54:56 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55518 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232411AbhEXHyn (ORCPT ); Mon, 24 May 2021 03:54:43 -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 25A33C06138F for ; Mon, 24 May 2021 00:53:14 -0700 (PDT) Received: by mail-wr1-x432.google.com with SMTP id r12so27488035wrp.1 for ; Mon, 24 May 2021 00:53:14 -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=22IHVNWW1hX0BHNHuewy05W2nm2PzCGuQmdt63jGpcs=; b=sVzLJ7Xw/oN+XLxmCsCC4wZgQr6QyLR2ZJNeHcpLmGpcWmLtzTNMxdWfs9fR0cYrNI AMMIRWJGKZ9bjyQ9hS/3k308qDfl7/b375ykzsnQa8uRVkPPjX7m9RiZXMCYtbb5nqkJ MIWMxpm+OCHEXejbHvP9Mwrkjb1QJAgYoPUvbX8haF4TMDEYb2v0BWd2bE2nlxm3wsQh Jth+MW9NWe5kkEyFr95uiZ9bRHbfHTbVXbCEBnDM9+ByZ0LZzpFTOzxComVzOgUbK1Es FxtLALrSahquYkAVaT+o/y5JueAxI3ZnnwY+C/vNKzU56f9AZnDmnzA4LCjUFq+/wBTA KVYg== 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=22IHVNWW1hX0BHNHuewy05W2nm2PzCGuQmdt63jGpcs=; b=nSraapMsvrXHFgxT5C5Z+c6JvCqmXY/XLhJJpGksHUIpioTUQmclu1JoGPLh7VMXbL tSJyXyU3mNCJEzkhOWReMFTkMaaZ/z5OJAeb58OilkNPfU/PN6GjokJ2JHQo31KM2Rh6 38DP7WeK+DmrXEZV0STs06mb5z+7qZlKCZSijm4DJckO212XNdaKKwpfQ8LwHEUEjtGf T5SdH3HRU3LsYP7jGE2EvTDtcO9UgHrqEX0Tyt2oiPx+i65j0CHdfrF7Mln9BBR9kan4 X5sXUfRB0teaGM8i5+J6DziKu6zxoIbjnSMRLFIKmbJWTEG5U73tocz5xe2r0vxk/F5B T1uQ== X-Gm-Message-State: AOAM531pTKih6S5cix9GmnzGRD5fgUn7JnwHCULKAWKx345zDAY8UjYL jj7EMqtM6RNPr220u9/9IKoZsOKaDhYhS/4a X-Google-Smtp-Source: ABdhPJzlW/+QbUEBn0whVrIRkKGJTQMIIzsPmjQ+3sMRTU/wb8QgC0RNv6MTwA3oWKv9/cT7bIgexQ== X-Received: by 2002:a5d:4e8c:: with SMTP id e12mr20819562wru.94.1621842793098; Mon, 24 May 2021 00:53:13 -0700 (PDT) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id u126sm8540459wmb.9.2021.05.24.00.53.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 May 2021 00:53:12 -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 v4 09/13] send-email: get rid of indirect object syntax Date: Mon, 24 May 2021 09:52:58 +0200 Message-Id: X-Mailer: git-send-email 2.32.0.rc1.385.g46e826f1e55 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 83f764a8bf9..f1542cb3ea6 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 Mon May 24 07:52:59 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: 12275625 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.8 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 DCF84C04FF3 for ; Mon, 24 May 2021 07:53:34 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id C155F611AC for ; Mon, 24 May 2021 07:53:34 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232464AbhEXHy7 (ORCPT ); Mon, 24 May 2021 03:54:59 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55520 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232412AbhEXHyn (ORCPT ); Mon, 24 May 2021 03:54:43 -0400 Received: from mail-wm1-x330.google.com (mail-wm1-x330.google.com [IPv6:2a00:1450:4864:20::330]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C1477C061574 for ; Mon, 24 May 2021 00:53:15 -0700 (PDT) Received: by mail-wm1-x330.google.com with SMTP id u4-20020a05600c00c4b02901774b80945cso10891564wmm.3 for ; Mon, 24 May 2021 00:53:15 -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=DrzvTwmqd1v1xQhmDV3+QP6hgONoi3kJ51ahQ6kpeX8=; b=BNq9urix4xIWNNC9PU135BKzDcDw+lkUPKahfykRwBYiWz8rDzcgdbvao8+l6AyA9l RWh5ToLJM0cjDdHft5RUBLItoGCLCzWpPV1HEQwPMqfVO8Na7Y7M11t2eSHzF6k6i+py 2vWYAXNplseDjEg2x9x50uER5mwoWW9Rt/KVwG0roZ1dtMRG1cec3YoY+l2cFj7K1PJS q3B/WF3igHbGG0W/Z+C/it9JDpCSNlrMEMsQYjjOH5cxTHb1KpVZ5t2AzyTEFIt4j2Kg XkpiQsGGO1o/JhrSpafEj9+vc4iGdLb4FaVu8JXf92XumFzmx6jGhsdNDkYX+i6se3zg TRMQ== 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=DrzvTwmqd1v1xQhmDV3+QP6hgONoi3kJ51ahQ6kpeX8=; b=tBp21Npw56xowGdDs5sm/s+6YJJ5WV2m6ftreLDbSeX/g/mJkyFqmemzDk675ZeJw3 MLZBDK+uedFIU6wBWTdQEh2QPnOz8bNI4BbBUL1+OxyLOw5yjeHPs/QQ2ZuOW3otHy5V Uq84B6Ey6xUQ9+YntRVBG30xwv6HRdsri7C4wxFGJoQDFZOvvmWegZiIE/tJvUl3L2/+ 8cZTSpDUQ5LA/W2fiQ5zzUi+yvU+CklO55SOR/c8l9/IF38OU9IP+BPRDmbIfbEg8Us+ 95yCQeujECtoOIAxEVgdr4KqKdFu08pH9I7RqzpinZ/RPNjDAQluddVz8S/3tpRI4mKl g30Q== X-Gm-Message-State: AOAM532PhSMLAWODwqqus9ty3AIKhwaauetw0/+GzCF4W7TiUdzInWkz 4e/q+g4HFgo+SKZq05TBAfyEnMFLrPRzIVsk X-Google-Smtp-Source: ABdhPJwF5g+Zwie2o/zaYU7jiYE25AXrOcziCbsbw9ngjNYAs28RLNaVevg75mWOCevAGK1SUJXYxw== X-Received: by 2002:a05:600c:3043:: with SMTP id n3mr17082986wmh.98.1621842793760; Mon, 24 May 2021 00:53:13 -0700 (PDT) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id u126sm8540459wmb.9.2021.05.24.00.53.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 May 2021 00:53:13 -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 v4 10/13] send-email: lazily load modules for a big speedup Date: Mon, 24 May 2021 09:52:59 +0200 Message-Id: X-Mailer: git-send-email 2.32.0.rc1.385.g46e826f1e55 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 f1542cb3ea6..1e9273fd4f5 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 Mon May 24 07:53:00 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: 12275627 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.8 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 CD3E0C47083 for ; Mon, 24 May 2021 07:53:35 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id A8C90610CB for ; Mon, 24 May 2021 07:53:35 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232475AbhEXHzC (ORCPT ); Mon, 24 May 2021 03:55:02 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55502 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232418AbhEXHyp (ORCPT ); Mon, 24 May 2021 03:54:45 -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 72FE2C061756 for ; Mon, 24 May 2021 00:53:16 -0700 (PDT) Received: by mail-wr1-x433.google.com with SMTP id x7so7876680wrt.12 for ; Mon, 24 May 2021 00:53:16 -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=OS93OeXjzKymMkO480we1ENubzgYq8ZQou2/fhBQHM8=; b=CTwhNU5HORs2HCvcTX1dH/awEzoKUlK/4bLY3KCWGDNl/F1dXnSP62o6OrLpqnFJgc Un6yaD+1+CKGaZEYDy0Zv27C0BJpbN1KOpTc+ZlNmAy6Y/KhXOlwmFpubyZWnZEE52in AnrOA9wNfiAQZJEJk7CbpnQTv7fEVuYlux+N3CIWpZKZAbEkK+9xPMNy1wqnUk+U8ij4 FlvgUpuEbm424l0/xkiQOH9jPo9F5MW2bP+QYeu/0uwlKEJcq7nLQ9wmYxLWD1BRmh4A 2O4ICbZBRRLbCYiUqhctSVNxJOEOLYC6Vs4lb7oM2nDu2C0e0gk99YCEE83vXUU3soQ0 h5dw== 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=OS93OeXjzKymMkO480we1ENubzgYq8ZQou2/fhBQHM8=; b=KrErKjJNqevS5RiWi23eP7qqRIWwdCivrn8mhmp/fnp/yAm2SkJx9wzFUJm0AOuXRq 8nibhcoLZ6qvN4REhbHQg4O0/51Fw+Le1EDplPsHWjX5RF/rBOKDF5M06Vt+3GAWXNKr 2O3+ygoWpZKFrtA5/qgaOyrEsz4UlI5leQdl72UVXhZdXrTop9EFezWaSX4ZD1RoNEhH Pn01daks0HiWeA91d+KJVzJUvizrGsA6kjpffP8wMCiM9uCgDQLujTAZtklOjUipg/CI GyN0VNWA28+33MFM3ji1DNjayskVcfNOyROeuK56QGj0TxsKH8aLYQMIkMQp3eaQ5mw8 UxSg== X-Gm-Message-State: AOAM532w0lf/9z2prD/g6e2IrB8oaOqd59hTq+R2liYQRdq7wSvjjnln ZZllh5MCwdgaDI1G1DdadiWP52kCiM9rRDJR X-Google-Smtp-Source: ABdhPJzyVgM5VEPVyH4FIKKkNPNw2hCtFIMZQHU9YazerjiDWGQ+ZwEWOXjCuYeW4sBK932Y9RN17g== X-Received: by 2002:adf:f9d0:: with SMTP id w16mr21317678wrr.336.1621842794732; Mon, 24 May 2021 00:53:14 -0700 (PDT) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id u126sm8540459wmb.9.2021.05.24.00.53.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 May 2021 00:53:14 -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 v4 11/13] perl: lazily load some common Git.pm setup code Date: Mon, 24 May 2021 09:53:00 +0200 Message-Id: X-Mailer: git-send-email 2.32.0.rc1.385.g46e826f1e55 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 73ebbf80cc6..4d048f307b3 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 Mon May 24 07:53:01 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: 12275629 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.8 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 B57A2C47084 for ; Mon, 24 May 2021 07:53:36 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 8BFC2610C7 for ; Mon, 24 May 2021 07:53:36 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232443AbhEXHzD (ORCPT ); Mon, 24 May 2021 03:55:03 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55512 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232419AbhEXHyp (ORCPT ); Mon, 24 May 2021 03:54:45 -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 42BDCC06138B for ; Mon, 24 May 2021 00:53:17 -0700 (PDT) Received: by mail-wr1-x436.google.com with SMTP id n2so27581371wrm.0 for ; Mon, 24 May 2021 00:53:17 -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=80+EYW6NjM60Uen6XNL/0YtPdzV4f5qP4D1wZu5x0Bg=; b=tqoQwwN+ghfGJbLRCLsi0zNGUQ1WFqvZlFY6hvOT7bO40LFoOi/WdqHx0GZDF4VGWZ mXRVTHU350EBRm7oGMib47VsMzHUexiK9+25xiTNHkwgRole36ys1bantmQIi2wu/PkU 4w7SWzSyswqT+/5Av4ge1DTeuVaD8j6XsEXmS9cWoQG6j3710T+nIK3lqgsTYr2cEB5c 1Y6S1TXIG++gTjpPtx5KwsvdOfudtBavG8wGSt3eGCVdR0Q8VJqLQZtmORDP2zc8/O3O PG5S7ZQvKgPQtFClveW8kXmb/kEmjU8YMiIm6o96GL8gB55R1oimMrX4gl6pw4k/N6M7 N/+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=80+EYW6NjM60Uen6XNL/0YtPdzV4f5qP4D1wZu5x0Bg=; b=HTYMNELPxtnzAO4fInIDGv20Eq95bV/nL+SaEoQ/r5utG0HBp2ByxPGaff+oPWMHWi 8C9cdKZ6Yndp0foxy3rxMIpHCGsLSiz6maQEQbfK4ffcQFi37vkFQXWdu86j2N8I7XuC AZ1w9RySKCvAWIPDt3aXbi41AfZrvCdgdv5pFQDBLGmdbPeLwdhde9mI9hqDDiIfxnjQ +xh4SHTEnoF1dCuPtYcIB6/vquNgoU4XHQYmFgwq3WaSF/DZzVEsLg+vjR2v7flX/8Pi 2CjlQnpYfidoWlYeLLKp1Tx2s+NgmDJF444kc233UOfysOaOYv8kqI8skH5AhfYTacB7 dtrg== X-Gm-Message-State: AOAM530kS1WIALbGqaj2Idt5ZXpf23ZQRHVrAeuS1qmQfKPi0F0d/oyA vhgj00yg+0DXNpa6OyUYETm/ekHXpb8tYUIH X-Google-Smtp-Source: ABdhPJyH6rfmp9KAuDxGIQ12unZSmouqr36hzhfoqiXJ/LcSkPPTjJrfEyBl06I1SUoipiWALPHDwg== X-Received: by 2002:a5d:4a4f:: with SMTP id v15mr21141501wrs.154.1621842795641; Mon, 24 May 2021 00:53:15 -0700 (PDT) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id u126sm8540459wmb.9.2021.05.24.00.53.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 May 2021 00:53:15 -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 v4 12/13] send-email: move trivial config handling to Perl Date: Mon, 24 May 2021 09:53:01 +0200 Message-Id: X-Mailer: git-send-email 2.32.0.rc1.385.g46e826f1e55 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 --- 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 1e9273fd4f5..1ea4d9589d8 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 Mon May 24 07:53:02 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: 12275633 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.8 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 74EB0C47080 for ; Mon, 24 May 2021 07:53:39 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 56352610CB for ; Mon, 24 May 2021 07:53:39 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232254AbhEXHzF (ORCPT ); Mon, 24 May 2021 03:55:05 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55520 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232347AbhEXHyq (ORCPT ); Mon, 24 May 2021 03:54:46 -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 15BD4C06138E for ; Mon, 24 May 2021 00:53:18 -0700 (PDT) Received: by mail-wr1-x42a.google.com with SMTP id i17so27475661wrq.11 for ; Mon, 24 May 2021 00:53:18 -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=OmZF1K6akKO2NoqBiv4Wd4RQ+0R/LF2TragCyFcqPx4=; b=nO5kbQjK1z9NWXxWxAXAvB6Ki/X1WI1sIwHbVdNUHpnkd1PDfJyhYE7Q62nRBJCl9A V69jNbfbP7DjC0DXEmhY/6TiPFhxa4tScW1880CY45dceDRAqnUX2Kg5M31UyV+6riTj T9c2jEjA+SpGdvaCCsfQumc5MJ6W+1njYg8kc7/5vJUJFKtflPaGpEFAhpCZlpTteBb8 M9cl/Y2u4yseVwgucxKiafj3JAFn5I3bpCTJbw53hKkieKulpR8F1t82IO5+tWkkFrxF QvuCQpa52f2id6EANyHBg2wfQfLftl5YkcAkgYHmvb0JqrsXbWsbjfgpBaIbkUinMcoX vNPA== 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=OmZF1K6akKO2NoqBiv4Wd4RQ+0R/LF2TragCyFcqPx4=; b=AEr1Ypux3AtPQq4PyQL9MaIE0bvy9oj6vk30bO4+IvmvZUiQyF3svrSJMGDXRyugfc 7b9bmQ7c4OEw5f2McQwNgVvvuag0xq660rm5mnX4j19bybbWzchAgozY85NXLDF97Q3U 8Q/nLibWYInimTkWvdWPiS37tPNfYKvVhXLBbhDUM2q3WXvpgrQDv6M7R6hu35Z4uQKH Mb9b61yT40tCSNRjM68hP4MFbqijCUaqpKeDyIP+ay7c2NfjQhpo9qHUHB44DciXqI5l cwMdQFQXhJ0z5OkOcG8j2g0ImstOi2BSg1FMXs1fiL249WO2N4QdlQJk/rfQDI8VNY9f VUig== X-Gm-Message-State: AOAM532NGdP/WJNMjgRVHpgfpT6GLJKjAa75cJfijf8P+DV+Fw3BzWNi WuAeItE5+Mye6N9kOZvfYMnUOnFxTW4R7EXx X-Google-Smtp-Source: ABdhPJzN4D4Hygx8+5IfPSwSROrkuqFpiJqIxX5lqnAg3GiRyqnAAaRl2h2h1yzMktjiC8o7rAFdbA== X-Received: by 2002:adf:d20e:: with SMTP id j14mr20115808wrh.270.1621842796470; Mon, 24 May 2021 00:53:16 -0700 (PDT) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id u126sm8540459wmb.9.2021.05.24.00.53.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 May 2021 00:53:15 -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 v4 13/13] perl: nano-optimize by replacing Cwd::cwd() with Cwd::getcwd() Date: Mon, 24 May 2021 09:53:02 +0200 Message-Id: X-Mailer: git-send-email 2.32.0.rc1.385.g46e826f1e55 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 1ea4d9589d8..c6af05e8a31 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 4d048f307b3..863bd80694c 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;