From 2aa533c7ddb5bb769a91ac39f8cd454ea27d75e8 Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Mon, 12 Jul 2021 13:46:31 +0200 Subject: [PATCH] Support ProcessChannelMode in ProcessLauncherImpl Change-Id: Ifb919f19aac8ad223e6beb93c4c14fa4fdb204e9 Reviewed-by: hjk --- src/libs/utils/launcherpackets.cpp | 4 ++-- src/libs/utils/launcherpackets.h | 1 + src/libs/utils/qtcprocess.cpp | 10 +++++++++- src/tools/processlauncher/launchersockethandler.cpp | 1 + 4 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/libs/utils/launcherpackets.cpp b/src/libs/utils/launcherpackets.cpp index 15f9e1d607a..0355e4df154 100644 --- a/src/libs/utils/launcherpackets.cpp +++ b/src/libs/utils/launcherpackets.cpp @@ -58,12 +58,12 @@ StartProcessPacket::StartProcessPacket(quintptr token) void StartProcessPacket::doSerialize(QDataStream &stream) const { - stream << command << arguments << workingDir << env; + stream << command << arguments << workingDir << env << mode; } void StartProcessPacket::doDeserialize(QDataStream &stream) { - stream >> command >> arguments >> workingDir >> env; + stream >> command >> arguments >> workingDir >> env >> mode; } diff --git a/src/libs/utils/launcherpackets.h b/src/libs/utils/launcherpackets.h index 7692cdde552..ea46006707d 100644 --- a/src/libs/utils/launcherpackets.h +++ b/src/libs/utils/launcherpackets.h @@ -99,6 +99,7 @@ public: QStringList arguments; QString workingDir; QStringList env; + QProcess::ProcessChannelMode mode = QProcess::SeparateChannels; private: void doSerialize(QDataStream &stream) const override; diff --git a/src/libs/utils/qtcprocess.cpp b/src/libs/utils/qtcprocess.cpp index edab84c2efc..6552ad9167c 100644 --- a/src/libs/utils/qtcprocess.cpp +++ b/src/libs/utils/qtcprocess.cpp @@ -302,7 +302,13 @@ public: void closeWriteChannel() override { QTC_CHECK(false); } void setStandardInputFile(const QString &fileName) override { QTC_CHECK(false); } - void setProcessChannelMode(QProcess::ProcessChannelMode mode) override { QTC_CHECK(false); } + void setProcessChannelMode(QProcess::ProcessChannelMode mode) override { + if (mode != QProcess::SeparateChannels && mode != QProcess::MergedChannels) { + qWarning("setProcessChannelMode: The only supported modes are SeparateChannels and MergedChannels."); + return; + } + m_channelMode = mode; + } qint64 bytesAvailable() const override { QTC_CHECK(false); return 0; } QString program() const override { return m_command; } @@ -359,6 +365,7 @@ private: QString m_errorString; QProcess::ProcessError m_error = QProcess::UnknownError; QProcess::ProcessState m_state = QProcess::NotRunning; + QProcess::ProcessChannelMode m_channelMode = QProcess::SeparateChannels; int m_exitCode = 0; bool m_canceled = false; bool m_socketError = false; @@ -388,6 +395,7 @@ void ProcessLauncherImpl::doStart() p.arguments = m_arguments; p.env = m_environment.toStringList(); p.workingDir = m_workingDirectory; + p.mode = m_channelMode; sendPacket(p); } diff --git a/src/tools/processlauncher/launchersockethandler.cpp b/src/tools/processlauncher/launchersockethandler.cpp index 6d146d91ed1..596b5af4a86 100644 --- a/src/tools/processlauncher/launchersockethandler.cpp +++ b/src/tools/processlauncher/launchersockethandler.cpp @@ -222,6 +222,7 @@ void LauncherSocketHandler::handleStartPacket() m_packetParser.packetData()); process->setEnvironment(packet.env); process->setWorkingDirectory(packet.workingDir); + process->setProcessChannelMode(packet.mode); process->start(packet.command, packet.arguments); }