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

Merge branch 'master' of github.com:cbeust/kobalt

This commit is contained in:
Cedric Beust 2015-12-24 17:46:41 -08:00
commit a187061af9
7 changed files with 53 additions and 24 deletions

View file

@ -46,7 +46,7 @@ Another advantage of checksums is that they are generic and not necessarily tied
Internally, Kobalt maintains information about all the checksums and tasks that it has seen in a file `.kobalt/build-info.json`. Whenever an incremental task is about to run, Kobalt compares its input and output checksums to the ones from the previous run and if any differs, that task is run. Otherwise, it's skipped. Internally, Kobalt maintains information about all the checksums and tasks that it has seen in a file `.kobalt/build-info.json`. Whenever an incremental task is about to run, Kobalt compares its input and output checksums to the ones from the previous run and if any differs, that task is run. Otherwise, it's skipped.
Example timings: Example timings for Kobalt:
| Task | First run | Second run | | Task | First run | Second run |
| ---- | --------- | ---------- | | ---- | --------- | ---------- |
@ -58,6 +58,20 @@ Example timings:
| kobalt:assemble | 42333 ms | 2130 ms | | kobalt:assemble | 42333 ms | 2130 ms |
| | 70 seconds | 2 seconds | | | 70 seconds | 2 seconds |
Android (u2020):
| Task | First run | Second run |
| ---- | --------- | ---------- |
| u2020:generateRInternalDebug | 32350 ms | 1652 ms |
| u2020:compileInternalDebug | 3629 ms | 24 ms |
| u2020:retrolambdaInternalDebug | 668 ms | 473 ms |
| u2020:generateDexInternalDebug | 6130 ms |55 ms |
| u2020:signApkInternalDebug | 449 ms | 404 ms |
| u2020:assembleInternalDebug | 0 ms | 0 ms |
| | 43 seconds | 2 seconds |

View file

@ -1 +1 @@
kobalt.version=0.360 kobalt.version=0.362

View file

@ -172,8 +172,7 @@ 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(KFiles.joinDir(project.directory, project.buildDirectory, val outputChecksum = Md5.toMd5Directories(listOf(File(project.classesDir(context))))
KFiles.CLASSES_DIR))))
return IncrementalTaskInfo( return IncrementalTaskInfo(
inputChecksum = inputChecksum, inputChecksum = inputChecksum,
outputChecksum = outputChecksum, outputChecksum = outputChecksum,

View file

@ -9,33 +9,41 @@ import javax.xml.bind.DatatypeConverter
public class Md5 { public class Md5 {
companion object { companion object {
// private fun md5(file: File) : String { // private fun md5(file: File) : String {
// if (file.isDirectory) {
// println("PROBLEM")
// }
// val md5 = MessageDigest.getInstance("MD5") // val md5 = MessageDigest.getInstance("MD5")
// val bytes = file.readBytes() // val bytes = file.readBytes()
// md5.update(bytes, 0, bytes.size) // md5.update(bytes, 0, bytes.size)
// return DatatypeConverter.printHexBinary(md5.digest()).toLowerCase() // return DatatypeConverter.printHexBinary(md5.digest()).toLowerCase()
// } // }
fun toMd5Directories(directories: List<File>) : String { fun toMd5Directories(directories: List<File>) : String? {
MessageDigest.getInstance("MD5").let { md5 -> val ds = directories.filter { it.exists() }
directories.forEach { file -> if (ds.size > 0) {
if (file.isFile) { MessageDigest.getInstance("MD5").let { md5 ->
val bytes = file.readBytes() directories.filter { it.exists() }.forEach { file ->
md5.update(bytes, 0, bytes.size) if (file.isFile) {
} else { val bytes = file.readBytes()
val files = KFiles.findRecursively(file) // , { f -> f.endsWith("java")})
log(2, " Calculating checksum of ${files.size} files in $file")
files.map {
File(file, it)
}.filter {
it.isFile
}.forEach {
val bytes = it.readBytes()
md5.update(bytes, 0, bytes.size) md5.update(bytes, 0, bytes.size)
} else {
val files = KFiles.findRecursively(file) // , { f -> f.endsWith("java")})
log(2, " Calculating checksum of ${files.size} files in $file")
files.map {
File(file, it)
}.filter {
it.isFile
}.forEach {
val bytes = it.readBytes()
md5.update(bytes, 0, bytes.size)
}
} }
} }
val result = DatatypeConverter.printHexBinary(md5.digest()).toLowerCase()
return result
} }
val result = DatatypeConverter.printHexBinary(md5.digest()).toLowerCase() } else {
return result return null
} }
} }

View file

@ -37,7 +37,7 @@ public class GithubApi @Inject constructor(val executors: KobaltExecutors,
private fun parseRetrofitError(e: Throwable) : RetrofitErrorsResponse { private fun parseRetrofitError(e: Throwable) : RetrofitErrorsResponse {
val re = e as RetrofitError val re = e as RetrofitError
val json = String((re.response.body as TypedByteArray).bytes) val json = String((re.response?.body as TypedByteArray).bytes)
return Gson().fromJson(json, RetrofitErrorsResponse::class.java) return Gson().fromJson(json, RetrofitErrorsResponse::class.java)
} }

View file

@ -12,6 +12,7 @@ import com.beust.kobalt.api.annotation.Task
import com.beust.kobalt.glob import com.beust.kobalt.glob
import com.beust.kobalt.internal.JvmCompilerPlugin import com.beust.kobalt.internal.JvmCompilerPlugin
import com.beust.kobalt.maven.DependencyManager import com.beust.kobalt.maven.DependencyManager
import com.beust.kobalt.maven.PomGenerator
import com.beust.kobalt.misc.* import com.beust.kobalt.misc.*
import java.io.File import java.io.File
import java.io.FileOutputStream import java.io.FileOutputStream
@ -24,7 +25,8 @@ import javax.inject.Singleton
@Singleton @Singleton
class PackagingPlugin @Inject constructor(val dependencyManager : DependencyManager, class PackagingPlugin @Inject constructor(val dependencyManager : DependencyManager,
val executors: KobaltExecutors, val jarGenerator: JarGenerator, val warGenerator: WarGenerator, val executors: KobaltExecutors, val jarGenerator: JarGenerator, val warGenerator: WarGenerator,
val zipGenerator: ZipGenerator, val taskContributor: TaskContributor) val zipGenerator: ZipGenerator, val taskContributor: TaskContributor,
val pomFactory: PomGenerator.IFactory)
: ConfigPlugin<InstallConfig>(), ITaskContributor { : ConfigPlugin<InstallConfig>(), ITaskContributor {
companion object { companion object {
@ -180,6 +182,9 @@ class PackagingPlugin @Inject constructor(val dependencyManager : DependencyMana
pkg.jars.forEach { jarGenerator.generateJar(pkg.project, context, it) } pkg.jars.forEach { jarGenerator.generateJar(pkg.project, context, it) }
pkg.wars.forEach { warGenerator.generateWar(pkg.project, context, it, projects) } pkg.wars.forEach { warGenerator.generateWar(pkg.project, context, it, projects) }
pkg.zips.forEach { zipGenerator.generateZip(pkg.project, context, it) } pkg.zips.forEach { zipGenerator.generateZip(pkg.project, context, it) }
if (pkg.generatePom) {
pomFactory.create(project).generate()
}
} }
return TaskResult() return TaskResult()
} }
@ -228,6 +233,7 @@ class PackageConfig(val project: Project) : AttributeHolder {
val jars = arrayListOf<Jar>() val jars = arrayListOf<Jar>()
val wars = arrayListOf<War>() val wars = arrayListOf<War>()
val zips = arrayListOf<Zip>() val zips = arrayListOf<Zip>()
var generatePom: Boolean = false
init { init {
(Kobalt.findPlugin(PackagingPlugin.PLUGIN_NAME) as PackagingPlugin).addPackage(this) (Kobalt.findPlugin(PackagingPlugin.PLUGIN_NAME) as PackagingPlugin).addPackage(this)
@ -283,6 +289,8 @@ class PackageConfig(val project: Project) : AttributeHolder {
mainJar.addAttribute(it.first, it.second) mainJar.addAttribute(it.first, it.second)
} }
generatePom = true
return m return m
} }

View file

@ -1 +1 @@
kobalt.version=0.360 kobalt.version=0.362