]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/go: show deprecation message on go run/install
authorAudi P. R. Putra <doelaudi@gmail.com>
Fri, 15 Sep 2023 16:37:53 +0000 (23:37 +0700)
committerMichael Matloob <matloob@golang.org>
Thu, 21 Mar 2024 17:25:54 +0000 (17:25 +0000)
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>
src/cmd/go/internal/load/pkg.go
src/cmd/go/testdata/mod/example.com_deprecated_a_v1.0.0.txt
src/cmd/go/testdata/mod/example.com_deprecated_a_v1.9.0.txt
src/cmd/go/testdata/mod/example.com_undeprecated_v1.0.0.txt
src/cmd/go/testdata/mod/example.com_undeprecated_v1.0.1.txt
src/cmd/go/testdata/script/mod_install_pkg_version.txt
src/cmd/go/testdata/script/mod_list_deprecated.txt
src/cmd/go/testdata/script/mod_run_pkg_version.txt

index 4b40cc9ddbe5e89d3c5eab17bd095ea707b5bd31..fd599b5189a8f94fd3ea3af1268650fe383fae07 100644 (file)
@@ -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)
index 7c29621e83db969f78eb860c4fd5457a2f1b2223..252c0b8ddb00be7bf3b3f320b078963ff16d7f50 100644 (file)
@@ -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") }
index 0613389d1f3874ffe6a1bbd981f41d679ee8748a..bb572958619b763d4cb764cf148fe25f1b721412 100644 (file)
@@ -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") }
index a68588eedb4ae267a1990f95f93c0e2833dc9df3..0e18d5078a69a3ef6599b923c5e1df1d2360b944 100644 (file)
@@ -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") }
index ecabf322ec486fa99f1455f04241d559a5bfb6a4..26fe07c5d6579c142db09dd09db215bcccdcaaf7 100644 (file)
@@ -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") }
index 89dfc1458ccfe94a73361ec0173d5abab87f38d1..98cf4e408786e3f953c3508eec8db64b2cede212 100644 (file)
@@ -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
 
index ee985cccbf3a91f5a3fc29dd08d2f181630ed8cb..4c1625cff045ab9f1c9e8869be2e2a9954be75f1 100644 (file)
@@ -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=
index 969852c1eee8e4706ed6e1b059e717c6649e2324..5846b9d3f7158177b407f8b29975f9d567749b06 100644 (file)
@@ -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