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

     1  env GO111MODULE=off
     2  
     3  # go env should default to the right places
     4  env AppData=$HOME/windowsappdata
     5  env home=$HOME/plan9home
     6  go env GOENV
     7  [GOOS:aix] stdout $HOME/.config/go/env
     8  [GOOS:darwin] stdout $HOME'/Library/Application Support/go/env'
     9  [GOOS:freebsd] stdout $HOME/.config/go/env
    10  [GOOS:linux] stdout $HOME/.config/go/env
    11  [GOOS:netbsd] stdout $HOME/.config/go/env
    12  [GOOS:openbsd] stdout $HOME/.config/go/env
    13  [GOOS:plan9] stdout $HOME/plan9home/lib/go/env
    14  [GOOS:windows] stdout $HOME\\windowsappdata\\go\\env
    15  
    16  # Now override it to something writable.
    17  env GOENV=$WORK/envdir/go/env
    18  go env GOENV
    19  stdout envdir[\\/]go[\\/]env
    20  
    21  # go env shows all variables
    22  go env
    23  stdout GOARCH=
    24  stdout GOOS=
    25  stdout GOROOT=
    26  
    27  # go env ignores invalid flag in GOFLAGS environment variable
    28  env GOFLAGS='=true'
    29  go env
    30  
    31  # checking errors
    32  ! go env -w
    33  stderr 'go: no KEY=VALUE arguments given'
    34  ! go env -u
    35  stderr 'go: ''go env -u'' requires an argument'
    36  
    37  # go env -w changes default setting
    38  env root=
    39  [GOOS:windows] env root=c:
    40  env GOPATH=
    41  go env -w GOPATH=$root/non-exist/gopath
    42  ! stderr .+
    43  grep GOPATH=$root/non-exist/gopath $WORK/envdir/go/env
    44  go env GOPATH
    45  stdout /non-exist/gopath
    46  
    47  # go env -w does not override OS environment, and warns about that
    48  env GOPATH=$root/other
    49  go env -w GOPATH=$root/non-exist/gopath2
    50  stderr 'warning: go env -w GOPATH=... does not override conflicting OS environment variable'
    51  go env GOPATH
    52  stdout $root/other
    53  
    54  # but go env -w does do the update, and unsetting the env var exposes the change
    55  env GOPATH=
    56  go env GOPATH
    57  stdout $root/non-exist/gopath2
    58  
    59  # unsetting with go env -u does not warn about OS environment overrides,
    60  # nor does it warn about variables that haven't been set by go env -w.
    61  env GOPATH=$root/other
    62  go env -u GOPATH
    63  ! stderr .+
    64  go env -u GOPATH
    65  ! stderr .+
    66  
    67  # go env -w rejects unknown or bad variables
    68  ! go env -w GOGC=off
    69  stderr 'unknown go command variable GOGC'
    70  ! go env -w GOEXE=.bat
    71  stderr 'GOEXE cannot be modified'
    72  ! go env -w GOVERSION=customversion
    73  stderr 'GOVERSION cannot be modified'
    74  ! go env -w GOROOT=./go
    75  stderr 'GOROOT cannot be modified'
    76  ! go env -w GOENV=/env
    77  stderr 'GOENV can only be set using the OS environment'
    78  ! go env -w GODEBUG=gctrace=1
    79  stderr 'GODEBUG can only be set using the OS environment'
    80  
    81  # go env -w can set multiple variables
    82  env CC=
    83  go env CC
    84  ! stdout ^xyc$
    85  go env -w GOOS=$GOOS CC=xyc
    86  grep CC=xyc $GOENV
    87  # file is maintained in sorted order
    88  grep 'CC=xyc\nGOOS=' $GOENV
    89  go env CC
    90  stdout ^xyc$
    91  
    92  # go env -u unsets effect of go env -w.
    93  go env -u CC
    94  go env CC
    95  ! stdout ^xyc$
    96  
    97  # go env -w rejects double-set variables
    98  ! go env -w GOOS=$GOOS GOOS=$GOOS
    99  stderr 'multiple values for key: GOOS'
   100  
   101  # go env -w rejects missing variables
   102  ! go env -w GOOS
   103  stderr 'arguments must be KEY=VALUE: invalid argument: GOOS'
   104  
   105  # go env -w rejects invalid GO111MODULE values, as otherwise cmd/go would break
   106  ! go env -w GO111MODULE=badvalue
   107  stderr 'invalid GO111MODULE value "badvalue"'
   108  
   109  # go env -w rejects invalid GOPATH values
   110  ! go env -w GOPATH=~/go
   111  stderr 'GOPATH entry cannot start with shell metacharacter'
   112  
   113  ! go env -w GOPATH=./go
   114  stderr 'GOPATH entry is relative; must be absolute path'
   115  
   116  # go env -w rejects invalid GOTMPDIR values
   117  ! go env -w GOTMPDIR=x
   118  stderr 'go: GOTMPDIR must be an absolute path'
   119  
   120  # go env -w should accept absolute GOTMPDIR value
   121  # and should not create it
   122  [GOOS:windows] go env -w GOTMPDIR=$WORK\x\y\z
   123  [!GOOS:windows] go env -w GOTMPDIR=$WORK/x/y/z
   124  ! exists $WORK/x/y/z
   125  # we should be able to clear an env
   126  go env -u GOTMPDIR
   127  go env GOTMPDIR
   128  stdout ^$
   129  
   130  [GOOS:windows] go env -w GOTMPDIR=$WORK\x\y\z
   131  [!GOOS:windows] go env -w GOTMPDIR=$WORK/x/y/z
   132  go env -w GOTMPDIR=
   133  go env GOTMPDIR
   134  stdout ^$
   135  
   136  # go env -w rejects relative CC values
   137  [!GOOS:windows] go env -w CC=/usr/bin/clang
   138  go env -w CC=clang
   139  [!GOOS:windows] ! go env -w CC=./clang
   140  [!GOOS:windows] ! go env -w CC=bin/clang
   141  [!GOOS:windows] stderr 'go: CC entry is relative; must be absolute path'
   142  
   143  [GOOS:windows] go env -w CC=$WORK\bin\clang
   144  [GOOS:windows] ! go env -w CC=.\clang
   145  [GOOS:windows] ! go env -w CC=bin\clang
   146  [GOOS:windows] stderr 'go: CC entry is relative; must be absolute path'
   147  
   148  # go env -w rejects relative CXX values
   149  [!GOOS:windows] go env -w CC=/usr/bin/cpp
   150  go env -w CXX=cpp
   151  [!GOOS:windows] ! go env -w CXX=./cpp
   152  [!GOOS:windows] ! go env -w CXX=bin/cpp
   153  [!GOOS:windows] stderr 'go: CXX entry is relative; must be absolute path'
   154  
   155  [GOOS:windows] go env -w CXX=$WORK\bin\cpp
   156  [GOOS:windows] ! go env -w CXX=.\cpp
   157  [GOOS:windows] ! go env -w CXX=bin\cpp
   158  [GOOS:windows] stderr 'go: CXX entry is relative; must be absolute path'
   159  
   160  # go env -w/-u checks validity of GOOS/ARCH combinations
   161  env GOOS=
   162  env GOARCH=
   163  # check -w doesn't allow invalid GOOS
   164  ! go env -w GOOS=linuxx
   165  stderr 'unsupported GOOS/GOARCH pair linuxx'
   166  # check -w doesn't allow invalid GOARCH
   167  ! go env -w GOARCH=amd644
   168  stderr 'unsupported GOOS/GOARCH.*/amd644$'
   169  # check -w doesn't allow invalid GOOS with valid GOARCH
   170  ! go env -w GOOS=linuxx GOARCH=amd64
   171  stderr 'unsupported GOOS/GOARCH pair linuxx'
   172  # check a valid GOOS and GOARCH values but an incompatible combinations
   173  ! go env -w GOOS=android GOARCH=s390x
   174  stderr 'unsupported GOOS/GOARCH pair android/s390x'
   175  # check that -u considers explicit envs
   176  go env -w GOOS=linux GOARCH=mips
   177  env GOOS=windows
   178  ! go env -u GOOS
   179  stderr 'unsupported GOOS/GOARCH.*windows/mips$'
   180  env GOOS=
   181  
   182  # go env -w should reject relative paths in GOMODCACHE environment.
   183  ! go env -w GOMODCACHE=~/test
   184  stderr 'go: GOMODCACHE entry is relative; must be absolute path: "~/test"'
   185  ! go env -w GOMODCACHE=./test
   186  stderr 'go: GOMODCACHE entry is relative; must be absolute path: "./test"'
   187  
   188  # go env -w checks validity of GOEXPERIMENT
   189  env GOEXPERIMENT=
   190  ! go env -w GOEXPERIMENT=badexp
   191  stderr 'unknown GOEXPERIMENT badexp'
   192  go env -w GOEXPERIMENT=fieldtrack
   193  
   194  # go env -w and go env -u work on unknown fields already in the go/env file
   195  cp bad.env $GOENV
   196  go env GOENV
   197  cat $GOENV
   198  go env
   199  ! stdout UNKNOWN
   200  go env UNKNOWN
   201  stdout yes
   202  go env -w UNKNOWN=maybe
   203  go env UNKNOWN
   204  stdout maybe
   205  go env -u UNKNOWN
   206  go env UNKNOWN
   207  ! stdout . # gone
   208  
   209  -- bad.env --
   210  UNKNOWN=yes
   211  

View as plain text