This is an automated email from the ASF dual-hosted git repository.

snazy pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/polaris.git


The following commit(s) were added to refs/heads/main by this push:
     new 3fc9a61bb Simplify digest generation (#2907)
3fc9a61bb is described below

commit 3fc9a61bb6bbd455ef61c850ca1c7072484940ee
Author: Robert Stupp <[email protected]>
AuthorDate: Sat Nov 1 20:51:28 2025 +0100

    Simplify digest generation (#2907)
    
    Similarly to the change to simplify artifact signing, this change 
simplifies digest generation by introducing a function to digest the output 
files of any task. That function takes care of setting up the correct task 
dependencies and task execution.
    
    Also removes an unnecessary double buffering during digest generation.
---
 .../src/main/kotlin/publishing/digest-task.kt      | 52 +++++++++++++++-------
 .../src/main/kotlin/publishing/rootProject.kt      | 12 +----
 runtime/distribution/build.gradle.kts              | 20 ++-------
 3 files changed, 41 insertions(+), 43 deletions(-)

diff --git a/build-logic/src/main/kotlin/publishing/digest-task.kt 
b/build-logic/src/main/kotlin/publishing/digest-task.kt
index a1f173daf..1c249b4e4 100644
--- a/build-logic/src/main/kotlin/publishing/digest-task.kt
+++ b/build-logic/src/main/kotlin/publishing/digest-task.kt
@@ -19,40 +19,52 @@
 
 package publishing
 
+import java.io.File
 import java.security.MessageDigest
 import javax.inject.Inject
 import org.gradle.api.DefaultTask
+import org.gradle.api.Project
 import org.gradle.api.model.ObjectFactory
 import org.gradle.api.tasks.Input
-import org.gradle.api.tasks.InputFile
-import org.gradle.api.tasks.OutputFile
+import org.gradle.api.tasks.InputFiles
+import org.gradle.api.tasks.OutputFiles
 import org.gradle.api.tasks.TaskAction
+import org.gradle.api.tasks.TaskProvider
+import org.gradle.internal.extensions.stdlib.capitalized
 import org.gradle.work.DisableCachingByDefault
 
 @DisableCachingByDefault
 abstract class GenerateDigest @Inject constructor(objectFactory: 
ObjectFactory) : DefaultTask() {
 
-  @get:InputFile val file = objectFactory.fileProperty()
+  @get:InputFiles val files = objectFactory.fileCollection()
+
   @get:Input val algorithm = 
objectFactory.property(String::class.java).convention("SHA-512")
-  @get:OutputFile
-  val outputFile =
-    objectFactory.fileProperty().convention {
-      val input = file.get().asFile
-      val algo = algorithm.get()
-      input.parentFile.resolve("${input.name}.${algo.replace("-", 
"").lowercase()}")
-    }
+
+  @Suppress("unused", "UnstableApiUsage")
+  @get:OutputFiles
+  val outputFiles =
+    objectFactory.fileCollection().convention(files.map { file -> 
digestFileForInput(file) })
 
   @TaskAction
   fun generate() {
-    val input = file.get().asFile
-    val digestFile = outputFile.get().asFile
-    val md = MessageDigest.getInstance(algorithm.get())
+    files.files.forEach { input -> digest(input) }
+  }
+
+  private fun digestFileForInput(input: File): File {
+    val algo = algorithm.get()
+    return input.parentFile.resolve("${input.name}.${algo.replace("-", 
"").lowercase()}")
+  }
+
+  private fun digest(input: File) {
+    val algo = algorithm.get()
+    logger.info("Generating {} digest for '{}'", algo, input)
+    val digestFile = digestFileForInput(input)
+    val md = MessageDigest.getInstance(algo)
     input.inputStream().use {
-      val buffered = it.buffered(8192)
       val buf = ByteArray(8192)
       var rd: Int
       while (true) {
-        rd = buffered.read(buf)
+        rd = it.read(buf)
         if (rd == -1) break
         md.update(buf, 0, rd)
       }
@@ -64,3 +76,13 @@ abstract class GenerateDigest @Inject 
constructor(objectFactory: ObjectFactory)
     }
   }
 }
+
+fun Project.digestTaskOutputs(task: TaskProvider<*>): 
TaskProvider<GenerateDigest> {
+  val digestTask = tasks.register("digest${task.name.capitalized()}", 
GenerateDigest::class.java)
+  digestTask.configure {
+    dependsOn(task)
+    this.files.from(task.map { t -> t.outputs.files }.get())
+  }
+  task.configure { finalizedBy(digestTask) }
+  return digestTask
+}
diff --git a/build-logic/src/main/kotlin/publishing/rootProject.kt 
b/build-logic/src/main/kotlin/publishing/rootProject.kt
index 5c8a5da90..95267fb0a 100644
--- a/build-logic/src/main/kotlin/publishing/rootProject.kt
+++ b/build-logic/src/main/kotlin/publishing/rootProject.kt
@@ -64,17 +64,7 @@ internal fun configureOnRootProject(project: Project) =
       outputs.file(e.sourceTarball)
     }
 
-    val digestSourceTarball =
-      tasks.register<GenerateDigest>("digestSourceTarball") {
-        description = "Generate the source tarball digest"
-        mustRunAfter(sourceTarball)
-        file.set {
-          val e = 
project.extensions.getByType(PublishingHelperExtension::class.java)
-          e.sourceTarball.get().asFile
-        }
-      }
-
-    sourceTarball.configure { finalizedBy(digestSourceTarball) }
+    digestTaskOutputs(sourceTarball)
 
     signTaskOutputs(sourceTarball)
 
diff --git a/runtime/distribution/build.gradle.kts 
b/runtime/distribution/build.gradle.kts
index ee905ca97..75ddcf7b4 100644
--- a/runtime/distribution/build.gradle.kts
+++ b/runtime/distribution/build.gradle.kts
@@ -17,8 +17,8 @@
  * under the License.
  */
 
-import publishing.GenerateDigest
 import publishing.PublishingHelperPlugin
+import publishing.digestTaskOutputs
 import publishing.signTaskOutputs
 
 plugins {
@@ -81,23 +81,9 @@ val distTar = tasks.named<Tar>("distTar") { compression = 
Compression.GZIP }
 
 val distZip = tasks.named<Zip>("distZip") {}
 
-val digestDistTar =
-  tasks.register<GenerateDigest>("digestDistTar") {
-    description = "Generate the distribution tar digest"
-    dependsOn(distTar)
-    file.set { distTar.get().archiveFile.get().asFile }
-  }
-
-val digestDistZip =
-  tasks.register<GenerateDigest>("digestDistZip") {
-    description = "Generate the distribution zip digest"
-    dependsOn(distZip)
-    file.set { distZip.get().archiveFile.get().asFile }
-  }
-
-distTar.configure { finalizedBy(digestDistTar) }
+digestTaskOutputs(distTar)
 
-distZip.configure { finalizedBy(digestDistZip) }
+digestTaskOutputs(distZip)
 
 signTaskOutputs(distTar)
 

Reply via email to