diff options
Diffstat (limited to 'src/cmd/go')
-rw-r--r-- | src/cmd/go/build.go | 44 | ||||
-rw-r--r-- | src/cmd/go/discovery.go | 1 | ||||
-rw-r--r-- | src/cmd/go/doc.go | 43 | ||||
-rw-r--r-- | src/cmd/go/go11.go | 10 | ||||
-rw-r--r-- | src/cmd/go/main.go | 11 | ||||
-rw-r--r-- | src/cmd/go/pkg.go | 7 | ||||
-rwxr-xr-x | src/cmd/go/test.bash | 39 | ||||
-rw-r--r-- | src/cmd/go/test.go | 9 | ||||
-rw-r--r-- | src/cmd/go/testdata/errmsg/x.go | 3 | ||||
-rw-r--r-- | src/cmd/go/testdata/errmsg/x1_test.go | 3 | ||||
-rw-r--r-- | src/cmd/go/testdata/errmsg/x_test.go | 3 | ||||
-rw-r--r-- | src/cmd/go/vet.go | 2 |
12 files changed, 113 insertions, 62 deletions
diff --git a/src/cmd/go/build.go b/src/cmd/go/build.go index 38fc43ef1..e7f3fb5bb 100644 --- a/src/cmd/go/build.go +++ b/src/cmd/go/build.go @@ -40,9 +40,13 @@ build writes the resulting executable to output. Otherwise build compiles the packages but discards the results, serving only as a check that the packages can be built. -The -o flag specifies the output file name. If not specified, the -name is packagename.a (for a non-main package) or the base -name of the first source file (for a main package). +The -o flag specifies the output file name. If not specified, the +output file name depends on the arguments and derives from the name +of the package, such as p.a for package p, unless p is 'main'. If +the package is main and file names are provided, the file name +derives from the first file name mentioned, such as f1 for 'go build +f1.go f2.go'; with no files provided ('go build'), the output file +name is the base name of the containing directory. The build flags are shared by the build, install, run, and test commands: @@ -53,6 +57,9 @@ The build flags are shared by the build, install, run, and test commands: -p n the number of builds that can be run in parallel. The default is the number of CPUs available. + -race + enable data race detection. + Supported only on linux/amd64, darwin/amd64 and windows/amd64. -v print the names of packages as they are compiled. -work @@ -60,20 +67,22 @@ The build flags are shared by the build, install, run, and test commands: do not delete it when exiting. -x print the commands. - -race - enable data race detection. - Supported only on linux/amd64, darwin/amd64 and windows/amd64. -ccflags 'arg list' - arguments to pass on each 5c, 6c, or 8c compiler invocation + arguments to pass on each 5c, 6c, or 8c compiler invocation. -compiler name - name of compiler to use, as in runtime.Compiler (gccgo or gc) + name of compiler to use, as in runtime.Compiler (gccgo or gc). -gccgoflags 'arg list' - arguments to pass on each gccgo compiler/linker invocation + arguments to pass on each gccgo compiler/linker invocation. -gcflags 'arg list' - arguments to pass on each 5g, 6g, or 8g compiler invocation + arguments to pass on each 5g, 6g, or 8g compiler invocation. + -installsuffix suffix + a suffix to use in the name of the package installation directory, + in order to keep output separate from default builds. + If using the -race flag, the install suffix is automatically set to race + or, if set explicitly, has _race appended to it. -ldflags 'flag list' - arguments to pass on each 5l, 6l, or 8l linker invocation + arguments to pass on each 5l, 6l, or 8l linker invocation. -tags 'tag list' a list of build tags to consider satisfied during the build. See the documentation for the go/build package for @@ -153,6 +162,7 @@ func addBuildFlags(cmd *Command) { cmd.Flag.BoolVar(&buildA, "a", false, "") cmd.Flag.BoolVar(&buildN, "n", false, "") cmd.Flag.IntVar(&buildP, "p", buildP, "") + cmd.Flag.StringVar(&buildContext.InstallSuffix, "installsuffix", "", "") cmd.Flag.BoolVar(&buildV, "v", false, "") cmd.Flag.BoolVar(&buildX, "x", false, "") cmd.Flag.BoolVar(&buildWork, "work", false, "") @@ -391,7 +401,9 @@ var ( func (b *builder) init() { var err error - b.print = fmt.Print + b.print = func(a ...interface{}) (int, error) { + return fmt.Fprint(os.Stderr, a...) + } b.actionCache = make(map[cacheKey]*action) b.mkdirCache = make(map[string]bool) @@ -1289,7 +1301,6 @@ func (b *builder) runOut(dir string, desc string, cmdargs ...interface{}) ([]byt return buf.Bytes(), err } - panic("unreachable") } // mkdir makes the named directory. @@ -1632,7 +1643,7 @@ func (b *builder) libgcc(p *Package) (string, error) { // print function to capture the command-line. This // let's us assign it to $LIBGCC and produce a valid // buildscript for cgo packages. - b.print = func(a ...interface{}) (n int, err error) { + b.print = func(a ...interface{}) (int, error) { return fmt.Fprint(&buf, a...) } } @@ -2083,6 +2094,9 @@ func raceInit() { buildGcflags = append(buildGcflags, "-race") buildLdflags = append(buildLdflags, "-race") buildCcflags = append(buildCcflags, "-D", "RACE") - buildContext.InstallTag = "race" + if buildContext.InstallSuffix != "" { + buildContext.InstallSuffix += "_" + } + buildContext.InstallSuffix += "race" buildContext.BuildTags = append(buildContext.BuildTags, "race") } diff --git a/src/cmd/go/discovery.go b/src/cmd/go/discovery.go index d9f930867..047834050 100644 --- a/src/cmd/go/discovery.go +++ b/src/cmd/go/discovery.go @@ -48,7 +48,6 @@ func parseMetaGoImports(r io.Reader) (imports []metaImport) { }) } } - return } // attrValue returns the attribute value for the case-insensitive key diff --git a/src/cmd/go/doc.go b/src/cmd/go/doc.go index 0297b7602..a8a9b66aa 100644 --- a/src/cmd/go/doc.go +++ b/src/cmd/go/doc.go @@ -2,6 +2,9 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +// DO NOT EDIT THIS FILE. GENERATED BY mkdoc.sh. +// Edit the documentation in other files and rerun mkdoc.sh to generate this one. + /* Go is a tool for managing Go source code. @@ -56,9 +59,13 @@ build writes the resulting executable to output. Otherwise build compiles the packages but discards the results, serving only as a check that the packages can be built. -The -o flag specifies the output file name. If not specified, the -name is packagename.a (for a non-main package) or the base -name of the first source file (for a main package). +The -o flag specifies the output file name. If not specified, the +output file name depends on the arguments and derives from the name +of the package, such as p.a for package p, unless p is 'main'. If +the package is main and file names are provided, the file name +derives from the first file name mentioned, such as f1 for 'go build +f1.go f2.go'; with no files provided ('go build'), the output file +name is the base name of the containing directory. The build flags are shared by the build, install, run, and test commands: @@ -69,6 +76,9 @@ The build flags are shared by the build, install, run, and test commands: -p n the number of builds that can be run in parallel. The default is the number of CPUs available. + -race + enable data race detection. + Supported only on linux/amd64, darwin/amd64 and windows/amd64. -v print the names of packages as they are compiled. -work @@ -76,20 +86,22 @@ The build flags are shared by the build, install, run, and test commands: do not delete it when exiting. -x print the commands. - -race - enable data race detection. - Supported only on linux/amd64, darwin/amd64 and windows/amd64. -ccflags 'arg list' - arguments to pass on each 5c, 6c, or 8c compiler invocation + arguments to pass on each 5c, 6c, or 8c compiler invocation. -compiler name - name of compiler to use, as in runtime.Compiler (gccgo or gc) + name of compiler to use, as in runtime.Compiler (gccgo or gc). -gccgoflags 'arg list' - arguments to pass on each gccgo compiler/linker invocation + arguments to pass on each gccgo compiler/linker invocation. -gcflags 'arg list' - arguments to pass on each 5g, 6g, or 8g compiler invocation + arguments to pass on each 5g, 6g, or 8g compiler invocation. + -installsuffix suffix + a suffix to use in the name of the package installation directory, + in order to keep output separate from default builds. + If using the -race flag, the install suffix is automatically set to race + or, if set explicitly, has _race appended to it. -ldflags 'flag list' - arguments to pass on each 5l, 6l, or 8l linker invocation + arguments to pass on each 5l, 6l, or 8l linker invocation. -tags 'tag list' a list of build tags to consider satisfied during the build. See the documentation for the go/build package for @@ -679,6 +691,11 @@ Description of testing flags The 'go test' command takes both flags that apply to 'go test' itself and flags that apply to the resulting test binary. +Several of the flags control profiling and write an execution profile +suitable for "go tool pprof"; run "go tool pprof help" for more +information. The --alloc_space, --alloc_objects, and --show_bytes +options of pprof control how the information is presented. + The following flags are recognized by the 'go test' command and control the execution of any test: @@ -716,8 +733,8 @@ control the execution of any test: Write a CPU profile to the specified file before exiting. -memprofile mem.out - Write a memory profile to the specified file when all tests - are complete. + Write a memory profile to the specified file after all tests + have passed. -memprofilerate n Enable more precise (and expensive) memory profiles by setting diff --git a/src/cmd/go/go11.go b/src/cmd/go/go11.go new file mode 100644 index 000000000..8a434dfed --- /dev/null +++ b/src/cmd/go/go11.go @@ -0,0 +1,10 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build go1.1 + +package main + +// Test that go1.1 tag above is included in builds. main.go refers to this definition. +const go11tag = true diff --git a/src/cmd/go/main.go b/src/cmd/go/main.go index bf1dad40f..61e629968 100644 --- a/src/cmd/go/main.go +++ b/src/cmd/go/main.go @@ -108,6 +108,7 @@ func setExitStatus(n int) { } func main() { + _ = go11tag flag.Usage = usage flag.Parse() log.SetFlags(0) @@ -129,8 +130,11 @@ func main() { fmt.Fprintf(os.Stderr, "warning: GOPATH set to GOROOT (%s) has no effect\n", gopath) } else { for _, p := range filepath.SplitList(gopath) { - if strings.Contains(p, "~") && runtime.GOOS != "windows" { - fmt.Fprintf(os.Stderr, "go: GOPATH entry cannot contain shell metacharacter '~': %q\n", p) + // Note: using HasPrefix instead of Contains because a ~ can appear + // in the middle of directory elements, such as /tmp/git-1.8.2~rc3 + // or C:\PROGRA~1. Only ~ as a path prefix has meaning to the shell. + if strings.HasPrefix(p, "~") { + fmt.Fprintf(os.Stderr, "go: GOPATH entry cannot start with shell metacharacter '~': %q\n", p) os.Exit(2) } if build.IsLocalImport(p) { @@ -189,6 +193,9 @@ var documentationTemplate = `// Copyright 2011 The Go Authors. All rights reser // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +// DO NOT EDIT THIS FILE. GENERATED BY mkdoc.sh. +// Edit the documentation in other files and rerun mkdoc.sh to generate this one. + /* {{range .}}{{if .Short}}{{.Short | capitalize}} diff --git a/src/cmd/go/pkg.go b/src/cmd/go/pkg.go index 7fc61fd86..b33d800bf 100644 --- a/src/cmd/go/pkg.go +++ b/src/cmd/go/pkg.go @@ -72,6 +72,7 @@ type Package struct { imports []*Package deps []*Package gofiles []string // GoFiles+CgoFiles+TestGoFiles+XTestGoFiles files, absolute paths + sfiles []string allgofiles []string // gofiles + IgnoredGoFiles, absolute paths target string // installed file for this package (may be executable) fake bool // synthesized package @@ -366,6 +367,12 @@ func (p *Package) load(stk *importStack, bp *build.Package, err error) *Package } sort.Strings(p.gofiles) + p.sfiles = stringList(p.SFiles) + for i := range p.sfiles { + p.sfiles[i] = filepath.Join(p.Dir, p.sfiles[i]) + } + sort.Strings(p.sfiles) + p.allgofiles = stringList(p.IgnoredGoFiles) for i := range p.allgofiles { p.allgofiles[i] = filepath.Join(p.Dir, p.allgofiles[i]) diff --git a/src/cmd/go/test.bash b/src/cmd/go/test.bash index 460061a11..e2264a46e 100755 --- a/src/cmd/go/test.bash +++ b/src/cmd/go/test.bash @@ -11,18 +11,19 @@ ok=true unset GOPATH unset GOBIN -# Test that error messages have file:line information -# at beginning of line. -for i in testdata/errmsg/*.go -do - # TODO: |cat should not be necessary here but is. - ./testgo test $i 2>&1 | cat >err.out || true - if ! grep -q "^$i:" err.out; then - echo "$i: missing file:line in error message" - cat err.out - ok=false - fi -done +# Test that error messages have file:line information at beginning of +# the line. Also test issue 4917: that the error is on stderr. +d=$(mktemp -d -t testgoXXX) +fn=$d/err.go +echo "package main" > $fn +echo 'import "bar"' >> $fn +./testgo run $fn 2>$d/err.out || true +if ! grep -q "^$fn:" $d/err.out; then + echo "missing file:line in error message" + cat $d/err.out + ok=false +fi +rm -r $d # Test local (./) imports. testlocal() { @@ -51,7 +52,7 @@ testlocal() { ok=false fi - rm -f err.out hello.out hello + rm -f hello.out hello # Test that go install x.go fails. if ./testgo install "testdata/$local/easy.go" >/dev/null 2>&1; then @@ -183,7 +184,7 @@ fi # issue 4186. go get cannot be used to download packages to $GOROOT # Test that without GOPATH set, go get should fail -d=$(mktemp -d -t testgo) +d=$(mktemp -d -t testgoXXX) mkdir -p $d/src/pkg if GOPATH= GOROOT=$d ./testgo get -d code.google.com/p/go.codereview/cmd/hgpatch ; then echo 'go get code.google.com/p/go.codereview/cmd/hgpatch should not succeed with $GOPATH unset' @@ -191,7 +192,7 @@ if GOPATH= GOROOT=$d ./testgo get -d code.google.com/p/go.codereview/cmd/hgpatch fi rm -rf $d # Test that with GOPATH=$GOROOT, go get should fail -d=$(mktemp -d -t testgo) +d=$(mktemp -d -t testgoXXX) mkdir -p $d/src/pkg if GOPATH=$d GOROOT=$d ./testgo get -d code.google.com/p/go.codereview/cmd/hgpatch ; then echo 'go get code.google.com/p/go.codereview/cmd/hgpatch should not succeed with GOPATH=$GOROOT' @@ -200,7 +201,7 @@ fi rm -rf $d # issue 3941: args with spaces -d=$(mktemp -d -t testgo) +d=$(mktemp -d -t testgoXXX) cat >$d/main.go<<EOF package main var extern string @@ -226,7 +227,7 @@ rm -f strings.prof strings.test # issue 4568. test that symlinks don't screw things up too badly. old=$(pwd) -d=$(mktemp -d -t testgo) +d=$(mktemp -d -t testgoXXX) mkdir -p $d/src ( ln -s $d $d/src/dir1 @@ -247,7 +248,7 @@ fi rm -rf $d # issue 4515. -d=$(mktemp -d -t testgo) +d=$(mktemp -d -t testgoXXX) mkdir -p $d/src/example/a $d/src/example/b $d/bin cat >$d/src/example/a/main.go <<EOF package main @@ -280,7 +281,7 @@ unset GOPATH rm -rf $d # issue 4773. case-insensitive collisions -d=$(mktemp -d -t testgo) +d=$(mktemp -d -t testgoXXX) export GOPATH=$d mkdir -p $d/src/example/a $d/src/example/b cat >$d/src/example/a/a.go <<EOF diff --git a/src/cmd/go/test.go b/src/cmd/go/test.go index 3132ab210..de69efe8f 100644 --- a/src/cmd/go/test.go +++ b/src/cmd/go/test.go @@ -81,6 +81,11 @@ var helpTestflag = &Command{ The 'go test' command takes both flags that apply to 'go test' itself and flags that apply to the resulting test binary. +Several of the flags control profiling and write an execution profile +suitable for "go tool pprof"; run "go tool pprof help" for more +information. The --alloc_space, --alloc_objects, and --show_bytes +options of pprof control how the information is presented. + The following flags are recognized by the 'go test' command and control the execution of any test: @@ -118,8 +123,8 @@ control the execution of any test: Write a CPU profile to the specified file before exiting. -memprofile mem.out - Write a memory profile to the specified file when all tests - are complete. + Write a memory profile to the specified file after all tests + have passed. -memprofilerate n Enable more precise (and expensive) memory profiles by setting diff --git a/src/cmd/go/testdata/errmsg/x.go b/src/cmd/go/testdata/errmsg/x.go deleted file mode 100644 index 60f5b6e98..000000000 --- a/src/cmd/go/testdata/errmsg/x.go +++ /dev/null @@ -1,3 +0,0 @@ -package foo - -import "bar" diff --git a/src/cmd/go/testdata/errmsg/x1_test.go b/src/cmd/go/testdata/errmsg/x1_test.go deleted file mode 100644 index eb1a6798c..000000000 --- a/src/cmd/go/testdata/errmsg/x1_test.go +++ /dev/null @@ -1,3 +0,0 @@ -package foo_test - -import "bar" diff --git a/src/cmd/go/testdata/errmsg/x_test.go b/src/cmd/go/testdata/errmsg/x_test.go deleted file mode 100644 index 60f5b6e98..000000000 --- a/src/cmd/go/testdata/errmsg/x_test.go +++ /dev/null @@ -1,3 +0,0 @@ -package foo - -import "bar" diff --git a/src/cmd/go/vet.go b/src/cmd/go/vet.go index eb0b89cca..503e16362 100644 --- a/src/cmd/go/vet.go +++ b/src/cmd/go/vet.go @@ -32,6 +32,6 @@ func runVet(cmd *Command, args []string) { // Use pkg.gofiles instead of pkg.Dir so that // the command only applies to this package, // not to packages in subdirectories. - run(tool("vet"), relPaths(pkg.gofiles)) + run(tool("vet"), relPaths(stringList(pkg.gofiles, pkg.sfiles))) } } |