Skip to content

Commit 7a0e10e

Browse files
mkruskal-googlecopybara-github
authored andcommitted
Release edition defaults CLI arguments.
These are no longer experimental, and are the preferred way to generate edition defaults IR for feature resolution. PiperOrigin-RevId: 614715815
1 parent db9cc39 commit 7a0e10e

File tree

4 files changed

+63
-69
lines changed

4 files changed

+63
-69
lines changed

src/google/protobuf/compiler/command_line_interface.cc

Lines changed: 29 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1386,8 +1386,8 @@ int CommandLineInterface::Run(int argc, const char* const argv[]) {
13861386
}
13871387
}
13881388

1389-
if (!experimental_edition_defaults_out_name_.empty()) {
1390-
if (!WriteExperimentalEditionDefaults(*descriptor_pool)) {
1389+
if (!edition_defaults_out_name_.empty()) {
1390+
if (!WriteEditionDefaults(*descriptor_pool)) {
13911391
return 1;
13921392
}
13931393
}
@@ -1681,9 +1681,9 @@ void CommandLineInterface::Clear() {
16811681
dependency_out_name_.clear();
16821682

16831683
experimental_editions_ = false;
1684-
experimental_edition_defaults_out_name_.clear();
1685-
experimental_edition_defaults_minimum_ = EDITION_UNKNOWN;
1686-
experimental_edition_defaults_maximum_ = EDITION_UNKNOWN;
1684+
edition_defaults_out_name_.clear();
1685+
edition_defaults_minimum_ = EDITION_UNKNOWN;
1686+
edition_defaults_maximum_ = EDITION_UNKNOWN;
16871687

16881688
mode_ = MODE_COMPILE;
16891689
print_mode_ = PRINT_NONE;
@@ -1928,8 +1928,7 @@ CommandLineInterface::ParseArgumentStatus CommandLineInterface::ParseArguments(
19281928
return PARSE_ARGUMENT_FAIL;
19291929
}
19301930
if (mode_ == MODE_COMPILE && output_directives_.empty() &&
1931-
descriptor_set_out_name_.empty() &&
1932-
experimental_edition_defaults_out_name_.empty()) {
1931+
descriptor_set_out_name_.empty() && edition_defaults_out_name_.empty()) {
19331932
std::cerr << "Missing output directives." << std::endl;
19341933
return PARSE_ARGUMENT_FAIL;
19351934
}
@@ -2351,8 +2350,8 @@ CommandLineInterface::InterpretArgument(const std::string& name,
23512350
// experimental, undocumented, unsupported flag. Enable it at your own risk
23522351
// (or, just don't!).
23532352
experimental_editions_ = true;
2354-
} else if (name == "--experimental_edition_defaults_out") {
2355-
if (!experimental_edition_defaults_out_name_.empty()) {
2353+
} else if (name == "--edition_defaults_out") {
2354+
if (!edition_defaults_out_name_.empty()) {
23562355
std::cerr << name << " may only be passed once." << std::endl;
23572356
return PARSE_ARGUMENT_FAIL;
23582357
}
@@ -2367,24 +2366,24 @@ CommandLineInterface::InterpretArgument(const std::string& name,
23672366
<< std::endl;
23682367
return PARSE_ARGUMENT_FAIL;
23692368
}
2370-
experimental_edition_defaults_out_name_ = value;
2371-
} else if (name == "--experimental_edition_defaults_minimum") {
2372-
if (experimental_edition_defaults_minimum_ != EDITION_UNKNOWN) {
2369+
edition_defaults_out_name_ = value;
2370+
} else if (name == "--edition_defaults_minimum") {
2371+
if (edition_defaults_minimum_ != EDITION_UNKNOWN) {
23732372
std::cerr << name << " may only be passed once." << std::endl;
23742373
return PARSE_ARGUMENT_FAIL;
23752374
}
23762375
if (!Edition_Parse(absl::StrCat("EDITION_", value),
2377-
&experimental_edition_defaults_minimum_)) {
2376+
&edition_defaults_minimum_)) {
23782377
std::cerr << name << " unknown edition \"" << value << "\"." << std::endl;
23792378
return PARSE_ARGUMENT_FAIL;
23802379
}
2381-
} else if (name == "--experimental_edition_defaults_maximum") {
2382-
if (experimental_edition_defaults_maximum_ != EDITION_UNKNOWN) {
2380+
} else if (name == "--edition_defaults_maximum") {
2381+
if (edition_defaults_maximum_ != EDITION_UNKNOWN) {
23832382
std::cerr << name << " may only be passed once." << std::endl;
23842383
return PARSE_ARGUMENT_FAIL;
23852384
}
23862385
if (!Edition_Parse(absl::StrCat("EDITION_", value),
2387-
&experimental_edition_defaults_maximum_)) {
2386+
&edition_defaults_maximum_)) {
23882387
std::cerr << name << " unknown edition \"" << value << "\"." << std::endl;
23892388
return PARSE_ARGUMENT_FAIL;
23902389
}
@@ -2724,8 +2723,8 @@ bool CommandLineInterface::GenerateDependencyManifestFile(
27242723
output_filenames.push_back(descriptor_set_out_name_);
27252724
}
27262725

2727-
if (!experimental_edition_defaults_out_name_.empty()) {
2728-
output_filenames.push_back(experimental_edition_defaults_out_name_);
2726+
if (!edition_defaults_out_name_.empty()) {
2727+
output_filenames.push_back(edition_defaults_out_name_);
27292728
}
27302729

27312730
// Create the depfile, even if it will be empty.
@@ -3029,12 +3028,11 @@ bool CommandLineInterface::WriteDescriptorSet(
30293028
return true;
30303029
}
30313030

3032-
bool CommandLineInterface::WriteExperimentalEditionDefaults(
3033-
const DescriptorPool& pool) {
3031+
bool CommandLineInterface::WriteEditionDefaults(const DescriptorPool& pool) {
30343032
const Descriptor* feature_set =
30353033
pool.FindMessageTypeByName("google.protobuf.FeatureSet");
30363034
if (feature_set == nullptr) {
3037-
std::cerr << experimental_edition_defaults_out_name_
3035+
std::cerr << edition_defaults_out_name_
30383036
<< ": Could not find FeatureSet in descriptor pool. Please make "
30393037
"sure descriptor.proto is in your import path"
30403038
<< std::endl;
@@ -3044,31 +3042,31 @@ bool CommandLineInterface::WriteExperimentalEditionDefaults(
30443042
pool.FindAllExtensions(feature_set, &extensions);
30453043

30463044
Edition minimum = PROTOBUF_MINIMUM_EDITION;
3047-
if (experimental_edition_defaults_minimum_ != EDITION_UNKNOWN) {
3048-
minimum = experimental_edition_defaults_minimum_;
3045+
if (edition_defaults_minimum_ != EDITION_UNKNOWN) {
3046+
minimum = edition_defaults_minimum_;
30493047
}
30503048
Edition maximum = PROTOBUF_MAXIMUM_EDITION;
3051-
if (experimental_edition_defaults_maximum_ != EDITION_UNKNOWN) {
3052-
maximum = experimental_edition_defaults_maximum_;
3049+
if (edition_defaults_maximum_ != EDITION_UNKNOWN) {
3050+
maximum = edition_defaults_maximum_;
30533051
}
30543052

30553053
absl::StatusOr<FeatureSetDefaults> defaults =
30563054
FeatureResolver::CompileDefaults(feature_set, extensions, minimum,
30573055
maximum);
30583056
if (!defaults.ok()) {
3059-
std::cerr << experimental_edition_defaults_out_name_ << ": "
3057+
std::cerr << edition_defaults_out_name_ << ": "
30603058
<< defaults.status().message() << std::endl;
30613059
return false;
30623060
}
30633061

30643062
int fd;
30653063
do {
3066-
fd = open(experimental_edition_defaults_out_name_.c_str(),
3064+
fd = open(edition_defaults_out_name_.c_str(),
30673065
O_WRONLY | O_CREAT | O_TRUNC | O_BINARY, 0666);
30683066
} while (fd < 0 && errno == EINTR);
30693067

30703068
if (fd < 0) {
3071-
perror(experimental_edition_defaults_out_name_.c_str());
3069+
perror(edition_defaults_out_name_.c_str());
30723070
return false;
30733071
}
30743072

@@ -3080,16 +3078,16 @@ bool CommandLineInterface::WriteExperimentalEditionDefaults(
30803078
// into version control.
30813079
coded_out.SetSerializationDeterministic(true);
30823080
if (!defaults->SerializeToCodedStream(&coded_out)) {
3083-
std::cerr << experimental_edition_defaults_out_name_ << ": "
3081+
std::cerr << edition_defaults_out_name_ << ": "
30843082
<< strerror(out.GetErrno()) << std::endl;
30853083
out.Close();
30863084
return false;
30873085
}
30883086
}
30893087

30903088
if (!out.Close()) {
3091-
std::cerr << experimental_edition_defaults_out_name_ << ": "
3092-
<< strerror(out.GetErrno()) << std::endl;
3089+
std::cerr << edition_defaults_out_name_ << ": " << strerror(out.GetErrno())
3090+
<< std::endl;
30933091
return false;
30943092
}
30953093

src/google/protobuf/compiler/command_line_interface.h

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -294,8 +294,8 @@ class PROTOC_EXPORT CommandLineInterface {
294294
bool WriteDescriptorSet(
295295
const std::vector<const FileDescriptor*>& parsed_files);
296296

297-
// Implements the --experimental_edition_defaults_out option.
298-
bool WriteExperimentalEditionDefaults(const DescriptorPool& pool);
297+
// Implements the --edition_defaults_out option.
298+
bool WriteEditionDefaults(const DescriptorPool& pool);
299299

300300
// Implements the --dependency_out option
301301
bool GenerateDependencyManifestFile(
@@ -434,9 +434,9 @@ class PROTOC_EXPORT CommandLineInterface {
434434
// FileDescriptorSet should be written. Otherwise, empty.
435435
std::string descriptor_set_out_name_;
436436

437-
std::string experimental_edition_defaults_out_name_;
438-
Edition experimental_edition_defaults_minimum_;
439-
Edition experimental_edition_defaults_maximum_;
437+
std::string edition_defaults_out_name_;
438+
Edition edition_defaults_minimum_;
439+
Edition edition_defaults_maximum_;
440440

441441
// If --dependency_out was given, this is the path to the file where the
442442
// dependency file will be written. Otherwise, empty.

src/google/protobuf/compiler/command_line_interface_unittest.cc

Lines changed: 26 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1808,7 +1808,7 @@ TEST_F(CommandLineInterfaceTest, EditionDefaults) {
18081808
CreateTempFile("google/protobuf/descriptor.proto",
18091809
google::protobuf::DescriptorProto::descriptor()->file()->DebugString());
18101810
Run("protocol_compiler --proto_path=$tmpdir "
1811-
"--experimental_edition_defaults_out=$tmpdir/defaults "
1811+
"--edition_defaults_out=$tmpdir/defaults "
18121812
"google/protobuf/descriptor.proto");
18131813
ExpectNoErrors();
18141814

@@ -1856,8 +1856,8 @@ TEST_F(CommandLineInterfaceTest, EditionDefaultsWithMaximum) {
18561856
CreateTempFile("google/protobuf/descriptor.proto",
18571857
google::protobuf::DescriptorProto::descriptor()->file()->DebugString());
18581858
Run("protocol_compiler --proto_path=$tmpdir "
1859-
"--experimental_edition_defaults_out=$tmpdir/defaults "
1860-
"--experimental_edition_defaults_maximum=99997_TEST_ONLY "
1859+
"--edition_defaults_out=$tmpdir/defaults "
1860+
"--edition_defaults_maximum=99997_TEST_ONLY "
18611861
"google/protobuf/descriptor.proto");
18621862
ExpectNoErrors();
18631863

@@ -1905,9 +1905,9 @@ TEST_F(CommandLineInterfaceTest, EditionDefaultsWithMinimum) {
19051905
CreateTempFile("google/protobuf/descriptor.proto",
19061906
google::protobuf::DescriptorProto::descriptor()->file()->DebugString());
19071907
Run("protocol_compiler --proto_path=$tmpdir "
1908-
"--experimental_edition_defaults_out=$tmpdir/defaults "
1909-
"--experimental_edition_defaults_minimum=99997_TEST_ONLY "
1910-
"--experimental_edition_defaults_maximum=99999_TEST_ONLY "
1908+
"--edition_defaults_out=$tmpdir/defaults "
1909+
"--edition_defaults_minimum=99997_TEST_ONLY "
1910+
"--edition_defaults_maximum=99999_TEST_ONLY "
19111911
"google/protobuf/descriptor.proto");
19121912
ExpectNoErrors();
19131913

@@ -1957,8 +1957,8 @@ TEST_F(CommandLineInterfaceTest, EditionDefaultsWithExtension) {
19571957
CreateTempFile("features.proto",
19581958
pb::TestFeatures::descriptor()->file()->DebugString());
19591959
Run("protocol_compiler --proto_path=$tmpdir "
1960-
"--experimental_edition_defaults_out=$tmpdir/defaults "
1961-
"--experimental_edition_defaults_maximum=99999_TEST_ONLY "
1960+
"--edition_defaults_out=$tmpdir/defaults "
1961+
"--edition_defaults_maximum=99999_TEST_ONLY "
19621962
"features.proto google/protobuf/descriptor.proto");
19631963
ExpectNoErrors();
19641964

@@ -1996,7 +1996,7 @@ TEST_F(CommandLineInterfaceTest, EditionDefaultsDependencyManifest) {
19961996
pb::TestFeatures::descriptor()->file()->DebugString());
19971997

19981998
Run("protocol_compiler --dependency_out=$tmpdir/manifest "
1999-
"--experimental_edition_defaults_out=$tmpdir/defaults "
1999+
"--edition_defaults_out=$tmpdir/defaults "
20002000
"--proto_path=$tmpdir features.proto");
20012001

20022002
ExpectNoErrors();
@@ -2014,7 +2014,7 @@ TEST_F(CommandLineInterfaceTest, EditionDefaultsInvalidMissingDescriptor) {
20142014
message Foo {}
20152015
)schema");
20162016
Run("protocol_compiler --proto_path=$tmpdir "
2017-
"--experimental_edition_defaults_out=$tmpdir/defaults "
2017+
"--edition_defaults_out=$tmpdir/defaults "
20182018
"features.proto");
20192019
ExpectErrorSubstring("Could not find FeatureSet in descriptor pool");
20202020
}
@@ -2023,29 +2023,27 @@ TEST_F(CommandLineInterfaceTest, EditionDefaultsInvalidTwice) {
20232023
CreateTempFile("google/protobuf/descriptor.proto",
20242024
google::protobuf::DescriptorProto::descriptor()->file()->DebugString());
20252025
Run("protocol_compiler --proto_path=$tmpdir "
2026-
"--experimental_edition_defaults_out=$tmpdir/defaults "
2027-
"--experimental_edition_defaults_out=$tmpdir/defaults "
2026+
"--edition_defaults_out=$tmpdir/defaults "
2027+
"--edition_defaults_out=$tmpdir/defaults "
20282028
"google/protobuf/descriptor.proto");
2029-
ExpectErrorSubstring(
2030-
"experimental_edition_defaults_out may only be passed once");
2029+
ExpectErrorSubstring("edition_defaults_out may only be passed once");
20312030
}
20322031

20332032
TEST_F(CommandLineInterfaceTest, EditionDefaultsInvalidEmpty) {
20342033
CreateTempFile("google/protobuf/descriptor.proto",
20352034
google::protobuf::DescriptorProto::descriptor()->file()->DebugString());
20362035
Run("protocol_compiler --proto_path=$tmpdir "
2037-
"--experimental_edition_defaults_out= "
2036+
"--edition_defaults_out= "
20382037
"google/protobuf/descriptor.proto");
2039-
ExpectErrorSubstring(
2040-
"experimental_edition_defaults_out requires a non-empty value");
2038+
ExpectErrorSubstring("edition_defaults_out requires a non-empty value");
20412039
}
20422040

20432041
TEST_F(CommandLineInterfaceTest, EditionDefaultsInvalidCompile) {
20442042
CreateTempFile("google/protobuf/descriptor.proto",
20452043
google::protobuf::DescriptorProto::descriptor()->file()->DebugString());
20462044
Run("protocol_compiler --proto_path=$tmpdir "
20472045
"--encode=pb.CppFeatures "
2048-
"--experimental_edition_defaults_out=$tmpdir/defaults "
2046+
"--edition_defaults_out=$tmpdir/defaults "
20492047
"google/protobuf/descriptor.proto");
20502048
ExpectErrorSubstring("Cannot use --encode or --decode and generate defaults");
20512049
}
@@ -2054,18 +2052,17 @@ TEST_F(CommandLineInterfaceTest, EditionDefaultsInvalidMinimumTwice) {
20542052
CreateTempFile("google/protobuf/descriptor.proto",
20552053
google::protobuf::DescriptorProto::descriptor()->file()->DebugString());
20562054
Run("protocol_compiler --proto_path=$tmpdir "
2057-
"--experimental_edition_defaults_minimum=2023 "
2058-
"--experimental_edition_defaults_minimum=2023 "
2055+
"--edition_defaults_minimum=2023 "
2056+
"--edition_defaults_minimum=2023 "
20592057
"google/protobuf/descriptor.proto");
2060-
ExpectErrorSubstring(
2061-
"experimental_edition_defaults_minimum may only be passed once");
2058+
ExpectErrorSubstring("edition_defaults_minimum may only be passed once");
20622059
}
20632060

20642061
TEST_F(CommandLineInterfaceTest, EditionDefaultsInvalidMinimumEmpty) {
20652062
CreateTempFile("google/protobuf/descriptor.proto",
20662063
google::protobuf::DescriptorProto::descriptor()->file()->DebugString());
20672064
Run("protocol_compiler --proto_path=$tmpdir "
2068-
"--experimental_edition_defaults_minimum= "
2065+
"--edition_defaults_minimum= "
20692066
"google/protobuf/descriptor.proto");
20702067
ExpectErrorSubstring("unknown edition \"\"");
20712068
}
@@ -2074,7 +2071,7 @@ TEST_F(CommandLineInterfaceTest, EditionDefaultsInvalidMinimumUnknown) {
20742071
CreateTempFile("google/protobuf/descriptor.proto",
20752072
google::protobuf::DescriptorProto::descriptor()->file()->DebugString());
20762073
Run("protocol_compiler --proto_path=$tmpdir "
2077-
"--experimental_edition_defaults_minimum=2022 "
2074+
"--edition_defaults_minimum=2022 "
20782075
"google/protobuf/descriptor.proto");
20792076
ExpectErrorSubstring("unknown edition \"2022\"");
20802077
}
@@ -2083,18 +2080,17 @@ TEST_F(CommandLineInterfaceTest, EditionDefaultsInvalidMaximumTwice) {
20832080
CreateTempFile("google/protobuf/descriptor.proto",
20842081
google::protobuf::DescriptorProto::descriptor()->file()->DebugString());
20852082
Run("protocol_compiler --proto_path=$tmpdir "
2086-
"--experimental_edition_defaults_maximum=2023 "
2087-
"--experimental_edition_defaults_maximum=2023 "
2083+
"--edition_defaults_maximum=2023 "
2084+
"--edition_defaults_maximum=2023 "
20882085
"google/protobuf/descriptor.proto");
2089-
ExpectErrorSubstring(
2090-
"experimental_edition_defaults_maximum may only be passed once");
2086+
ExpectErrorSubstring("edition_defaults_maximum may only be passed once");
20912087
}
20922088

20932089
TEST_F(CommandLineInterfaceTest, EditionDefaultsInvalidMaximumEmpty) {
20942090
CreateTempFile("google/protobuf/descriptor.proto",
20952091
google::protobuf::DescriptorProto::descriptor()->file()->DebugString());
20962092
Run("protocol_compiler --proto_path=$tmpdir "
2097-
"--experimental_edition_defaults_maximum= "
2093+
"--edition_defaults_maximum= "
20982094
"google/protobuf/descriptor.proto");
20992095
ExpectErrorSubstring("unknown edition \"\"");
21002096
}
@@ -2103,7 +2099,7 @@ TEST_F(CommandLineInterfaceTest, EditionDefaultsInvalidMaximumUnknown) {
21032099
CreateTempFile("google/protobuf/descriptor.proto",
21042100
google::protobuf::DescriptorProto::descriptor()->file()->DebugString());
21052101
Run("protocol_compiler --proto_path=$tmpdir "
2106-
"--experimental_edition_defaults_maximum=2022 "
2102+
"--edition_defaults_maximum=2022 "
21072103
"google/protobuf/descriptor.proto");
21082104
ExpectErrorSubstring("unknown edition \"2022\"");
21092105
}

src/google/protobuf/editions/defaults.bzl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,10 @@ def _compile_edition_defaults_impl(ctx):
2020
paths.extend(src[ProtoInfo].transitive_proto_path.to_list())
2121

2222
args = ctx.actions.args()
23-
args.add("--experimental_edition_defaults_out", out_file)
23+
args.add("--edition_defaults_out", out_file)
2424

25-
args.add("--experimental_edition_defaults_minimum", ctx.attr.minimum_edition)
26-
args.add("--experimental_edition_defaults_maximum", ctx.attr.maximum_edition)
25+
args.add("--edition_defaults_minimum", ctx.attr.minimum_edition)
26+
args.add("--edition_defaults_maximum", ctx.attr.maximum_edition)
2727
for p in paths:
2828
args.add("--proto_path", p)
2929
for source in sources:

0 commit comments

Comments
 (0)