diff options
author | Bryan C. Mills <bcmills@google.com> | 2021-02-26 13:28:23 -0500 |
---|---|---|
committer | Bryan C. Mills <bcmills@google.com> | 2021-03-18 14:43:33 +0000 |
commit | e726e2a6087683eb21afe79ef8b5a1dbef80b0f1 (patch) | |
tree | 39c9a7116d1f33052048d0969b0cb18be5a4fa0a /src/cmd/go/internal/modload/load.go | |
parent | 6b6ea3271fd4f0ed99d5390461db9fa45ce4c164 (diff) | |
download | go-e726e2a6087683eb21afe79ef8b5a1dbef80b0f1.tar.gz go-e726e2a6087683eb21afe79ef8b5a1dbef80b0f1.zip |
cmd/go: suppress errors for 'go get' of module paths that are also constrained-out packages
Fixes #33526
Change-Id: Iedd2d6dbe440499bf074ac632513319a22f2d648
Reviewed-on: https://go-review.googlesource.com/c/go/+/297009
Trust: Bryan C. Mills <bcmills@google.com>
Run-TryBot: Bryan C. Mills <bcmills@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Jay Conrod <jayconrod@google.com>
Diffstat (limited to 'src/cmd/go/internal/modload/load.go')
-rw-r--r-- | src/cmd/go/internal/modload/load.go | 36 |
1 files changed, 25 insertions, 11 deletions
diff --git a/src/cmd/go/internal/modload/load.go b/src/cmd/go/internal/modload/load.go index 2e62a7659f..1be6a71bbf 100644 --- a/src/cmd/go/internal/modload/load.go +++ b/src/cmd/go/internal/modload/load.go @@ -181,6 +181,15 @@ type PackageOpts struct { // future version). SilenceMissingStdImports bool + // SilenceNoGoErrors indicates that LoadPackages should not print + // imports.ErrNoGo errors. + // This allows the caller to invoke LoadPackages (and report other errors) + // without knowing whether the requested packages exist for the given tags. + // + // Note that if a requested package does not exist *at all*, it will fail + // during module resolution and the error will not be suppressed. + SilenceNoGoErrors bool + // SilenceUnmatchedWarnings suppresses the warnings normally emitted for // patterns that did not match any packages. SilenceUnmatchedWarnings bool @@ -290,6 +299,10 @@ func LoadPackages(ctx context.Context, opts PackageOpts, patterns ...string) (ma // Report errors, if any. checkMultiplePaths() for _, pkg := range loaded.pkgs { + if !pkg.isTest() { + loadedPackages = append(loadedPackages, pkg.path) + } + if pkg.err != nil { if sumErr := (*ImportMissingSumError)(nil); errors.As(pkg.err, &sumErr) { if importer := pkg.stack; importer != nil { @@ -298,23 +311,24 @@ func LoadPackages(ctx context.Context, opts PackageOpts, patterns ...string) (ma sumErr.importerIsTest = importer.testOf != nil } } - silence := opts.SilenceErrors + + if opts.SilenceErrors { + continue + } if stdErr := (*ImportMissingError)(nil); errors.As(pkg.err, &stdErr) && stdErr.isStd && opts.SilenceMissingStdImports { - silence = true + continue + } + if opts.SilenceNoGoErrors && errors.Is(pkg.err, imports.ErrNoGo) { + continue } - if !silence { - if opts.AllowErrors { - fmt.Fprintf(os.Stderr, "%s: %v\n", pkg.stackText(), pkg.err) - } else { - base.Errorf("%s: %v", pkg.stackText(), pkg.err) - } + if opts.AllowErrors { + fmt.Fprintf(os.Stderr, "%s: %v\n", pkg.stackText(), pkg.err) + } else { + base.Errorf("%s: %v", pkg.stackText(), pkg.err) } } - if !pkg.isTest() { - loadedPackages = append(loadedPackages, pkg.path) - } } if !opts.SilenceErrors { // Also list errors in matching patterns (such as directory permission |