public static void unpackTgz (TarArchiveInputStream tgz, File target, boolean cleanExistingDirs)
throws IOException
{
- TarArchiveEntry entry;
- while ((entry = tgz.getNextTarEntry()) != null) {
+ TarArchiveEntry entry = tgz.getNextTarEntry();
+ while (entry != null) {
// sanitize the entry name
String entryName = entry.getName();
+ log.info("### ENTRYNAME="+entryName);
if (entryName.startsWith(File.separator))
{
entryName = entryName.substring(File.separator.length());
}
File efile = new File(target, entryName);
+ log.info("###1 ENTRYNAME="+entryName);
// if we're unpacking a normal tgz file, it will have special path
// entries that allow us to create our directories first
if (entry.isDirectory()) {
-
+ log.info("###2 ENTRYNAME="+entryName);
+ log.info("Directory '"+entryName+"', cleanExistingDirs="+cleanExistingDirs);
if (cleanExistingDirs) {
if (efile.exists()) {
+ log.info("###3 ENTRYNAME="+entryName);
for (File f : efile.listFiles()) {
- if (!f.isDirectory())
- f.delete();
+ log.info("###4 ENTRYNAME="+entryName);
+ if (!f.isDirectory()) {
+ log.info("Attempting to delete "+f.getName());
+ f.delete();
+ }
}
}
}
+ log.info("###5 ENTRYNAME="+entryName);
if (!efile.exists() && !efile.mkdir()) {
log.warning("Failed to create tgz entry path", "tgz", tgz, "entry", entry);
}
+ entry = tgz.getNextTarEntry();
+ log.info("###5a ENTRYNAME="+entryName);
continue;
}
File parent = new File(efile.getParent());
if (!parent.exists() && !parent.mkdirs()) {
log.warning("Failed to create tgz entry parent", "tgz", tgz, "parent", parent);
+ entry = tgz.getNextTarEntry();
+ log.info("###7a ENTRYNAME="+entryName);
continue;
}
+ log.info("###6 ENTRYNAME="+entryName);
if (entry.isLink())
{
- System.out.println("Creating hard link "+efile.getName()+" -> "+entry.getLinkName());
+ log.info("###7 ENTRYNAME="+entryName);
+ log.info("Creating hard link "+efile.getName()+" -> "+entry.getLinkName());
Files.createLink(efile.toPath(), Paths.get(entry.getLinkName()));
+ log.info("###7a ENTRYNAME="+entryName);
+ entry = tgz.getNextTarEntry();
+ log.info("###7a ENTRYNAME="+entryName);
continue;
}
+ log.info("###8 ENTRYNAME="+entryName);
if (entry.isSymbolicLink())
{
- System.out.println("Creating symbolic link "+efile.getName()+" -> "+entry.getLinkName());
+ log.info("###9 ENTRYNAME="+entryName);
+ log.info("Creating symbolic link "+efile.getName()+" -> "+entry.getLinkName());
Files.createSymbolicLink(efile.toPath(), Paths.get(entry.getLinkName()));
+ log.info("###10 ENTRYNAME="+entryName);
+ entry = tgz.getNextTarEntry();
+ log.info("###10a ENTRYNAME="+entryName);
continue;
}
+ log.info("###11 ENTRYNAME="+entryName);
try (BufferedOutputStream fout = new BufferedOutputStream(new FileOutputStream(efile));
InputStream tin = tgz;) {
+ log.info("###12 ENTRYNAME="+entryName);
StreamUtil.copy(tin, fout);
} catch (Exception e) {
+ log.info("###13 ENTRYNAME="+entryName);
throw new IOException(
Log.format("Failure unpacking", "tgz", tgz, "entry", efile), e);
}
+ log.info("###14 ENTRYNAME="+entryName);
+ entry = tgz.getNextTarEntry();
+ log.info("###15 ENTRYNAME="+entryName);
}
}