From cb8fc206ee1900da30d53fd5ba1f8761d2a85fdb Mon Sep 17 00:00:00 2001 From: Neil Marietta Date: Fri, 18 Nov 2022 17:15:56 +0100 Subject: [PATCH] chore(include-core-build): Added Include Git Repo support. --- .../kotlin/ProtonIncludeCoreBuildExtension.kt | 37 ++++++++++++++++--- .../kotlin/ProtonIncludeCoreBuildPlugin.kt | 12 +++--- 2 files changed, 38 insertions(+), 11 deletions(-) diff --git a/plugins/include-core-build/src/main/kotlin/ProtonIncludeCoreBuildExtension.kt b/plugins/include-core-build/src/main/kotlin/ProtonIncludeCoreBuildExtension.kt index dbf2e33a6..e6a79fff8 100644 --- a/plugins/include-core-build/src/main/kotlin/ProtonIncludeCoreBuildExtension.kt +++ b/plugins/include-core-build/src/main/kotlin/ProtonIncludeCoreBuildExtension.kt @@ -14,6 +14,7 @@ * limitations under the License. */ +import me.champeau.gradle.igp.GitIncludeExtension import me.champeau.gradle.igp.IncludedGitRepo import me.champeau.gradle.igp.internal.DefaultIncludeGitExtension import org.gradle.api.Action @@ -90,6 +91,14 @@ interface ProtonIncludeCoreBuildExtension { */ fun includeBuild(relativePath: String, spec: Action) + /** + * Includes a Git repository as a Gradle included build. + * + * @param name the name of the included build. + * @param spec the configuration of the Git repository. + */ + fun includeRepo(name: String, spec: Action) + companion object { fun Settings.createExtension(): ProtonIncludeCoreBuildExtension = extensions.create( ProtonIncludeCoreBuildExtension::class.java, @@ -110,25 +119,30 @@ abstract class DefaultProtonIncludeCoreBuildExtension @Inject constructor( @Inject protected abstract fun getProviders(): ProviderFactory - private val includes: MutableList = mutableListOf() + private val includedBuilds: MutableList = mutableListOf() + private val includedRepos: MutableList = mutableListOf() override fun includeBuild(spec: Action) { includeBuild(".") { spec.execute(this) } } override fun includeBuild(relativePath: String, spec: Action) { - includes.add(IncludedBuild(relativePath, spec)); + includedBuilds.add(IncludedBuild(relativePath, spec)); + } + + override fun includeRepo(name: String, spec: Action) { + includedRepos.add(IncludedRepo(name, spec)); } private fun isLocalPresent() = with(getProviders()) { gradleProperty(localRepoProperty).orElse(systemProperty(localRepoProperty)).isPresent } - fun hasIncludes() = includes.isNotEmpty() || + fun hasIncludedBuilds() = includedBuilds.isNotEmpty() || isLocalPresent() || branch.isPresent || tag.isPresent || commit.isPresent - fun configure(includedGitRepo: IncludedGitRepo) { + fun configureCoreBuild(includedGitRepo: IncludedGitRepo) { when { isLocalPresent() -> return branch.isPresent -> includedGitRepo.branch.set(branch.get()) @@ -136,18 +150,29 @@ abstract class DefaultProtonIncludeCoreBuildExtension @Inject constructor( commit.isPresent -> includedGitRepo.commit.set(commit.get()) } - for (include in includes) { + for (include in includedBuilds) { includedGitRepo.includeBuild(include.directory, include.spec) } } + fun configureIncludedGitRepos(gitIncludeExtension: GitIncludeExtension) { + for (include in includedRepos) { + gitIncludeExtension.include(include.name, include.spec) + } + } + data class IncludedBuild( val directory: String, val spec: Action, ) + data class IncludedRepo( + val name: String, + val spec: Action, + ) + companion object { private const val localRepoProperty = - DefaultIncludeGitExtension.LOCAL_GIT_PREFIX + ProtonIncludeCoreBuildPlugin.repoDir + DefaultIncludeGitExtension.LOCAL_GIT_PREFIX + ProtonIncludeCoreBuildPlugin.coreRepoDir } } diff --git a/plugins/include-core-build/src/main/kotlin/ProtonIncludeCoreBuildPlugin.kt b/plugins/include-core-build/src/main/kotlin/ProtonIncludeCoreBuildPlugin.kt index 0a3497451..5cade0507 100644 --- a/plugins/include-core-build/src/main/kotlin/ProtonIncludeCoreBuildPlugin.kt +++ b/plugins/include-core-build/src/main/kotlin/ProtonIncludeCoreBuildPlugin.kt @@ -49,22 +49,24 @@ abstract class ProtonIncludeCoreBuildPlugin : Plugin { checkoutsDirectory.set(target.rootDir.parentFile) when { metaProperties.exists() -> includeBuild(parentRepoDir) - commitSha != null -> include(repoDir) { + commitSha != null -> include(coreRepoDir) { uri.set(protonLibsUri) commit.set(commitSha) } - config.hasIncludes() -> include(repoDir) { + config.hasIncludedBuilds() -> include(coreRepoDir) { uri.set(protonLibsUri) - config.configure(this) + config.configureCoreBuild(this) } } + // Configuration of additional IncludedGitRepo. + config.configureIncludedGitRepos(this) } } } companion object { - const val repoDir = "proton-libs" - const val parentRepoDir = "../$repoDir" + const val coreRepoDir = "proton-libs" + const val parentRepoDir = "../$coreRepoDir" const val metaProperties = "meta.properties" } }