use of org.apache.commons.compress.archivers.tar.TarArchiveEntry in project AmazeFileManager by TeamAmaze.
the class TarHelperTask method addElements.
@Override
void addElements(ArrayList<CompressedObjectParcelable> elements) {
TarArchiveInputStream tarInputStream = null;
try {
tarInputStream = new TarArchiveInputStream(new FileInputStream(filePath));
TarArchiveEntry entry;
while ((entry = tarInputStream.getNextTarEntry()) != null) {
String name = entry.getName();
if (name.endsWith(SEPARATOR))
name = name.substring(0, name.length() - 1);
boolean isInBaseDir = relativePath.equals("") && !name.contains(SEPARATOR);
boolean isInRelativeDir = name.contains(SEPARATOR) && name.substring(0, name.lastIndexOf(SEPARATOR)).equals(relativePath);
if (isInBaseDir || isInRelativeDir) {
elements.add(new CompressedObjectParcelable(entry.getName(), entry.getLastModifiedDate().getTime(), entry.getSize(), entry.isDirectory()));
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
use of org.apache.commons.compress.archivers.tar.TarArchiveEntry in project twister2 by DSC-SPIDAL.
the class TarGzipPacker method addFileToArchive.
/**
* add one file to tar.gz file
*
* @param file file to be added to the tar.gz
*/
public boolean addFileToArchive(File file, String dirPrefixForTar) {
try {
String filePathInTar = dirPrefixForTar + file.getName();
TarArchiveEntry entry = new TarArchiveEntry(file, filePathInTar);
entry.setSize(file.length());
tarOutputStream.putArchiveEntry(entry);
IOUtils.copy(new FileInputStream(file), tarOutputStream);
tarOutputStream.closeArchiveEntry();
return true;
} catch (IOException e) {
LOG.log(Level.SEVERE, "File can not be added: " + file.getName(), e);
return false;
}
}
use of org.apache.commons.compress.archivers.tar.TarArchiveEntry in project incubator-gobblin by apache.
the class StreamUtils method fileToTarArchiveOutputStream.
/**
* Helper method for {@link #tar(FileSystem, FileSystem, Path, Path)} that adds a file entry to a given
* {@link TarArchiveOutputStream} and copies the contents of the file to the new entry.
*/
private static void fileToTarArchiveOutputStream(FileStatus fileStatus, FSDataInputStream fsDataInputStream, Path destFile, TarArchiveOutputStream tarArchiveOutputStream) throws IOException {
TarArchiveEntry tarArchiveEntry = new TarArchiveEntry(formatPathToFile(destFile));
tarArchiveEntry.setSize(fileStatus.getLen());
tarArchiveEntry.setModTime(System.currentTimeMillis());
tarArchiveOutputStream.putArchiveEntry(tarArchiveEntry);
try {
IOUtils.copy(fsDataInputStream, tarArchiveOutputStream);
} finally {
tarArchiveOutputStream.closeArchiveEntry();
}
}
use of org.apache.commons.compress.archivers.tar.TarArchiveEntry in project arduino-eclipse-plugin by Sloeber.
the class InternalPackageManager method extract.
public static IStatus extract(ArchiveInputStream in, File destFolder, int stripPath, boolean overwrite, IProgressMonitor pMonitor) throws IOException, InterruptedException {
// Folders timestamps must be set at the end of archive extraction
// (because creating a file in a folder alters the folder's timestamp)
Map<File, Long> foldersTimestamps = new HashMap<>();
// $NON-NLS-1$
String pathPrefix = "";
Map<File, File> hardLinks = new HashMap<>();
Map<File, Integer> hardLinksMode = new HashMap<>();
Map<File, String> symLinks = new HashMap<>();
Map<File, Long> symLinksModifiedTimes = new HashMap<>();
// Cycle through all the archive entries
while (true) {
ArchiveEntry entry = in.getNextEntry();
if (entry == null) {
break;
}
// Extract entry info
long size = entry.getSize();
String name = entry.getName();
boolean isDirectory = entry.isDirectory();
boolean isLink = false;
boolean isSymLink = false;
String linkName = null;
Integer mode = null;
Long modifiedTime = new Long(entry.getLastModifiedDate().getTime());
// $NON-NLS-1$
pMonitor.subTask("Processing " + name);
{
// Skip MacOSX metadata
// http://superuser.com/questions/61185/why-do-i-get-files-like-foo-in-my-tarball-on-os-x
int slash = name.lastIndexOf('/');
if (slash == -1) {
if (name.startsWith("._")) {
// $NON-NLS-1$
continue;
}
} else {
if (name.substring(slash + 1).startsWith("._")) {
// $NON-NLS-1$
continue;
}
}
}
// http://www.unix.com/unix-for-dummies-questions-and-answers/124958-file-pax_global_header-means-what.html
if (name.contains("pax_global_header")) {
// $NON-NLS-1$
continue;
}
if (entry instanceof TarArchiveEntry) {
TarArchiveEntry tarEntry = (TarArchiveEntry) entry;
mode = new Integer(tarEntry.getMode());
isLink = tarEntry.isLink();
isSymLink = tarEntry.isSymbolicLink();
linkName = tarEntry.getLinkName();
}
// On the first archive entry, if requested, detect the common path
// prefix to be stripped from filenames
int localstripPath = stripPath;
if (localstripPath > 0 && pathPrefix.isEmpty()) {
int slash = 0;
while (localstripPath > 0) {
// $NON-NLS-1$
slash = name.indexOf("/", slash);
if (slash == -1) {
throw new IOException(Messages.Manager_no_single_root_folder);
}
slash++;
localstripPath--;
}
pathPrefix = name.substring(0, slash);
}
// Strip the common path prefix when requested
if (!name.startsWith(pathPrefix)) {
throw new IOException(Messages.Manager_no_single_root_folder_while_file + name + Messages.Manager_is_outside + pathPrefix);
}
name = name.substring(pathPrefix.length());
if (name.isEmpty()) {
continue;
}
File outputFile = new File(destFolder, name);
File outputLinkedFile = null;
if (isLink && linkName != null) {
if (!linkName.startsWith(pathPrefix)) {
throw new IOException(Messages.Manager_no_single_root_folder_while_file + linkName + Messages.Manager_is_outside + pathPrefix);
}
linkName = linkName.substring(pathPrefix.length());
outputLinkedFile = new File(destFolder, linkName);
}
if (isSymLink) {
// Symbolic links are referenced with relative paths
outputLinkedFile = new File(linkName);
if (outputLinkedFile.isAbsolute()) {
System.err.println(Messages.Manager_Warning_file + outputFile + Messages.Manager_links_to_absolute_path + outputLinkedFile);
System.err.println();
}
}
// Safety check
if (isDirectory) {
if (outputFile.isFile() && !overwrite) {
throw new IOException(Messages.Manager_Cant_create_folder + outputFile + Messages.Manager_File_exists);
}
} else {
// - anything else
if (outputFile.exists() && !overwrite) {
throw new IOException(Messages.Manager_Cant_extract_file + outputFile + Messages.Manager_File_already_exists);
}
}
// Extract the entry
if (isDirectory) {
if (!outputFile.exists() && !outputFile.mkdirs()) {
throw new IOException(Messages.Manager_Cant_create_folder + outputFile);
}
foldersTimestamps.put(outputFile, modifiedTime);
} else if (isLink) {
hardLinks.put(outputFile, outputLinkedFile);
hardLinksMode.put(outputFile, mode);
} else if (isSymLink) {
symLinks.put(outputFile, linkName);
symLinksModifiedTimes.put(outputFile, modifiedTime);
} else {
// Create the containing folder if not exists
if (!outputFile.getParentFile().isDirectory()) {
outputFile.getParentFile().mkdirs();
}
copyStreamToFile(in, size, outputFile);
outputFile.setLastModified(modifiedTime.longValue());
}
// Set file/folder permission
if (mode != null && !isSymLink && outputFile.exists()) {
chmod(outputFile, mode.intValue());
}
}
for (Map.Entry<File, File> entry : hardLinks.entrySet()) {
if (entry.getKey().exists() && overwrite) {
entry.getKey().delete();
}
link(entry.getValue(), entry.getKey());
Integer mode = hardLinksMode.get(entry.getKey());
if (mode != null) {
chmod(entry.getKey(), mode.intValue());
}
}
for (Map.Entry<File, String> entry : symLinks.entrySet()) {
if (entry.getKey().exists() && overwrite) {
entry.getKey().delete();
}
symlink(entry.getValue(), entry.getKey());
entry.getKey().setLastModified(symLinksModifiedTimes.get(entry.getKey()).longValue());
}
// Set folders timestamps
for (Map.Entry<File, Long> entry : foldersTimestamps.entrySet()) {
entry.getKey().setLastModified(entry.getValue().longValue());
}
return Status.OK_STATUS;
}
use of org.apache.commons.compress.archivers.tar.TarArchiveEntry in project docker-client by spotify.
the class CompressedDirectoryTest method testFileWithIgnore.
@Test
public void testFileWithIgnore() throws Exception {
// note: Paths.get(someURL.toUri()) is the platform-neutral way to convert a URL to a Path
final URL dockerDirectory = Resources.getResource("dockerDirectoryWithIgnore");
try (CompressedDirectory dir = CompressedDirectory.create(Paths.get(dockerDirectory.toURI()));
BufferedInputStream fileIn = new BufferedInputStream(Files.newInputStream(dir.file()));
GzipCompressorInputStream gzipIn = new GzipCompressorInputStream(fileIn);
TarArchiveInputStream tarIn = new TarArchiveInputStream(gzipIn)) {
final List<String> names = new ArrayList<>();
TarArchiveEntry entry;
while ((entry = tarIn.getNextTarEntry()) != null) {
final String name = entry.getName();
names.add(name);
}
assertThat(names, containsInAnyOrder("Dockerfile", "bin/", "bin/date.sh", "subdir2/", "subdir2/keep.me", "subdir2/do-not.ignore", "subdir3/do.keep", ".dockerignore"));
}
}
Aggregations