Skip to content

Commit

Permalink
package/go: fix go-bootstrap when parent dir contains invalid .git
Browse files Browse the repository at this point in the history
Building host-go within docker fails:

error obtaining VCS status: exit status 128
	Use -buildvcs=false to disable VCS stamping.

Reproduction of the issue:

mkdir go-issue-61620
cd ./go-issue-61620
wget https://go.dev/dl/go1.19.11.src.tar.gz
mkdir go-bootstrap
tar -xf go1.19.11.src.tar.gz -C ./go-bootstrap --strip-components=1
cd ./go-bootstrap/src/
bash make.bash
cd ../../
wget https://go.dev/dl/go1.20.6.src.tar.gz
mkdir go
tar -xf go1.20.6.src.tar.gz -C ./go/ --strip-components=1
printf "gitdir: ../../does/not/exist/.git" > ./.git
cd ./go/src/
GOROOT_BOOTSTRAP=$(pwd)/../../go-bootstrap/ bash make.bash

The error only occurs when the .git that git detects in the parent directory of
the GOROOT_BOOTSTRAP is invalid or not present causing errors when running `git`
commands within GOROOT_BOOTSTRAP.

Report: https://lists.buildroot.org/pipermail/buildroot/2023-July/671344.html
Fixes: https://gitlab.com/buildroot.org/buildroot/-/jobs/4725186525
Upstream issue: golang/go#61620
Upstream PR: golang/go#61621

Signed-off-by: Christian Stewart <christian@aperture.us>

---

v1 -> v2:

 - sort HOST_GO_MAKE_ENV alphabetically
 - simplify the patch to set buildvcs=false unconditionally for go-bootstrap
 - create a minimal reproduction of the issue
 - simplify the commit message with the minimal reproduction

v2 -> v3:

 - drop unnecessary go.mk change
  • Loading branch information
paralin committed Jul 27, 2023
1 parent eedbbb9 commit d6b6578
Showing 1 changed file with 73 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
From 6b05378097c6a386ed9912d2471976dc39504e86 Mon Sep 17 00:00:00 2001
From: Christian Stewart <christian@aperture.us>
Date: Thu, 27 Jul 2023 21:28:47 -0700
Subject: [PATCH] cmd/dist: set buildvcs=false when building go-bootstrap

When building go-bootstrap as part of the make.bash process, the cmd/dist
invokes the bootstrap Go compiler to build the go_bootstrap tool:

${GOROOT_BOOTSTRAP}/bin/go install -tags=math_big_pure_go compiler_bootstrap purego bootstrap/cmd/...

If there is an invalid .git directory in a parent of ${GOROOT_BOOTSTRAP},
make.bash will fail. Reproduction of the issue:

mkdir go-issue-61620
cd ./go-issue-61620
wget https://go.dev/dl/go1.19.11.src.tar.gz
mkdir go-bootstrap
tar -xf go1.19.11.src.tar.gz -C ./go-bootstrap --strip-components=1
cd ./go-bootstrap/src/
bash make.bash
cd ../../
wget https://go.dev/dl/go1.20.6.src.tar.gz
mkdir go
tar -xf go1.20.6.src.tar.gz -C ./go/ --strip-components=1
printf "gitdir: ../../does/not/exist/.git" > ./.git
cd ./go/src/
GOROOT_BOOTSTRAP=$(pwd)/../../go-bootstrap/ bash make.bash

The build fails with the following error:

Building Go toolchain1 using [snip]/go-1.19.10.
error obtaining VCS status: exit status 128
Use -buildvcs=false to disable VCS stamping.
go tool dist: FAILED: [snip]/go-1.19.10/bin/go install -tags=math_big_pure_go \
compiler_bootstrap purego bootstrap/cmd/...: exit status 1

This change unconditionally sets -buildvcs=false when compiling go-bootstrap. We
don't need the revision information in those binaries anyway. Setting this flag
was previously not done as we were unsure if the go-bootstrap compiler would be
new enough to support the buildvcs build flag. Since Go 1.20.x, Go 1.19.x is the
minimum version for go-bootstrap, and supports -buildvcs=false. We can now set
-buildvcs=false without worrying about compatibility.

Related: https://github.com/golang/go/issues/54852
Fixes: https://github.com/golang/go/issues/61620

---

Upstream PR: https://github.com/golang/go/pull/61621

Signed-off-by: Christian Stewart <christian@aperture.us>

---
src/cmd/dist/buildtool.go | 3 +++
1 file changed, 3 insertions(+)

diff --git a/src/cmd/dist/buildtool.go b/src/cmd/dist/buildtool.go
index a528d7aa76..3b411d6ebb 100644
--- a/src/cmd/dist/buildtool.go
+++ b/src/cmd/dist/buildtool.go
@@ -221,6 +221,9 @@ func bootstrapBuildTools() {
cmd := []string{
pathf("%s/bin/go", goroot_bootstrap),
"install",
+ // Fixes cases where an invalid .git is present in a parent of GOROOT_BOOTSTRAP.
+ // See: https://github.com/golang/go/issues/61620
+ "-buildvcs=false",
"-tags=math_big_pure_go compiler_bootstrap purego",
}
if vflag > 0 {
--
2.41.0

0 comments on commit d6b6578

Please sign in to comment.