Skip to content

Commit

Permalink
adding the config plugin to allow offsets given a certain branch or t…
Browse files Browse the repository at this point in the history
…ag matches a regex
  • Loading branch information
Brian Amesbury committed Feb 12, 2019
1 parent f96a42c commit 97d8095
Show file tree
Hide file tree
Showing 13 changed files with 352 additions and 34 deletions.
10 changes: 9 additions & 1 deletion build.local.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,15 @@ buildscript {
}

dependencies {
classpath "com.moonlitdoor.git-version:git-version:0.0.7-1-SNAPSHOT"
classpath "com.moonlitdoor.git-version:git-version:0.0.8-8-SNAPSHOT"
}
}

apply plugin: "com.moonlitdoor.git-version-config"

mld.offsets {
master {
offset = 1_000_000
}
}

Expand Down
8 changes: 8 additions & 0 deletions git-version/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,10 @@ gradlePlugin {
id = "com.moonlitdoor.git-version"
implementationClass = "com.moonlitdoor.git.version.GitVersionPlugin"
}
register("git-version-config") {
id = "com.moonlitdoor.git-version-config"
implementationClass = "com.moonlitdoor.git.version.GitVersionConfigPlugin"
}
}
}

Expand All @@ -33,5 +37,9 @@ pluginBundle {
displayName = "Git Version Plugin"
tags = listOf("git", "version", "android", "java")
}
"git-version-config" {
displayName = "Git Version Plugin Configuration"
tags = listOf("git", "version", "android", "java")
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.moonlitdoor.git.version

import com.moonlitdoor.git.version.extensions.BranchOffsetNestedExtension
import com.moonlitdoor.git.version.extensions.MoonlitDoorExtension
import org.gradle.api.Plugin
import org.gradle.api.Project

@Suppress("Unused")
class GitVersionConfigPlugin : Plugin<Project> {

override fun apply(project: Project) {
project.extensions.create(MoonlitDoorExtension.EXTENSION_NAME, MoonlitDoorExtension::class.java).offsets = project.container(BranchOffsetNestedExtension::class.java)
}

}
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package com.moonlitdoor.git.version

import com.moonlitdoor.git.version.extensions.BranchOffsetNestedExtension
import com.moonlitdoor.git.version.extensions.MoonlitDoorExtension
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.internal.impldep.com.google.common.annotations.VisibleForTesting
Expand All @@ -12,13 +14,24 @@ class GitVersionPlugin : Plugin<Project> {
internal var git = GitFacade()

override fun apply(project: Project) {
val gitCommitCount = getGitCommitCount(project.projectDir)

if (project.extensions.findByType(MoonlitDoorExtension::class.java) == null) {
project.extensions.create(MoonlitDoorExtension.EXTENSION_NAME, MoonlitDoorExtension::class.java).offsets = project.container(BranchOffsetNestedExtension::class.java)
}

var gitCommitCount = getGitCommitCount(project.projectDir)
val gitTagCount = getGitTagCount(project.projectDir)
val gitBranchName = getGitBranchName(project.projectDir)

val byType = project.extensions.getByType(MoonlitDoorExtension::class.java)
byType.offsets.find { Regex(it.name).matches(gitBranchName) }?.let {
gitCommitCount += it.offset
}
project.extensions.add(GIT_COMMIT_COUNT, gitCommitCount)
project.extensions.add(GIT_TAG_COUNT, gitTagCount)
project.extensions.add(GIT_COMMIT_AND_TAG_COUNT, gitCommitCount + gitTagCount)
project.extensions.add(GIT_VERSION, getGitVersion(project.projectDir))
project.extensions.add(GIT_BRANCH_NAME, getGitBranchName(project.projectDir))
project.extensions.add(GIT_BRANCH_NAME, gitBranchName)
}

private fun getGitVersion(projectDir: File): String {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.moonlitdoor.git.version.extensions

import org.gradle.internal.impldep.com.google.common.annotations.VisibleForTesting

open class BranchOffsetNestedExtension(var name: String) {

@VisibleForTesting
constructor(name: String, offset: Int) : this(name) {
this.offset = offset
}

var offset = 0

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package com.moonlitdoor.git.version.extensions

import groovy.lang.Closure
import org.gradle.api.NamedDomainObjectContainer

open class MoonlitDoorExtension {

companion object {
const val EXTENSION_NAME = "mld"
}

lateinit var offsets: NamedDomainObjectContainer<BranchOffsetNestedExtension>

@Suppress("unused")
fun offsets(action: Closure<BranchOffsetNestedExtension>) {
offsets.configure(action)
}

}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.moonlitdoor.git.version

import com.moonlitdoor.git.version.extensions.MoonlitDoorExtension
import org.gradle.api.Action
import org.gradle.api.plugins.ExtensionContainer
import org.gradle.api.plugins.ExtensionsSchema
Expand All @@ -8,12 +9,32 @@ import org.gradle.api.reflect.TypeOf

class FakeExtensionContainer : ExtensionContainer {

private val container = mutableMapOf<String, Any>()
private val container = mutableMapOf<String, Any?>()

override fun add(name: String, extension: Any) {
container[name] = extension
}

override fun <T : Any?> create(name: String, type: Class<T>, vararg constructionArguments: Any?): T = type.newInstance().also {
if (it is MoonlitDoorExtension) {
it.offsets = FakeNamedDomainObjectContainer()
}
container[name] = it
}

override fun getByName(name: String): Any = container[name]!!

@Suppress("UNCHECKED_CAST")
override fun <T : Any?> findByType(type: Class<T>): T? = container.values.find {
type.isInstance(it)
} as T?

@Suppress("UNCHECKED_CAST")
override fun <T : Any?> getByType(type: Class<T>): T = container.values.find {
type.isInstance(it)
} as T


override fun <T : Any?> configure(type: Class<T>, action: Action<in T>) {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
Expand Down Expand Up @@ -42,15 +63,6 @@ class FakeExtensionContainer : ExtensionContainer {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}

override fun <T : Any?> create(name: String, type: Class<T>, vararg constructionArguments: Any?): T {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}

override fun getByName(name: String): Any = container[name]!!
// {
// TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
// }

override fun findByName(name: String): Any? {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
Expand All @@ -67,18 +79,10 @@ class FakeExtensionContainer : ExtensionContainer {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}

override fun <T : Any?> getByType(type: Class<T>): T {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}

override fun <T : Any?> getByType(type: TypeOf<T>): T {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}

override fun <T : Any?> findByType(type: Class<T>): T? {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}

override fun <T : Any?> findByType(type: TypeOf<T>): T? {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,14 @@ open class FakeGitFacade : GitFacade() {
"gittag" -> "0.1.0\n0.0.4\n0.0.3\n0.0.2\n0.0.1\n0.0.0"
"gitdescribe--tags" -> getTag()
"gitstatus--porcelain" -> getStatus()
"gitrev-parse--abbrev-refHEAD" -> "master"
"gitrev-parse--abbrev-refHEAD" -> getBranch()
else -> ""
}
}

open fun getTag(): String = "0.0.0"

open fun getStatus(): String = ""

open fun getBranch(): String = "master"
}
Loading

0 comments on commit 97d8095

Please sign in to comment.