override fun makeProgramCommandLine()

in plugin-rust-agent/src/main/kotlin/jetbrains/buildServer/rust/CargoRunnerBuildService.kt [68:110]


    override fun makeProgramCommandLine(): ProgramCommandLine {
        val parameters = runnerParameters

        val commandName = parameters[CargoConstants.PARAM_COMMAND]
        if (StringUtil.isEmpty(commandName)) {
            val buildException = RunBuildException("Cargo command name is empty")
            buildException.isLogStacktrace = false
            throw buildException
        }

        val argumentsProvider = myArgumentsProviders[commandName]
        if (argumentsProvider == null) {
            val buildException = RunBuildException("Unable to construct arguments for cargo command $commandName")
            buildException.isLogStacktrace = false
            throw buildException
        }

        val arguments = mutableListOf<String>()
        val (toolPath, toolArgs) = getToolPath()
        arguments += toolArgs
        arguments += argumentsProvider.getArguments(runnerContext)

        parameters[CargoConstants.PARAM_ADDITIONAL_ARGUMENTS]?.let {
            arguments += StringUtil.splitHonorQuotes(it)
        }

        runnerContext.configParameters[CargoConstants.CARGO_CONFIG_NAME]?.let {
            if (Version.valueOf(it) >= myCargoWithStdErrVersion) {
                return when (runnerContext.virtualContext.targetOSType) {
                    OSType.WINDOWS -> {
                        createProgramCommandline("cmd.exe", listOf("/c", toolPath) + arguments + listOf("2>&1"))
                    }
                    else -> {
                        val scriptlet = "$toolPath ${arguments.joinToString(" ", transform = ::escapeSingleQuotes)} 2>&1"
                        val toolName = File(toolPath).name
                        createProgramCommandline("/bin/sh", listOf("-c", scriptlet, toolName))
                    }
                }
            }
        }

        return createProgramCommandline(toolPath, arguments)
    }