fix(autoversion): try to avoid running git
This commit is contained in:
parent
c9cbbce3b2
commit
8decdad746
@ -0,0 +1,29 @@
|
||||
package io.gitlab.jfronny.scripts
|
||||
|
||||
import java.lang.reflect.Field
|
||||
import java.util.*
|
||||
|
||||
private val processEnvironmentClass: Class<*> = Class.forName("java.lang.ProcessEnvironment")
|
||||
private val theEnvironmentField: Field = processEnvironmentClass.getDeclaredField("theEnvironment").apply { isAccessible = true }
|
||||
private val theCaseInsensitiveEnvironmentField: Field = processEnvironmentClass.getDeclaredField("theCaseInsensitiveEnvironment").apply { isAccessible = true }
|
||||
|
||||
@Throws(Exception::class)
|
||||
fun setEnv(newenv: Map<String, String>?) = try {
|
||||
val env = theEnvironmentField.get(null) as MutableMap<String, String>
|
||||
env.clear()
|
||||
env.putAll(newenv!!)
|
||||
val cienv = theCaseInsensitiveEnvironmentField.get(null) as MutableMap<String, String>
|
||||
cienv.clear()
|
||||
cienv.putAll(newenv)
|
||||
} catch (e: NoSuchFieldException) {
|
||||
val classes = Collections::class.java.declaredClasses
|
||||
val env = System.getenv()
|
||||
for (cl in classes) {
|
||||
if ("java.util.Collections\$UnmodifiableMap" == cl.name) {
|
||||
val field: Field = cl.getDeclaredField("m").apply { isAccessible = true }
|
||||
val map = field.get(env) as MutableMap<String, String>
|
||||
map.clear()
|
||||
map.putAll(newenv!!)
|
||||
}
|
||||
}
|
||||
}
|
@ -2,19 +2,39 @@ package io.gitlab.jfronny.scripts
|
||||
|
||||
import org.eclipse.jgit.api.Git
|
||||
import org.eclipse.jgit.errors.IncorrectObjectTypeException
|
||||
import org.eclipse.jgit.lib.AnyObjectId
|
||||
import org.eclipse.jgit.lib.Constants
|
||||
import org.eclipse.jgit.lib.ObjectId
|
||||
import org.eclipse.jgit.lib.PersonIdent
|
||||
import org.eclipse.jgit.lib.Ref
|
||||
import org.eclipse.jgit.lib.Repository
|
||||
import org.eclipse.jgit.lib.*
|
||||
import org.eclipse.jgit.revwalk.RevCommit
|
||||
import org.eclipse.jgit.revwalk.RevTag
|
||||
import org.eclipse.jgit.revwalk.RevWalk
|
||||
import org.eclipse.jgit.storage.file.FileBasedConfig
|
||||
import org.eclipse.jgit.util.FS
|
||||
import org.eclipse.jgit.util.SystemReader
|
||||
import java.time.Instant
|
||||
import java.time.ZoneOffset
|
||||
import java.time.ZonedDateTime
|
||||
|
||||
fun initializeGit() {
|
||||
val original = SystemReader.getInstance()
|
||||
SystemReader.setInstance(object : SystemReader() {
|
||||
override fun getHostname(): String = original.hostname
|
||||
override fun getenv(key: String): String? = if (key == "PATH") null else original.getenv(key)
|
||||
override fun getProperty(key: String?): String = original.getProperty(key)
|
||||
override fun openUserConfig(parent: Config?, fs: FS?): FileBasedConfig = original.openUserConfig(parent, fs)
|
||||
override fun openSystemConfig(parent: Config?, fs: FS?): FileBasedConfig = original.openSystemConfig(parent, fs)
|
||||
override fun openJGitConfig(parent: Config?, fs: FS?): FileBasedConfig = original.openJGitConfig(parent, fs)
|
||||
override fun getCurrentTime(): Long = original.currentTime
|
||||
override fun getTimezone(`when`: Long): Int = original.getTimezone(`when`)
|
||||
})
|
||||
// Stuff
|
||||
// val backup = HashMap(System.getenv())
|
||||
// setEnv(mapOf())
|
||||
// try {
|
||||
org.eclipse.jgit.util.FS.DETECTED.gitSystemConfig
|
||||
// } finally {
|
||||
// setEnv(backup)
|
||||
// }
|
||||
}
|
||||
|
||||
fun Git.log(since: AnyObjectId? = null, until: AnyObjectId? = null): List<Commit> {
|
||||
var command = this.log()
|
||||
if (since != null) command = command.not(since)
|
||||
|
@ -9,6 +9,7 @@ val isRelease = project.hasProperty("release")
|
||||
versionS = "0.0.0+nogit"
|
||||
versionType = VersionType.ALPHA
|
||||
if (File(projectDir, ".git").exists()) {
|
||||
initializeGit()
|
||||
Git.open(projectDir).use { git ->
|
||||
versionS = "0.0.0+notag"
|
||||
val tags: List<Tag> = git.getTags()
|
||||
@ -48,7 +49,10 @@ if (File(projectDir, ".git").exists()) {
|
||||
changelogHtml += "<ul>\n" + log.joinToString("") { " <li>${it.shortMessage}</li>\n" } + "</ul>"
|
||||
}
|
||||
}
|
||||
} else changelog = "No changelog"
|
||||
} else {
|
||||
changelog = "No changelog"
|
||||
changelogHtml = "<p>No changelog</p>"
|
||||
}
|
||||
|
||||
if (!isRelease) {
|
||||
versionS = "$nextRelease-SNAPSHOT"
|
||||
|
Loading…
Reference in New Issue
Block a user