NodeRunner: fix OSX script. Add a delay before starting the next node. (#419)

* NodeRunner: fix OSX script. Add a delay before starting the next node.

* Only add delay on macOS
This commit is contained in:
Andrius Dagys
2017-03-24 12:15:57 +00:00
committed by GitHub
parent e29d41a82a
commit 6a21de74b3

View File

@ -10,6 +10,15 @@ private val nodeJarName = "corda.jar"
private val webJarName = "corda-webserver.jar" private val webJarName = "corda-webserver.jar"
private val nodeConfName = "node.conf" private val nodeConfName = "node.conf"
private val os: OS by lazy {
val osName = System.getProperty("os.name", "generic").toLowerCase(Locale.ENGLISH)
if ((osName.indexOf("mac") >= 0) || (osName.indexOf("darwin") >= 0)) OS.MACOS
else if (osName.indexOf("win") >= 0) OS.WINDOWS
else OS.LINUX
}
private enum class OS { MACOS, WINDOWS, LINUX }
fun main(args: Array<String>) { fun main(args: Array<String>) {
val startedProcesses = mutableListOf<Process>() val startedProcesses = mutableListOf<Process>()
val headless = (GraphicsEnvironment.isHeadless() || (!args.isEmpty() && (args[0] == "--headless"))) val headless = (GraphicsEnvironment.isHeadless() || (!args.isEmpty() && (args[0] == "--headless")))
@ -22,11 +31,13 @@ fun main(args: Array<String>) {
if (isNode(it)) { if (isNode(it)) {
println("Starting node in $it") println("Starting node in $it")
startedProcesses.add(runJar(nodeJarName, it, javaArgs)) startedProcesses.add(runJar(nodeJarName, it, javaArgs))
if (os == OS.MACOS) Thread.sleep(1000)
} }
if (isWebserver(it)) { if (isWebserver(it)) {
println("Starting webserver in $it") println("Starting webserver in $it")
startedProcesses.add(runJar(webJarName, it, javaArgs)) startedProcesses.add(runJar(webJarName, it, javaArgs))
if (os == OS.MACOS) Thread.sleep(1000)
} }
} }
@ -61,21 +72,21 @@ private fun execJarInTerminalWindow(jarName: String, dir: File, args: List<Strin
val javaCmd = "java -jar $jarName " + args.joinToString(" ") { it } val javaCmd = "java -jar $jarName " + args.joinToString(" ") { it }
val nodeName = "${dir.toPath().fileName} $jarName" val nodeName = "${dir.toPath().fileName} $jarName"
val osName = System.getProperty("os.name", "generic").toLowerCase(Locale.ENGLISH) val osName = System.getProperty("os.name", "generic").toLowerCase(Locale.ENGLISH)
val builder = if ((osName.indexOf("mac") >= 0) || (osName.indexOf("darwin") >= 0)) { val builder = when (os) {
ProcessBuilder( OS.MACOS -> ProcessBuilder(
"osascript", "-e", "osascript", "-e",
"""tell app "Terminal """tell app "Terminal"
activate activate
tell application \"System Events\" to tell process \"Terminal\" to keystroke \"t\" using command down tell app "System Events" to tell process "Terminal" to keystroke "t" using command down
delay 0.5 delay 0.5
do script "bash -c 'cd $dir; /usr/libexec/java_home -v 1.8 --exec $javaCmd && exit'" in window 1""" do script "bash -c 'cd $dir; /usr/libexec/java_home -v 1.8 --exec $javaCmd && exit'" in selected tab of the front window
end tell"""
) )
} else if (osName.indexOf("win") >= 0) { OS.WINDOWS -> ProcessBuilder(
ProcessBuilder( "cmd"
"cmd", "/C", "start $javaCmd" , "/C", "start $javaCmd"
) )
} else { OS.LINUX -> {
// Assume Linux
val isTmux = System.getenv("TMUX")?.isNotEmpty() ?: false val isTmux = System.getenv("TMUX")?.isNotEmpty() ?: false
if (isTmux) { if (isTmux) {
ProcessBuilder( ProcessBuilder(
@ -87,5 +98,6 @@ do script "bash -c 'cd $dir; /usr/libexec/java_home -v 1.8 --exec $javaCmd && ex
) )
} }
} }
}
return builder.directory(dir).start() return builder.directory(dir).start()
} }