]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/go: make 'go get <module>@none' idempotent
authorBryan C. Mills <bcmills@google.com>
Wed, 1 Aug 2018 17:22:02 +0000 (13:22 -0400)
committerBryan C. Mills <bcmills@google.com>
Tue, 7 Aug 2018 18:34:22 +0000 (18:34 +0000)
Before this change, 'go get <module>@none' for a module not in the build list
would add the module to go.mod (with the explicit version string "none").
Subsequent go commands would fail with 'invalid module version "none"'.

Change-Id: Iebcaeab89eb19959f0a9aeda836f179962953313
Reviewed-on: https://go-review.googlesource.com/127215
Reviewed-by: Russ Cox <rsc@golang.org>
src/cmd/go/internal/modget/get.go
src/cmd/go/testdata/script/mod_get_none.txt [new file with mode: 0644]

index e8b08573d75bbb2443d7c3395ec6ab24f73fafd9..cf0c1acbca649bef10edc45f7e42063cb52eb54d 100644 (file)
@@ -374,7 +374,7 @@ func runGet(cmd *base.Command, args []string) {
        // Now we know the specific version of each path@vers.
        // The final build list will be the union of three build lists:
        //      1. the original build list
-       //      2. the modules named on the command line
+       //      2. the modules named on the command line (other than @none)
        //      3. the upgraded requirements of those modules (if upgrading)
        // Start building those lists.
        // This loop collects (2).
@@ -395,7 +395,9 @@ func runGet(cmd *base.Command, args []string) {
                        continue // already added
                }
                byPath[t.m.Path] = t
-               named = append(named, t.m)
+               if t.m.Version != "none" {
+                       named = append(named, t.m)
+               }
        }
        base.ExitIfErrors()
 
diff --git a/src/cmd/go/testdata/script/mod_get_none.txt b/src/cmd/go/testdata/script/mod_get_none.txt
new file mode 100644 (file)
index 0000000..5aec209
--- /dev/null
@@ -0,0 +1,12 @@
+env GO111MODULE=on
+
+go mod init example.com/foo
+
+# 'go get bar@none' should be a no-op if module bar is not active.
+go get example.com/bar@none
+go list -m all
+! stdout example.com/bar
+
+go get example.com/bar@none
+go list -m all
+! stdout example.com/bar