mirror of
https://github.com/ethauvin/kobalt.git
synced 2025-04-26 00:17:11 -07:00
Incremental manager work.
This commit is contained in:
parent
a399df754a
commit
cb1aaf6a75
2 changed files with 99 additions and 0 deletions
|
@ -0,0 +1,68 @@
|
|||
package com.beust.kobalt.internal
|
||||
|
||||
import com.beust.kobalt.misc.KFiles
|
||||
import com.google.gson.Gson
|
||||
import com.google.gson.GsonBuilder
|
||||
import java.io.File
|
||||
import java.io.FileReader
|
||||
import java.nio.charset.Charset
|
||||
import java.nio.file.Files
|
||||
import java.nio.file.Paths
|
||||
import java.util.*
|
||||
|
||||
data class TaskInfo(val taskName: String, var inputChecksum: String? = null, var outputChecksum: String? = null)
|
||||
|
||||
class BuildInfo(var tasks: List<TaskInfo>)
|
||||
|
||||
/**
|
||||
* Manage the file .kobalt/build-info.kt, which keeps track of input and output checksums to manage
|
||||
* incremental builds.
|
||||
*/
|
||||
class IncrementalManager(val fileName: String = IncrementalManager.BUILD_INFO_FILE) {
|
||||
companion object {
|
||||
val BUILD_INFO_FILE = KFiles.joinDir(KFiles.KOBALT_DOT_DIR, "build-info.json")
|
||||
}
|
||||
|
||||
private fun buildInfo() = File(fileName).let { file ->
|
||||
if (file.exists()) {
|
||||
Gson().fromJson(FileReader(file), BuildInfo::class.java) ?: BuildInfo(emptyList())
|
||||
} else {
|
||||
BuildInfo(emptyList())
|
||||
}
|
||||
}
|
||||
|
||||
private fun taskInfos() = hashMapOf<String, TaskInfo>().apply {
|
||||
buildInfo().tasks.forEach {
|
||||
put(it.taskName, it)
|
||||
}
|
||||
}
|
||||
|
||||
private fun save(map: Map<String, TaskInfo>) {
|
||||
val bi = BuildInfo(map.values.toList())
|
||||
val json = GsonBuilder().setPrettyPrinting().create().toJson(bi)
|
||||
Files.write(Paths.get(fileName), json.toByteArray(Charset.defaultCharset()))
|
||||
}
|
||||
|
||||
private fun taskInfoFor(taskInfos: HashMap<String, TaskInfo>, taskName: String)
|
||||
= taskInfos.getOrPut(taskName, { -> TaskInfo(taskName) })
|
||||
|
||||
fun saveInputChecksum(taskName: String, inputChecksum: String) {
|
||||
with(taskInfos()) {
|
||||
taskInfoFor(this, taskName).inputChecksum = inputChecksum
|
||||
save(this)
|
||||
}
|
||||
}
|
||||
|
||||
fun inputChecksumFor(taskName: String) : String? =
|
||||
taskInfoFor(taskInfos(), taskName).inputChecksum
|
||||
|
||||
fun saveOutputChecksum(taskName: String, outputChecksum: String) {
|
||||
with(taskInfos()) {
|
||||
taskInfoFor(this, taskName).outputChecksum = outputChecksum
|
||||
save(this)
|
||||
}
|
||||
}
|
||||
|
||||
fun outputChecksumFor(taskName: String) : String? =
|
||||
taskInfoFor(taskInfos(), taskName).outputChecksum
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue