...
▽

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

Documentation: cmd/go/testdata/script

     1env GO111MODULE=off
     2
     3# go env should default to the right places
     4env AppData=$HOME/windowsappdata
     5env home=$HOME/plan9home
     6go 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.
    17env GOENV=$WORK/envdir/go/env
    18go env GOENV
    19stdout envdir[\\/]go[\\/]env
    20
    21# go env shows all variables
    22go env
    23stdout GOARCH=
    24stdout GOOS=
    25stdout GOROOT=
    26
    27# go env ignores invalid flag in GOFLAGS environment variable
    28env GOFLAGS='=true'
    29go env
    30
    31# checking errors
    32! go env -w
    33stderr 'go: no KEY=VALUE arguments given'
    34! go env -u
    35stderr 'go: ''go env -u'' requires an argument'
    36
    37# go env -w changes default setting
    38env root=
    39[GOOS:windows] env root=c:
    40env GOPATH=
    41go env -w GOPATH=$root/non-exist/gopath
    42! stderr .+
    43grep GOPATH=$root/non-exist/gopath $WORK/envdir/go/env
    44go env GOPATH
    45stdout /non-exist/gopath
    46
    47# go env -w does not override OS environment, and warns about that
    48env GOPATH=$root/other
    49go env -w GOPATH=$root/non-exist/gopath2
    50stderr 'warning: go env -w GOPATH=... does not override conflicting OS environment variable'
    51go env GOPATH
    52stdout $root/other
    53
    54# but go env -w does do the update, and unsetting the env var exposes the change
    55env GOPATH=
    56go env GOPATH
    57stdout $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.
    61env GOPATH=$root/other
    62go env -u GOPATH
    63! stderr .+
    64go env -u GOPATH
    65! stderr .+
    66
    67# go env -w rejects unknown or bad variables
    68! go env -w GOGC=off
    69stderr 'unknown go command variable GOGC'
    70! go env -w GOEXE=.bat
    71stderr 'GOEXE cannot be modified'
    72! go env -w GOVERSION=customversion
    73stderr 'GOVERSION cannot be modified'
    74! go env -w GOROOT=./go
    75stderr 'GOROOT cannot be modified'
    76! go env -w GOENV=/env
    77stderr 'GOENV can only be set using the OS environment'
    78! go env -w GODEBUG=gctrace=1
    79stderr 'GODEBUG can only be set using the OS environment'
    80
    81# go env -w can set multiple variables
    82env CC=
    83go env CC
    84! stdout ^xyc$
    85go env -w GOOS=$GOOS CC=xyc
    86grep CC=xyc $GOENV
    87# file is maintained in sorted order
    88grep 'CC=xyc\nGOOS=' $GOENV
    89go env CC
    90stdout ^xyc$
    91
    92# go env -u unsets effect of go env -w.
    93go env -u CC
    94go env CC
    95! stdout ^xyc$
    96
    97# go env -w rejects double-set variables
    98! go env -w GOOS=$GOOS GOOS=$GOOS
    99stderr 'multiple values for key: GOOS'
   100
   101# go env -w rejects missing variables
   102! go env -w GOOS
   103stderr '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
   107stderr 'invalid GO111MODULE value "badvalue"'
   108
   109# go env -w rejects invalid GOPATH values
   110! go env -w GOPATH=~/go
   111stderr 'GOPATH entry cannot start with shell metacharacter'
   112
   113! go env -w GOPATH=./go
   114stderr 'GOPATH entry is relative; must be absolute path'
   115
   116# go env -w rejects invalid GOTMPDIR values
   117! go env -w GOTMPDIR=x
   118stderr '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
   126go env -u GOTMPDIR
   127go env GOTMPDIR
   128stdout ^$
   129
   130[GOOS:windows] go env -w GOTMPDIR=$WORK\x\y\z
   131[!GOOS:windows] go env -w GOTMPDIR=$WORK/x/y/z
   132go env -w GOTMPDIR=
   133go env GOTMPDIR
   134stdout ^$
   135
   136# go env -w rejects relative CC values
   137[!GOOS:windows] go env -w CC=/usr/bin/clang
   138go 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
   150go 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
   161env GOOS=
   162env GOARCH=
   163# check -w doesn't allow invalid GOOS
   164! go env -w GOOS=linuxx
   165stderr 'unsupported GOOS/GOARCH pair linuxx'
   166# check -w doesn't allow invalid GOARCH
   167! go env -w GOARCH=amd644
   168stderr 'unsupported GOOS/GOARCH.*/amd644$'
   169# check -w doesn't allow invalid GOOS with valid GOARCH
   170! go env -w GOOS=linuxx GOARCH=amd64
   171stderr '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
   174stderr 'unsupported GOOS/GOARCH pair android/s390x'
   175# check that -u considers explicit envs
   176go env -w GOOS=linux GOARCH=mips
   177env GOOS=windows
   178! go env -u GOOS
   179stderr 'unsupported GOOS/GOARCH.*windows/mips$'
   180env GOOS=
   181
   182# go env -w should reject relative paths in GOMODCACHE environment.
   183! go env -w GOMODCACHE=~/test
   184stderr 'go: GOMODCACHE entry is relative; must be absolute path: "~/test"'
   185! go env -w GOMODCACHE=./test
   186stderr 'go: GOMODCACHE entry is relative; must be absolute path: "./test"'
   187
   188# go env -w checks validity of GOEXPERIMENT
   189env GOEXPERIMENT=
   190! go env -w GOEXPERIMENT=badexp
   191stderr 'unknown GOEXPERIMENT badexp'
   192go env -w GOEXPERIMENT=fieldtrack
   193
   194# go env -w and go env -u work on unknown fields already in the go/env file
   195cp bad.env $GOENV
   196go env GOENV
   197cat $GOENV
   198go env
   199! stdout UNKNOWN
   200go env UNKNOWN
   201stdout yes
   202go env -w UNKNOWN=maybe
   203go env UNKNOWN
   204stdout maybe
   205go env -u UNKNOWN
   206go env UNKNOWN
   207! stdout . # gone
   208
   209-- bad.env --
   210UNKNOWN=yes

View as plain text