Skip to content

Commit f200f5d

Browse files
add -check flag to gen-accessors.go, gen-iterators.go, and gen-stringify-test.go
1 parent 88c87d1 commit f200f5d

File tree

4 files changed

+76
-53
lines changed

4 files changed

+76
-53
lines changed

github/gen-accessors.go

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ const (
4040

4141
var (
4242
verbose = flag.Bool("v", false, "Print verbose log messages")
43+
check = flag.Bool("check", false, "check wheather generated files are update or not")
4344

4445
sourceTmpl = template.Must(template.New("source").Parse(source))
4546
testTmpl = template.Must(template.New("test").Parse(test))
@@ -67,6 +68,10 @@ var (
6768
}
6869
)
6970

71+
func isCheck() bool {
72+
return *check || os.Getenv("CHECK") == "1"
73+
}
74+
7075
func logf(fmt string, args ...any) {
7176
if *verbose {
7277
log.Printf(fmt, args...)
@@ -233,6 +238,23 @@ func (t *templateData) dump() error {
233238
return fmt.Errorf("format.Source:\n%v\n%v", buf.String(), err)
234239
}
235240

241+
if isCheck() {
242+
logf("Checking %v...", filename)
243+
old, err := os.ReadFile(filename)
244+
if err != nil {
245+
if os.IsNotExist(err) {
246+
return fmt.Errorf("Missing file: %v\n", t.filename)
247+
} else {
248+
return err
249+
}
250+
}
251+
252+
if !bytes.Equal(old, clean) {
253+
return fmt.Errorf("Generated files are out of date. Please run go generate ./... and commit the results")
254+
}
255+
return nil
256+
}
257+
236258
logf("Writing %v...", filename)
237259
if err := os.Chmod(filename, 0o644); err != nil {
238260
return fmt.Errorf("os.Chmod(%q, 0644): %v", filename, err)

github/gen-iterators.go

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ const (
3535

3636
var (
3737
verbose = flag.Bool("v", false, "Print verbose log messages")
38+
check = flag.Bool("check", false, "check wheather generated files are update or not")
3839

3940
sourceTmpl = template.Must(template.New("source").Funcs(template.FuncMap{
4041
"hasPrefix": strings.HasPrefix,
@@ -43,6 +44,10 @@ var (
4344
testTmpl = template.Must(template.New("test").Parse(test))
4445
)
4546

47+
func isCheck() bool {
48+
return *check || os.Getenv("CHECK") == "1"
49+
}
50+
4651
func logf(fmt string, args ...any) {
4752
if *verbose {
4853
log.Printf(fmt, args...)
@@ -599,8 +604,26 @@ func (t *templateData) dump() error {
599604
if err != nil {
600605
return fmt.Errorf("format.Source: %v\n%s", err, buf.String())
601606
}
607+
if isCheck() {
608+
logf("Checking %v...", filename)
609+
old, err := os.ReadFile(filename)
610+
if err != nil {
611+
if os.IsNotExist(err) {
612+
return fmt.Errorf("Missing file: %v\n", t.filename)
613+
} else {
614+
return err
615+
}
616+
}
617+
618+
if !bytes.Equal(old, clean) {
619+
return fmt.Errorf("Generated files are out of date. Please run go generate ./... and commit the results")
620+
}
621+
return nil
622+
}
623+
602624
logf("Writing %v...", filename)
603-
return os.WriteFile(filename, clean, 0o644)
625+
err = os.WriteFile(filename, clean, 0o644)
626+
return err
604627
}
605628

606629
if err := processTemplate(sourceTmpl, t.filename); err != nil {

github/gen-stringify-test.go

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ const (
3737

3838
var (
3939
verbose = flag.Bool("v", false, "Print verbose log messages")
40+
check = flag.Bool("check", false, "check wheather generated files are update or not")
4041

4142
// skipStructMethods lists "struct.method" combos to skip.
4243
skipStructMethods = map[string]bool{}
@@ -83,6 +84,10 @@ var (
8384
sourceTmpl = template.Must(template.New("source").Funcs(funcMap).Parse(source))
8485
)
8586

87+
func isCheck() bool {
88+
return *check || os.Getenv("CHECK") == "1"
89+
}
90+
8691
func main() {
8792
flag.Parse()
8893
fset := token.NewFileSet()
@@ -353,19 +358,29 @@ func (t *templateData) dump() error {
353358
return err
354359
}
355360

356-
logf("Writing %v...", t.filename)
357-
if err := os.Chmod(t.filename, 0o644); err != nil {
358-
return fmt.Errorf("os.Chmod(%q, 0644): %v", t.filename, err)
361+
if isCheck() {
362+
logf("Checking %v...", t.filename)
363+
old, err := os.ReadFile(t.filename)
364+
if err != nil {
365+
if os.IsNotExist(err) {
366+
return fmt.Errorf("Missing file: %v\n", t.filename)
367+
} else {
368+
return err
369+
}
370+
}
371+
372+
if !bytes.Equal(old, clean) {
373+
return fmt.Errorf("Generated files are out of date. Please run go generate ./... and commit the results")
374+
}
375+
return nil
359376
}
360377

378+
logf("Writing %v...", t.filename)
379+
361380
if err := os.WriteFile(t.filename, clean, 0o444); err != nil {
362381
return err
363382
}
364383

365-
if err := os.Chmod(t.filename, 0o444); err != nil {
366-
return fmt.Errorf("os.Chmod(%q, 0444): %v", t.filename, err)
367-
}
368-
369384
return nil
370385
}
371386

script/generate.sh

Lines changed: 8 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,54 +1,17 @@
1-
#!/bin/sh
2-
#/ `script/generate.sh` runs `go generate` on all modules in this repo.
3-
#/ It also runs `script/run-check-structfield-settings.sh -fix` to keep linter
4-
#/ exceptions in `.golangci.yml` up to date.
5-
#/ `script/generate.sh --check` checks that the generated files are up to date.
1+
#!/bin/sh
2+
#/ `script/generate.sh` runs `go generate` on repo.
3+
#/ It also runs `script/run-check-structfield-settings.sh -fix` to keep linter
4+
#/ exceptions in `.golangci.yml` up to date.
5+
#/ `script/generate.sh --check` checks that the generated files are up to date.
66

77
set -e
88

99
CDPATH="" cd -- "$(dirname -- "$0")/.."
1010

1111
if [ "$1" = "--check" ]; then
12-
GENTEMP="$(mktemp -d)"
13-
git worktree add -q --detach "$GENTEMP"
14-
trap 'git worktree remove -f "$GENTEMP"; rm -rf "$GENTEMP"' EXIT
15-
git diff --name-only --diff-filter=D --no-renames HEAD | while read -r f; do
16-
rm -f "$GENTEMP/$f"
17-
done
18-
git ls-files -com --exclude-standard | while read -r f; do
19-
target="$GENTEMP/$f"
20-
mkdir -p "$(dirname -- "$target")"
21-
cp "$f" "$target"
22-
done
23-
if [ -f "$(pwd)"/bin ]; then
24-
ln -s "$(pwd)"/bin "$GENTEMP"/bin
25-
fi
26-
(
27-
cd "$GENTEMP"
28-
git add .
29-
git -c user.name='bot' -c user.email='bot@localhost' -c commit.gpgsign=false commit -m "generate" -q --allow-empty
30-
script/generate.sh
31-
[ -z "$(git status --porcelain)" ] || {
32-
msg="Generated files are out of date. Please run script/generate.sh and commit the results"
33-
if [ -n "$GITHUB_ACTIONS" ]; then
34-
echo "::error ::$msg"
35-
else
36-
echo "$msg" 1>&2
37-
fi
38-
git diff
39-
exit 1
40-
}
41-
)
42-
exit 0
12+
export CHECK=1
4313
fi
4414

45-
MOD_DIRS="$(git ls-files '*go.mod' | xargs dirname | sort)"
15+
go generate ./...
4616

47-
for dir in $MOD_DIRS; do
48-
(
49-
cd "$dir"
50-
go generate ./...
51-
go mod tidy
52-
)
53-
done
54-
script/run-check-structfield-settings.sh -fix
17+
script/run-check-structfield-settings.sh -fix

0 commit comments

Comments
 (0)