1 # 'go install pkg@version' works outside a module.
2 env GO111MODULE=auto
3 go install example.com/cmd/[email protected]
4 exists $GOPATH/bin/a$GOEXE
5 rm $GOPATH/bin
6
7
8 # 'go install pkg@version' reports an error if modules are disabled.
9 env GO111MODULE=off
10 ! go install example.com/cmd/[email protected]
11 stderr '^go: modules disabled by GO111MODULE=off; see ''go help modules''$'
12 env GO111MODULE=auto
13
14
15 # 'go install pkg@version' ignores go.mod in current directory.
16 cd m
17 cp go.mod go.mod.orig
18 ! go list -m all
19 stderr '^go: example.com/[email protected]: reading http.*/mod/example.com/cmd/@v/v1.1.0-doesnotexist.info: 404 Not Found\n\tserver response: 404 page not found$'
20 stderr '^go: example.com/[email protected]: missing go.sum entry for go.mod file; to add it:\n\tgo mod download example.com/cmd$'
21 go install example.com/cmd/a@latest
22 cmp go.mod go.mod.orig
23 exists $GOPATH/bin/a$GOEXE
24 go version -m $GOPATH/bin/a$GOEXE
25 stdout '^\tmod\texample.com/cmd\tv1.0.0\t' # "latest", not from go.mod
26 rm $GOPATH/bin/a
27 cd ..
28
29
30 # 'go install -modfile=x.mod pkg@version' reports an error, but only if
31 # -modfile is specified explicitly on the command line.
32 cd m
33 env GOFLAGS=-modfile=go.mod
34 go install example.com/cmd/a@latest # same as above
35 env GOFLAGS=
36 ! go install -modfile=go.mod example.com/cmd/a@latest
37 stderr '^go: -modfile cannot be used with commands that ignore the current module$'
38 cd ..
39
40
41 # Every test case requires linking, so we only cover the most important cases
42 # when -short is set.
43 [short] stop
44
45
46 # 'go install pkg@version' works on a module that doesn't have a go.mod file
47 # and with a module whose go.mod file has missing requirements.
48 # With a proxy, the two cases are indistinguishable.
49 go install rsc.io/[email protected]
50 stderr '^go: found rsc.io/quote in rsc.io/quote v1.5.2$'
51 exists $GOPATH/bin/fortune$GOEXE
52 ! exists $GOPATH/pkg/mod/rsc.io/[email protected]/go.mod # no go.mod file
53 go version -m $GOPATH/bin/fortune$GOEXE
54 stdout '^\tdep\trsc.io/quote\tv1.5.2\t' # latest version of fortune's dependency
55 rm $GOPATH/bin
56
57
58 # 'go install dir@version' works like a normal 'go install' command if
59 # dir is a relative or absolute path.
60 env GO111MODULE=on
61 go mod download rsc.io/[email protected]
62 ! go install $GOPATH/pkg/mod/rsc.io/[email protected]
63 stderr '^go: go\.mod file not found in current directory or any parent directory; see ''go help modules''$'
64 ! go install ../pkg/mod/rsc.io/[email protected]
65 stderr '^go: go\.mod file not found in current directory or any parent directory; see ''go help modules''$'
66 mkdir tmp
67 cd tmp
68 go mod init tmp
69 go mod edit -require=rsc.io/[email protected]
70 ! go install -mod=readonly $GOPATH/pkg/mod/rsc.io/[email protected]
71 stderr '^missing go\.sum entry for module providing package rsc\.io/fortune; to add:\n\tgo mod download rsc\.io/fortune$'
72 ! go install -mod=readonly ../../pkg/mod/rsc.io/[email protected]
73 stderr '^missing go\.sum entry for module providing package rsc\.io/fortune; to add:\n\tgo mod download rsc\.io/fortune$'
74 go get rsc.io/[email protected]
75 go install -mod=readonly $GOPATH/pkg/mod/rsc.io/[email protected]
76 exists $GOPATH/bin/fortune$GOEXE
77 cd ..
78 rm tmp
79 rm $GOPATH/bin
80 env GO111MODULE=auto
81
82 # 'go install pkg@version' reports errors for meta packages, std packages,
83 # and directories.
84 ! go install [email protected]
85 stderr '^go: [email protected]: argument must be a package path, not a meta-package$'
86 ! go install [email protected]
87 stderr '^go: [email protected]: argument must not be a package in the standard library$'
88 ! go install example.com//cmd/[email protected]
89 stderr '^go: example.com//cmd/[email protected]: argument must be a clean package path$'
90 ! go install example.com/cmd/[email protected] ./[email protected]
91 stderr '^go: ./[email protected]: argument must be a package path, not a relative path$'
92 ! go install example.com/cmd/[email protected] $GOPATH/src/[email protected]
93 stderr '^go: '$WORK'[/\\]gopath/src/[email protected]: argument must be a package path, not an absolute path$'
94 ! go install example.com/cmd/[email protected] cmd/[email protected]
95 stderr '^package cmd/go not provided by module example.com/[email protected]$'
96
97 # 'go install pkg@version' should accept multiple arguments but report an error
98 # if the version suffixes are different, even if they refer to the same version.
99 go install example.com/cmd/[email protected] example.com/cmd/[email protected]
100 exists $GOPATH/bin/a$GOEXE
101 exists $GOPATH/bin/b$GOEXE
102 rm $GOPATH/bin
103
104 env GO111MODULE=on
105 go list -m example.com/cmd@latest
106 stdout '^example.com/cmd v1.0.0$'
107 env GO111MODULE=auto
108
109 ! go install example.com/cmd/[email protected] example.com/cmd/b@latest
110 stderr '^go: example.com/cmd/b@latest: all arguments must refer to packages in the same module at the same version \(@v1.0.0\)$'
111
112
113 # 'go install pkg@version' should report an error if the arguments are in
114 # different modules.
115 ! go install example.com/cmd/[email protected] rsc.io/[email protected]
116 stderr '^package rsc.io/fortune provided by module rsc.io/[email protected]\n\tAll packages must be provided by the same module \(example.com/[email protected]\).$'
117
118
119 # 'go install pkg@version' should report an error if an argument is not
120 # a main package.
121 ! go install example.com/cmd/[email protected] example.com/cmd/[email protected]
122 stderr '^package example.com/cmd/err is not a main package$'
123
124 # Wildcards should match only main packages. This module has a non-main package
125 # with an error, so we'll know if that gets built.
126 mkdir tmp
127 cd tmp
128 go mod init m
129 go get example.com/[email protected]
130 ! go build example.com/cmd/...
131 stderr 'err[/\\]err.go:3:9: undefined: DoesNotCompile( .*)?$'
132 cd ..
133
134 go install example.com/cmd/[email protected]
135 exists $GOPATH/bin/a$GOEXE
136 exists $GOPATH/bin/b$GOEXE
137 rm $GOPATH/bin
138
139 # If a wildcard matches no packages, we should see a warning.
140 ! go install example.com/cmd/[email protected]
141 stderr '^go: example.com/cmd/nomatch\.\.\[email protected]: module example.com/[email protected] found, but does not contain packages matching example.com/cmd/nomatch\.\.\.$'
142 go install example.com/cmd/[email protected] example.com/cmd/[email protected]
143 stderr '^go: warning: "example.com/cmd/nomatch\.\.\." matched no packages$'
144
145 # If a wildcard matches only non-main packages, we should see a different warning.
146 go install example.com/cmd/[email protected]
147 stderr '^go: warning: "example.com/cmd/err\.\.\." matched only non-main packages$'
148
149
150 # 'go install pkg@version' should report errors if the module contains
151 # replace or exclude directives.
152 go mod download example.com/[email protected]
153 ! go install example.com/cmd/[email protected]
154 cmp stderr replace-err
155
156 go mod download example.com/[email protected]
157 ! go install example.com/cmd/[email protected]
158 cmp stderr exclude-err
159
160 # 'go install pkg@version' should report an error if the module requires a
161 # higher version of itself.
162 ! go install example.com/cmd/[email protected]
163 stderr '^go: example.com/cmd/[email protected]: version constraints conflict:\n\texample.com/[email protected] requires example.com/[email protected], but v1.0.0-newerself is requested$'
164
165
166 # 'go install pkg@version' will only match a retracted version if it's
167 # explicitly requested.
168 env GO111MODULE=on
169 go list -m -versions example.com/cmd
170 ! stdout v1.9.0
171 go list -m -versions -retracted example.com/cmd
172 stdout v1.9.0
173 go install example.com/cmd/a@latest
174 go version -m $GOPATH/bin/a$GOEXE
175 stdout '^\tmod\texample.com/cmd\tv1.0.0\t'
176 go install example.com/cmd/[email protected]
177 go version -m $GOPATH/bin/a$GOEXE
178 stdout '^\tmod\texample.com/cmd\tv1.9.0\t'
179 env GO111MODULE=
180
181 # 'go install pkg@version' succeeds when -mod=readonly is set explicitly.
182 # Verifies #43278.
183 go install -mod=readonly example.com/cmd/[email protected]
184
185
186 # 'go install pkg@version' should show a deprecation message if the module is deprecated.
187 env GO111MODULE=on
188 go install example.com/deprecated/a/cmd/a@latest
189 stderr '^go: module example.com/deprecated/a is deprecated: in example.com/deprecated/[email protected]$'
190 go install example.com/deprecated/a/cmd/[email protected]
191 stderr '^go: module example.com/deprecated/a is deprecated: in example.com/deprecated/[email protected]$'
192
193 # 'go install pkg@version' does not show a deprecation message if the module is no longer
194 # deprecated in its latest version, even if the module is deprecated in its current version.
195 go install example.com/undeprecated/cmd/[email protected]
196 ! stderr 'module.*is deprecated'
197
198 -- m/go.mod --
199 module m
200
201 go 1.16
202
203 require example.com/cmd v1.1.0-doesnotexist
204 -- x/x.go --
205 package main
206
207 func main() {}
208 -- replace-err --
209 go: example.com/cmd/[email protected] (in example.com/[email protected]):
210 The go.mod file for the module providing named packages contains one or
211 more replace directives. It must not contain directives that would cause
212 it to be interpreted differently than if it were the main module.
213 -- exclude-err --
214 go: example.com/cmd/[email protected] (in example.com/[email protected]):
215 The go.mod file for the module providing named packages contains one or
216 more exclude directives. It must not contain directives that would cause
217 it to be interpreted differently than if it were the main module.
218
View as plain text