mirror of
https://github.com/ethauvin/kobalt.git
synced 2025-04-26 00:17:11 -07:00
Clean up ParsedBuildFile.
This commit is contained in:
parent
43bc211b2e
commit
4b5a7c3093
2 changed files with 33 additions and 35 deletions
|
@ -108,7 +108,7 @@ class BuildFileCompiler @Inject constructor(@Assisted("buildSources") val buildS
|
||||||
// Write the modified Build.kt (e.g. maybe profiles were applied) to a temporary file,
|
// Write the modified Build.kt (e.g. maybe profiles were applied) to a temporary file,
|
||||||
// compile it, jar it in buildScript.jar and run it
|
// compile it, jar it in buildScript.jar and run it
|
||||||
val modifiedBuildFile = KFiles.createTempBuildFileInTempDirectory(deleteOnExit = true)
|
val modifiedBuildFile = KFiles.createTempBuildFileInTempDirectory(deleteOnExit = true)
|
||||||
KFiles.saveFile(modifiedBuildFile, parsedBuildFile.buildScriptCode)
|
KFiles.saveFile(modifiedBuildFile, parsedBuildFile.nonBuildScriptCode)
|
||||||
val taskResult = maybeCompileBuildFile(context, listOf(modifiedBuildFile.path),
|
val taskResult = maybeCompileBuildFile(context, listOf(modifiedBuildFile.path),
|
||||||
buildScriptJarFile, pluginUrls, context.internalContext.forceRecompile,
|
buildScriptJarFile, pluginUrls, context.internalContext.forceRecompile,
|
||||||
parsedBuildFile.containsProfiles)
|
parsedBuildFile.containsProfiles)
|
||||||
|
|
|
@ -18,28 +18,33 @@ import java.util.regex.Pattern
|
||||||
|
|
||||||
class ParsedBuildFile(val buildSources: IBuildSources, val context: KobaltContext, val buildScriptUtil: BuildScriptUtil,
|
class ParsedBuildFile(val buildSources: IBuildSources, val context: KobaltContext, val buildScriptUtil: BuildScriptUtil,
|
||||||
val dependencyManager: DependencyManager, val files: KFiles) {
|
val dependencyManager: DependencyManager, val files: KFiles) {
|
||||||
val pluginList = arrayListOf<String>()
|
private val profileLines = arrayListOf<String>()
|
||||||
val repos = arrayListOf<String>()
|
private val projects = arrayListOf<Project>()
|
||||||
val buildFileClasspath = arrayListOf<String>()
|
private val activeProfiles = arrayListOf<String>()
|
||||||
val profileLines = arrayListOf<String>()
|
private val preBuildScriptJar = KFiles.findBuildScriptLocation(buildSources, "preBuildScript.jar")
|
||||||
val pluginUrls = arrayListOf<URL>()
|
private val preBuildScriptJarFile = File(preBuildScriptJar)
|
||||||
val projects = arrayListOf<Project>()
|
private val nonBuildScript = arrayListOf<String>()
|
||||||
val activeProfiles = arrayListOf<String>()
|
|
||||||
|
|
||||||
var containsProfiles = false
|
var containsProfiles = false
|
||||||
|
val pluginUrls = arrayListOf<URL>()
|
||||||
|
|
||||||
private val preBuildScript = arrayListOf(
|
/**
|
||||||
"import com.beust.kobalt.*",
|
* Contains the addition of all the build files corrected with the active profiles and with
|
||||||
"import com.beust.kobalt.api.*")
|
* the buildScripts{} sections removed.
|
||||||
val preBuildScriptCode : String get() = preBuildScript.joinToString("\n")
|
*/
|
||||||
|
val nonBuildScriptCode : String get() = nonBuildScript.joinToString("\n")
|
||||||
private val nonBuildScript = arrayListOf<String>()
|
|
||||||
val buildScriptCode : String get() = nonBuildScript.joinToString("\n")
|
|
||||||
|
|
||||||
init {
|
init {
|
||||||
|
// Because profiles may have changed between two builds, we have to delete preBuildScript.jar file
|
||||||
|
// every time and then generate a new one (or skip that phase if no buildScript{} was found in the
|
||||||
|
// buid files)
|
||||||
|
preBuildScriptJarFile.delete()
|
||||||
|
|
||||||
val buildScriptInfo = parseBuildFile()
|
val buildScriptInfo = parseBuildFile()
|
||||||
|
|
||||||
|
// Only generate preBuildScript.jar if we found at least one buildScript{}
|
||||||
if (buildScriptInfo != null) {
|
if (buildScriptInfo != null) {
|
||||||
initPluginUrls(buildScriptInfo)
|
parseBuildScriptInfo(buildScriptInfo)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -107,18 +112,8 @@ class ParsedBuildFile(val buildSources: IBuildSources, val context: KobaltContex
|
||||||
val buildScriptInfo = BlockExtractor(Pattern.compile("^val.*buildScript.*\\{"), '{', '}')
|
val buildScriptInfo = BlockExtractor(Pattern.compile("^val.*buildScript.*\\{"), '{', '}')
|
||||||
.extractBlock(buildWithCorrectProfiles)
|
.extractBlock(buildWithCorrectProfiles)
|
||||||
|
|
||||||
if (buildScriptInfo != null) {
|
|
||||||
kobaltLog(2, "About to compile build file:\n=====\n" + buildScriptInfo.content + "\n=====")
|
|
||||||
preBuildScript.add(buildScriptInfo.content)
|
|
||||||
} else {
|
|
||||||
kobaltLog(2, "Didn't find any buildScript{} section, no preBuildScript.jar necessary")
|
|
||||||
repos.forEach { preBuildScript.add(it) }
|
|
||||||
pluginList.forEach { preBuildScript.add(it) }
|
|
||||||
buildFileClasspath.forEach { preBuildScript.add(it) }
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Write the build file excluding the buildScript{} tag since we already ran it
|
// Write the build file to `nonBuildScript` excluding the buildScript{} directives since we already ran them
|
||||||
//
|
//
|
||||||
var lineNumber = 1
|
var lineNumber = 1
|
||||||
buildSources.findSourceFiles().forEach { buildFile ->
|
buildSources.findSourceFiles().forEach { buildFile ->
|
||||||
|
@ -135,34 +130,35 @@ class ParsedBuildFile(val buildSources: IBuildSources, val context: KobaltContex
|
||||||
return buildScriptInfo
|
return buildScriptInfo
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun initPluginUrls(buildScriptInfo: BuildScriptInfo?) {
|
/**
|
||||||
|
* Generate preBuildScript.jar based on the buildScript{} found in the build files.
|
||||||
|
*/
|
||||||
|
private fun parseBuildScriptInfo(buildScriptInfo: BuildScriptInfo) {
|
||||||
//
|
//
|
||||||
// Compile and run preBuildScriptCode, which contains all the plugins() calls extracted. This
|
// Compile and run preBuildScriptCode, which contains all the plugins() calls extracted. This
|
||||||
// will add all the dynamic plugins found in this code to Plugins.dynamicPlugins
|
// will add all the dynamic plugins found in this code to Plugins.dynamicPlugins
|
||||||
//
|
//
|
||||||
val buildScriptSourceFile = KFiles.createTempBuildFileInTempDirectory(deleteOnExit = true)
|
val buildScriptSourceFile = KFiles.createTempBuildFileInTempDirectory(deleteOnExit = true)
|
||||||
buildScriptSourceFile.writeText(preBuildScriptCode, Charset.defaultCharset())
|
buildScriptSourceFile.writeText(buildScriptInfo.content, Charset.defaultCharset())
|
||||||
kobaltLog(2, "Saved " + KFiles.fixSlashes(buildScriptSourceFile.absolutePath))
|
kobaltLog(2, "Saved " + KFiles.fixSlashes(buildScriptSourceFile.absolutePath))
|
||||||
|
|
||||||
//
|
//
|
||||||
// Compile to preBuildScript.jar
|
// Compile to preBuildScript.jar
|
||||||
//
|
//
|
||||||
val buildScriptJar = KFiles.findBuildScriptLocation(buildSources, "preBuildScript.jar")
|
|
||||||
val buildScriptJarFile = File(buildScriptJar)
|
|
||||||
|
|
||||||
// Because of profiles, it's not possible to find out if a preBuildScript.jar is up to date
|
// Because of profiles, it's not possible to find out if a preBuildScript.jar is up to date
|
||||||
// or not so recompile it every time.
|
// or not so recompile it every time.
|
||||||
// if (! buildScriptUtil.isUpToDate(buildFile, File(buildScriptJar))) {
|
// if (! buildScriptUtil.isUpToDate(buildFile, File(buildScriptJar))) {
|
||||||
buildScriptJarFile.parentFile.mkdirs()
|
preBuildScriptJarFile.parentFile.mkdirs()
|
||||||
generateJarFile(context, listOf(buildScriptSourceFile.path), buildScriptJarFile)
|
generateJarFile(context, listOf(buildScriptSourceFile.path), preBuildScriptJarFile)
|
||||||
VersionFile.generateVersionFile(buildScriptJarFile.parentFile)
|
VersionFile.generateVersionFile(preBuildScriptJarFile.parentFile)
|
||||||
Kobalt.context!!.internalContext.buildFileOutOfDate = true
|
Kobalt.context!!.internalContext.buildFileOutOfDate = true
|
||||||
// }
|
// }
|
||||||
|
|
||||||
//
|
//
|
||||||
// Run preBuildScript.jar to initialize plugins and repos
|
// Run preBuildScript.jar to initialize plugins and repos
|
||||||
//
|
//
|
||||||
projects.addAll(buildScriptUtil.runBuildScriptJarFile(buildScriptJarFile, arrayListOf<URL>(), context))
|
projects.addAll(buildScriptUtil.runBuildScriptJarFile(preBuildScriptJarFile, arrayListOf<URL>(), context))
|
||||||
|
|
||||||
//
|
//
|
||||||
// All the plug-ins are now in Plugins.dynamicPlugins, download them if they're not already
|
// All the plug-ins are now in Plugins.dynamicPlugins, download them if they're not already
|
||||||
|
@ -192,6 +188,8 @@ class ParsedBuildFile(val buildSources: IBuildSources, val context: KobaltContex
|
||||||
val org = originalFile?.realPath ?: sourceFiles.joinToString(",")
|
val org = originalFile?.realPath ?: sourceFiles.joinToString(",")
|
||||||
throw KobaltException("Couldn't compile $org:\n" + result.errorMessage)
|
throw KobaltException("Couldn't compile $org:\n" + result.errorMessage)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
context.internalContext.noIncrementalKotlin = saved
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue