Russ Cox would like Alan Donovan to review this change.
cmd/go: do not turn list ./nonexist into a network lookup
If you're in a directory corresponding to x/y
and you run go list ./z, we do at some point
want to turn that into x/y/z. But if ./z does
not exist that will make the go command
check the network to see if it can find x/y/z.
That's clearly wrong: ./z means that directory,
nothing else. And it turns a typo into a long delay,
which is even worse.
Fixes #26874.
Change-Id: Iec15fa7b359af11b6a4fc6cb082e593658fb6e41
---
M src/cmd/go/internal/modload/load.go
M src/cmd/go/testdata/script/mod_fs_patterns.txt
M src/cmd/go/testdata/script/mod_list_dir.txt
3 files changed, 30 insertions(+), 1 deletion(-)
diff --git a/src/cmd/go/internal/modload/load.go b/src/cmd/go/internal/modload/load.go
index d64f490..414fb05 100644
--- a/src/cmd/go/internal/modload/load.go
+++ b/src/cmd/go/internal/modload/load.go
@@ -116,10 +116,24 @@
} else if path := pathInModuleCache(dir); path != "" {
pkg = path
} else {
+ pkg = ""
if !iterating {
base.Errorf("go: directory %s outside available modules", base.ShortPath(dir))
}
+ }
+ info, err := os.Stat(dir)
+ if err != nil || !info.IsDir() {
+ // If the directory does not exist,
+ // don't turn it into an import path
+ // that will trigger a lookup.
pkg = ""
+ if !iterating {
+ if err != nil {
+ base.Errorf("go: no such directory %v", m.Pattern)
+ } else {
+ base.Errorf("go: %s is not a directory", m.Pattern)
+ }
+ }
}
m.Pkgs[i] = pkg
}
diff --git a/src/cmd/go/testdata/script/mod_fs_patterns.txt b/src/cmd/go/testdata/script/mod_fs_patterns.txt
index b5350c3..d7d3e03 100644
--- a/src/cmd/go/testdata/script/mod_fs_patterns.txt
+++ b/src/cmd/go/testdata/script/mod_fs_patterns.txt
@@ -28,6 +28,18 @@
stdout ^m/y$
! stdout ^m/y/z
+# non-existent directory should not prompt lookups
+! go build -mod=readonly example.com/nonexist
+stderr 'import lookup disabled'
+
+! go build -mod=readonly ./nonexist
+! stderr 'import lookup disabled'
+stderr '^go: no such directory ./nonexist'
+
+! go build -mod=readonly ./go.mod
+! stderr 'import lookup disabled'
+stderr '^go: ./go.mod is not a directory'
+
-- x/go.mod --
module m
diff --git a/src/cmd/go/testdata/script/mod_list_dir.txt b/src/cmd/go/testdata/script/mod_list_dir.txt
index 29cde71..800f277 100644
--- a/src/cmd/go/testdata/script/mod_list_dir.txt
+++ b/src/cmd/go/testdata/script/mod_list_dir.txt
@@ -9,11 +9,14 @@
stdout ^math$
go list -f '{{.ImportPath}}' .
stdout ^x$
+! go list -f '{{.ImportPath}}' $GOPATH/pkg/mod/rsc.io/qu...@v1.5.2
+stderr '^go: no such directory.*qu...@v1.5.2'
+go mod download rsc.io/qu...@v1.5.2
go list -f '{{.ImportPath}}' $GOPATH/pkg/mod/rsc.io/qu...@v1.5.2
stdout '^rsc.io/quote$'
go list -f '{{.ImportPath}}' $GOPATH/pkg/mod/rsc.io/sam...@v1.3.0
stdout '^rsc.io/sampler$'
-go get rsc.io/sam...@v1.3.1
+go get -d rsc.io/sam...@v1.3.1
go list -f '{{.ImportPath}}' $GOPATH/pkg/mod/rsc.io/sam...@v1.3.1
stdout '^rsc.io/sampler$'
! go list -f '{{.ImportPath}}' $GOPATH/pkg/mod/rsc.io/sam...@v1.3.0
To view, visit change 129061. To unsubscribe, or for help writing mail filters, visit settings.
TryBots beginning. Status page: https://farmer.golang.org/try?commit=70c6b00f
TryBots are happy.
Patch set 1:TryBot-Result +1
Uploaded patch set 2: Patch Set 1 was rebased.
TryBots are happy.
Patch set 2:TryBot-Result +1
Uploaded patch set 3: Patch Set 2 was rebased.
Patch set 3:Code-Review +2
TryBots are happy.
Patch set 3:TryBot-Result +1
Uploaded patch set 4: Patch Set 3 was rebased.
TryBots are happy.
Patch set 4:TryBot-Result +1
Russ Cox merged this change.
cmd/go: do not turn list ./nonexist into a network lookup
If you're in a directory corresponding to x/y
and you run go list ./z, we do at some point
want to turn that into x/y/z. But if ./z does
not exist that will make the go command
check the network to see if it can find x/y/z.
That's clearly wrong: ./z means that directory,
nothing else. And it turns a typo into a long delay,
which is even worse.
Fixes #26874.
Change-Id: Iec15fa7b359af11b6a4fc6cb082e593658fb6e41
Reviewed-on: https://go-review.googlesource.com/129061
Run-TryBot: Russ Cox <r...@golang.org>
TryBot-Result: Gobot Gobot <go...@golang.org>
Reviewed-by: Alan Donovan <adon...@google.com>
---
M src/cmd/go/internal/modload/load.go
M src/cmd/go/testdata/script/mod_fs_patterns.txt
M src/cmd/go/testdata/script/mod_list_dir.txt
3 files changed, 30 insertions(+), 1 deletion(-)
diff --git a/src/cmd/go/internal/modload/load.go b/src/cmd/go/internal/modload/load.go
index b00f814..5ca2ed2 100644