Skip to content

Commit

Permalink
Revert "cmd/go: fix the default build output name for versioned binar…
Browse files Browse the repository at this point in the history
…ies"

This reverts CL 140863 (commit bf94fc3).

Reason for revert: There was a potential problem spotted in the original
fix, which resulted in it being rolled back from release-branch.go1.12
and not included in Go 1.12.1 release. We intend to improve the fix and
include it in Go 1.12.2 instead. To make the fix easier to backport,
revert this change before re-applying the improved fix (next commit).

Change-Id: If6c785f58482d2531b5927c5ea7002f548c21c7c
Reviewed-on: https://go-review.googlesource.com/c/go/+/168402
Reviewed-by: Hyang-Ah Hana Kim <hyangah@gmail.com>
  • Loading branch information
dmitshur committed Mar 22, 2019
1 parent d923309 commit 1e83369
Show file tree
Hide file tree
Showing 5 changed files with 37 additions and 64 deletions.
71 changes: 32 additions & 39 deletions src/cmd/go/internal/load/pkg.go
Original file line number Diff line number Diff line change
Expand Up @@ -1186,44 +1186,6 @@ var cgoSyscallExclude = map[string]bool{

var foldPath = make(map[string]string)

// DefaultExecName returns the default executable name of the given
// package.
func DefaultExecName(p *Package) string {
_, elem := filepath.Split(p.ImportPath)
if cfg.ModulesEnabled {
// NOTE(rsc): Using p.ImportPath instead of p.Dir
// makes sure we install a package in the root of a
// cached module directory as that package name
// not name@v1.2.3.
// Using p.ImportPath instead of p.Dir
// is probably correct all the time,
// even for non-module-enabled code,
// but I'm not brave enough to change the
// non-module behavior this late in the
// release cycle. Maybe for Go 1.12.
// See golang.org/issue/26869.
_, elem = pathpkg.Split(p.ImportPath)

// If this is example.com/mycmd/v2, it's more useful to install it as mycmd than as v2.
// See golang.org/issue/24667.
isVersion := func(v string) bool {
if len(v) < 2 || v[0] != 'v' || v[1] < '1' || '9' < v[1] {
return false
}
for i := 2; i < len(v); i++ {
if c := v[i]; c < '0' || '9' < c {
return false
}
}
return true
}
if isVersion(elem) {
_, elem = pathpkg.Split(pathpkg.Dir(p.ImportPath))
}
}
return elem
}

// load populates p using information from bp, err, which should
// be the result of calling build.Context.Import.
func (p *Package) load(stk *ImportStack, bp *build.Package, err error) {
Expand Down Expand Up @@ -1264,7 +1226,38 @@ func (p *Package) load(stk *ImportStack, bp *build.Package, err error) {
p.Error = &PackageError{Err: e}
return
}
elem := DefaultExecName(p)
_, elem := filepath.Split(p.Dir)
if cfg.ModulesEnabled {
// NOTE(rsc): Using p.ImportPath instead of p.Dir
// makes sure we install a package in the root of a
// cached module directory as that package name
// not name@v1.2.3.
// Using p.ImportPath instead of p.Dir
// is probably correct all the time,
// even for non-module-enabled code,
// but I'm not brave enough to change the
// non-module behavior this late in the
// release cycle. Maybe for Go 1.12.
// See golang.org/issue/26869.
_, elem = pathpkg.Split(p.ImportPath)

// If this is example.com/mycmd/v2, it's more useful to install it as mycmd than as v2.
// See golang.org/issue/24667.
isVersion := func(v string) bool {
if len(v) < 2 || v[0] != 'v' || v[1] < '1' || '9' < v[1] {
return false
}
for i := 2; i < len(v); i++ {
if c := v[i]; c < '0' || '9' < c {
return false
}
}
return true
}
if isVersion(elem) {
_, elem = pathpkg.Split(pathpkg.Dir(p.ImportPath))
}
}
full := cfg.BuildContext.GOOS + "_" + cfg.BuildContext.GOARCH + "/" + elem
if cfg.BuildContext.GOOS != base.ToolGOOS || cfg.BuildContext.GOARCH != base.ToolGOARCH {
// Install cross-compiled binaries to subdirectories of bin.
Expand Down
2 changes: 1 addition & 1 deletion src/cmd/go/internal/test/test.go
Original file line number Diff line number Diff line change
Expand Up @@ -811,7 +811,7 @@ func builderTest(b *work.Builder, p *load.Package) (buildAction, runAction, prin
if p.ImportPath == "command-line-arguments" {
elem = p.Name
} else {
elem = load.DefaultExecName(p)
_, elem = path.Split(p.ImportPath)
}
testBinary := elem + ".test"

Expand Down
6 changes: 4 additions & 2 deletions src/cmd/go/internal/work/build.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import (
"go/build"
"os"
"os/exec"
"path"
"path/filepath"
"runtime"
"strings"
Expand Down Expand Up @@ -284,7 +285,7 @@ func runBuild(cmd *base.Command, args []string) {
pkgs := load.PackagesForBuild(args)

if len(pkgs) == 1 && pkgs[0].Name == "main" && cfg.BuildO == "" {
cfg.BuildO = load.DefaultExecName(pkgs[0])
_, cfg.BuildO = path.Split(pkgs[0].ImportPath)
cfg.BuildO += cfg.ExeSuffix
}

Expand Down Expand Up @@ -325,7 +326,8 @@ func runBuild(cmd *base.Command, args []string) {
if p.Name != "main" {
continue
}
p.Target = filepath.Join(cfg.BuildO, load.DefaultExecName(p))
_, elem := path.Split(p.ImportPath)
p.Target = filepath.Join(cfg.BuildO, elem)
p.Target += cfg.ExeSuffix
p.Stale = true
p.StaleReason = "build -o flag in use"
Expand Down
6 changes: 0 additions & 6 deletions src/cmd/go/testdata/mod/rsc.io_fortune_v2_v2.0.0.txt
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,3 @@ import "rsc.io/quote"
func main() {
println(quote.Hello())
}
-- fortune_test.go --
package main

import "testing"

func TestFortuneV2(t *testing.T) {}
16 changes: 0 additions & 16 deletions src/cmd/go/testdata/script/mod_build_versioned.txt

This file was deleted.

0 comments on commit 1e83369

Please sign in to comment.