diff options
| author | HaraldNordgren <haraldnordgren@gmail.com> | 2018-01-06 21:30:42 +0100 |
|---|---|---|
| committer | Ian Lance Taylor <iant@golang.org> | 2018-03-27 14:07:14 +0000 |
| commit | a42ea51ae94af2005970a480ddc8ee257874908c (patch) | |
| tree | e510c167c2f835fa9d8ede76d9e660d5bd18805b /src | |
| parent | ea59ebd3387ab93b826606ea90a4149dad7b4e50 (diff) | |
| download | go-a42ea51ae94af2005970a480ddc8ee257874908c.tar.xz | |
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 <haraldnordgren@gmail.com>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Diffstat (limited to 'src')
| -rw-r--r-- | src/cmd/go/go_test.go | 16 | ||||
| -rw-r--r-- | src/cmd/go/internal/load/pkg.go | 1 | ||||
| -rw-r--r-- | src/cmd/go/testdata/importcycle/src/selfimport/selfimport.go | 3 |
3 files changed, 20 insertions, 0 deletions
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" |
