Skip to content

Commit 9388d24

Browse files
mchernyavskyyopox
authored andcommitted
RUN: Support relative paths in Redirect Input
1 parent 3dea69e commit 9388d24

File tree

2 files changed

+18
-10
lines changed

2 files changed

+18
-10
lines changed

src/main/kotlin/org/rust/cargo/runconfig/command/CargoCommandConfiguration.kt

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,14 @@ import com.intellij.execution.configurations.*
1212
import com.intellij.execution.runners.ExecutionEnvironment
1313
import com.intellij.execution.testframework.actions.ConsolePropertiesProvider
1414
import com.intellij.execution.testframework.sm.runner.SMTRunnerConsoleProperties
15+
import com.intellij.execution.util.ProgramParametersUtil
1516
import com.intellij.openapi.options.SettingsEditor
1617
import com.intellij.openapi.project.Project
1718
import com.intellij.openapi.util.NlsContexts.DialogMessage
1819
import com.intellij.openapi.util.SystemInfo
20+
import com.intellij.openapi.util.io.FileUtil
1921
import com.intellij.openapi.vfs.LocalFileSystem
2022
import com.intellij.util.execution.ParametersListUtil
21-
import com.intellij.util.io.exists
2223
import org.jdom.Element
2324
import org.rust.RsBundle
2425
import org.rust.cargo.project.model.CargoProject
@@ -37,7 +38,6 @@ import org.rust.cargo.toolchain.tools.Cargo
3738
import org.rust.cargo.toolchain.tools.isRustupAvailable
3839
import org.rust.ide.experiments.RsExperiments
3940
import org.rust.openapiext.isFeatureEnabled
40-
import org.rust.stdext.toPathOrNull
4141
import java.io.File
4242
import java.nio.file.Path
4343
import java.nio.file.Paths
@@ -64,6 +64,17 @@ open class CargoCommandConfiguration(
6464

6565
private var isRedirectInput: Boolean = false
6666
private var redirectInputPath: String? = null
67+
private val redirectInputFile: File?
68+
get() {
69+
if (!isRedirectInput) return null
70+
if (redirectInputPath?.isNotEmpty() != true) return null
71+
val redirectInputPath = FileUtil.toSystemDependentName(ProgramParametersUtil.expandPathAndMacros(redirectInputPath, null, project))
72+
var file = File(redirectInputPath)
73+
if (!file.isAbsolute && workingDirectory != null) {
74+
file = File(File(workingDirectory.toString()), redirectInputPath)
75+
}
76+
return file
77+
}
6778

6879
override fun isRedirectInput(): Boolean = isRedirectInput
6980

@@ -127,10 +138,10 @@ open class CargoCommandConfiguration(
127138
@Throws(RuntimeConfigurationException::class)
128139
override fun checkConfiguration() {
129140
if (isRedirectInput) {
130-
val path = redirectInputPath?.toPathOrNull()
141+
val file = redirectInputFile
131142
when {
132-
path?.exists() != true -> throw RuntimeConfigurationWarning("Input file doesn't exist")
133-
!path.toFile().isFile -> throw RuntimeConfigurationWarning("Input file is not valid")
143+
file?.exists() != true -> throw RuntimeConfigurationWarning("Input file doesn't exist")
144+
!file.isFile -> throw RuntimeConfigurationWarning("Input file is not valid")
134145
}
135146
}
136147
// TODO: remove when `com.intellij.execution.process.ElevationService` supports error stream redirection
@@ -188,9 +199,7 @@ open class CargoCommandConfiguration(
188199
fun clean(): CleanConfiguration {
189200
val workingDirectory = workingDirectory
190201
?: return CleanConfiguration.error("No working directory specified")
191-
val redirectInputFrom = redirectInputPath
192-
?.takeIf { isRedirectInput && it.isNotBlank() }
193-
?.let { File(it) }
202+
194203
val cmd = run {
195204
val args = ParametersListUtil.parse(command)
196205
if (args.isEmpty()) {
@@ -200,7 +209,7 @@ open class CargoCommandConfiguration(
200209
args.first(),
201210
workingDirectory,
202211
args.drop(1),
203-
redirectInputFrom,
212+
redirectInputFile,
204213
backtrace,
205214
channel,
206215
env,

src/test/kotlin/org/rustSlowTests/ide/actions/RsBuildActionTest.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ import org.rust.cargo.toolchain.CargoCommandLine
2121
import org.rust.fileTree
2222
import org.rust.ide.actions.RsBuildAction
2323
import org.rustSlowTests.cargo.runconfig.buildtool.CargoBuildTest
24-
import java.nio.file.Path
2524

2625
@MinRustcVersion("1.48.0")
2726
class RsBuildActionTest : CargoBuildTest() {

0 commit comments

Comments
 (0)