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:
parent
2fb9fe48c6
commit
43123903ca
@ -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, ",")
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user