From 2eb1750f4dc81964aa8827e64546fd6e407f22aa Mon Sep 17 00:00:00 2001 From: Mark Robert Miller Date: Sat, 14 Sep 2013 23:33:02 +0000 Subject: [PATCH] LUCENE-5209: Allow the license checker to optionally avoid check sum comparisons on SNAPSHOT dependencies. git-svn-id: https://svn.apache.org/repos/asf/lucene/dev/trunk@1523356 13f79535-47bb-0310-9956-ffa450edef68 --- lucene/tools/custom-tasks.xml | 2 +- .../lucene/validation/LicenseCheckTask.java | 80 +++++++++++-------- 2 files changed, 47 insertions(+), 35 deletions(-) diff --git a/lucene/tools/custom-tasks.xml b/lucene/tools/custom-tasks.xml index 10e4b568ec8..4c414f0ab48 100644 --- a/lucene/tools/custom-tasks.xml +++ b/lucene/tools/custom-tasks.xml @@ -57,7 +57,7 @@ License check under: @{dir} - + diff --git a/lucene/tools/src/java/org/apache/lucene/validation/LicenseCheckTask.java b/lucene/tools/src/java/org/apache/lucene/validation/LicenseCheckTask.java index 192076cc073..36ca94bcdd5 100644 --- a/lucene/tools/src/java/org/apache/lucene/validation/LicenseCheckTask.java +++ b/lucene/tools/src/java/org/apache/lucene/validation/LicenseCheckTask.java @@ -54,6 +54,8 @@ public class LicenseCheckTask extends Task { private static final int CHECKSUM_BUFFER_SIZE = 8 * 1024; private static final int CHECKSUM_BYTE_MASK = 0xFF; + private boolean skipSnapshotsChecksum; + /** * All JAR files to check. */ @@ -103,6 +105,10 @@ public class LicenseCheckTask extends Task { public void setLicenseDirectory(File file) { licenseDirectory = file; } + + public void setSkipSnapshotsChecksum(boolean skipSnapshotsChecksum) { + this.skipSnapshotsChecksum = skipSnapshotsChecksum; + } /** * Execute the task. @@ -113,6 +119,7 @@ public class LicenseCheckTask extends Task { throw new BuildException("Expected an embedded ."); } + if (skipSnapshotsChecksum) log("Skipping checksum for SNAPSHOT dependencies", Project.MSG_INFO); jarResources.setProject(getProject()); processJars(); @@ -160,49 +167,54 @@ public class LicenseCheckTask extends Task { */ private boolean checkJarFile(File jarFile) { log("Scanning: " + jarFile.getPath(), verboseLevel); - - // validate the jar matches against our expected hash - final File checksumFile = new File(licenseDirectory, - jarFile.getName() + "." + CHECKSUM_TYPE); - if (! (checksumFile.exists() && checksumFile.canRead()) ) { - log("MISSING " +CHECKSUM_TYPE+ " checksum file for: " + jarFile.getPath(), Project.MSG_ERR); - this.failures = true; - return false; - } else { - final String expectedChecksum = readChecksumFile(checksumFile); - try { - final MessageDigest md = MessageDigest.getInstance(CHECKSUM_TYPE); - byte[] buf = new byte[CHECKSUM_BUFFER_SIZE]; + + if (!skipSnapshotsChecksum || !jarFile.getName().contains("-SNAPSHOT")) { + // validate the jar matches against our expected hash + final File checksumFile = new File(licenseDirectory, + jarFile.getName() + "." + CHECKSUM_TYPE); + if (! (checksumFile.exists() && checksumFile.canRead()) ) { + log("MISSING " +CHECKSUM_TYPE+ " checksum file for: " + jarFile.getPath(), Project.MSG_ERR); + log("EXPECTED " +CHECKSUM_TYPE+ " checksum file : " + checksumFile.getPath(), Project.MSG_ERR); + this.failures = true; + return false; + } else { + final String expectedChecksum = readChecksumFile(checksumFile); try { - FileInputStream fis = new FileInputStream(jarFile); + final MessageDigest md = MessageDigest.getInstance(CHECKSUM_TYPE); + byte[] buf = new byte[CHECKSUM_BUFFER_SIZE]; try { - DigestInputStream dis = new DigestInputStream(fis, md); + FileInputStream fis = new FileInputStream(jarFile); try { - while (dis.read(buf, 0, CHECKSUM_BUFFER_SIZE) != -1) { - // NOOP + DigestInputStream dis = new DigestInputStream(fis, md); + try { + while (dis.read(buf, 0, CHECKSUM_BUFFER_SIZE) != -1) { + // NOOP + } + } finally { + dis.close(); } } finally { - dis.close(); + fis.close(); } - } finally { - fis.close(); + } catch (IOException ioe) { + throw new BuildException("IO error computing checksum of file: " + jarFile, ioe); } - } catch (IOException ioe) { - throw new BuildException("IO error computing checksum of file: " + jarFile, ioe); + final byte[] checksumBytes = md.digest(); + final String checksum = createChecksumString(checksumBytes); + if ( ! checksum.equals(expectedChecksum) ) { + log("CHECKSUM FAILED for " + jarFile.getPath() + + " (expected: \"" + expectedChecksum + "\" was: \"" + checksum + "\")", + Project.MSG_ERR); + this.failures = true; + return false; + } + + } catch (NoSuchAlgorithmException ae) { + throw new BuildException("Digest type " + CHECKSUM_TYPE + " not supported by your JVM", ae); } - final byte[] checksumBytes = md.digest(); - final String checksum = createChecksumString(checksumBytes); - if ( ! checksum.equals(expectedChecksum) ) { - log("CHECKSUM FAILED for " + jarFile.getPath() + - " (expected: \"" + expectedChecksum + "\" was: \"" + checksum + "\")", - Project.MSG_ERR); - this.failures = true; - return false; - } - - } catch (NoSuchAlgorithmException ae) { - throw new BuildException("Digest type " + CHECKSUM_TYPE + " not supported by your JVM", ae); } + } else if (skipSnapshotsChecksum) { + log("Skipping jar because it is a SNAPSHOT : " + jarFile.getAbsolutePath(), Project.MSG_INFO); } // Get the expected license path base from the mapper and search for license files.