aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/tools/singlejar
diff options
context:
space:
mode:
authorGravatar Sasha Smundak <asmundak@google.com>2016-08-12 10:02:28 +0000
committerGravatar Philipp Wollermann <philwo@google.com>2016-08-16 15:19:49 +0000
commitae762d86ab88d48bb79d2edf230538b638ad0d58 (patch)
tree373f6afda6b5adda5f61fd1726c59f72afd6f6ca /src/tools/singlejar
parent88a590a496149e40fe76e0a8d3f0814142af31e5 (diff)
Implement --include_prefixes.
-- MOS_MIGRATED_REVID=130083166
Diffstat (limited to 'src/tools/singlejar')
-rw-r--r--src/tools/singlejar/output_jar.cc15
-rw-r--r--src/tools/singlejar/output_jar_simple_test.cc24
2 files changed, 38 insertions, 1 deletions
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<string> 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<string> 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