diff options
author | Brad Fitzpatrick <bradfitz@golang.org> | 2013-08-07 13:49:37 -0700 |
---|---|---|
committer | Brad Fitzpatrick <bradfitz@golang.org> | 2013-08-07 13:49:37 -0700 |
commit | 46e751e320bb31483ba3606a574188eb67bfdd30 (patch) | |
tree | 2252a4bedba413799d4213afaa3bc45e85ffb372 /src/cmd/api | |
parent | 45d7967c46ce70701ec3b4f1d7242e657532ce1c (diff) | |
download | go-46e751e320bb31483ba3606a574188eb67bfdd30.tar.gz |
build: change how cmd/api is run in run.bash and run.bat
In prep for Robert's forthcoming cmd/api rewrite which
depends on the go.tools subrepo, we'll need to be more
careful about how and when we run cmd/api.
Rather than implement this policy in both run.bash and
run.bat, this change moves the policy and mechanism into
cmd/api/run.go, which will then evolve.
The plan is in a TODO in run.go.
R=golang-dev, gri
CC=golang-dev
https://codereview.appspot.com/12482044
Diffstat (limited to 'src/cmd/api')
-rw-r--r-- | src/cmd/api/run.go | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/src/cmd/api/run.go b/src/cmd/api/run.go new file mode 100644 index 000000000..8137b2342 --- /dev/null +++ b/src/cmd/api/run.go @@ -0,0 +1,65 @@ +// +build from_src_run + +// 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. + +// The run program is invoked via "go run" from src/run.bash or +// src/run.bat conditionally builds and runs the cmd/api tool. +// +// TODO(bradfitz): the "conditional" condition is always true. +// We should only do this if the user has the hg codereview extension +// enabled and verifies that the go.tools subrepo is checked out with +// a suitably recently version. In prep for the cmd/api rewrite. +package main + +import ( + "fmt" + "log" + "os" + "os/exec" + "path/filepath" + "strconv" +) + +var goroot string + +func main() { + log.SetFlags(0) + goroot = os.Getenv("GOROOT") // should be set by run.{bash,bat} + if goroot == "" { + log.Fatal("No $GOROOT set.") + } + isGoDeveloper := exec.Command("hg", "pq").Run() == nil + if !isGoDeveloper && !forceAPICheck() { + fmt.Println("Skipping cmd/api checks; hg codereview extension not available and GO_FORCE_API_CHECK not set") + return + } + + out, err := exec.Command("go", "install", "--tags=api_tool", "cmd/api").CombinedOutput() + if err != nil { + log.Fatalf("Error installing cmd/api: %v\n%s", err, out) + } + out, err = exec.Command("go", "tool", "api", + "-c", file("go1", "go1.1"), + "-next", file("next"), + "-except", file("except")).CombinedOutput() + if err != nil { + log.Fatalf("Error running API checker: %v\n%s", err, out) + } +} + +// file expands s to $GOROOT/api/s.txt. +// If there are more than 1, they're comma-separated. +func file(s ...string) string { + if len(s) > 1 { + return file(s[0]) + "," + file(s[1:]...) + } + return filepath.Join(goroot, "api", s[0]+".txt") +} + +// GO_FORCE_API_CHECK is set by builders. +func forceAPICheck() bool { + v, _ := strconv.ParseBool(os.Getenv("GO_FORCE_API_CHECK")) + return v +} |