From ad2b5da4f513ef80d3bbea99b5e43ffb647192ed Mon Sep 17 00:00:00 2001 From: Edwin Jakobs Date: Sun, 7 Nov 2021 19:09:36 +0100 Subject: [PATCH] [orx-git-archiver] Fix NativeGit on Linux --- .../src/main/kotlin/GitArchiver.kt | 12 +++++++++++- .../src/main/kotlin/NativeGit.kt | 19 ++++++++++--------- 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/orx-jvm/orx-git-archiver/src/main/kotlin/GitArchiver.kt b/orx-jvm/orx-git-archiver/src/main/kotlin/GitArchiver.kt index e11915bdf..005f070f1 100644 --- a/orx-jvm/orx-git-archiver/src/main/kotlin/GitArchiver.kt +++ b/orx-jvm/orx-git-archiver/src/main/kotlin/GitArchiver.kt @@ -7,7 +7,7 @@ import org.openrndr.Program internal interface GitProvider { fun commitChanges(commitMessage: String) - fun headReference() : String + fun headReference(): String } val logger = KotlinLogging.logger { } @@ -23,6 +23,16 @@ class GitArchiver : Extension { private val git: GitProvider = if (nativeGitInstalled()) NativeGit() else JavaGit() 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 program.assetMetadata = { val oldMetadata = oldMetadataFunction() diff --git a/orx-jvm/orx-git-archiver/src/main/kotlin/NativeGit.kt b/orx-jvm/orx-git-archiver/src/main/kotlin/NativeGit.kt index 031b829ab..e10bc086c 100644 --- a/orx-jvm/orx-git-archiver/src/main/kotlin/NativeGit.kt +++ b/orx-jvm/orx-git-archiver/src/main/kotlin/NativeGit.kt @@ -8,14 +8,14 @@ private val dir = File(".") class NativeGit : GitProvider { 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.contains("Not a git repository")){ logger.error { "Can't commit changes because the working directory is not a git repository" } } else { - "git add .".runCommand(dir) - "git commit -m \"${commitMessage}\"".runCommand(dir) - logger.info { "git repository is now at ${headReference()}" } + listOf("git", "add", ".").runCommand(dir) + listOf("git", "commit", "-m", commitMessage).runCommand(dir) + logger.info { "git repository is at ${headReference()} after commit" } } } else { logger.info { "no changes" } @@ -23,19 +23,18 @@ class NativeGit : GitProvider { } 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 { - 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 -private fun String.runCommand(workingDir: File): Pair? { +private fun List.runCommand(workingDir: File): Pair? { try { - val parts = this.split("\\s".toRegex()) - val proc = ProcessBuilder(*parts.toTypedArray()) + val proc = ProcessBuilder(*toTypedArray()) .directory(workingDir) .redirectOutput(ProcessBuilder.Redirect.PIPE) .redirectError(ProcessBuilder.Redirect.PIPE) @@ -44,6 +43,8 @@ private fun String.runCommand(workingDir: File): Pair? { proc.waitFor(60, TimeUnit.MINUTES) return Pair(proc.inputStream.bufferedReader().readText(), proc.errorStream.bufferedReader().readText()) } catch(e: IOException) { + logger.error { e.message } + e.printStackTrace() return null } } \ No newline at end of file