mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[platform] fixes entry filtering after merging .zip and .tar extracting utilities
This commit is contained in:
@@ -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} */
|
||||
|
||||
Reference in New Issue
Block a user