1
0
Fork 0
mirror of https://github.com/ethauvin/kobalt.git synced 2025-04-26 16:28:12 -07:00

outputChecksum needs to be a closure.

This commit is contained in:
Cedric Beust 2015-12-31 10:18:39 -08:00
parent 7cdb4b1a9c
commit d9ae38eca1
3 changed files with 12 additions and 6 deletions

View file

@ -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. * 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 * @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 * 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. * @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)

View file

@ -82,10 +82,12 @@ class IncrementalManager(val fileName: String = IncrementalManager.BUILD_INFO_FI
// TODO: compare the checksums with the previous run // TODO: compare the checksums with the previous run
val taskName = project.name + ":" + taskName val taskName = project.name + ":" + taskName
var upToDate = false var upToDate = false
var taskOutputChecksum : String? = null
inputChecksumFor(taskName)?.let { inputChecksum -> inputChecksumFor(taskName)?.let { inputChecksum ->
if (inputChecksum == iit.inputChecksum) { if (inputChecksum == iit.inputChecksum) {
outputChecksumFor(taskName)?.let { outputChecksum -> outputChecksumFor(taskName)?.let { outputChecksum ->
if (outputChecksum == iit.outputChecksum) { taskOutputChecksum = iit.outputChecksum()
if (outputChecksum == taskOutputChecksum) {
upToDate = true upToDate = true
} else { } else {
logIncremental(1, "Incremental task $taskName output is out of date, running it") 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) saveInputChecksum(taskName, it)
logIncremental(1, " input checksum \"$it\" saved") logIncremental(1, " input checksum \"$it\" saved")
} }
iit.outputChecksum?.let { taskOutputChecksum?.let {
saveOutputChecksum(taskName, it) saveOutputChecksum(taskName, it)
logIncremental(1, " output checksum \"$it\" saved") logIncremental(1, " output checksum \"$it\" saved")
} }

View file

@ -172,10 +172,11 @@ abstract class JvmCompilerPlugin @Inject constructor(
val inputChecksum = Md5.toMd5Directories(project.sourceDirectories.map { val inputChecksum = Md5.toMd5Directories(project.sourceDirectories.map {
File(project.directory, it) File(project.directory, it)
}) })
val outputChecksum = Md5.toMd5Directories(listOf(File(project.classesDir(context))))
return IncrementalTaskInfo( return IncrementalTaskInfo(
inputChecksum = inputChecksum, inputChecksum = inputChecksum,
outputChecksum = outputChecksum, outputChecksum = {
Md5.toMd5Directories(listOf(File(project.classesDir(context))))
},
task = { project -> doTaskCompile(project) } task = { project -> doTaskCompile(project) }
) )
} }