setapi: error out when file is not on editions yet PiperOrigin-RevId: 707516588 Change-Id: Iac61f5a87c6f46fa309240efaf36c5ebc461727a Reviewed-on: https://go-review.googlesource.com/c/open2opaque/+/637375 Reviewed-by: Michael Stapelberg <stapelberg@google.com> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Auto-Submit: Michael Stapelberg <stapelberg@google.com> Reviewed-by: Chressie Himpel <chressie@google.com>
diff --git a/internal/o2o/setapi/setapi.go b/internal/o2o/setapi/setapi.go index 32d48d9..4a9acdf 100644 --- a/internal/o2o/setapi/setapi.go +++ b/internal/o2o/setapi/setapi.go
@@ -393,6 +393,13 @@ return slices.Insert(in, beginByte, insert...), nil } +func levelLineFor(fopt *protoparse.FileOpt, targetAPI gofeaturespb.GoFeatures_APILevel) (string, error) { + if fopt.Syntax == "editions" { + return fmt.Sprintf("option features.(pb.go).api_level = %s;", targetAPI), nil + } + return "", fmt.Errorf("file %s is not using Protobuf Editions (https://protobuf.dev/editions/overview/) yet", fopt.File) +} + func setFileAPI(path string, content []byte, targetAPI gofeaturespb.GoFeatures_APILevel, skipCleanup, errorOnExempt bool) ([]byte, error) { fopt, err := parse(path, content, true) if err != nil { @@ -426,6 +433,11 @@ return slices.Delete(content, from, to), nil } + levelLine, err := levelLineFor(fopt, targetAPI) + if err != nil { + return nil, err + } + if !fopt.IsExplicit { logf("Inserting API flag %q into file %s", targetAPI, path) @@ -433,10 +445,6 @@ if err != nil { return nil, fmt.Errorf("fileOptionLineNumber: %v", err) } - levelLine := fmt.Sprintf("option go_api_flag = %q;", fromFeatureToOld(targetAPI)) - if fopt.Syntax == "editions" { - levelLine = fmt.Sprintf("option features.(pb.go).api_level = %s;", targetAPI) - } return insertLine(content, levelLine, ln), nil } @@ -454,11 +462,7 @@ return content, nil } logf("Replacing the API flag of file %s", path) - insert := fmt.Sprintf("option go_api_flag = %q;", fromFeatureToOld(targetAPI)) - if fopt.Syntax == "editions" { - insert = fmt.Sprintf("option features.(pb.go).api_level = %s;", targetAPI) - } - content, err = replaceTextRange(content, fopt.APIInfo.TextRange, []byte(insert)) + content, err = replaceTextRange(content, fopt.APIInfo.TextRange, []byte(levelLine)) if err != nil { return nil, fmt.Errorf("replaceTextRange: %v", err) }