13 const theBigMerge = "0a9027c2bab9ca0d25a5db0f906fd1793774fd67"
16 func isAfterMerge(sha string) bool {
17 cmd := exec.Command("git", "merge-base", "--is-ancestor", theBigMerge, sha)
22 _ = err.(*exec.ExitError)
26 func checkout(sha string) {
27 cmd := exec.Command("git", "checkout", "-q", sha)
34 func build(tool string) {
35 err := exec.Command("go", "build", "-o", "/tmp/"+tool, "honnef.co/go/tools/cmd/"+tool).Run()
41 func run(tool, target string) (time, mem string) {
42 cmd := exec.Command("/usr/bin/time", "-f", "%e %M", "/tmp/"+tool, target)
43 out, _ := cmd.CombinedOutput()
44 lines := bytes.Split(out, []byte("\n"))
45 res := string(lines[len(lines)-2])
46 fields := strings.Split(res, " ")
47 return fields[0], fields[1]
56 flag.StringVar(&shas, "shas", "HEAD", "")
57 flag.StringVar(&targets, "targets", "std", "")
58 flag.StringVar(&version, "version", "unknown", "")
61 for _, sha := range strings.Split(shas, ",") {
63 if isAfterMerge(sha) {
69 for _, target := range strings.Split(targets, ",") {
70 for i := 0; i < N; i++ {
71 time, mem := run(tool, target)
72 fmt.Printf("%s %s %s %s %s\n", sha, version, target, time, mem)