You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by dw...@apache.org on 2019/12/18 13:54:20 UTC
[lucene-solr] branch gradle-master updated: Allow simultaneous call
to sha regeneration and validation by introducing soft ordering constraint.
This is an automated email from the ASF dual-hosted git repository.
dweiss pushed a commit to branch gradle-master
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git
The following commit(s) were added to refs/heads/gradle-master by this push:
new 7c762c9 Allow simultaneous call to sha regeneration and validation by introducing soft ordering constraint.
7c762c9 is described below
commit 7c762c969a677d0d3a2f33554f10dd25830c02e8
Author: Dawid Weiss <dw...@apache.org>
AuthorDate: Wed Dec 18 14:54:13 2019 +0100
Allow simultaneous call to sha regeneration and validation by introducing soft ordering constraint.
---
gradle/validation/jar-checks.gradle | 84 +++++++++++++++++++++----------------
1 file changed, 48 insertions(+), 36 deletions(-)
diff --git a/gradle/validation/jar-checks.gradle b/gradle/validation/jar-checks.gradle
index 10b0aa3..fb3b6c7 100644
--- a/gradle/validation/jar-checks.gradle
+++ b/gradle/validation/jar-checks.gradle
@@ -120,7 +120,7 @@ subprojects {
jarName : file.toPath().getFileName().toString(),
path : file,
module : resolvedArtifact.moduleVersion,
- checksum : new DigestUtils(MessageDigestAlgorithms.SHA_1).digestAsHex(file),
+ checksum : provider { new DigestUtils(MessageDigestAlgorithms.SHA_1).digestAsHex(file).trim() },
// We keep track of the files referenced by this dependency (sha, license, notice, etc.)
// so that we can determine unused dangling files later on.
referencedFiles: []
@@ -144,7 +144,7 @@ subprojects {
} else {
dep.referencedFiles += expectedChecksumFile
def expected = expectedChecksumFile.getText("UTF-8").trim()
- def actual = dep.checksum.trim()
+ def actual = dep.checksum.get()
if (expected.compareToIgnoreCase(actual) != 0) {
errors << "Dependency checksum mismatch ('${dep.module}'), expected it to be: ${expected}, but was: ${actual}"
} else {
@@ -234,39 +234,11 @@ subprojects {
licenses.dependsOn validateJarChecksums, validateJarLicenses
}
+// Add top-project level tasks validating dangling files
+// and regenerating dependency checksums.
configure([project(":solr"), project(":lucene"),]) {
- def validationTasks = subprojects.collect { it.tasks.matching { it.name == "licenses" } }
- def jarInfoTasks = subprojects.collect { it.tasks.matching { it.name == "collectJarInfos" } }
-
- // Check for dangling files in the licenses folder.
- task checkDanglingLicenseFiles() {
- dependsOn validationTasks
-
- ext {
- exclude = []
- }
-
- doFirst {
- def allReferenced = validationTasks.collectMany { task ->
- task.project.jarInfos.collectMany { it.referencedFiles }
- }.collect { it.toString() }
-
- def patterns = ext.exclude
- def allExisting = fileTree(licensesDir, {
- exclude patterns
- }).files.collect { it.toString() }
-
- def dangling = (allExisting - allReferenced).sort()
-
- if (dangling) {
- gradle.buildFinished {
- logger.warn("WARNING: there were unreferenced files under license folder:\n - ${dangling.join("\n - ")}")
- }
- }
- }
- }
-
- licenses.dependsOn checkDanglingLicenseFiles
+ def validationTasks = subprojects.collectMany { it.tasks.matching { it.name == "licenses" } }
+ def jarInfoTasks = subprojects.collectMany { it.tasks.matching { it.name == "collectJarInfos" } }
// Update dependency checksums.
task updateLicenses() {
@@ -289,21 +261,61 @@ configure([project(":solr"), project(":lucene"),]) {
def updated = []
jarInfoTasks.collectMany { task -> task.project.jarInfos }.each { dep ->
def expectedChecksumFile = file("${licensesDir}/${dep.jarName}.sha1")
+ def actual = dep.checksum.get()
if (expectedChecksumFile.exists()) {
def expected = expectedChecksumFile.getText("UTF-8").trim()
- def actual = dep.checksum.trim()
if (expected.compareToIgnoreCase(actual) == 0) {
return;
}
}
updated += "Updated checksum ('${dep.module}'): ${expectedChecksumFile}"
- expectedChecksumFile.write(dep.checksum.trim() + "\n", "UTF-8")
+ expectedChecksumFile.write(actual + "\n", "UTF-8")
}
updated.sort().each { line -> logger.log(LogLevel.LIFECYCLE, line) }
}
}
+
+ // Any validation task must run after all updates have been applied.
+ // We add an ordering constraint that any validation task (or its dependency subgraph)
+ // must run after updateLicenses
+ validationTasks
+ .collectMany { task -> [task, task.dependsOn]}
+ .flatten()
+ .each { task ->
+ task.mustRunAfter updateLicenses
+ }
+
+ // Check for dangling files in the licenses folder.
+ task checkDanglingLicenseFiles() {
+ dependsOn validationTasks
+
+ ext {
+ exclude = []
+ }
+
+ doFirst {
+ def allReferenced = validationTasks.collectMany { task ->
+ task.project.jarInfos.collectMany { it.referencedFiles }
+ }.collect { it.toString() }
+
+ def patterns = ext.exclude
+ def allExisting = fileTree(licensesDir, {
+ exclude patterns
+ }).files.collect { it.toString() }
+
+ def dangling = (allExisting - allReferenced).sort()
+
+ if (dangling) {
+ gradle.buildFinished {
+ logger.warn("WARNING: there were unreferenced files under license folder:\n - ${dangling.join("\n - ")}")
+ }
+ }
+ }
+ }
+
+ licenses.dependsOn checkDanglingLicenseFiles
}
// Exclude files that are not a result of direct dependencies but have to be there.