aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAudi P. R. Putra <doelaudi@gmail.com>2023-09-15 23:37:53 +0700
committerMichael Matloob <matloob@golang.org>2024-03-21 17:25:54 +0000
commit5e1e3a002528714f7c5954dd13068a89f41f747a (patch)
tree986fbc6c4e55d32c32d38cb3477c2501853c3950
parentd9f97467946556e94817acbb35fef7f536afed5f (diff)
downloadgo-5e1e3a002528714f7c5954dd13068a89f41f747a.tar.gz
go-5e1e3a002528714f7c5954dd13068a89f41f747a.zip
cmd/go: show deprecation message on go run/install
Add check for deprecations in PackagesAndErrorsOutsideModule. This affects go run/install outside module when run in module-aware mode. Fixes #59230 Change-Id: I106df36a856894fb1b634decfa812e31cf88fe74 Cq-Include-Trybots: luci.golang.try:gotip-linux-amd64-longtest,gotip-windows-amd64-longtest Reviewed-on: https://go-review.googlesource.com/c/go/+/528775 Reviewed-by: Bryan Mills <bcmills@google.com> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: David Chase <drchase@google.com>
-rw-r--r--src/cmd/go/internal/load/pkg.go7
-rw-r--r--src/cmd/go/testdata/mod/example.com_deprecated_a_v1.0.0.txt7
-rw-r--r--src/cmd/go/testdata/mod/example.com_deprecated_a_v1.9.0.txt7
-rw-r--r--src/cmd/go/testdata/mod/example.com_undeprecated_v1.0.0.txt7
-rw-r--r--src/cmd/go/testdata/mod/example.com_undeprecated_v1.0.1.txt7
-rw-r--r--src/cmd/go/testdata/script/mod_install_pkg_version.txt13
-rw-r--r--src/cmd/go/testdata/script/mod_list_deprecated.txt2
-rw-r--r--src/cmd/go/testdata/script/mod_run_pkg_version.txt14
8 files changed, 63 insertions, 1 deletions
diff --git a/src/cmd/go/internal/load/pkg.go b/src/cmd/go/internal/load/pkg.go
index 4b40cc9ddb..fd599b5189 100644
--- a/src/cmd/go/internal/load/pkg.go
+++ b/src/cmd/go/internal/load/pkg.go
@@ -3322,6 +3322,13 @@ func PackagesAndErrorsOutsideModule(ctx context.Context, opts PackageOpts, args
return nil, fmt.Errorf("%s: %w", args[0], err)
}
rootMod := qrs[0].Mod
+ deprecation, err := modload.CheckDeprecation(ctx, rootMod)
+ if err != nil {
+ return nil, fmt.Errorf("%s: %w", args[0], err)
+ }
+ if deprecation != "" {
+ fmt.Fprintf(os.Stderr, "go: module %s is deprecated: %s\n", rootMod.Path, modload.ShortMessage(deprecation, ""))
+ }
data, err := modfetch.GoMod(ctx, rootMod.Path, rootMod.Version)
if err != nil {
return nil, fmt.Errorf("%s: %w", args[0], err)
diff --git a/src/cmd/go/testdata/mod/example.com_deprecated_a_v1.0.0.txt b/src/cmd/go/testdata/mod/example.com_deprecated_a_v1.0.0.txt
index 7c29621e83..252c0b8ddb 100644
--- a/src/cmd/go/testdata/mod/example.com_deprecated_a_v1.0.0.txt
+++ b/src/cmd/go/testdata/mod/example.com_deprecated_a_v1.0.0.txt
@@ -10,3 +10,10 @@ module example.com/deprecated/a
go 1.17
-- a.go --
package a
+
+-- cmd/a/a.go --
+package main
+
+import "fmt"
+
+func main() { fmt.Println("a@v1.0.0") }
diff --git a/src/cmd/go/testdata/mod/example.com_deprecated_a_v1.9.0.txt b/src/cmd/go/testdata/mod/example.com_deprecated_a_v1.9.0.txt
index 0613389d1f..bb57295861 100644
--- a/src/cmd/go/testdata/mod/example.com_deprecated_a_v1.9.0.txt
+++ b/src/cmd/go/testdata/mod/example.com_deprecated_a_v1.9.0.txt
@@ -12,3 +12,10 @@ module example.com/deprecated/a
go 1.17
-- a.go --
package a
+
+-- cmd/a/a.go --
+package main
+
+import "fmt"
+
+func main() { fmt.Println("a@v1.9.0") }
diff --git a/src/cmd/go/testdata/mod/example.com_undeprecated_v1.0.0.txt b/src/cmd/go/testdata/mod/example.com_undeprecated_v1.0.0.txt
index a68588eedb..0e18d5078a 100644
--- a/src/cmd/go/testdata/mod/example.com_undeprecated_v1.0.0.txt
+++ b/src/cmd/go/testdata/mod/example.com_undeprecated_v1.0.0.txt
@@ -12,3 +12,10 @@ module example.com/undeprecated
go 1.17
-- undeprecated.go --
package undeprecated
+
+-- cmd/a/a.go --
+package main
+
+import "fmt"
+
+func main() { fmt.Println("a@v1.0.0") }
diff --git a/src/cmd/go/testdata/mod/example.com_undeprecated_v1.0.1.txt b/src/cmd/go/testdata/mod/example.com_undeprecated_v1.0.1.txt
index ecabf322ec..26fe07c5d6 100644
--- a/src/cmd/go/testdata/mod/example.com_undeprecated_v1.0.1.txt
+++ b/src/cmd/go/testdata/mod/example.com_undeprecated_v1.0.1.txt
@@ -12,3 +12,10 @@ module example.com/undeprecated
go 1.17
-- undeprecated.go --
package undeprecated
+
+-- cmd/a/a.go --
+package main
+
+import "fmt"
+
+func main() { fmt.Println("a@v1.0.1") }
diff --git a/src/cmd/go/testdata/script/mod_install_pkg_version.txt b/src/cmd/go/testdata/script/mod_install_pkg_version.txt
index 89dfc1458c..98cf4e4087 100644
--- a/src/cmd/go/testdata/script/mod_install_pkg_version.txt
+++ b/src/cmd/go/testdata/script/mod_install_pkg_version.txt
@@ -182,6 +182,19 @@ env GO111MODULE=
# Verifies #43278.
go install -mod=readonly example.com/cmd/a@v1.0.0
+
+# 'go install pkg@version' should show a deprecation message if the module is deprecated.
+env GO111MODULE=on
+go install example.com/deprecated/a/cmd/a@latest
+stderr '^go: module example.com/deprecated/a is deprecated: in example.com/deprecated/a@v1.9.0$'
+go install example.com/deprecated/a/cmd/a@v1.0.0
+stderr '^go: module example.com/deprecated/a is deprecated: in example.com/deprecated/a@v1.9.0$'
+
+# 'go install pkg@version' does not show a deprecation message if the module is no longer
+# deprecated in its latest version, even if the module is deprecated in its current version.
+go install example.com/undeprecated/cmd/a@v1.0.0
+! stderr 'module.*is deprecated'
+
-- m/go.mod --
module m
diff --git a/src/cmd/go/testdata/script/mod_list_deprecated.txt b/src/cmd/go/testdata/script/mod_list_deprecated.txt
index ee985cccbf..4c1625cff0 100644
--- a/src/cmd/go/testdata/script/mod_list_deprecated.txt
+++ b/src/cmd/go/testdata/script/mod_list_deprecated.txt
@@ -47,6 +47,6 @@ require (
example.com/undeprecated v1.0.0
)
-- go.sum --
-example.com/deprecated/a v1.9.0 h1:pRyvBIZheJpQVVnNW4Fdg8QuoqDgtkCreqZZbASV3BE=
+example.com/deprecated/a v1.9.0 h1:HeC7d0lb7umZa0vCCW+0W3WtBTulO+1Mr32m/Hwzeg8=
example.com/deprecated/a v1.9.0/go.mod h1:Z1uUVshSY9kh6l/2hZ8oA9SBviX2yfaeEpcLDz6AZwY=
example.com/undeprecated v1.0.0/go.mod h1:1qiRbdA9VzJXDqlG26Y41O5Z7YyO+jAD9do8XCZQ+Gg=
diff --git a/src/cmd/go/testdata/script/mod_run_pkg_version.txt b/src/cmd/go/testdata/script/mod_run_pkg_version.txt
index 969852c1ee..5846b9d3f7 100644
--- a/src/cmd/go/testdata/script/mod_run_pkg_version.txt
+++ b/src/cmd/go/testdata/script/mod_run_pkg_version.txt
@@ -82,6 +82,20 @@ stdout '^a@v1.0.0$'
go run -mod=readonly example.com/cmd/a@v1.0.0
stdout '^a@v1.0.0$'
+
+# 'go run pkg@version' should show a deprecation message if the module is deprecated.
+go run example.com/deprecated/a/cmd/a@latest
+stderr '^go: module example.com/deprecated/a is deprecated: in example.com/deprecated/a@v1.9.0$'
+stdout '^a@v1.9.0$'
+go run example.com/deprecated/a/cmd/a@v1.0.0
+stderr '^go: module example.com/deprecated/a is deprecated: in example.com/deprecated/a@v1.9.0$'
+stdout '^a@v1.0.0$'
+
+# 'go run pkg@version' does not show a deprecation message if the module is no longer
+# deprecated in its latest version, even if the module is deprecated in its current version.
+go run example.com/undeprecated/cmd/a@v1.0.0
+! stderr 'module.*is deprecated'
+
-- m/go.mod --
module m