...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 package main
24
25 import (
26 "bytes"
27 "flag"
28 "fmt"
29 "log"
30 "os"
31 "path/filepath"
32 "strings"
33 )
34
35 func main() {
36 dir := flag.String("dir", "", "directory to run in")
37 check := flag.String("check", "", ".bzl file to check (relative to gazelle root)")
38 generate := flag.String("generate", "", ".bzl file to generate (relative to gazelle root)")
39 flag.Parse()
40 if *check == "" && *generate == "" {
41 log.Fatal("neither -check nor -generate were set")
42 }
43 if *check != "" && *generate != "" {
44 log.Fatal("both -check and -generate were set")
45 }
46 if *dir != "" {
47 if err := os.Chdir(filepath.FromSlash(*dir)); err != nil {
48 log.Fatal(err)
49 }
50 }
51 if *check != "" {
52 *check = filepath.FromSlash(*check)
53 }
54 if *generate != "" {
55 *generate = filepath.FromSlash(*generate)
56 }
57
58 var labels []string
59 err := filepath.Walk(".", func(path string, info os.FileInfo, err error) error {
60 if err != nil {
61 return err
62 }
63
64
65 if strings.HasPrefix(path, "tests/") {
66 return filepath.SkipDir
67 }
68
69 base := filepath.Base(path)
70 if base == "bcr_tests" || base == "docs" || base == "vendor" || base == "third_party" || base == "testdata" || base == ".ijwb" {
71 return filepath.SkipDir
72 }
73 if !info.IsDir() &&
74 (strings.HasSuffix(base, ".go") && !strings.HasSuffix(base, "_test.go") ||
75 base == "BUILD.bazel" || base == "BUILD") {
76 label := filepath.ToSlash(path)
77 if i := strings.LastIndexByte(label, '/'); i >= 0 {
78 label = fmt.Sprintf(`Label("//%s:%s")`, label[:i], label[i+1:])
79 } else {
80 label = fmt.Sprintf(`Label("//:%s")`, label)
81 }
82 labels = append(labels, label)
83 }
84 return nil
85 })
86 if err != nil {
87 log.Fatal(err)
88 }
89
90 buf := &bytes.Buffer{}
91 fmt.Fprintln(buf, "# Code generated by list_repository_tools_srcs.go; DO NOT EDIT.")
92 fmt.Fprintln(buf, "# regenerate with `go run internal/list_repository_tools_srcs.go -dir $PWD -generate internal/go_repository_tools_srcs.bzl`")
93 fmt.Fprintln(buf, "GO_REPOSITORY_TOOLS_SRCS = [")
94 for _, label := range labels {
95 fmt.Fprintf(buf, " %s,\n", label)
96 }
97 fmt.Fprintln(buf, "]")
98
99 if *generate != "" {
100 if err := os.WriteFile(*generate, buf.Bytes(), 0o666); err != nil {
101 log.Fatal(err)
102 }
103 } else {
104 got, err := os.ReadFile(*check)
105 if err != nil {
106 log.Fatal(err)
107 }
108 if !bytes.Equal(got, buf.Bytes()) {
109 log.Fatalf("generated file %s is not up to date", *check)
110 }
111 }
112 }
113
View as plain text