]> Cypherpunks repositories - gostls13.git/commit
cmd/go: work out VCS information once per repository
authorDaniel Martí <mvdan@mvdan.cc>
Thu, 18 Nov 2021 22:58:17 +0000 (22:58 +0000)
committerDaniel Martí <mvdan@mvdan.cc>
Mon, 22 Nov 2021 23:09:35 +0000 (23:09 +0000)
commit9678f794149d07857cbf2a518bfc7aec532fb732
tree9427d729fc24cec9d038428603adaf5960540862
parent0244343088e074c5f92b42a9812521f711a69410
cmd/go: work out VCS information once per repository

We need VCS status information for each main package we load.
If two main packages are under the same VCS repository,
we can reuse that information to avoid duplicating work.

For instance, the kubernetes holds 51 main packages in its root module,
meaning that "go list ./..." repeated the same git calls 51 times.
Instead, use a global par.Cache to deduplicate that work.

Below are the numbers on kubernetes 5eb584d1cb6917,
via "benchcmd -n 8 KubernetesListPackages go list ./...":

name                    old time/op         new time/op         delta
KubernetesListPackages          8.91s ± 0%          3.33s ± 1%  -62.61%  (p=0.000 n=7+8)

name                    old user-time/op    new user-time/op    delta
KubernetesListPackages          11.2s ± 1%           8.1s ± 2%  -27.50%  (p=0.000 n=7+8)

name                    old sys-time/op     new sys-time/op     delta
KubernetesListPackages          8.02s ± 0%          1.67s ± 6%  -79.21%  (p=0.001 n=6+8)

name                    old peak-RSS-bytes  new peak-RSS-bytes  delta
KubernetesListPackages          127MB ± 2%          123MB ± 7%     ~     (p=0.328 n=8+8)

Fixes #49582.

Change-Id: Ib7ef5dc7a35c83a11e209441f5d6f3b8da068259
Reviewed-on: https://go-review.googlesource.com/c/go/+/365394
Trust: Daniel Martí <mvdan@mvdan.cc>
Trust: Dominik Honnef <dominik@honnef.co>
Run-TryBot: Bryan C. Mills <bcmills@google.com>
Reviewed-by: Bryan C. Mills <bcmills@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
src/cmd/go/internal/load/pkg.go
src/cmd/go/testdata/script/version_buildvcs_git.txt