Я пытаюсь создать Android Studio Plugin, который позволяет мне копировать мои измененные файлы (Git) в буфер обмена. Я могу получить путь root, в котором находится файл. git. Затем я хочу выполнить команду git diff --name-only
по этому пути. Поэтому сначала я должен выполнить cd <path>
. Я в состоянии выполнить один за другим, но не стенд с оператором &&
fe. Тогда во входном потоке ничего нет. Это потому, что я сейчас работаю над Ма c, который требует других команд? Я искал решение несколько часов, но, похоже, ничего не работает.
Вот мой подход:
class MyAction: AnAction() {
override fun actionPerformed(event: AnActionEvent) {
println("Action Performed")
val path = ModuleRootManager.getInstance(ModuleManager.getInstance(event.project!!).modules[0]).contentRoots[0].path
println("Path: $path")
try {
runCommand(path, "git diff --name-only")
} catch (e: Exception) {
e.printStackTrace()
println("Path is incorrect")
}
}
private fun runCommand(path: String, command: String) {
val rt = Runtime.getRuntime()
val pathCommand = "cd $path "
val proc = rt.exec(pathCommand + "&& " + command)
printInput(proc)
}
private fun printInput(proc: Process) {
printProcessInput(proc)
printProcessError(proc)
}
private fun printProcessInput(proc: Process) {
println("Here is the standard output of the command:\n")
printStream(proc.inputStream)
}
private fun printProcessError(proc: Process) {
println("Here is the standard error of the command (if any):\n")
printStream(proc.errorStream)
}
private fun printStream(stream: InputStream) {
val stdInput = BufferedReader(InputStreamReader(stream))
var s: String?
while (stdInput.readLine().also { s = it } != null) {
println(s)
}
}
}