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

Fix the profile rebuild.

Fixes https://github.com/cbeust/kobalt/issues/278
This commit is contained in:
Cedric Beust 2016-07-12 03:19:17 -08:00
parent e7407fdcf8
commit bf1863db32
3 changed files with 56 additions and 2 deletions

View file

@ -125,7 +125,9 @@ public class BuildFileCompiler @Inject constructor(@Assisted("buildFiles") val b
// in this case, we won't recompile the build file. A potential solution for this would be
// to have a side file that describes which profiles the current buildScript.jar was
// compiled with.
if (args.profiles.isNullOrEmpty() && buildScriptUtil.isUpToDate(buildFile, buildScriptJarFile)) {
val bs = BuildScriptJarFile(buildScriptJarFile)
val same = bs.sameProfiles(args.profiles)
if (same && buildScriptUtil.isUpToDate(buildFile, buildScriptJarFile)) {
log(2, " Build file is up to date")
return TaskResult()
} else {
@ -141,6 +143,12 @@ public class BuildFileCompiler @Inject constructor(@Assisted("buildFiles") val b
output = buildScriptJarFile
}.compile(context = context)
//
// Generate the file that contains the list of active profiles for this build file
//
BuildScriptJarFile(buildScriptJarFile).saveProfiles(args.profiles)
return result
}
}

View file

@ -0,0 +1,39 @@
package com.beust.kobalt.app
import java.io.File
import java.io.FileWriter
class BuildScriptJarFile(val jarFile: File) {
val file = File(jarFile.parent, "profiles")
fun saveProfiles(profiles: String?) {
if (profiles != null) {
FileWriter(file).use {
it.write(profiles.split(",").sorted().joinToString(" "))
}
} else {
file.delete()
}
}
/**
* @{profiles} is a comma-separated list of profiles, or null
*/
fun sameProfiles(profiles: String?) : Boolean {
if (! file.exists()) {
return profiles == null
} else {
val fileContent = file.readText().trim()
if (fileContent.isEmpty() && profiles == null) {
return true
} else if (profiles != null) {
val savedProfiles = fileContent.split(" ").sorted()
val expected = profiles.split(",").sorted()
return savedProfiles == expected
} else {
return fileContent.isEmpty()
}
}
}
}

View file

@ -26,6 +26,7 @@ class ParsedBuildFile(val buildFile: BuildFile, val context: KobaltContext, val
val profileLines = arrayListOf<String>()
val pluginUrls = arrayListOf<URL>()
val projects = arrayListOf<Project>()
val activeProfiles = arrayListOf<String>()
private val preBuildScript = arrayListOf(
"import com.beust.kobalt.*",
@ -85,6 +86,7 @@ class ParsedBuildFile(val buildFile: BuildFile, val context: KobaltContext, val
if (line.matches(Regex("[ \\t]*val[ \\t]+$it[ \\t]+=.*"))) {
with("val $it = true") {
log(2, "Activating profile $it in build file")
activeProfiles.add(it)
profileLines.add(this)
return this
}
@ -138,13 +140,18 @@ class ParsedBuildFile(val buildFile: BuildFile, val context: KobaltContext, val
private fun generateJarFile(context: KobaltContext, buildFile: BuildFile, buildScriptJarFile: File,
originalFile: BuildFile) {
//
// Compile the jar file
//
val kotlintDeps = dependencyManager.calculateDependencies(null, context)
val deps: List<String> = kotlintDeps.map { it.jarFile.get().absolutePath }
val outputJar = File(buildScriptJarFile.absolutePath)
val result = kotlinCompilePrivate {
classpath(files.kobaltJar)
classpath(deps)
sourceFiles(buildFile.path.toFile().absolutePath)
output = File(buildScriptJarFile.absolutePath)
output = outputJar
}.compile(context = context)
if (! result.success) {
throw KobaltException("Couldn't compile ${originalFile.realPath}:\n"