...
Source file src/pkg/cmd/api/run.go
1
2
3
4
5
6
7
8
9 package main
10
11 import (
12 "fmt"
13 "log"
14 "os"
15 "os/exec"
16 "path/filepath"
17 "runtime"
18 "strings"
19 )
20
21 func goCmd() string {
22 var exeSuffix string
23 if runtime.GOOS == "windows" {
24 exeSuffix = ".exe"
25 }
26 path := filepath.Join(runtime.GOROOT(), "bin", "go"+exeSuffix)
27 if _, err := os.Stat(path); err == nil {
28 return path
29 }
30 return "go"
31 }
32
33 var goroot string
34
35 func main() {
36 log.SetFlags(0)
37 goroot = os.Getenv("GOROOT")
38 if goroot == "" {
39 log.Fatal("No $GOROOT set.")
40 }
41
42 apiDir := filepath.Join(goroot, "api")
43 out, err := exec.Command(goCmd(), "tool", "api",
44 "-c", findAPIDirFiles(apiDir),
45 "-next", filepath.Join(apiDir, "next.txt"),
46 "-except", filepath.Join(apiDir, "except.txt")).CombinedOutput()
47 if err != nil {
48 log.Fatalf("Error running API checker: %v\n%s", err, out)
49 }
50 fmt.Print(string(out))
51 }
52
53
54
55 func findAPIDirFiles(apiDir string) string {
56 dir, err := os.Open(apiDir)
57 if err != nil {
58 log.Fatal(err)
59 }
60 defer dir.Close()
61 fs, err := dir.Readdirnames(-1)
62 if err != nil {
63 log.Fatal(err)
64 }
65 var apiFiles []string
66 for _, fn := range fs {
67 if strings.HasPrefix(fn, "go1") {
68 apiFiles = append(apiFiles, filepath.Join(apiDir, fn))
69 }
70 }
71 return strings.Join(apiFiles, ",")
72 }
73
View as plain text