"os/exec"
"path/filepath"
"runtime"
+ "strings"
)
func goCmd() string {
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)
+ }
+ 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 filepath.Join(goroot, "api", s[0]+".txt")
+ return strings.Join(apiFiles, ",")
}