lucene/gradle/ant-compat/forbidden-api-rules-in-sync...

38 lines
1.4 KiB
Groovy

// Just make sure the forbidden API rules are in sync between gradle and ant versions until
// we get rid of ant build.
def linesOf(FileTree ftree) {
return ftree.collectMany { path ->
path.readLines("UTF-8")
.collect { line -> line.trim() }
.findAll { line -> !line.startsWith("#") }
.unique()
.collect { line -> [path: path, line: line] }
}.groupBy { e -> e.line }
}
configure(rootProject) {
task verifyForbiddenApiRulesInSync() {
doFirst {
// Read all rules line by line from ant, gradle, remove comments, uniq.
// Rule sets should be identical.
def gradleRules = linesOf(fileTree("gradle/validation/forbidden-apis", { include "**/*.txt" }))
def antRules = linesOf(project(":lucene").fileTree("tools/forbiddenApis", { include "**/*.txt" }))
def antOnlyLines = antRules.keySet() - gradleRules.keySet()
def gradleOnlyLines = gradleRules.keySet() - antRules.keySet()
if (!gradleOnlyLines.isEmpty() || !antOnlyLines.isEmpty()) {
project.logger.log(LogLevel.ERROR, "The following rules don't have counterparts:\n" +
(gradleRules.findAll { gradleOnlyLines.contains(it.key) } + antRules.findAll { antOnlyLines.contains(it.key)})
.collectMany { it.value }
.join("\n"))
throw new GradleException("Forbidden APIs rules out of sync.")
}
}
}
check.dependsOn verifyForbiddenApiRulesInSync
}