From: HaraldNordgren Date: Sat, 6 Jan 2018 20:30:42 +0000 (+0100) Subject: cmd/go: print each import error only once X-Git-Tag: go1.11beta1~1089 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=a42ea51ae94af2005970a480ddc8ee257874908c;p=gostls13.git cmd/go: print each import error only once This change prevents import errors from being printed multiple times. Creating a bare-bones package 'p' with only one file importing itself and running 'go build p', the current implementation gives this error message: can't load package: import cycle not allowed package p imports p import cycle not allowed package p imports p With this change we will show the message only once. Updates #23295 Change-Id: I653b34c1c06c279f3df514f12ec0b89745a7e64a Reviewed-on: https://go-review.googlesource.com/86535 Reviewed-by: Harald Nordgren Reviewed-by: Ian Lance Taylor Run-TryBot: Ian Lance Taylor TryBot-Result: Gobot Gobot --- diff --git a/src/cmd/go/go_test.go b/src/cmd/go/go_test.go index eef6309a5d..b5200335ad 100644 --- a/src/cmd/go/go_test.go +++ b/src/cmd/go/go_test.go @@ -1359,6 +1359,22 @@ func TestImportCommentConflict(t *testing.T) { tg.grepStderr("found import comments", "go build did not mention comment conflict") } +func TestImportCycle(t *testing.T) { + tg := testgo(t) + defer tg.cleanup() + tg.parallel() + tg.setenv("GOPATH", filepath.Join(tg.pwd(), "testdata/importcycle")) + tg.runFail("build", "selfimport") + + count := tg.grepCountBoth("import cycle not allowed") + if count == 0 { + t.Fatal("go build did not mention cyclical import") + } + if count > 1 { + t.Fatal("go build mentioned import cycle more than once") + } +} + // cmd/go: custom import path checking should not apply to Go packages without import comment. func TestIssue10952(t *testing.T) { testenv.MustHaveExternalNetwork(t) diff --git a/src/cmd/go/internal/load/pkg.go b/src/cmd/go/internal/load/pkg.go index b006d4137c..0b82fc9f41 100644 --- a/src/cmd/go/internal/load/pkg.go +++ b/src/cmd/go/internal/load/pkg.go @@ -1473,6 +1473,7 @@ func PackagesForBuild(args []string) []*Package { for _, pkg := range pkgs { if pkg.Error != nil { base.Errorf("can't load package: %s", pkg.Error) + printed[pkg.Error] = true } for _, err := range pkg.DepsErrors { // Since these are errors in dependencies, diff --git a/src/cmd/go/testdata/importcycle/src/selfimport/selfimport.go b/src/cmd/go/testdata/importcycle/src/selfimport/selfimport.go new file mode 100644 index 0000000000..dc63c4b9f2 --- /dev/null +++ b/src/cmd/go/testdata/importcycle/src/selfimport/selfimport.go @@ -0,0 +1,3 @@ +package selfimport + +import "selfimport"