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.