]> git.ipfire.org Git - thirdparty/git.git/commitdiff
perl: nano-optimize by replacing Cwd::cwd() with Cwd::getcwd()
authorÆvar Arnfjörð Bjarmason <avarab@gmail.com>
Fri, 28 May 2021 09:23:52 +0000 (11:23 +0200)
committerJunio C Hamano <gitster@pobox.com>
Fri, 28 May 2021 09:38:07 +0000 (18:38 +0900)
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 1018000000000000000529000000000000064%        -

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
git-send-email.perl
perl/Git.pm

index 57911386835b91b93600abca306c2d28a42f1410..0efe85c0b0276e5f466817529ed934c700d3a718 100755 (executable)
@@ -2020,7 +2020,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();
index 5562c0cede24c8d2f7d90539f1d4cea63c062e0b..090a7df63fc004ecff6fc3425c1fb13006fb499d 100644 (file)
@@ -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;