aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorHaraldNordgren <haraldnordgren@gmail.com>2018-01-06 21:30:42 +0100
committerIan Lance Taylor <iant@golang.org>2018-03-27 14:07:14 +0000
commita42ea51ae94af2005970a480ddc8ee257874908c (patch)
treee510c167c2f835fa9d8ede76d9e660d5bd18805b /src
parentea59ebd3387ab93b826606ea90a4149dad7b4e50 (diff)
downloadgo-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.go16
-rw-r--r--src/cmd/go/internal/load/pkg.go1
-rw-r--r--src/cmd/go/testdata/importcycle/src/selfimport/selfimport.go3
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"