@Override public boolean checkout( AbstractBuild<?, ?> build, Launcher launcher, FilePath workspace, BuildListener listener, File changeLogFile) throws IOException, InterruptedException { if (workspace.exists()) { listener.getLogger().println("Deleting existing workspace " + workspace.getRemote()); workspace.deleteRecursive(); } listener.getLogger().println("Staging first zip: " + firstZip); workspace.unzipFrom(firstZip.openStream()); listener.getLogger().println("Staging second zip: " + secondZip); workspace.unzipFrom(secondZip.openStream()); // Get list of files changed in secondZip. ZipInputStream zip = new ZipInputStream(secondZip.openStream()); ZipEntry e; ExtractChangeLogParser.ExtractChangeLogEntry changeLog = new ExtractChangeLogParser.ExtractChangeLogEntry(secondZip.toString()); try { while ((e = zip.getNextEntry()) != null) { if (!e.isDirectory()) changeLog.addFile(new ExtractChangeLogParser.FileInZip(e.getName())); } } finally { zip.close(); } saveToChangeLog(changeLogFile, changeLog); return true; }