From d9ae38eca11ecfff4e0b197103571fd9743e9b9e Mon Sep 17 00:00:00 2001 From: Cedric Beust Date: Thu, 31 Dec 2015 10:18:39 -0800 Subject: [PATCH] outputChecksum needs to be a closure. --- .../main/kotlin/com/beust/kobalt/IncrementalTaskInfo.kt | 7 +++++-- .../kotlin/com/beust/kobalt/internal/IncrementalManager.kt | 6 ++++-- .../kotlin/com/beust/kobalt/internal/JvmCompilerPlugin.kt | 5 +++-- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/IncrementalTaskInfo.kt b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/IncrementalTaskInfo.kt index 3fc06a0c..ba3b549b 100644 --- a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/IncrementalTaskInfo.kt +++ b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/IncrementalTaskInfo.kt @@ -7,7 +7,10 @@ import com.beust.kobalt.api.Project * if they differ, the task gets run. If they are equal, outputChecksums are then compared. * @param outputChecksum The checksum for the output of this task. If null, the output is absent * and the task will be run. If non null, it gets compared against the checksum of the previous run and - * if they differ, the task gets run. + * if they differ, the task gets run. Note that this parameter is a closure and not a direct value + * because Kobalt needs to call it twice: once before the task and once after a successful execution (to store it). * @param task The task to run. */ -class IncrementalTaskInfo(val inputChecksum: String?, val outputChecksum: String?, val task: (Project) -> TaskResult) +class IncrementalTaskInfo(val inputChecksum: String?, + val outputChecksum: () -> String?, + val task: (Project) -> TaskResult) diff --git a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/IncrementalManager.kt b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/IncrementalManager.kt index 42fbedf5..77abda70 100644 --- a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/IncrementalManager.kt +++ b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/IncrementalManager.kt @@ -82,10 +82,12 @@ class IncrementalManager(val fileName: String = IncrementalManager.BUILD_INFO_FI // TODO: compare the checksums with the previous run val taskName = project.name + ":" + taskName var upToDate = false + var taskOutputChecksum : String? = null inputChecksumFor(taskName)?.let { inputChecksum -> if (inputChecksum == iit.inputChecksum) { outputChecksumFor(taskName)?.let { outputChecksum -> - if (outputChecksum == iit.outputChecksum) { + taskOutputChecksum = iit.outputChecksum() + if (outputChecksum == taskOutputChecksum) { upToDate = true } else { logIncremental(1, "Incremental task $taskName output is out of date, running it") @@ -105,7 +107,7 @@ class IncrementalManager(val fileName: String = IncrementalManager.BUILD_INFO_FI saveInputChecksum(taskName, it) logIncremental(1, " input checksum \"$it\" saved") } - iit.outputChecksum?.let { + taskOutputChecksum?.let { saveOutputChecksum(taskName, it) logIncremental(1, " output checksum \"$it\" saved") } diff --git a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/JvmCompilerPlugin.kt b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/JvmCompilerPlugin.kt index e325e529..42c7ca20 100644 --- a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/JvmCompilerPlugin.kt +++ b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/JvmCompilerPlugin.kt @@ -172,10 +172,11 @@ abstract class JvmCompilerPlugin @Inject constructor( val inputChecksum = Md5.toMd5Directories(project.sourceDirectories.map { File(project.directory, it) }) - val outputChecksum = Md5.toMd5Directories(listOf(File(project.classesDir(context)))) return IncrementalTaskInfo( inputChecksum = inputChecksum, - outputChecksum = outputChecksum, + outputChecksum = { + Md5.toMd5Directories(listOf(File(project.classesDir(context)))) + }, task = { project -> doTaskCompile(project) } ) }