From a90d16beda3bf603be0094af5916b1017946f1f4 Mon Sep 17 00:00:00 2001 From: Dominik Holland Date: Thu, 7 Mar 2024 16:56:18 +0100 Subject: [PATCH] RunControl: Add more helper functions to SimpleTargetRunner Allow to disable the forwarding of stdout and stderr and provide access to the underlying Process. This can be used when stdout and stderr need to be forwarded to other RunWorkers. Change-Id: I7fb789defe8a57831fcaf312fc7b500affdf2f61 Reviewed-by: hjk Reviewed-by: --- src/plugins/projectexplorer/runcontrol.cpp | 17 +++++++++++++++++ src/plugins/projectexplorer/runcontrol.h | 3 +++ 2 files changed, 20 insertions(+) diff --git a/src/plugins/projectexplorer/runcontrol.cpp b/src/plugins/projectexplorer/runcontrol.cpp index 3b601d45cbd..6085a720832 100644 --- a/src/plugins/projectexplorer/runcontrol.cpp +++ b/src/plugins/projectexplorer/runcontrol.cpp @@ -1264,6 +1264,7 @@ public: bool m_stopReported = false; bool m_stopForced = false; + bool m_suppressDefaultStdOutHandling = false; void forwardStarted(); void forwardDone(); @@ -1372,6 +1373,9 @@ void SimpleTargetRunnerPrivate::handleDone() void SimpleTargetRunnerPrivate::handleStandardOutput() { + if (m_suppressDefaultStdOutHandling) + return; + const QByteArray data = m_process.readAllRawStandardOutput(); const QString msg = m_outputCodec->toUnicode( data.constData(), data.length(), &m_outputCodecState); @@ -1380,6 +1384,9 @@ void SimpleTargetRunnerPrivate::handleStandardOutput() void SimpleTargetRunnerPrivate::handleStandardError() { + if (m_suppressDefaultStdOutHandling) + return; + const QByteArray data = m_process.readAllRawStandardError(); const QString msg = m_outputCodec->toUnicode( data.constData(), data.length(), &m_errorCodecState); @@ -1571,6 +1578,16 @@ void SimpleTargetRunner::setProcessMode(Utils::ProcessMode processMode) d->m_process.setProcessMode(processMode); } +Process *SimpleTargetRunner::process() const +{ + return &d->m_process; +} + +void SimpleTargetRunner::suppressDefaultStdOutHandling() +{ + d->m_suppressDefaultStdOutHandling = true; +} + void SimpleTargetRunner::forceRunOnHost() { const FilePath executable = d->m_command.executable(); diff --git a/src/plugins/projectexplorer/runcontrol.h b/src/plugins/projectexplorer/runcontrol.h index 0c47ff18b6a..94288664361 100644 --- a/src/plugins/projectexplorer/runcontrol.h +++ b/src/plugins/projectexplorer/runcontrol.h @@ -27,6 +27,7 @@ class Icon; class MacroExpander; class OutputLineParser; class ProcessRunData; +class Process; } // Utils namespace ProjectExplorer { @@ -271,7 +272,9 @@ protected: void setEnvironment(const Utils::Environment &environment); void setWorkingDirectory(const Utils::FilePath &workingDirectory); void setProcessMode(Utils::ProcessMode processMode); + Utils::Process *process() const; + void suppressDefaultStdOutHandling(); void forceRunOnHost(); void addExtraData(const QString &key, const QVariant &value);