diff options
| author | Russ Cox <rsc@golang.org> | 2022-09-13 09:51:55 -0400 |
|---|---|---|
| committer | Gopher Robot <gobot@golang.org> | 2022-11-02 19:08:10 +0000 |
| commit | ca8b31920a23541dda56bc76d3ddcaef3c3c0866 (patch) | |
| tree | 9e3367dc522840640e73be92544d3a568ab37997 /src/cmd/api | |
| parent | be7068fb0804f661515c678bee9224b90b32869a (diff) | |
| download | go-ca8b31920a23541dda56bc76d3ddcaef3c3c0866.tar.xz | |
cmd/api: make check pickier about api/*.txt
We don't have a formatter for these files, so check here that
they are in the right form to allow 'cat next/*.txt >go1.X.txt'
at the end of each cycle.
Fix the api files that the check finds.
Change-Id: I0c5e4ab11751c7d0afce32503131d487313f41c0
Reviewed-on: https://go-review.googlesource.com/c/go/+/431335
Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>
Auto-Submit: Russ Cox <rsc@golang.org>
Reviewed-by: Dmitri Shuralyov <dmitshur@golang.org>
Run-TryBot: Russ Cox <rsc@golang.org>
TryBot-Result: Gopher Robot <gobot@golang.org>
Diffstat (limited to 'src/cmd/api')
| -rw-r--r-- | src/cmd/api/goapi.go | 43 |
1 files changed, 33 insertions, 10 deletions
diff --git a/src/cmd/api/goapi.go b/src/cmd/api/goapi.go index e6bf62df1f..894657c117 100644 --- a/src/cmd/api/goapi.go +++ b/src/cmd/api/goapi.go @@ -126,7 +126,11 @@ func setContexts() { var internalPkg = regexp.MustCompile(`(^|/)internal($|/)`) +var exitCode = 0 + func main() { + log.SetPrefix("api: ") + log.SetFlags(0) flag.Parse() if build.Default.GOROOT == "" { @@ -199,16 +203,14 @@ func main() { } } - fail := false + bw := bufio.NewWriter(os.Stdout) defer func() { - if fail { - os.Exit(1) + bw.Flush() + if exitCode != 0 { + os.Exit(exitCode) } }() - bw := bufio.NewWriter(os.Stdout) - defer bw.Flush() - if *checkFiles == "" { sort.Strings(features) for _, f := range features { @@ -228,7 +230,9 @@ func main() { } } exception := fileFeatures(*exceptFile) - fail = !compareAPI(bw, features, required, optional, exception, *allowNew) + if !compareAPI(bw, features, required, optional, exception, *allowNew) { + exitCode = 1 + } } // export emits the exported package features. @@ -362,9 +366,26 @@ func fileFeatures(filename string) []string { } bs, err := os.ReadFile(filename) if err != nil { - log.Fatalf("Error reading file %s: %v", filename, err) + log.Fatal(err) } s := string(bs) + + // Diagnose common mistakes people make, + // since there is no apifmt to format these files. + // The missing final newline is important for the + // final release step of cat next/*.txt >go1.X.txt. + // If the files don't end in full lines, the concatenation goes awry. + if strings.Contains(s, "\r") { + log.Printf("%s: contains CRLFs", filename) + exitCode = 1 + } + if s == "" { + log.Printf("%s: empty file", filename) + exitCode = 1 + } else if s[len(s)-1] != '\n' { + log.Printf("%s: missing final newline", filename) + exitCode = 1 + } s = aliasReplacer.Replace(s) lines := strings.Split(s, "\n") var nonblank []string @@ -376,11 +397,13 @@ func fileFeatures(filename string) []string { if needApproval { feature, approval, ok := strings.Cut(line, "#") if !ok { - log.Fatalf("%s:%d: missing proposal approval\n", filename, i+1) + log.Printf("%s:%d: missing proposal approval\n", filename, i+1) + exitCode = 1 } _, err := strconv.Atoi(approval) if err != nil { - log.Fatalf("%s:%d: malformed proposal approval #%s\n", filename, i+1, approval) + log.Printf("%s:%d: malformed proposal approval #%s\n", filename, i+1, approval) + exitCode = 1 } line = strings.TrimSpace(feature) } |
