[orx-git-archiver] Fix NativeGit on Linux
This commit is contained in:
@@ -7,7 +7,7 @@ import org.openrndr.Program
|
|||||||
|
|
||||||
internal interface GitProvider {
|
internal interface GitProvider {
|
||||||
fun commitChanges(commitMessage: String)
|
fun commitChanges(commitMessage: String)
|
||||||
fun headReference() : String
|
fun headReference(): String
|
||||||
}
|
}
|
||||||
|
|
||||||
val logger = KotlinLogging.logger { }
|
val logger = KotlinLogging.logger { }
|
||||||
@@ -23,6 +23,16 @@ class GitArchiver : Extension {
|
|||||||
private val git: GitProvider = if (nativeGitInstalled()) NativeGit() else JavaGit()
|
private val git: GitProvider = if (nativeGitInstalled()) NativeGit() else JavaGit()
|
||||||
|
|
||||||
override fun setup(program: Program) {
|
override fun setup(program: Program) {
|
||||||
|
logger.info {
|
||||||
|
"Using ${
|
||||||
|
when (git) {
|
||||||
|
is NativeGit -> "native Git"
|
||||||
|
is JavaGit -> "Java Git"
|
||||||
|
else -> "unknown Git"
|
||||||
|
}
|
||||||
|
}"
|
||||||
|
}
|
||||||
|
|
||||||
val oldMetadataFunction = program.assetMetadata
|
val oldMetadataFunction = program.assetMetadata
|
||||||
program.assetMetadata = {
|
program.assetMetadata = {
|
||||||
val oldMetadata = oldMetadataFunction()
|
val oldMetadata = oldMetadataFunction()
|
||||||
|
|||||||
@@ -8,14 +8,14 @@ private val dir = File(".")
|
|||||||
|
|
||||||
class NativeGit : GitProvider {
|
class NativeGit : GitProvider {
|
||||||
override fun commitChanges(commitMessage: String) {
|
override fun commitChanges(commitMessage: String) {
|
||||||
val gitStatus = "git status --porcelain".runCommand(dir)!!
|
val gitStatus = listOf("git", "status", "--porcelain").runCommand(dir)!!
|
||||||
if (gitStatus.first.isNotBlank()){
|
if (gitStatus.first.isNotBlank()){
|
||||||
if (gitStatus.first.contains("Not a git repository")){
|
if (gitStatus.first.contains("Not a git repository")){
|
||||||
logger.error { "Can't commit changes because the working directory is not a git repository" }
|
logger.error { "Can't commit changes because the working directory is not a git repository" }
|
||||||
} else {
|
} else {
|
||||||
"git add .".runCommand(dir)
|
listOf("git", "add", ".").runCommand(dir)
|
||||||
"git commit -m \"${commitMessage}\"".runCommand(dir)
|
listOf("git", "commit", "-m", commitMessage).runCommand(dir)
|
||||||
logger.info { "git repository is now at ${headReference()}" }
|
logger.info { "git repository is at ${headReference()} after commit" }
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
logger.info { "no changes" }
|
logger.info { "no changes" }
|
||||||
@@ -23,19 +23,18 @@ class NativeGit : GitProvider {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun headReference(): String {
|
override fun headReference(): String {
|
||||||
return "git rev-parse --short HEAD".runCommand(dir)!!.first.trimEnd()
|
return listOf("git", "rev-parse", "--short", "HEAD").runCommand(dir)!!.first.trimEnd()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal fun nativeGitInstalled(): Boolean {
|
internal fun nativeGitInstalled(): Boolean {
|
||||||
return "git --version".runCommand(dir) != null
|
return listOf("git", "--version").runCommand(dir) != null
|
||||||
}
|
}
|
||||||
|
|
||||||
// Adapted from https://stackoverflow.com/questions/35421699/how-to-invoke-external-command-from-within-kotlin-code
|
// Adapted from https://stackoverflow.com/questions/35421699/how-to-invoke-external-command-from-within-kotlin-code
|
||||||
private fun String.runCommand(workingDir: File): Pair<String, String>? {
|
private fun List<String>.runCommand(workingDir: File): Pair<String, String>? {
|
||||||
try {
|
try {
|
||||||
val parts = this.split("\\s".toRegex())
|
val proc = ProcessBuilder(*toTypedArray())
|
||||||
val proc = ProcessBuilder(*parts.toTypedArray())
|
|
||||||
.directory(workingDir)
|
.directory(workingDir)
|
||||||
.redirectOutput(ProcessBuilder.Redirect.PIPE)
|
.redirectOutput(ProcessBuilder.Redirect.PIPE)
|
||||||
.redirectError(ProcessBuilder.Redirect.PIPE)
|
.redirectError(ProcessBuilder.Redirect.PIPE)
|
||||||
@@ -44,6 +43,8 @@ private fun String.runCommand(workingDir: File): Pair<String, String>? {
|
|||||||
proc.waitFor(60, TimeUnit.MINUTES)
|
proc.waitFor(60, TimeUnit.MINUTES)
|
||||||
return Pair(proc.inputStream.bufferedReader().readText(), proc.errorStream.bufferedReader().readText())
|
return Pair(proc.inputStream.bufferedReader().readText(), proc.errorStream.bufferedReader().readText())
|
||||||
} catch(e: IOException) {
|
} catch(e: IOException) {
|
||||||
|
logger.error { e.message }
|
||||||
|
e.printStackTrace()
|
||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user