Text file src/cmd/go/testdata/script/mod_install_pkg_version.txt

     1  # 'go install pkg@version' works outside a module.
     2  env GO111MODULE=auto
     3  go install example.com/cmd/a@v1.0.0
     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/a@v1.0.0
    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/cmd@v1.1.0-doesnotexist: 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/cmd@v1.1.0-doesnotexist: 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/fortune@v1.0.0
    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/fortune@v1.0.0/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/fortune@v1.0.0
    62  ! go install $GOPATH/pkg/mod/rsc.io/fortune@v1.0.0
    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/fortune@v1.0.0
    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/fortune@v1.0.0
    70  ! go install -mod=readonly $GOPATH/pkg/mod/rsc.io/fortune@v1.0.0
    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/fortune@v1.0.0
    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/fortune@v1.0.0
    75  go install -mod=readonly $GOPATH/pkg/mod/rsc.io/fortune@v1.0.0
    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 std@v1.0.0
    85  stderr '^go: std@v1.0.0: argument must be a package path, not a meta-package$'
    86  ! go install fmt@v1.0.0
    87  stderr '^go: fmt@v1.0.0: argument must not be a package in the standard library$'
    88  ! go install example.com//cmd/a@v1.0.0
    89  stderr '^go: example.com//cmd/a@v1.0.0: argument must be a clean package path$'
    90  ! go install example.com/cmd/a@v1.0.0 ./x@v1.0.0
    91  stderr '^go: ./x@v1.0.0: argument must be a package path, not a relative path$'
    92  ! go install example.com/cmd/a@v1.0.0 $GOPATH/src/x@v1.0.0
    93  stderr '^go: '$WORK'[/\\]gopath/src/x@v1.0.0: argument must be a package path, not an absolute path$'
    94  ! go install example.com/cmd/a@v1.0.0 cmd/...@v1.0.0
    95  stderr '^package cmd/go not provided by module example.com/cmd@v1.0.0$'
    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/a@v1.0.0 example.com/cmd/b@v1.0.0
   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/a@v1.0.0 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/a@v1.0.0 rsc.io/fortune@v1.0.0
   116  stderr '^package rsc.io/fortune provided by module rsc.io/fortune@v1.0.0\n\tAll packages must be provided by the same module \(example.com/cmd@v1.0.0\).$'
   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/a@v1.0.0 example.com/cmd/err@v1.0.0
   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/cmd@v1.0.0
   130  ! go build example.com/cmd/...
   131  stderr 'err[/\\]err.go:3:9: undefined: DoesNotCompile( .*)?$'
   132  cd ..
   133  
   134  go install example.com/cmd/...@v1.0.0
   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/nomatch...@v1.0.0
   141  stderr '^go: example.com/cmd/nomatch\.\.\.@v1.0.0: module example.com/cmd@v1.0.0 found, but does not contain packages matching example.com/cmd/nomatch\.\.\.$'
   142  go install example.com/cmd/a@v1.0.0 example.com/cmd/nomatch...@v1.0.0
   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/err...@v1.0.0
   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/cmd@v1.0.0-replace
   153  ! go install example.com/cmd/a@v1.0.0-replace
   154  cmp stderr replace-err
   155  
   156  go mod download example.com/cmd@v1.0.0-exclude
   157  ! go install example.com/cmd/a@v1.0.0-exclude
   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/a@v1.0.0-newerself
   163  stderr '^go: example.com/cmd/a@v1.0.0-newerself: version constraints conflict:\n\texample.com/cmd@v1.0.0-newerself requires example.com/cmd@v1.0.0, 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/a@v1.9.0
   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/a@v1.0.0
   184  
   185  -- m/go.mod --
   186  module m
   187  
   188  go 1.16
   189  
   190  require example.com/cmd v1.1.0-doesnotexist
   191  -- x/x.go --
   192  package main
   193  
   194  func main() {}
   195  -- replace-err --
   196  go: example.com/cmd/a@v1.0.0-replace (in example.com/cmd@v1.0.0-replace):
   197  	The go.mod file for the module providing named packages contains one or
   198  	more replace directives. It must not contain directives that would cause
   199  	it to be interpreted differently than if it were the main module.
   200  -- exclude-err --
   201  go: example.com/cmd/a@v1.0.0-exclude (in example.com/cmd@v1.0.0-exclude):
   202  	The go.mod file for the module providing named packages contains one or
   203  	more exclude directives. It must not contain directives that would cause
   204  	it to be interpreted differently than if it were the main module.
   205  

View as plain text