in src/main/java/org/apache/netbeans/nbpackage/ArchiveUtils.java [181:213]
private static void extractTarArchive(InputStream inputStream, Path extractToDirectory) throws IOException {
final TarArchiveInputStream archiveInputStream = new TarArchiveInputStream(inputStream);
TarArchiveEntry entry;
while ((entry = archiveInputStream.getNextTarEntry()) != null) {
if (!archiveInputStream.canReadEntryData(entry)) {
LOG.log(System.Logger.Level.ERROR, "Failed to read archive entry " + entry);
continue;
}
Path entryExtractPath = extractToDirectory.resolve(getEntryAsPath(entry));
if (entry.isLink()) {
Path linkTarget = Paths.get(entry.getLinkName());
Files.deleteIfExists(entryExtractPath);
Files.createLink(entryExtractPath, linkTarget);
} else if (entry.isSymbolicLink()) {
Path linkTarget = Paths.get(entry.getLinkName());
Files.deleteIfExists(entryExtractPath);
Files.createSymbolicLink(entryExtractPath, linkTarget);
} else {
if (entry.isDirectory()) {
Files.createDirectories(entryExtractPath);
} else {
Files.createDirectories(entryExtractPath.getParent());
Files.copy(archiveInputStream, entryExtractPath, StandardCopyOption.REPLACE_EXISTING);
}
}
setLastModifiedTime(entryExtractPath, FileTime.fromMillis(entry.getLastModifiedDate().getTime()));
Set<PosixFilePermission> permissions = getPosixFilePermissions(entry);
setPosixPermissions(entryExtractPath, permissions);
}
}