aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRay Wu <ray@liftoff.io>2021-04-20 10:41:37 -0700
committerBryan C. Mills <bcmills@google.com>2021-04-27 18:17:01 +0000
commitbd2175e1b1369bce59cdceb9282c817802a87746 (patch)
tree414e6f921ab24b48f891d1351b2b50dc8e0147a3
parent222101549a1b0d9810e2069f776c92b6807a739d (diff)
downloadgo-bd2175e1b1369bce59cdceb9282c817802a87746.tar.gz
go-bd2175e1b1369bce59cdceb9282c817802a87746.zip
cmd/go: show warnings about symlinks only for patterns containing ...
Go commands show a warning message any time a pattern is expanded and a symlink to a directory is encountered. For monorepo with non Go projects using symlinks underneath, the output of go commands could be spammed by this warning. This commit includes the behavior change to only print this warning when there's a pattern containing ... . Fixes #35941 Change-Id: I094da2628bcd47b86fee8c6529d1066aa013a43b Reviewed-on: https://go-review.googlesource.com/c/go/+/311890 Run-TryBot: Caleb Spare <cespare@gmail.com> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Bryan C. Mills <bcmills@google.com> Reviewed-by: Michael Matloob <matloob@golang.org> Trust: Michael Matloob <matloob@golang.org>
-rw-r--r--src/cmd/go/internal/modload/search.go2
-rw-r--r--src/cmd/go/internal/search/search.go2
-rw-r--r--src/cmd/go/testdata/script/list_symlink_issue35941.txt18
-rw-r--r--src/cmd/go/testdata/script/mod_tidy_symlink_issue35941.txt36
4 files changed, 56 insertions, 2 deletions
diff --git a/src/cmd/go/internal/modload/search.go b/src/cmd/go/internal/modload/search.go
index c34f745a24..658fc6f55a 100644
--- a/src/cmd/go/internal/modload/search.go
+++ b/src/cmd/go/internal/modload/search.go
@@ -86,7 +86,7 @@ func matchPackages(ctx context.Context, m *search.Match, tags map[string]bool, f
}
if !fi.IsDir() {
- if fi.Mode()&fs.ModeSymlink != 0 && want {
+ if fi.Mode()&fs.ModeSymlink != 0 && want && strings.Contains(m.Pattern(), "...") {
if target, err := fsys.Stat(path); err == nil && target.IsDir() {
fmt.Fprintf(os.Stderr, "warning: ignoring symlink %s\n", path)
}
diff --git a/src/cmd/go/internal/search/search.go b/src/cmd/go/internal/search/search.go
index faf3a321dd..f1152080a7 100644
--- a/src/cmd/go/internal/search/search.go
+++ b/src/cmd/go/internal/search/search.go
@@ -155,7 +155,7 @@ func (m *Match) MatchPackages() {
}
if !fi.IsDir() {
- if fi.Mode()&fs.ModeSymlink != 0 && want {
+ if fi.Mode()&fs.ModeSymlink != 0 && want && strings.Contains(m.pattern, "...") {
if target, err := fsys.Stat(path); err == nil && target.IsDir() {
fmt.Fprintf(os.Stderr, "warning: ignoring symlink %s\n", path)
}
diff --git a/src/cmd/go/testdata/script/list_symlink_issue35941.txt b/src/cmd/go/testdata/script/list_symlink_issue35941.txt
new file mode 100644
index 0000000000..eb12bde6ce
--- /dev/null
+++ b/src/cmd/go/testdata/script/list_symlink_issue35941.txt
@@ -0,0 +1,18 @@
+[!symlink] skip
+env GO111MODULE=off
+
+# Issue 35941: suppress symlink warnings when running 'go list all'.
+symlink goproj/css -> $GOPATH/src/css
+
+go list all
+! stderr 'warning: ignoring symlink'
+
+# Show symlink warnings when patterns contain '...'.
+go list goproj/...
+stderr 'warning: ignoring symlink'
+
+-- goproj/a.go --
+package a
+
+-- css/index.css --
+body {}
diff --git a/src/cmd/go/testdata/script/mod_tidy_symlink_issue35941.txt b/src/cmd/go/testdata/script/mod_tidy_symlink_issue35941.txt
new file mode 100644
index 0000000000..d4658c65d4
--- /dev/null
+++ b/src/cmd/go/testdata/script/mod_tidy_symlink_issue35941.txt
@@ -0,0 +1,36 @@
+env GO111MODULE=on
+[!symlink] skip
+
+cd m
+symlink symlink -> ../outside
+
+cp go.mod go.mod.orig
+
+# Issue 35941: suppress symlink warnings when running 'go mod tidy'.
+# 'go mod tidy' should not scan packages in symlinked subdirectories.
+go mod tidy
+! stderr 'warning: ignoring symlink'
+cmp go.mod go.mod.orig
+
+! go build ./symlink
+stderr '^symlink[\\/]symlink.go:3:8: module example.net/unresolved provides package example.net/unresolved and is replaced but not required; to add it:\n\tgo get example.net/unresolved@v0.1.0$'
+
+-- m/go.mod --
+module example.net/m
+
+go 1.16
+
+replace example.net/unresolved v0.1.0 => ../unresolved
+-- m/a.go --
+package a
+-- outside/symlink.go --
+package symlink
+
+import _ "example.net/unresolved"
+-- unresolved/go.mod --
+module example.net/unresolved
+
+go 1.16
+-- unresolved/unresolved.go --
+// Package unresolved exists, but 'go mod tidy' won't add it.
+package unresolved