[platform] fixes entry filtering after merging .zip and .tar extracting utilities

This commit is contained in:
Roman Shevchenko
2018-06-11 17:12:31 +03:00
parent 5b68a00b4c
commit 8d5ba8c7e1
2 changed files with 22 additions and 16 deletions
@@ -1,6 +1,7 @@
// Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package com.intellij.util.io;
import com.intellij.openapi.util.Condition;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.util.Consumer;
import org.apache.commons.compress.archivers.tar.TarArchiveEntry;
@@ -90,11 +91,11 @@ public abstract class Decompressor<Stream> {
//</editor-fold>
}
private FileFilter myFilter = null;
private Condition<String> myFilter = null;
private boolean myOverwrite = true;
private Consumer<File> myConsumer;
public Decompressor<Stream> filter(@Nullable FileFilter filter) {
public Decompressor<Stream> filter(@Nullable Condition<String> filter) {
myFilter = filter;
return this;
}
@@ -114,12 +115,13 @@ public abstract class Decompressor<Stream> {
try {
Entry entry;
while ((entry = nextEntry(stream)) != null) {
File outputFile = ZipUtil.newFileForEntry(outputDir, entry.name);
if (myFilter != null && !myFilter.accept(outputFile)) {
String name = entry.name;
if (myFilter != null && !myFilter.value(name)) {
continue;
}
File outputFile = ZipUtil.newFileForEntry(outputDir, name);
if (entry.isDirectory) {
FileUtil.createDirectory(outputFile);
}
@@ -2,6 +2,7 @@
package com.intellij.util.io;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.util.Condition;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.util.io.FileUtilRt;
import com.intellij.openapi.util.text.StringUtil;
@@ -125,28 +126,31 @@ public class ZipUtil {
/** @see Decompressor.Zip */
public static void extract(@NotNull File file, @NotNull File outputDir, @Nullable FilenameFilter filter) throws IOException {
new Decompressor.Zip(file).filter(FileFilterAdapter.wrap(filter)).extract(outputDir);
new Decompressor.Zip(file).filter(FileFilterAdapter.wrap(outputDir, filter)).extract(outputDir);
}
/** @see Decompressor.Zip */
public static void extract(@NotNull File file, @NotNull File outputDir, @Nullable FilenameFilter filter, boolean overwrite) throws IOException {
new Decompressor.Zip(file).filter(FileFilterAdapter.wrap(filter)).overwrite(overwrite).extract(outputDir);
new Decompressor.Zip(file).filter(FileFilterAdapter.wrap(outputDir, filter)).overwrite(overwrite).extract(outputDir);
}
private static class FileFilterAdapter implements FileFilter {
private static FileFilterAdapter wrap(FilenameFilter original) {
return original == null ? null : new FileFilterAdapter(original);
private static class FileFilterAdapter implements Condition<String> {
private static FileFilterAdapter wrap(File outputDir, FilenameFilter filter) {
return filter == null ? null : new FileFilterAdapter(outputDir, filter);
}
private final FilenameFilter myOriginal;
private final File myOutputDir;
private final FilenameFilter myFilter;
private FileFilterAdapter(FilenameFilter original) {
myOriginal = original;
private FileFilterAdapter(File outputDir, FilenameFilter filter) {
myOutputDir = outputDir;
myFilter = filter;
}
@Override
public boolean accept(File pathname) {
return myOriginal.accept(pathname.getParentFile(), pathname.getName());
public boolean value(String entryName) {
File outputFile = new File(myOutputDir, entryName);
return myFilter.accept(outputFile.getParentFile(), outputFile.getName());
}
}
@@ -203,7 +207,7 @@ public class ZipUtil {
/** @deprecated use {@link Decompressor.Zip} */
@ApiStatus.ScheduledForRemoval(inVersion = "2020")
public static void extract(@NotNull ZipFile zip, @NotNull File outputDir, @Nullable FilenameFilter filter) throws IOException {
new Decompressor.Zip(new File(zip.getName())).filter(FileFilterAdapter.wrap(filter)).extract(outputDir);
new Decompressor.Zip(new File(zip.getName())).filter(FileFilterAdapter.wrap(outputDir, filter)).extract(outputDir);
}
/** @deprecated use {@link Decompressor.Zip} */