1
0
mirror of https://github.com/golang/go synced 2024-11-19 15:44:44 -07:00

cmd/api: don’t rely on hardcoded go versions

Instead of requiring that cmd/api/run.go be edited upon each
release to include the next Go version number, look in $GOROOT/api
for files with the prefix go1* and use those instead to perform
API checks.

Change-Id: I5d9407f2bd368ff5e62f487cccdd245641ca9c9b
Reviewed-on: https://go-review.googlesource.com/83355
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
This commit is contained in:
Andrew Bonventre 2017-12-11 16:21:07 -05:00
parent 2fb9fe48c6
commit 43123903ca

View File

@ -15,6 +15,7 @@ import (
"os/exec"
"path/filepath"
"runtime"
"strings"
)
func goCmd() string {
@ -38,21 +39,34 @@ func main() {
log.Fatal("No $GOROOT set.")
}
apiDir := filepath.Join(goroot, "api")
out, err := exec.Command(goCmd(), "tool", "api",
"-c", file("go1", "go1.1", "go1.2", "go1.3", "go1.4", "go1.5", "go1.6", "go1.7", "go1.8", "go1.9", "go1.10"),
"-next", file("next"),
"-except", file("except")).CombinedOutput()
"-c", findAPIDirFiles(apiDir),
"-next", filepath.Join(apiDir, "next.txt"),
"-except", filepath.Join(apiDir, "except.txt")).CombinedOutput()
if err != nil {
log.Fatalf("Error running API checker: %v\n%s", err, out)
}
fmt.Print(string(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:]...)
// findAPIDirFiles returns a comma-separated list of Go API files
// (go1.txt, go1.1.txt, etc.) located in apiDir.
func findAPIDirFiles(apiDir string) string {
dir, err := os.Open(apiDir)
if err != nil {
log.Fatal(err)
}
return filepath.Join(goroot, "api", s[0]+".txt")
defer dir.Close()
fs, err := dir.Readdirnames(-1)
if err != nil {
log.Fatal(err)
}
var apiFiles []string
for _, fn := range fs {
if strings.HasPrefix(fn, "go1") {
apiFiles = append(apiFiles, filepath.Join(apiDir, fn))
}
}
return strings.Join(apiFiles, ",")
}