HADOOP-11179. Java untar should handle the case that the file entry comes without its parent directory entry. Contributed by Craig Welch.

This commit is contained in:
Zhijie Shen 2014-10-08 15:35:24 -07:00
parent 2217e2f8ff
commit a169051931
3 changed files with 9 additions and 6 deletions

View File

@ -952,6 +952,9 @@ Release 2.6.0 - UNRELEASED
HADOOP-11163. MetricsSystemImpl may miss a registered source.
(Chuan Liu via cnauroth)
HADOOP-11179. Java untar should handle the case that the file entry comes
without its parent directory entry. (Craig Welch via zjshen)
Release 2.5.1 - 2014-09-05
INCOMPATIBLE CHANGES

View File

@ -707,7 +707,7 @@ private static void unpackEntries(TarArchiveInputStream tis,
TarArchiveEntry entry, File outputDir) throws IOException {
if (entry.isDirectory()) {
File subDir = new File(outputDir, entry.getName());
if (!subDir.mkdir() && !subDir.isDirectory()) {
if (!subDir.mkdirs() && !subDir.isDirectory()) {
throw new IOException("Mkdirs failed to create tar internal dir "
+ outputDir);
}
@ -720,8 +720,8 @@ private static void unpackEntries(TarArchiveInputStream tis,
}
File outputFile = new File(outputDir, entry.getName());
if (!outputDir.exists()) {
if (!outputDir.mkdirs()) {
if (!outputFile.getParentFile().exists()) {
if (!outputFile.getParentFile().mkdirs()) {
throw new IOException("Mkdirs failed to create tar internal dir "
+ outputDir);
}

View File

@ -619,7 +619,7 @@ public void testUnTar() throws IOException {
OutputStream os = new FileOutputStream(simpleTar);
TarOutputStream tos = new TarOutputStream(os);
try {
TarEntry te = new TarEntry("foo");
TarEntry te = new TarEntry("/bar/foo");
byte[] data = "some-content".getBytes("UTF-8");
te.setSize(data.length);
tos.putNextEntry(te);
@ -634,8 +634,8 @@ public void testUnTar() throws IOException {
// successfully untar it into an existing dir:
FileUtil.unTar(simpleTar, tmp);
// check result:
assertTrue(new File(tmp, "foo").exists());
assertEquals(12, new File(tmp, "foo").length());
assertTrue(new File(tmp, "/bar/foo").exists());
assertEquals(12, new File(tmp, "/bar/foo").length());
final File regularFile = new File(tmp, "QuickBrownFoxJumpsOverTheLazyDog");
regularFile.createNewFile();