When creating new files, set creator version to 2.0 instead of Unix spec 3.0. Otherwise unzip thinks that external_attributes field contains access mode bits and fails to extract.
RELNOTES:
--
MOS_MIGRATED_REVID=131724308
diff --git a/src/tools/singlejar/BUILD b/src/tools/singlejar/BUILD
index ebb5c43..63f6a45 100644
--- a/src/tools/singlejar/BUILD
+++ b/src/tools/singlejar/BUILD
@@ -133,6 +133,19 @@
],
)
+sh_test(
+ name = "output_jar_bash_test",
+ srcs = ["output_jar_shell_test.sh"],
+ args = [
+ "src/test/shell",
+ "$(location :singlejar)",
+ ],
+ data = [
+ ":singlejar",
+ ],
+ deps = ["//src/test/shell:bashunit"],
+)
+
cc_test(
name = "output_jar_simple_test",
srcs = [
diff --git a/src/tools/singlejar/output_jar.cc b/src/tools/singlejar/output_jar.cc
index df70c2b..f99055d 100644
--- a/src/tools/singlejar/output_jar.cc
+++ b/src/tools/singlejar/output_jar.cc
@@ -530,7 +530,9 @@
CDH *cdh = reinterpret_cast<CDH *>(
ReserveCdh(sizeof(CDH) + entry->file_name_length()));
cdh->signature();
- cdh->version(0x031E); // Created on Unix (03), conforms to 3.0
+ // Note: do not set the version to Unix 3.0 spec, otherwise
+ // unzip will think that 'external_attributes' field contains access mode
+ cdh->version(20);
cdh->version_to_extract(20); // 2.0
cdh->bit_flag(0x0);
cdh->compression_method(entry->compression_method());
diff --git a/src/tools/singlejar/output_jar_shell_test.sh b/src/tools/singlejar/output_jar_shell_test.sh
new file mode 100755
index 0000000..f4b334c
--- /dev/null
+++ b/src/tools/singlejar/output_jar_shell_test.sh
@@ -0,0 +1,47 @@
+#!/bin/bash
+#
+# Copyright 2015 The Bazel Authors. All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
+# Arguments:
+# unittest.bash script
+# singlejar path
+# jar tool path
+
+(($# >= 2)) || \
+ { echo "Usage: $0 <unittest.bash dir> <singlejar>" >&2; exit 1; }
+
+# Load test environment
+source $1/unittest.bash \
+ || { echo "unittest.bash not found!" >&2; exit 1; }
+
+set -e
+declare -r singlejar="$2"
+
+
+# Test that the entries single jar creates can be extracted (that is, they do
+# not have some funny Unix access more settings making them unreadable).
+function test_new_entries() {
+ local -r out_jar="${TEST_TMPDIR}/out.jar"
+ "$singlejar" --output "$out_jar"
+ cd "${TEST_TMPDIR}"
+ unzip "$out_jar" build-data.properties
+ [[ -r build-data.properties ]] || \
+ { echo "build-data.properties is not readable" >&2; exit 1; }
+}
+
+run_suite "Misc shell tests"
+#!/bin/bash
+