1.1.0 release #2
@@ -26,6 +26,10 @@ kotlin {
|
|||||||
implementation(libs.node)
|
implementation(libs.node)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
compilerOptions {
|
||||||
|
freeCompilerArgs.add("-opt-in=kotlinx.cinterop.ExperimentalForeignApi")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
publishing.repositories {
|
publishing.repositories {
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
package com.infendro.shell
|
package com.infendro.shell
|
||||||
|
|
||||||
import kotlin.coroutines.resume
|
|
||||||
import kotlin.coroutines.suspendCoroutine
|
|
||||||
import node.childProcess.ExecOptions
|
import node.childProcess.ExecOptions
|
||||||
import node.childProcess.exec
|
import node.childProcess.exec
|
||||||
|
import kotlin.coroutines.resume
|
||||||
|
import kotlin.coroutines.suspendCoroutine
|
||||||
|
|
||||||
internal actual suspend fun execute(
|
internal actual suspend fun execute(
|
||||||
command: Array<String>,
|
command: Array<String>,
|
||||||
@@ -13,7 +13,7 @@ internal actual suspend fun execute(
|
|||||||
val options = ExecOptions.invoke(cwd = directory)
|
val options = ExecOptions.invoke(cwd = directory)
|
||||||
exec(command, options) { error, stdout, stderr ->
|
exec(command, options) { error, stdout, stderr ->
|
||||||
val code = if (error == null) 0 else error.code!!.toInt()
|
val code = if (error == null) 0 else error.code!!.toInt()
|
||||||
val value = if (error == null) stdout else stderr
|
val value = (if (error == null) stdout else stderr) as String
|
||||||
continuation.resume(Shell.Result(code, value))
|
continuation.resume(Shell.Result(code, value))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,16 +6,12 @@ internal actual suspend fun execute(
|
|||||||
command: Array<String>,
|
command: Array<String>,
|
||||||
directory: String?,
|
directory: String?,
|
||||||
): Shell.Result {
|
): Shell.Result {
|
||||||
val process = ProcessBuilder(*command)
|
val process = ProcessBuilder(*command).also {
|
||||||
.also {
|
if (directory != null) {
|
||||||
if (directory != null) {
|
it.directory(File(directory))
|
||||||
it.directory(File(directory))
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
.start()
|
}.start()
|
||||||
val code = process.waitFor()
|
val code = process.waitFor()
|
||||||
val value = process
|
val value = (if (code == 0) process.inputReader() else process.errorReader()).readText()
|
||||||
.let { if (code == 0) it.inputReader() else it.errorReader() }
|
|
||||||
.readText()
|
|
||||||
return Shell.Result(code, value)
|
return Shell.Result(code, value)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,12 +1,10 @@
|
|||||||
package com.infendro.shell
|
package com.infendro.shell
|
||||||
|
|
||||||
import kotlinx.cinterop.CPointer
|
import kotlinx.cinterop.CPointer
|
||||||
import kotlinx.cinterop.ExperimentalForeignApi
|
|
||||||
import kotlinx.cinterop.refTo
|
import kotlinx.cinterop.refTo
|
||||||
import kotlinx.cinterop.toKString
|
import kotlinx.cinterop.toKString
|
||||||
import platform.posix.*
|
import platform.posix.*
|
||||||
|
|
||||||
@ExperimentalForeignApi
|
|
||||||
internal actual suspend fun execute(
|
internal actual suspend fun execute(
|
||||||
command: Array<String>,
|
command: Array<String>,
|
||||||
directory: String?,
|
directory: String?,
|
||||||
@@ -21,7 +19,6 @@ internal actual suspend fun execute(
|
|||||||
return Shell.Result(code, value)
|
return Shell.Result(code, value)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ExperimentalForeignApi
|
|
||||||
private fun CPointer<FILE>.readLines(): List<String> {
|
private fun CPointer<FILE>.readLines(): List<String> {
|
||||||
val lines = mutableListOf<String>()
|
val lines = mutableListOf<String>()
|
||||||
val buffer = ByteArray(4096)
|
val buffer = ByteArray(4096)
|
||||||
|
|||||||
Reference in New Issue
Block a user