# HG changeset patch # User erikj # Date 1536767185 25200 # Node ID f0f5d23449d31f1b3580c8a73313918cafeaefd7 # Parent 3aafd7015d8791ea2b1fcaa9f28afa9f82478390 8210519: build/releaseFile/CheckSource.java failed additional sources found Reviewed-by: mikael, dholmes, ihse diff -r 3aafd7015d87 -r f0f5d23449d3 test/jdk/build/releaseFile/CheckSource.java --- a/test/jdk/build/releaseFile/CheckSource.java Wed Sep 12 14:24:17 2018 +0200 +++ b/test/jdk/build/releaseFile/CheckSource.java Wed Sep 12 08:46:25 2018 -0700 @@ -34,9 +34,13 @@ import java.io.FileReader; import java.io.FileNotFoundException; import java.io.IOException; +import java.util.regex.Matcher; +import java.util.regex.Pattern; public class CheckSource { + public static final String SRC_HASH_REGEXP = ":((hg)|(git)):[a-z0-9]*\\+?"; + CheckSource(String dataFile, boolean isOpenJDK) { // Read data files readFile(dataFile, isOpenJDK); @@ -44,6 +48,7 @@ private void readFile(String fileName, boolean isOpenJDK) { String fishForSOURCE = null; + String implementor = null; File file = new File(fileName); @@ -65,7 +70,13 @@ // grab SOURCE line if (readIn.startsWith("SOURCE=")) { fishForSOURCE = readIn; - break; + continue; + } + + // grab IMPLEMENTOR line + if (readIn.startsWith("IMPLEMENTOR=")) { + implementor = readIn; + continue; } } } catch (FileNotFoundException fileExcept) { @@ -79,27 +90,46 @@ // was SOURCE even found? if (fishForSOURCE == null) { throw new RuntimeException("SOURCE line was not found!"); - } else { - // OK it was found, did it have correct sources? - System.out.println("The source string found: " + fishForSOURCE); + } + System.out.println("The source string found: " + fishForSOURCE); - // First it MUST have .: regardless of closed or openJDK - if (!fishForSOURCE.contains(".:")) { - throw new RuntimeException("The test failed, .: not found!"); - } - // take out the .: source path - fishForSOURCE = fishForSOURCE.replace(".:", ""); + // Extract the value of SOURCE= + Pattern valuePattern = Pattern.compile("SOURCE=\"(.*)\""); + Matcher valueMatcher = valuePattern.matcher(fishForSOURCE); + if (!valueMatcher.matches()) { + throw new RuntimeException("SOURCE string has bad format, should be SOURCE=\"\""); + } + String valueString = valueMatcher.group(1); + + // Check if implementor is Oracle + boolean isOracle = (implementor != null) && implementor.contains("Oracle Corporation"); + + String[] values = valueString.split(" "); - // if its closedJDK it MUST have open: - if (!isOpenJDK && !fishForSOURCE.contains("open:")) { - throw new RuntimeException("The test failed, open: not found!"); - } - // take out the open: source path - fishForSOURCE = fishForSOURCE.replace("open:", ""); + // First value MUST start with ".:" regardless of Oracle or OpenJDK + String rootRegexp = "\\." + SRC_HASH_REGEXP; + if (!values[0].matches(rootRegexp)) { + throw new RuntimeException("The test failed, first element did not match regexp: " + rootRegexp); + } - // if any other source exists, that's an error - if (fishForSOURCE.contains(":")) { - throw new RuntimeException("The test failed, additional sources found!"); + // If it's an Oracle build, it can be either OpenJDK or OracleJDK. Other + // builds may have any number of additional elements in any format. + if (isOracle) { + if (isOpenJDK) { + if (values.length != 1) { + throw new RuntimeException("The test failed, wrong number of elements in SOURCE list." + + " Should be 1 for Oracle built OpenJDK."); + } + } else { + if (values.length != 2) { + throw new RuntimeException("The test failed, wrong number of elements in SOURCE list." + + " Should be 2 for OracleJDK."); + } + // Second value MUST start with "open:" for OracleJDK + String openRegexp = "open" + SRC_HASH_REGEXP; + if (!values[1].matches(openRegexp)) { + throw new RuntimeException("The test failed, second element did not match regexp: " + openRegexp); + } } } @@ -114,7 +144,6 @@ System.out.println("JDK Path : " + jdkPath); System.out.println("Runtime Name : " + runtime); - new CheckSource(jdkPath + "/release", - runtime.contains("OpenJDK")); + new CheckSource(jdkPath + "/release", runtime.contains("OpenJDK")); } }