46 lines
1.5 KiB
Kotlin
46 lines
1.5 KiB
Kotlin
import net.kyori.indra.git.IndraGitExtension
|
|
import org.eclipse.jgit.lib.Repository
|
|
import org.eclipse.jgit.revwalk.RevWalk
|
|
import org.gradle.api.Project
|
|
import org.gradle.kotlin.dsl.findByType
|
|
|
|
object GitUtil {
|
|
@JvmStatic
|
|
fun commitsSinceLastTag(project: Project): Int? {
|
|
val indraGit = project.extensions.findByType(IndraGitExtension::class)?.takeIf {
|
|
it.isPresent && it.tags().isNotEmpty()
|
|
} ?: return null
|
|
val git = indraGit.git() ?: return null
|
|
|
|
val tags = indraGit.tags()
|
|
var depth = 0
|
|
val walk = RevWalk(git.repository)
|
|
var commit = walk.parseCommit(indraGit.commit())
|
|
while (true) {
|
|
for (tag in tags) {
|
|
if (walk.parseCommit(tag.leaf.objectId) == commit) {
|
|
walk.dispose()
|
|
return depth
|
|
}
|
|
}
|
|
depth++
|
|
commit = walk.parseCommit(commit.parents[0])
|
|
}
|
|
}
|
|
|
|
@JvmStatic
|
|
fun headBranchName(project: Project): String {
|
|
System.getenv("GITHUB_HEAD_REF")?.takeIf { it.isNotEmpty() }
|
|
?.let { return it }
|
|
System.getenv("GITHUB_REF")?.takeIf { it.isNotEmpty() }
|
|
?.let { return it.replaceFirst("refs/heads/", "") }
|
|
|
|
val indraGit = project.extensions.findByType(IndraGitExtension::class)
|
|
?.takeIf { it.isPresent }
|
|
|
|
val ref = indraGit?.git()?.repository?.exactRef("HEAD")?.target
|
|
?: return "detached-head"
|
|
|
|
return Repository.shortenRefName(ref.name)
|
|
}
|
|
} |