go/packages: suppress go list errors when ad-hoc package doesn't exist
Updates golang/go#29280 Change-Id: Ie5a5dc1fef8f3d989b3a5fffb6c2ca66e97c143a Reviewed-on: https://go-review.googlesource.com/c/154517 Reviewed-by: Ian Cottrell <iancottrell@google.com>
This commit is contained in:
parent
57eff0d8ac
commit
ae5b881676
|
@ -741,7 +741,10 @@ func invokeGo(cfg *Config, args ...string) (*bytes.Buffer, error) {
|
||||||
// If that build fails, errors appear on stderr
|
// If that build fails, errors appear on stderr
|
||||||
// (despite the -e flag) and the Export field is blank.
|
// (despite the -e flag) and the Export field is blank.
|
||||||
// Do not fail in that case.
|
// Do not fail in that case.
|
||||||
if !usesExportData(cfg) {
|
// The same is true if an ad-hoc package given to go list doesn't exist.
|
||||||
|
// TODO(matloob): Remove these once we can depend on go list to exit with a zero status with -e even when
|
||||||
|
// packages don't exist or a build fails.
|
||||||
|
if !usesExportData(cfg) && !containsGoFile(args) {
|
||||||
return nil, fmt.Errorf("go %v: %s: %s", args, exitErr, stderr)
|
return nil, fmt.Errorf("go %v: %s: %s", args, exitErr, stderr)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -764,6 +767,15 @@ func invokeGo(cfg *Config, args ...string) (*bytes.Buffer, error) {
|
||||||
return stdout, nil
|
return stdout, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func containsGoFile(s []string) bool {
|
||||||
|
for _, f := range s {
|
||||||
|
if strings.HasSuffix(f, ".go") {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
func cmdDebugStr(cfg *Config, args ...string) string {
|
func cmdDebugStr(cfg *Config, args ...string) string {
|
||||||
env := make(map[string]string)
|
env := make(map[string]string)
|
||||||
for _, kv := range cfg.Env {
|
for _, kv := range cfg.Env {
|
||||||
|
|
|
@ -1570,6 +1570,24 @@ func testBasicXTest(t *testing.T, exporter packagestest.Exporter) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestErrorMissingFile(t *testing.T) { packagestest.TestAll(t, testErrorMissingFile) }
|
||||||
|
func testErrorMissingFile(t *testing.T, exporter packagestest.Exporter) {
|
||||||
|
exported := packagestest.Export(t, exporter, []packagestest.Module{{
|
||||||
|
Name: "golang.org/fake",
|
||||||
|
Files: map[string]interface{}{
|
||||||
|
"a/a_test.go": `package a;`,
|
||||||
|
}}})
|
||||||
|
defer exported.Cleanup()
|
||||||
|
|
||||||
|
exported.Config.Mode = packages.LoadSyntax
|
||||||
|
exported.Config.Tests = false
|
||||||
|
pkgs, err := packages.Load(exported.Config, "missing.go")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
t.Log(pkgs)
|
||||||
|
}
|
||||||
|
|
||||||
func errorMessages(errors []packages.Error) []string {
|
func errorMessages(errors []packages.Error) []string {
|
||||||
var msgs []string
|
var msgs []string
|
||||||
for _, err := range errors {
|
for _, err := range errors {
|
||||||
|
|
Loading…
Reference in New Issue