Put the raw descriptor data after __END__ in the Ruby source.

pull/8850/head
Joshua Haberman 4 years ago
parent 275eac2a95
commit e2360d768f
  1. 25
      src/google/protobuf/compiler/ruby/ruby_generator.cc

@ -555,13 +555,11 @@ bool GenerateDSLDescriptor(const FileDescriptor* file, io::Printer* printer,
bool GenerateBinaryDescriptor(const FileDescriptor* file, io::Printer* printer, bool GenerateBinaryDescriptor(const FileDescriptor* file, io::Printer* printer,
std::string* error) { std::string* error) {
FileDescriptorProto file_proto; printer->Print(
file->CopyTo(&file_proto); R"(descriptor_data = File.binread(__FILE__).split("\n__END__\n", 2)[1])");
std::string file_data; printer->Print(
file_proto.SerializeToString(&file_data); "\nGoogle::Protobuf::DescriptorPool.generated_pool.add_serialized_file("
"descriptor_data)\n\n");
printer->Print("Google::Protobuf::DescriptorPool.generated_pool.add_serialized_file(\n");
printer->Print("\"$str$\")\n\n", "str", CEscape(file_data));
return true; return true;
} }
@ -585,7 +583,9 @@ bool GenerateFile(const FileDescriptor* file, io::Printer* printer,
GOOGLE_LOG(WARNING) << "Extensions are not yet supported for proto2 .proto files."; GOOGLE_LOG(WARNING) << "Extensions are not yet supported for proto2 .proto files.";
} }
if (file->name() == "google/protobuf/descriptor.proto") { bool use_raw_descriptor = file->name() == "google/protobuf/descriptor.proto";
if (use_raw_descriptor) {
GenerateBinaryDescriptor(file, printer, error); GenerateBinaryDescriptor(file, printer, error);
} else { } else {
GenerateDSLDescriptor(file, printer, error); GenerateDSLDescriptor(file, printer, error);
@ -599,6 +599,15 @@ bool GenerateFile(const FileDescriptor* file, io::Printer* printer,
GenerateEnumAssignment("", file->enum_type(i), printer); GenerateEnumAssignment("", file->enum_type(i), printer);
} }
EndPackageModules(levels, printer); EndPackageModules(levels, printer);
if (use_raw_descriptor) {
printer->Print("\n__END__\n");
FileDescriptorProto file_proto;
file->CopyTo(&file_proto);
std::string file_data;
file_proto.SerializeToString(&file_data);
printer->Print("$raw_descriptor$", "raw_descriptor", file_data);
}
return true; return true;
} }

Loading…
Cancel
Save