private static void extractTarArchive()

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);
        }
    }