// predicate: func(S entry) -> bool (yes = should put in tar) svoid tarInJar_withMD5_withPredicate(File jarIn, File jarOut, IF1 putInTar) ctex { IF1 dontPutInTar = name -> !putInTar.get(name); temp ZipOutputStream zipOut = zipOutputStream(jarOut); zip2zip_withPredicate(jarIn, zipOut, dontPutInTar); print("tarInJar_withMD5 " + f2s(jarIn) + " => " + f2s(jarOut)); File tar = createTempFile("", ".tar"); print(" temp: " + f2s(tar)); temp tempDeleteFile(tar); zip2tar_withPredicate(jarIn, tar, putInTar); file2zip(zipOut, tar, "bulk-" + md5(tar) + ".tar"); } svoid tarInJar_withMD5_withPredicate(File jarIn, IF1 predicate) { if (!fileExists(jarIn)) ret; File jarOut = fileInSameDirectory(jarIn, dropSuffixIC(".jar", jarIn.getName()) + ".repacked.jar"); renameFileToUniqueName(jarOut); // backup old version tarInJar_withMD5_withPredicate(jarIn, jarOut, predicate); } svoid tarInJar_withMD5_withPredicate(S jarIn, IF1 predicate) { tarInJar_withMD5_withPredicate(newFile(jarIn), predicate); }