From ae762d86ab88d48bb79d2edf230538b638ad0d58 Mon Sep 17 00:00:00 2001 From: Sasha Smundak Date: Fri, 12 Aug 2016 10:02:28 +0000 Subject: Implement --include_prefixes. -- MOS_MIGRATED_REVID=130083166 --- src/tools/singlejar/output_jar.cc | 15 ++++++++++++++- src/tools/singlejar/output_jar_simple_test.cc | 24 ++++++++++++++++++++++++ 2 files changed, 38 insertions(+), 1 deletion(-) (limited to 'src/tools/singlejar') diff --git a/src/tools/singlejar/output_jar.cc b/src/tools/singlejar/output_jar.cc index d0e40f0740..5620fa9406 100644 --- a/src/tools/singlejar/output_jar.cc +++ b/src/tools/singlejar/output_jar.cc @@ -80,7 +80,6 @@ int OutputJar::Doit(Options *options) { TODO(!options_->force_compression, "Handle --compression"); TODO(!options_->normalize_timestamps, "Handle --normalize"); TODO(!options_->preserve_compression, "Handle --dont_change_compression"); - TODO(!options_->include_prefixes.size(), "Handle --include_prefixes"); build_properties_.AddProperty("build.target", options_->output_jar.c_str()); if (options_->verbose) { @@ -264,6 +263,20 @@ bool OutputJar::AddJar(int jar_path_index) { continue; } + bool include_entry = true; + if (!options_->include_prefixes.empty()) { + for (auto& prefix : options_->include_prefixes) { + if ((include_entry = + (prefix.size() <= file_name_length && + 0 == strncmp(file_name, prefix.c_str(), prefix.size())))) { + break; + } + } + } + if (!include_entry) { + continue; + } + bool is_dir = (file_name[file_name_length - 1] != '/'); if (is_dir && begins_with(file_name, file_name_length, "META-INF/services/")) { diff --git a/src/tools/singlejar/output_jar_simple_test.cc b/src/tools/singlejar/output_jar_simple_test.cc index 49953447f4..ccd22a1a3f 100644 --- a/src/tools/singlejar/output_jar_simple_test.cc +++ b/src/tools/singlejar/output_jar_simple_test.cc @@ -284,4 +284,28 @@ TEST_F(OutputJarSimpleTest, ExtraCombiners) { extra_file_contents); } +// --include_headers +TEST_F(OutputJarSimpleTest, IncludeHeaders) { + string out_path = OutputFilePath("out.jar"); + CreateOutput(out_path, "--sources", + DATA_DIR_TOP "src/tools/singlejar/libtest1.jar", + DATA_DIR_TOP "src/tools/singlejar/libdata1.jar", + "--include_prefixes", "tools/singlejar/data", + nullptr); + std::vector expected_entries( + {"META-INF/", "META-INF/MANIFEST.MF", "build-data.properties", + "tools/singlejar/data/", "tools/singlejar/data/extra_file1", + "tools/singlejar/data/extra_file2"}); + std::vector jar_entries; + InputJar input_jar; + ASSERT_TRUE(input_jar.Open(out_path)); + const LH *lh; + const CDH *cdh; + while ((cdh = input_jar.NextEntry(&lh))) { + jar_entries.push_back(cdh->file_name_string()); + } + input_jar.Close(); + EXPECT_EQ(expected_entries, jar_entries); +} + } // namespace -- cgit v1.2.3