private static File createSolrHomeZip(File solrHomeDir, boolean safeToModify) throws IOException {
if (solrHomeDir == null || !(solrHomeDir.exists() && solrHomeDir.isDirectory())) {
throw new IOException("Invalid solr home: " + solrHomeDir);
}
File solrConfigSite = new File(solrHomeDir, "conf" + File.separator + "solrconfig-site.xml");
if (solrConfigSite.isFile()) {
if (!safeToModify) {
File newTmpDir = Files.createTempDir();
newTmpDir.deleteOnExit();
LOG.debug("Creating temporary copy of solr home dir at: " + newTmpDir.getAbsolutePath());
FileUtils.copyDirectory(solrHomeDir, newTmpDir);
return createSolrHomeZip(newTmpDir, true);
}
File backup = new File(solrHomeDir, solrConfigSite.getName() + ".bak");
while (backup.exists()) {
backup = new File(solrHomeDir, backup.getName() + ".bak");
}
LOG.debug("Moving existing " + solrConfigSite.getName() + " to " + backup.getName());
Files.move(solrConfigSite, backup);
writeReplacementSolrConfigSite(solrConfigSite);
}
File solrHomeZip = File.createTempFile("solr", ".zip");
createZip(solrHomeDir, solrHomeZip);
return solrHomeZip;
}