]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/go: support new location for vet
authorRob Pike <r@golang.org>
Wed, 22 May 2013 04:18:10 +0000 (21:18 -0700)
committerRob Pike <r@golang.org>
Wed, 22 May 2013 04:18:10 +0000 (21:18 -0700)
Also delete the special case for exp, which isn't necessary any more.

Fixes #5529.

R=rsc, nightlyone
CC=golang-dev
https://golang.org/cl/9611048

src/cmd/go/pkg.go
src/cmd/go/tool.go

index b33d800bfb5641623f652c401bf61b9262b36abc..a629d610f498b65407ac1924de18b9f95bf340c6 100644 (file)
@@ -272,11 +272,11 @@ func reusePackage(p *Package, stk *importStack) *Package {
 // isGoTool is the list of directories for Go programs that are installed in
 // $GOROOT/pkg/tool.
 var isGoTool = map[string]bool{
-       "cmd/api":  true,
-       "cmd/cgo":  true,
-       "cmd/fix":  true,
-       "cmd/vet":  true,
-       "cmd/yacc": true,
+       "cmd/api":                            true,
+       "cmd/cgo":                            true,
+       "cmd/fix":                            true,
+       "cmd/yacc":                           true,
+       "code.google.com/p/go.tools/cmd/vet": true,
 }
 
 // expandScanner expands a scanner.List error into all the errors in the list.
@@ -329,7 +329,7 @@ func (p *Package) load(stk *importStack, bp *build.Package, err error) *Package
                if p.build.BinDir != "" {
                        p.target = filepath.Join(p.build.BinDir, elem)
                }
-               if p.Goroot && (isGoTool[p.ImportPath] || strings.HasPrefix(p.ImportPath, "exp/")) {
+               if isGoTool[p.ImportPath] {
                        p.target = filepath.Join(gorootPkg, "tool", full)
                }
                if p.target != "" && buildContext.GOOS == "windows" {
index 299b94cb36364c48bd369ba090c696a1258af3e9..2d7db29152dedb9fdfa818afa74b70a0be6e9708 100644 (file)
@@ -45,12 +45,30 @@ func init() {
 
 const toolWindowsExtension = ".exe"
 
-func tool(name string) string {
-       p := filepath.Join(toolDir, name)
-       if toolIsWindows && name != "pprof" {
-               p += toolWindowsExtension
+func tool(toolName string) string {
+       toolPath := filepath.Join(toolDir, toolName)
+       if toolIsWindows && toolName != "pprof" {
+               toolPath += toolWindowsExtension
        }
-       return p
+       // Give a nice message if there is no tool with that name.
+       if _, err := os.Stat(toolPath); err != nil {
+               if isInGoToolsRepo(toolName) {
+                       fmt.Fprintf(os.Stderr, "go tool: no such tool %q; to install:\n\tgo install code.google.com/p/go.tools/cmd/%s\n", toolName, toolName)
+               } else {
+                       fmt.Fprintf(os.Stderr, "go tool: no such tool %q\n", toolName)
+               }
+               setExitStatus(3)
+               exit()
+       }
+       return toolPath
+}
+
+func isInGoToolsRepo(toolName string) bool {
+       switch toolName {
+       case "vet":
+               return true
+       }
+       return false
 }
 
 func runTool(cmd *Command, args []string) {
@@ -70,10 +88,7 @@ func runTool(cmd *Command, args []string) {
                }
        }
        toolPath := tool(toolName)
-       // Give a nice message if there is no tool with that name.
-       if _, err := os.Stat(toolPath); err != nil {
-               fmt.Fprintf(os.Stderr, "go tool: no such tool %q\n", toolName)
-               setExitStatus(3)
+       if toolPath == "" {
                return
        }
        if toolIsWindows && toolName == "pprof" {
@@ -86,7 +101,6 @@ func runTool(cmd *Command, args []string) {
                        return
                }
        }
-
        if toolN {
                fmt.Printf("%s %s\n", toolPath, strings.Join(args[1:], " "))
                return