Singlejar accepts a custom "Created-By" field as a runtime parameter RELNOTES: Singlejar accepts runtime Created-By field PiperOrigin-RevId: 455621799 Change-Id: Ie6d548b186a137e5b81d7c819f3f6f411956a9f7
diff --git a/src/tools/singlejar/options.cc b/src/tools/singlejar/options.cc index 9fa4386..18d8537 100644 --- a/src/tools/singlejar/options.cc +++ b/src/tools/singlejar/options.cc
@@ -58,7 +58,8 @@ tokens->MatchAndSet("--multi_release", &multi_release) || tokens->MatchAndSet("--hermetic_java_home", &hermetic_java_home) || tokens->MatchAndSet("--add_exports", &add_exports) || - tokens->MatchAndSet("--add_opens", &add_opens)) { + tokens->MatchAndSet("--add_opens", &add_opens) || + tokens->MatchAndSet("--output_jar_creator", &output_jar_creator)) { return true; } else if (tokens->MatchAndSet("--build_info_file", &optarg)) { build_info_files.push_back(optarg);
diff --git a/src/tools/singlejar/options.h b/src/tools/singlejar/options.h index 997dc7a..298772d 100644 --- a/src/tools/singlejar/options.h +++ b/src/tools/singlejar/options.h
@@ -24,7 +24,8 @@ class Options { public: Options() - : exclude_build_data(false), + : output_jar_creator("singlejar"), + exclude_build_data(false), force_compression(false), normalize_timestamps(false), add_missing_directories(false), @@ -42,6 +43,7 @@ void ParseCommandLine(int argc, const char *const argv[]); std::string output_jar; + std::string output_jar_creator; std::string main_class; std::string java_launcher; std::string cds_archive;
diff --git a/src/tools/singlejar/options_test.cc b/src/tools/singlejar/options_test.cc index bd9b314..975ec46 100644 --- a/src/tools/singlejar/options_test.cc +++ b/src/tools/singlejar/options_test.cc
@@ -158,3 +158,18 @@ EXPECT_EQ(0UL, options.classpath_resources.size()); EXPECT_EQ(1UL, options.include_prefixes.size()); } + +TEST(OptionTest, CustomCreatedBy) { + const char *args[] = {"--output", "output_file", "--output_jar_creator", + "CustomCreatedBy 123.456"}; + Options options; + options.ParseCommandLine(arraysize(args), args); + EXPECT_EQ("CustomCreatedBy 123.456", options.output_jar_creator); +} + +TEST(OptionTest, DefaultCreatedBy) { + const char *args[] = {"--output", "output_file"}; + Options options; + options.ParseCommandLine(arraysize(args), args); + EXPECT_EQ("singlejar", options.output_jar_creator); +}
diff --git a/src/tools/singlejar/output_jar.cc b/src/tools/singlejar/output_jar.cc index 0bfd1a0..397669c 100644 --- a/src/tools/singlejar/output_jar.cc +++ b/src/tools/singlejar/output_jar.cc
@@ -72,8 +72,6 @@ known_members_.emplace(manifest_.filename(), EntryInfo{&manifest_}); known_members_.emplace(protobuf_meta_handler_.filename(), EntryInfo{&protobuf_meta_handler_}); - manifest_.AppendLine("Manifest-Version: 1.0"); - manifest_.AppendLine("Created-By: singlejar"); } static std::string Basename(const std::string &path) { @@ -99,6 +97,10 @@ EntryInfo{&build_properties_}); } + // Populate the manifest file. + manifest_.AppendLine("Manifest-Version: 1.0"); + manifest_.AppendLine("Created-By: " + options_->output_jar_creator); + // TODO(b/28294322): do we need to resolve the path to be absolute or // canonical? build_properties_.AddProperty("build.target", options_->output_jar.c_str());
diff --git a/src/tools/singlejar/output_jar.h b/src/tools/singlejar/output_jar.h index d867488..e7f1f73 100644 --- a/src/tools/singlejar/output_jar.h +++ b/src/tools/singlejar/output_jar.h
@@ -108,7 +108,6 @@ // Write bytes to the output file, return true on success. bool WriteBytes(const void *buffer, size_t count); - Options *options_; struct EntryInfo { EntryInfo(Combiner *combiner, int index = -1)
diff --git a/src/tools/singlejar/output_jar_simple_test.cc b/src/tools/singlejar/output_jar_simple_test.cc index d689b71..7da857c 100644 --- a/src/tools/singlejar/output_jar_simple_test.cc +++ b/src/tools/singlejar/output_jar_simple_test.cc
@@ -394,6 +394,19 @@ manifest); } +// --output_jar_creator option +TEST_F(OutputJarSimpleTest, CreatedByFieldTest) { + string out_path = OutputFilePath("out.jar"); + CreateOutput(out_path, + {"--output_jar_creator", "SingleJarTestValue 123.456"}); + string manifest = GetEntryContents(out_path, "META-INF/MANIFEST.MF"); + EXPECT_EQ( + "Manifest-Version: 1.0\r\n" + "Created-By: SingleJarTestValue 123.456\r\n" + "\r\n", + manifest); +} + // --deploy_manifest_lines option. TEST_F(OutputJarSimpleTest, DeployManifestLines) { string out_path = OutputFilePath("out.jar");