Commit 3e234425 authored by Russ Cox's avatar Russ Cox

cmd/go: remove GO15VENDOREXPERIMENT variable

The Go 1.6 release notes say that Go 1.7 will remove support
for the GO15VENDOREXPERIMENT environment variable,
making vendoring always on. Do that.

Change-Id: Iba8b79532455828869c1a8076a82edce84259468
Reviewed-on: https://go-review.googlesource.com/19615Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
parent 51b624e6
Tools: Tools:
cmd/link: "-X name value" form gone (CL XXX) cmd/go: GO15VENDOREXPERIMENT gone, assumed on (CL 19615)
cmd/link: "-X name value" form gone (CL 19614)
Ports: Ports:
......
...@@ -1022,12 +1022,6 @@ Vendor directories do not affect the placement of new repositories ...@@ -1022,12 +1022,6 @@ Vendor directories do not affect the placement of new repositories
being checked out for the first time by 'go get': those are always being checked out for the first time by 'go get': those are always
placed in the main GOPATH, never in a vendor subtree. placed in the main GOPATH, never in a vendor subtree.
In Go 1.5, as an experiment, setting the environment variable
GO15VENDOREXPERIMENT=1 enabled these features.
As of Go 1.6 they are on by default. To turn them off, set
GO15VENDOREXPERIMENT=0. In Go 1.7, the environment
variable will stop having any effect.
See https://golang.org/s/go15vendor for details. See https://golang.org/s/go15vendor for details.
...@@ -1094,8 +1088,6 @@ Special-purpose environment variables: ...@@ -1094,8 +1088,6 @@ Special-purpose environment variables:
installed in a location other than where it is built. installed in a location other than where it is built.
File names in stack traces are rewritten from GOROOT to File names in stack traces are rewritten from GOROOT to
GOROOT_FINAL. GOROOT_FINAL.
GO15VENDOREXPERIMENT
Set to 0 to disable vendoring semantics.
GO_EXTLINK_ENABLED GO_EXTLINK_ENABLED
Whether the linker should use external linking mode Whether the linker should use external linking mode
when using -linkmode=auto with code that uses cgo. when using -linkmode=auto with code that uses cgo.
......
...@@ -33,11 +33,6 @@ func mkEnv() []envVar { ...@@ -33,11 +33,6 @@ func mkEnv() []envVar {
var b builder var b builder
b.init() b.init()
vendorExpValue := "0"
if go15VendorExperiment {
vendorExpValue = "1"
}
env := []envVar{ env := []envVar{
{"GOARCH", goarch}, {"GOARCH", goarch},
{"GOBIN", gobin}, {"GOBIN", gobin},
...@@ -49,7 +44,6 @@ func mkEnv() []envVar { ...@@ -49,7 +44,6 @@ func mkEnv() []envVar {
{"GORACE", os.Getenv("GORACE")}, {"GORACE", os.Getenv("GORACE")},
{"GOROOT", goroot}, {"GOROOT", goroot},
{"GOTOOLDIR", toolDir}, {"GOTOOLDIR", toolDir},
{"GO15VENDOREXPERIMENT", vendorExpValue},
// disable escape codes in clang errors // disable escape codes in clang errors
{"TERM", "dumb"}, {"TERM", "dumb"},
......
...@@ -421,12 +421,6 @@ Vendor directories do not affect the placement of new repositories ...@@ -421,12 +421,6 @@ Vendor directories do not affect the placement of new repositories
being checked out for the first time by 'go get': those are always being checked out for the first time by 'go get': those are always
placed in the main GOPATH, never in a vendor subtree. placed in the main GOPATH, never in a vendor subtree.
In Go 1.5, as an experiment, setting the environment variable
GO15VENDOREXPERIMENT=1 enabled these features.
As of Go 1.6 they are on by default. To turn them off, set
GO15VENDOREXPERIMENT=0. In Go 1.7, the environment
variable will stop having any effect.
See https://golang.org/s/go15vendor for details. See https://golang.org/s/go15vendor for details.
`, `,
} }
...@@ -497,8 +491,6 @@ Special-purpose environment variables: ...@@ -497,8 +491,6 @@ Special-purpose environment variables:
installed in a location other than where it is built. installed in a location other than where it is built.
File names in stack traces are rewritten from GOROOT to File names in stack traces are rewritten from GOROOT to
GOROOT_FINAL. GOROOT_FINAL.
GO15VENDOREXPERIMENT
Set to 0 to disable vendoring semantics.
GO_EXTLINK_ENABLED GO_EXTLINK_ENABLED
Whether the linker should use external linking mode Whether the linker should use external linking mode
when using -linkmode=auto with code that uses cgo. when using -linkmode=auto with code that uses cgo.
......
...@@ -263,15 +263,6 @@ func reloadPackage(arg string, stk *importStack) *Package { ...@@ -263,15 +263,6 @@ func reloadPackage(arg string, stk *importStack) *Package {
return loadPackage(arg, stk) return loadPackage(arg, stk)
} }
// The Go 1.5 vendoring experiment was enabled by setting GO15VENDOREXPERIMENT=1.
// In Go 1.6 this is on by default and is disabled by setting GO15VENDOREXPERIMENT=0.
// In Go 1.7 the variable will stop having any effect.
// The variable is obnoxiously long so that years from now when people find it in
// their profiles and wonder what it does, there is some chance that a web search
// might answer the question.
// There is a copy of this variable in src/go/build/build.go. Delete that one when this one goes away.
var go15VendorExperiment = os.Getenv("GO15VENDOREXPERIMENT") != "0"
// dirToImportPath returns the pseudo-import path we use for a package // dirToImportPath returns the pseudo-import path we use for a package
// outside the Go path. It begins with _/ and then contains the full path // outside the Go path. It begins with _/ and then contains the full path
// to the directory. If the package lives in c:\home\gopher\my\pkg then // to the directory. If the package lives in c:\home\gopher\my\pkg then
...@@ -361,7 +352,7 @@ func loadImport(path, srcDir string, parent *Package, stk *importStack, importPo ...@@ -361,7 +352,7 @@ func loadImport(path, srcDir string, parent *Package, stk *importStack, importPo
// TODO: After Go 1, decide when to pass build.AllowBinary here. // TODO: After Go 1, decide when to pass build.AllowBinary here.
// See issue 3268 for mistakes to avoid. // See issue 3268 for mistakes to avoid.
buildMode := build.ImportComment buildMode := build.ImportComment
if !go15VendorExperiment || mode&useVendor == 0 || path != origPath { if mode&useVendor == 0 || path != origPath {
// Not vendoring, or we already found the vendored path. // Not vendoring, or we already found the vendored path.
buildMode |= build.IgnoreVendor buildMode |= build.IgnoreVendor
} }
...@@ -371,7 +362,7 @@ func loadImport(path, srcDir string, parent *Package, stk *importStack, importPo ...@@ -371,7 +362,7 @@ func loadImport(path, srcDir string, parent *Package, stk *importStack, importPo
bp.BinDir = gobin bp.BinDir = gobin
} }
if err == nil && !isLocal && bp.ImportComment != "" && bp.ImportComment != path && if err == nil && !isLocal && bp.ImportComment != "" && bp.ImportComment != path &&
(!go15VendorExperiment || (!strings.Contains(path, "/vendor/") && !strings.HasPrefix(path, "vendor/"))) { !strings.Contains(path, "/vendor/") && !strings.HasPrefix(path, "vendor/") {
err = fmt.Errorf("code in directory %s expects import %q", bp.Dir, bp.ImportComment) err = fmt.Errorf("code in directory %s expects import %q", bp.Dir, bp.ImportComment)
} }
p.load(stk, bp, err) p.load(stk, bp, err)
...@@ -412,7 +403,7 @@ func isDir(path string) bool { ...@@ -412,7 +403,7 @@ func isDir(path string) bool {
// x/vendor/path, vendor/path, or else stay path if none of those exist. // x/vendor/path, vendor/path, or else stay path if none of those exist.
// vendoredImportPath returns the expanded path or, if no expansion is found, the original. // vendoredImportPath returns the expanded path or, if no expansion is found, the original.
func vendoredImportPath(parent *Package, path string) (found string) { func vendoredImportPath(parent *Package, path string) (found string) {
if parent == nil || parent.Root == "" || !go15VendorExperiment { if parent == nil || parent.Root == "" {
return path return path
} }
...@@ -580,10 +571,6 @@ func findInternal(path string) (index int, ok bool) { ...@@ -580,10 +571,6 @@ func findInternal(path string) (index int, ok bool) {
// If the import is allowed, disallowVendor returns the original package p. // If the import is allowed, disallowVendor returns the original package p.
// If not, it returns a new package containing just an appropriate error. // If not, it returns a new package containing just an appropriate error.
func disallowVendor(srcDir, path string, p *Package, stk *importStack) *Package { func disallowVendor(srcDir, path string, p *Package, stk *importStack) *Package {
if !go15VendorExperiment {
return p
}
// The stack includes p.ImportPath. // The stack includes p.ImportPath.
// If that's the only thing on the stack, we started // If that's the only thing on the stack, we started
// with a name given on the command line, not an // with a name given on the command line, not an
......
...@@ -383,7 +383,7 @@ func (v *vcsCmd) ping(scheme, repo string) error { ...@@ -383,7 +383,7 @@ func (v *vcsCmd) ping(scheme, repo string) error {
// The parent of dir must exist; dir must not. // The parent of dir must exist; dir must not.
func (v *vcsCmd) create(dir, repo string) error { func (v *vcsCmd) create(dir, repo string) error {
for _, cmd := range v.createCmd { for _, cmd := range v.createCmd {
if !go15VendorExperiment && strings.Contains(cmd, "submodule") { if strings.Contains(cmd, "submodule") {
continue continue
} }
if err := v.run(".", cmd, "dir", dir, "repo", repo); err != nil { if err := v.run(".", cmd, "dir", dir, "repo", repo); err != nil {
...@@ -396,7 +396,7 @@ func (v *vcsCmd) create(dir, repo string) error { ...@@ -396,7 +396,7 @@ func (v *vcsCmd) create(dir, repo string) error {
// download downloads any new changes for the repo in dir. // download downloads any new changes for the repo in dir.
func (v *vcsCmd) download(dir string) error { func (v *vcsCmd) download(dir string) error {
for _, cmd := range v.downloadCmd { for _, cmd := range v.downloadCmd {
if !go15VendorExperiment && strings.Contains(cmd, "submodule") { if strings.Contains(cmd, "submodule") {
continue continue
} }
if err := v.run(dir, cmd); err != nil { if err := v.run(dir, cmd); err != nil {
...@@ -445,7 +445,7 @@ func (v *vcsCmd) tagSync(dir, tag string) error { ...@@ -445,7 +445,7 @@ func (v *vcsCmd) tagSync(dir, tag string) error {
if tag == "" && v.tagSyncDefault != nil { if tag == "" && v.tagSyncDefault != nil {
for _, cmd := range v.tagSyncDefault { for _, cmd := range v.tagSyncDefault {
if !go15VendorExperiment && strings.Contains(cmd, "submodule") { if strings.Contains(cmd, "submodule") {
continue continue
} }
if err := v.run(dir, cmd); err != nil { if err := v.run(dir, cmd); err != nil {
...@@ -456,7 +456,7 @@ func (v *vcsCmd) tagSync(dir, tag string) error { ...@@ -456,7 +456,7 @@ func (v *vcsCmd) tagSync(dir, tag string) error {
} }
for _, cmd := range v.tagSyncCmd { for _, cmd := range v.tagSyncCmd {
if !go15VendorExperiment && strings.Contains(cmd, "submodule") { if strings.Contains(cmd, "submodule") {
continue continue
} }
if err := v.run(dir, cmd, "tag", tag); err != nil { if err := v.run(dir, cmd, "tag", tag); err != nil {
......
...@@ -20,7 +20,6 @@ func TestVendorImports(t *testing.T) { ...@@ -20,7 +20,6 @@ func TestVendorImports(t *testing.T) {
tg := testgo(t) tg := testgo(t)
defer tg.cleanup() defer tg.cleanup()
tg.setenv("GOPATH", filepath.Join(tg.pwd(), "testdata")) tg.setenv("GOPATH", filepath.Join(tg.pwd(), "testdata"))
tg.setenv("GO15VENDOREXPERIMENT", "1")
tg.run("list", "-f", "{{.ImportPath}} {{.Imports}}", "vend/...") tg.run("list", "-f", "{{.ImportPath}} {{.Imports}}", "vend/...")
want := ` want := `
vend [vend/vendor/p r] vend [vend/vendor/p r]
...@@ -51,7 +50,6 @@ func TestVendorBuild(t *testing.T) { ...@@ -51,7 +50,6 @@ func TestVendorBuild(t *testing.T) {
tg := testgo(t) tg := testgo(t)
defer tg.cleanup() defer tg.cleanup()
tg.setenv("GOPATH", filepath.Join(tg.pwd(), "testdata")) tg.setenv("GOPATH", filepath.Join(tg.pwd(), "testdata"))
tg.setenv("GO15VENDOREXPERIMENT", "1")
tg.run("build", "vend/x") tg.run("build", "vend/x")
} }
...@@ -59,7 +57,6 @@ func TestVendorRun(t *testing.T) { ...@@ -59,7 +57,6 @@ func TestVendorRun(t *testing.T) {
tg := testgo(t) tg := testgo(t)
defer tg.cleanup() defer tg.cleanup()
tg.setenv("GOPATH", filepath.Join(tg.pwd(), "testdata")) tg.setenv("GOPATH", filepath.Join(tg.pwd(), "testdata"))
tg.setenv("GO15VENDOREXPERIMENT", "1")
tg.cd(filepath.Join(tg.pwd(), "testdata/src/vend/hello")) tg.cd(filepath.Join(tg.pwd(), "testdata/src/vend/hello"))
tg.run("run", "hello.go") tg.run("run", "hello.go")
tg.grepStdout("hello, world", "missing hello world output") tg.grepStdout("hello, world", "missing hello world output")
...@@ -74,7 +71,6 @@ func TestVendorGOPATH(t *testing.T) { ...@@ -74,7 +71,6 @@ func TestVendorGOPATH(t *testing.T) {
} }
gopath := changeVolume(filepath.Join(tg.pwd(), "testdata"), strings.ToLower) gopath := changeVolume(filepath.Join(tg.pwd(), "testdata"), strings.ToLower)
tg.setenv("GOPATH", gopath) tg.setenv("GOPATH", gopath)
tg.setenv("GO15VENDOREXPERIMENT", "1")
cd := changeVolume(filepath.Join(tg.pwd(), "testdata/src/vend/hello"), strings.ToUpper) cd := changeVolume(filepath.Join(tg.pwd(), "testdata/src/vend/hello"), strings.ToUpper)
tg.cd(cd) tg.cd(cd)
tg.run("run", "hello.go") tg.run("run", "hello.go")
...@@ -85,7 +81,6 @@ func TestVendorTest(t *testing.T) { ...@@ -85,7 +81,6 @@ func TestVendorTest(t *testing.T) {
tg := testgo(t) tg := testgo(t)
defer tg.cleanup() defer tg.cleanup()
tg.setenv("GOPATH", filepath.Join(tg.pwd(), "testdata")) tg.setenv("GOPATH", filepath.Join(tg.pwd(), "testdata"))
tg.setenv("GO15VENDOREXPERIMENT", "1")
tg.cd(filepath.Join(tg.pwd(), "testdata/src/vend/hello")) tg.cd(filepath.Join(tg.pwd(), "testdata/src/vend/hello"))
tg.run("test", "-v") tg.run("test", "-v")
tg.grepStdout("TestMsgInternal", "missing use in internal test") tg.grepStdout("TestMsgInternal", "missing use in internal test")
...@@ -96,7 +91,6 @@ func TestVendorInvalid(t *testing.T) { ...@@ -96,7 +91,6 @@ func TestVendorInvalid(t *testing.T) {
tg := testgo(t) tg := testgo(t)
defer tg.cleanup() defer tg.cleanup()
tg.setenv("GOPATH", filepath.Join(tg.pwd(), "testdata")) tg.setenv("GOPATH", filepath.Join(tg.pwd(), "testdata"))
tg.setenv("GO15VENDOREXPERIMENT", "1")
tg.runFail("build", "vend/x/invalid") tg.runFail("build", "vend/x/invalid")
tg.grepStderr("must be imported as foo", "missing vendor import error") tg.grepStderr("must be imported as foo", "missing vendor import error")
...@@ -106,7 +100,6 @@ func TestVendorImportError(t *testing.T) { ...@@ -106,7 +100,6 @@ func TestVendorImportError(t *testing.T) {
tg := testgo(t) tg := testgo(t)
defer tg.cleanup() defer tg.cleanup()
tg.setenv("GOPATH", filepath.Join(tg.pwd(), "testdata")) tg.setenv("GOPATH", filepath.Join(tg.pwd(), "testdata"))
tg.setenv("GO15VENDOREXPERIMENT", "1")
tg.runFail("build", "vend/x/vendor/p/p") tg.runFail("build", "vend/x/vendor/p/p")
...@@ -173,7 +166,6 @@ func TestVendorGet(t *testing.T) { ...@@ -173,7 +166,6 @@ func TestVendorGet(t *testing.T) {
package p package p
const C = 1`) const C = 1`)
tg.setenv("GOPATH", tg.path(".")) tg.setenv("GOPATH", tg.path("."))
tg.setenv("GO15VENDOREXPERIMENT", "1")
tg.cd(tg.path("src/v")) tg.cd(tg.path("src/v"))
tg.run("run", "m.go") tg.run("run", "m.go")
tg.run("test") tg.run("test")
...@@ -192,7 +184,6 @@ func TestVendorGetUpdate(t *testing.T) { ...@@ -192,7 +184,6 @@ func TestVendorGetUpdate(t *testing.T) {
defer tg.cleanup() defer tg.cleanup()
tg.makeTempdir() tg.makeTempdir()
tg.setenv("GOPATH", tg.path(".")) tg.setenv("GOPATH", tg.path("."))
tg.setenv("GO15VENDOREXPERIMENT", "1")
tg.run("get", "github.com/rsc/go-get-issue-11864") tg.run("get", "github.com/rsc/go-get-issue-11864")
tg.run("get", "-u", "github.com/rsc/go-get-issue-11864") tg.run("get", "-u", "github.com/rsc/go-get-issue-11864")
} }
...@@ -204,7 +195,6 @@ func TestGetSubmodules(t *testing.T) { ...@@ -204,7 +195,6 @@ func TestGetSubmodules(t *testing.T) {
defer tg.cleanup() defer tg.cleanup()
tg.makeTempdir() tg.makeTempdir()
tg.setenv("GOPATH", tg.path(".")) tg.setenv("GOPATH", tg.path("."))
tg.setenv("GO15VENDOREXPERIMENT", "1")
tg.run("get", "-d", "github.com/rsc/go-get-issue-12612") tg.run("get", "-d", "github.com/rsc/go-get-issue-12612")
tg.run("get", "-u", "-d", "github.com/rsc/go-get-issue-12612") tg.run("get", "-u", "-d", "github.com/rsc/go-get-issue-12612")
} }
...@@ -213,7 +203,6 @@ func TestVendorCache(t *testing.T) { ...@@ -213,7 +203,6 @@ func TestVendorCache(t *testing.T) {
tg := testgo(t) tg := testgo(t)
defer tg.cleanup() defer tg.cleanup()
tg.setenv("GOPATH", filepath.Join(tg.pwd(), "testdata/testvendor")) tg.setenv("GOPATH", filepath.Join(tg.pwd(), "testdata/testvendor"))
tg.setenv("GO15VENDOREXPERIMENT", "1")
tg.runFail("build", "p") tg.runFail("build", "p")
tg.grepStderr("must be imported as x", "did not fail to build p") tg.grepStderr("must be imported as x", "did not fail to build p")
} }
...@@ -225,7 +214,6 @@ func TestVendorTest2(t *testing.T) { ...@@ -225,7 +214,6 @@ func TestVendorTest2(t *testing.T) {
defer tg.cleanup() defer tg.cleanup()
tg.makeTempdir() tg.makeTempdir()
tg.setenv("GOPATH", tg.path(".")) tg.setenv("GOPATH", tg.path("."))
tg.setenv("GO15VENDOREXPERIMENT", "1")
tg.run("get", "github.com/rsc/go-get-issue-11864") tg.run("get", "github.com/rsc/go-get-issue-11864")
// build -i should work // build -i should work
...@@ -251,7 +239,6 @@ func TestVendorList(t *testing.T) { ...@@ -251,7 +239,6 @@ func TestVendorList(t *testing.T) {
defer tg.cleanup() defer tg.cleanup()
tg.makeTempdir() tg.makeTempdir()
tg.setenv("GOPATH", tg.path(".")) tg.setenv("GOPATH", tg.path("."))
tg.setenv("GO15VENDOREXPERIMENT", "1")
tg.run("get", "github.com/rsc/go-get-issue-11864") tg.run("get", "github.com/rsc/go-get-issue-11864")
tg.run("list", "-f", `{{join .TestImports "\n"}}`, "github.com/rsc/go-get-issue-11864/t") tg.run("list", "-f", `{{join .TestImports "\n"}}`, "github.com/rsc/go-get-issue-11864/t")
...@@ -272,7 +259,6 @@ func TestVendor12156(t *testing.T) { ...@@ -272,7 +259,6 @@ func TestVendor12156(t *testing.T) {
tg := testgo(t) tg := testgo(t)
defer tg.cleanup() defer tg.cleanup()
tg.setenv("GOPATH", filepath.Join(tg.pwd(), "testdata/testvendor2")) tg.setenv("GOPATH", filepath.Join(tg.pwd(), "testdata/testvendor2"))
tg.setenv("GO15VENDOREXPERIMENT", "1")
tg.cd(filepath.Join(tg.pwd(), "testdata/testvendor2/src/p")) tg.cd(filepath.Join(tg.pwd(), "testdata/testvendor2/src/p"))
tg.runFail("build", "p.go") tg.runFail("build", "p.go")
tg.grepStderrNot("panic", "panicked") tg.grepStderrNot("panic", "panicked")
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment