diff --git a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/api/KobaltContext.kt b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/api/KobaltContext.kt index 5868f885..c88765c5 100644 --- a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/api/KobaltContext.kt +++ b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/api/KobaltContext.kt @@ -21,6 +21,8 @@ class KobaltContext(val args: Args) { fun findPlugin(name: String) = Plugins.findPlugin(name) + val allProjects = arrayListOf() + /** For internal use only */ val internalContext = InternalContext() diff --git a/src/main/kotlin/com/beust/kobalt/Main.kt b/src/main/kotlin/com/beust/kobalt/Main.kt index 1da70a76..76d8c953 100644 --- a/src/main/kotlin/com/beust/kobalt/Main.kt +++ b/src/main/kotlin/com/beust/kobalt/Main.kt @@ -235,6 +235,7 @@ private class Main @Inject constructor( } val allProjects = findProjectResult.projects + findProjectResult.context.allProjects.addAll(allProjects) // // Now that we have projects, add all the repos from repo contributors that need a Project diff --git a/src/main/kotlin/com/beust/kobalt/app/BuildFileCompiler.kt b/src/main/kotlin/com/beust/kobalt/app/BuildFileCompiler.kt index 7ace1fae..ac994cee 100644 --- a/src/main/kotlin/com/beust/kobalt/app/BuildFileCompiler.kt +++ b/src/main/kotlin/com/beust/kobalt/app/BuildFileCompiler.kt @@ -42,6 +42,7 @@ public class BuildFileCompiler @Inject constructor(@Assisted("buildFiles") val b fun compileBuildFiles(args: Args): FindProjectResult { // // Create the KobaltContext + // Note: can't use apply{} here or each field will refer to itself instead of the constructor field // val context = KobaltContext(args) context.pluginInfo = pluginInfo @@ -61,7 +62,7 @@ public class BuildFileCompiler @Inject constructor(@Assisted("buildFiles") val b val parsedBuildFiles = arrayListOf() - class FindProjectResult(val projects: List, val pluginUrls: List, + class FindProjectResult(val context: KobaltContext, val projects: List, val pluginUrls: List, val taskResult: TaskResult) private fun findProjects(context: KobaltContext): FindProjectResult { @@ -107,7 +108,8 @@ public class BuildFileCompiler @Inject constructor(@Assisted("buildFiles") val b } val pluginUrls = parsedBuildFiles.flatMap { it.pluginUrls } - return FindProjectResult(projects, pluginUrls, if (errorTaskResult != null) errorTaskResult!! else TaskResult()) + return FindProjectResult(context, projects, pluginUrls, + if (errorTaskResult != null) errorTaskResult!! else TaskResult()) } private fun maybeCompileBuildFile(context: KobaltContext, buildFile: BuildFile, buildScriptJarFile: File, diff --git a/src/main/kotlin/com/beust/kobalt/plugin/KobaltPlugin.kt b/src/main/kotlin/com/beust/kobalt/plugin/KobaltPlugin.kt index f6c281a0..1d555276 100644 --- a/src/main/kotlin/com/beust/kobalt/plugin/KobaltPlugin.kt +++ b/src/main/kotlin/com/beust/kobalt/plugin/KobaltPlugin.kt @@ -1,16 +1,37 @@ package com.beust.kobalt.plugin +import com.beust.kobalt.TaskResult import com.beust.kobalt.api.BasePlugin +import com.beust.kobalt.api.Project +import com.beust.kobalt.api.annotation.Task +import com.beust.kobalt.app.UpdateKobalt +import com.beust.kobalt.misc.CheckVersions +import com.google.inject.Inject import javax.inject.Singleton /** * This plugin is used to gather tasks defined in build files, since these tasks don't really belong to any plugin. */ @Singleton -public class KobaltPlugin : BasePlugin() { +class KobaltPlugin @Inject constructor(val checkVersions: CheckVersions, val updateKobalt: UpdateKobalt) + : BasePlugin () { + companion object { - public val PLUGIN_NAME = "Kobalt" + val PLUGIN_NAME = "Kobalt" } override val name: String get() = PLUGIN_NAME + + @Task(name = "checkVersions", description = "Display all the outdated dependencies") + fun taskCheckVersions(project: Project) : TaskResult { + checkVersions.run(context.allProjects) + return TaskResult() + } + + @Task(name = "update", description = "Update Kobalt to the latest version") + fun taskUpdate(project: Project) : TaskResult { + updateKobalt.updateKobalt() + return TaskResult() + } + }