1
0
mirror of https://github.com/golang/go synced 2024-11-14 05:30:21 -07:00

[release-branch.go1.15] cmd/go: don't report missing std import errors for tidy and vendor

'go mod tidy' and 'go mod vendor' normally report errors when a
package can't be imported, even if the import appears in a file that
wouldn't be compiled by the current version of Go. These errors are
common for packages introduced in higher versions of Go, like "embed"
in 1.16.

This change causes 'go mod tidy' and 'go mod vendor' to ignore
missing package errors if the import path appears to come from the
standard library because it lacks a dot in the first path element.

NOTE: This change is not a clean cherry-pick of CL 298749 because
parts of modload were substantially rewritten after 1.15.

Fixes #44792
Updates #27063

Change-Id: I61d6443e77ab95fd8c0d1514f57ef4c8885a77cc
Reviewed-on: https://go-review.googlesource.com/c/go/+/298749
Trust: Jay Conrod <jayconrod@google.com>
Run-TryBot: Jay Conrod <jayconrod@google.com>
Reviewed-by: Bryan C. Mills <bcmills@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
(cherry picked from commit 56d52e6611)
Reviewed-on: https://go-review.googlesource.com/c/go/+/298950
This commit is contained in:
Jay Conrod 2021-03-04 11:50:31 -05:00 committed by Alexander Rakoczy
parent ff7e638318
commit ba3dc70dc5
5 changed files with 15 additions and 2 deletions

View File

@ -42,6 +42,7 @@ func runTidy(cmd *base.Command, args []string) {
base.Fatalf("go mod tidy: no arguments allowed")
}
modload.SilenceMissingStdImports = true
modload.LoadALL()
modload.TidyBuildList()
modTidyGoSum() // updates memory copy; WriteGoMod on next line flushes it out

View File

@ -47,6 +47,7 @@ func runVendor(cmd *base.Command, args []string) {
if len(args) != 0 {
base.Fatalf("go mod vendor: vendor takes no arguments")
}
modload.SilenceMissingStdImports = true
pkgs := modload.LoadVendor()
vdir := filepath.Join(modload.ModRoot(), "vendor")

View File

@ -56,6 +56,12 @@ var (
CmdModModule string // module argument for 'go mod init'
allowMissingModuleImports bool
// SilenceMissingStdImports indicates that LoadALL should not print an error
// or terminate the process if an imported package is missing, and the import
// path looks like it might be in the standard library (perhaps in a future
// Go version).
SilenceMissingStdImports bool
)
// ModFile returns the parsed go.mod file.

View File

@ -433,6 +433,11 @@ func loadAll(testAll bool) []string {
var paths []string
for _, pkg := range loaded.pkgs {
if pkg.err != nil {
if impErr := (*ImportMissingError)(nil); SilenceMissingStdImports &&
errors.As(pkg.err, &impErr) &&
search.IsStandardImportPath(impErr.Path) {
continue
}
base.Errorf("%s: %v", pkg.stackText(), pkg.err)
continue
}

View File

@ -4,12 +4,12 @@ env GO111MODULE=on
# 'go mod tidy' and 'go mod vendor' should not hide loading errors.
! go mod tidy
stderr '^issue27063 imports\n\tnonexist: package nonexist is not in GOROOT \(.*\)'
! stderr 'package nonexist is not in GOROOT'
stderr '^issue27063 imports\n\tnonexist.example.com: cannot find module providing package nonexist.example.com'
stderr '^issue27063 imports\n\tissue27063/other imports\n\tother.example.com/nonexist: cannot find module providing package other.example.com/nonexist'
! go mod vendor
stderr '^issue27063 imports\n\tnonexist: package nonexist is not in GOROOT \(.*\)'
! stderr 'package nonexist is not in GOROOT'
stderr '^issue27063 imports\n\tnonexist.example.com: cannot find module providing package nonexist.example.com'
stderr '^issue27063 imports\n\tissue27063/other imports\n\tother.example.com/nonexist: cannot find module providing package other.example.com/nonexist'