mirror of https://github.com/noisymime/Arduino.git
keep included folder name as top level folder name, delete MAC folder and hidden files
This commit is contained in:
parent
1845b2dbc3
commit
378c4392e0
|
@ -14,26 +14,30 @@ public class ZipDeflater {
|
||||||
|
|
||||||
private final ZipFile zipFile;
|
private final ZipFile zipFile;
|
||||||
private final File destFolder;
|
private final File destFolder;
|
||||||
|
private final Random random;
|
||||||
|
private final File file;
|
||||||
|
|
||||||
public ZipDeflater(File file, File destFolder) throws ZipException, IOException {
|
public ZipDeflater(File file, File destFolder) throws ZipException, IOException {
|
||||||
|
this.file = file;
|
||||||
this.destFolder = destFolder;
|
this.destFolder = destFolder;
|
||||||
this.zipFile = new ZipFile(file);
|
this.zipFile = new ZipFile(file);
|
||||||
|
this.random = new Random();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void deflate() throws IOException {
|
public void deflate() throws IOException {
|
||||||
String folderName = tempFolderNameFromZip();
|
String tmpFolderName = folderNameFromZip() + random.nextInt(1000000);
|
||||||
|
|
||||||
File folder = new File(destFolder, folderName);
|
File tmpFolder = new File(destFolder, tmpFolderName);
|
||||||
|
|
||||||
if (!folder.mkdir()) {
|
if (!tmpFolder.mkdir()) {
|
||||||
throw new IOException("Unable to create folder " + folderName);
|
throw new IOException("Unable to create folder " + tmpFolderName);
|
||||||
}
|
}
|
||||||
|
|
||||||
Enumeration<? extends ZipEntry> entries = zipFile.entries();
|
Enumeration<? extends ZipEntry> entries = zipFile.entries();
|
||||||
while (entries.hasMoreElements()) {
|
while (entries.hasMoreElements()) {
|
||||||
ZipEntry entry = entries.nextElement();
|
ZipEntry entry = entries.nextElement();
|
||||||
ensureFoldersOfEntryExist(folder, entry);
|
ensureFoldersOfEntryExist(tmpFolder, entry);
|
||||||
File entryFile = new File(folder, entry.getName());
|
File entryFile = new File(tmpFolder, entry.getName());
|
||||||
if (entry.isDirectory()) {
|
if (entry.isDirectory()) {
|
||||||
entryFile.mkdir();
|
entryFile.mkdir();
|
||||||
} else {
|
} else {
|
||||||
|
@ -58,8 +62,33 @@ public class ZipDeflater {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Test.zip may or may not contain Test folder. We use zip name to create libraries folder. Therefore, a contained Test folder is useless and must be removed
|
deleteUndesiredFoldersAndFiles(tmpFolder);
|
||||||
ensureOneLevelFolder(folder);
|
|
||||||
|
// Test.zip may or may not contain Test folder. If it does, we keep it. If not, we use zip name.
|
||||||
|
ensureOneLevelFolder(tmpFolder);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void deleteUndesiredFoldersAndFiles(File folder) {
|
||||||
|
for (File file : folder.listFiles()) {
|
||||||
|
if (file.isDirectory() && "__MACOSX".equals(file.getName())) {
|
||||||
|
recursiveDelete(file);
|
||||||
|
} else if (file.getName().startsWith(".")) {
|
||||||
|
recursiveDelete(file);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void recursiveDelete(File file) {
|
||||||
|
if (file.isDirectory()) {
|
||||||
|
for (File current : file.listFiles()) {
|
||||||
|
if (current.isDirectory()) {
|
||||||
|
recursiveDelete(current);
|
||||||
|
} else {
|
||||||
|
current.delete();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
file.delete();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ensureFoldersOfEntryExist(File folder, ZipEntry entry) {
|
private void ensureFoldersOfEntryExist(File folder, ZipEntry entry) {
|
||||||
|
@ -73,25 +102,22 @@ public class ZipDeflater {
|
||||||
|
|
||||||
private void ensureOneLevelFolder(File folder) {
|
private void ensureOneLevelFolder(File folder) {
|
||||||
File[] files = folder.listFiles();
|
File[] files = folder.listFiles();
|
||||||
if (files.length == 1 && files[0].isDirectory()) {
|
|
||||||
File tempFile = new File(files[0].getPath() + new Random().nextInt(1000));
|
if (files.length != 1) {
|
||||||
files[0].renameTo(tempFile);
|
folder.renameTo(new File(folder.getParentFile(), folderNameFromZip()));
|
||||||
for (File file : tempFile.listFiles()) {
|
return;
|
||||||
file.renameTo(new File(folder, file.getName()));
|
|
||||||
}
|
|
||||||
tempFile.delete();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
files[0].renameTo(new File(folder.getParentFile(), files[0].getName()));
|
||||||
|
recursiveDelete(folder);
|
||||||
}
|
}
|
||||||
|
|
||||||
private String tempFolderNameFromZip() {
|
private String folderNameFromZip() {
|
||||||
String folderName = zipFile.getName();
|
String filename = file.getName();
|
||||||
if (folderName.lastIndexOf(".") != -1) {
|
if (filename.lastIndexOf(".") != -1) {
|
||||||
folderName = folderName.substring(0, folderName.lastIndexOf("."));
|
filename = filename.substring(0, filename.lastIndexOf("."));
|
||||||
}
|
}
|
||||||
if (folderName.lastIndexOf(File.separator) != -1) {
|
return filename;
|
||||||
folderName = folderName.substring(folderName.lastIndexOf(File.separator) + 1);
|
|
||||||
}
|
|
||||||
return folderName;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Binary file not shown.
Binary file not shown.
|
@ -10,8 +10,6 @@ import org.junit.After;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
import processing.app.tools.ZipDeflater;
|
|
||||||
|
|
||||||
public class ZipDeflaterTest {
|
public class ZipDeflaterTest {
|
||||||
|
|
||||||
private File destFolder;
|
private File destFolder;
|
||||||
|
@ -62,6 +60,47 @@ public class ZipDeflaterTest {
|
||||||
assertEquals("readme.txt", files[4]);
|
assertEquals("readme.txt", files[4]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void shouldDeflateMacZip() throws Exception {
|
||||||
|
File file = new File(ZipDeflater.class.getResource("/Keypad_mac.zip").getFile());
|
||||||
|
new ZipDeflater(file, destFolder).deflate();
|
||||||
|
|
||||||
|
String[] files = destFolder.list();
|
||||||
|
assertEquals(1, files.length);
|
||||||
|
assertEquals("Keypad", files[0]);
|
||||||
|
|
||||||
|
file = destFolder.listFiles()[0];
|
||||||
|
files = file.list();
|
||||||
|
assertEquals(4, files.length);
|
||||||
|
Arrays.sort(files);
|
||||||
|
assertEquals("Keypad.cpp", files[0]);
|
||||||
|
assertEquals("Keypad.h", files[1]);
|
||||||
|
assertEquals("examples", files[2]);
|
||||||
|
assertEquals("keywords.txt", files[3]);
|
||||||
|
|
||||||
|
files = new File(file, "examples").list();
|
||||||
|
assertEquals(4, files.length);
|
||||||
|
Arrays.sort(files);
|
||||||
|
assertEquals("CustomKeypad", files[0]);
|
||||||
|
assertEquals("DynamicKeypad", files[1]);
|
||||||
|
assertEquals("EventKeypad", files[2]);
|
||||||
|
assertEquals("HelloKeypad", files[3]);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void shouldDeleteHiddenFiles() throws Exception {
|
||||||
|
File file = new File(ZipDeflater.class.getResource("/Keypad_with_hidden_files.zip").getFile());
|
||||||
|
new ZipDeflater(file, destFolder).deflate();
|
||||||
|
|
||||||
|
String[] files = destFolder.list();
|
||||||
|
assertEquals(1, files.length);
|
||||||
|
assertEquals("Keypad_with_hidden_files", files[0]);
|
||||||
|
|
||||||
|
file = destFolder.listFiles()[0];
|
||||||
|
files = file.list();
|
||||||
|
assertEquals(4, files.length);
|
||||||
|
}
|
||||||
|
|
||||||
@After
|
@After
|
||||||
public void deleteTempFolder() {
|
public void deleteTempFolder() {
|
||||||
recursiveDelete(destFolder);
|
recursiveDelete(destFolder);
|
||||||
|
|
Loading…
Reference in New Issue