Reuse ProcessSetupData in CallerHandle

Change-Id: I4a2d3fef15331343e7763149550280b722fc3781
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
Jarek Kobus
2022-02-16 03:21:51 +01:00
parent aa3166df78
commit 82c2450fbe
7 changed files with 48 additions and 118 deletions

View File

@@ -215,7 +215,7 @@ void CallerHandle::handleError(const ErrorSignal *launcherSignal)
QTC_ASSERT(isCalledFromCallersThread(), return);
m_processState = QProcess::NotRunning;
m_error = launcherSignal->error();
m_errorString = launcherSignal->errorString();
m_setup.m_errorString = launcherSignal->errorString();
if (m_error == QProcess::FailedToStart)
m_exitCode = 255; // This code is being returned by QProcess when FailedToStart error occurred
emit errorOccurred(m_error);
@@ -232,16 +232,16 @@ void CallerHandle::handleStarted(const StartedSignal *launcherSignal)
void CallerHandle::handleReadyRead(const ReadyReadSignal *launcherSignal)
{
QTC_ASSERT(isCalledFromCallersThread(), return);
if (m_channelMode == QProcess::ForwardedOutputChannel
|| m_channelMode == QProcess::ForwardedChannels) {
if (m_setup.m_processChannelMode == QProcess::ForwardedOutputChannel
|| m_setup.m_processChannelMode == QProcess::ForwardedChannels) {
std::cout << launcherSignal->stdOut().constData();
} else {
m_stdout += launcherSignal->stdOut();
if (!m_stdout.isEmpty())
emit readyReadStandardOutput();
}
if (m_channelMode == QProcess::ForwardedErrorChannel
|| m_channelMode == QProcess::ForwardedChannels) {
if (m_setup.m_processChannelMode == QProcess::ForwardedErrorChannel
|| m_setup.m_processChannelMode == QProcess::ForwardedChannels) {
std::cerr << launcherSignal->stdErr().constData();
} else {
m_stderr += launcherSignal->stdErr();
@@ -293,8 +293,8 @@ void CallerHandle::cancel()
case QProcess::NotRunning:
break;
case QProcess::Starting:
m_errorString = QCoreApplication::translate("Utils::LauncherHandle",
"Process was canceled before it was started.");
m_setup.m_errorString = QCoreApplication::translate("Utils::LauncherHandle",
"Process was canceled before it was started.");
m_error = QProcess::FailedToStart;
if (LauncherInterface::isReady()) // TODO: race condition with m_processState???
sendPacket(StopProcessPacket(m_token));
@@ -337,16 +337,16 @@ int CallerHandle::exitCode() const
QString CallerHandle::errorString() const
{
QTC_ASSERT(isCalledFromCallersThread(), return {});
return m_errorString;
return m_setup.m_errorString;
}
void CallerHandle::setErrorString(const QString &str)
{
QTC_ASSERT(isCalledFromCallersThread(), return);
m_errorString = str;
m_setup.m_errorString = str;
}
void CallerHandle::start(const QString &program, const QStringList &arguments, const QByteArray &writeData)
void CallerHandle::start(const QString &program, const QStringList &arguments)
{
QTC_ASSERT(isCalledFromCallersThread(), return);
if (!m_launcherHandle || m_launcherHandle->isSocketError()) {
@@ -374,16 +374,16 @@ void CallerHandle::start(const QString &program, const QStringList &arguments, c
StartProcessPacket *p = new StartProcessPacket(m_token);
p->command = m_command;
p->arguments = m_arguments;
p->env = m_environment.toStringList();
p->workingDir = m_workingDirectory.path();
p->processMode = m_processMode;
p->writeData = writeData;
p->channelMode = m_channelMode;
p->standardInputFile = m_standardInputFile;
p->belowNormalPriority = m_belowNormalPriority;
p->nativeArguments = m_nativeArguments;
p->lowPriority = m_lowPriority;
p->unixTerminalDisabled = m_unixTerminalDisabled;
p->env = m_setup.m_environment.toStringList();
p->workingDir = m_setup.m_workingDirectory.path();
p->processMode = m_setup.m_processMode;
p->writeData = m_setup.m_writeData;
p->processChannelMode = m_setup.m_processChannelMode;
p->standardInputFile = m_setup.m_standardInputFile;
p->belowNormalPriority = m_setup.m_belowNormalPriority;
p->nativeArguments = m_setup.m_nativeArguments;
p->lowPriority = m_setup.m_lowPriority;
p->unixTerminalDisabled = m_setup.m_unixTerminalDisabled;
m_startPacket.reset(p);
if (LauncherInterface::isReady())
doStart();
@@ -443,28 +443,10 @@ QStringList CallerHandle::arguments() const
return m_arguments;
}
void CallerHandle::setStandardInputFile(const QString &fileName)
void CallerHandle::setProcessSetupData(const ProcessSetupData &setup)
{
QTC_ASSERT(isCalledFromCallersThread(), return);
m_standardInputFile = fileName;
}
void CallerHandle::setProcessChannelMode(QProcess::ProcessChannelMode mode)
{
QTC_ASSERT(isCalledFromCallersThread(), return);
m_channelMode = mode;
}
void CallerHandle::setEnvironment(const Environment &environment)
{
QTC_ASSERT(isCalledFromCallersThread(), return);
m_environment = environment;
}
void CallerHandle::setWorkingDirectory(const FilePath &dir)
{
QTC_ASSERT(isCalledFromCallersThread(), return);
m_workingDirectory = dir;
m_setup = setup;
}
QProcess::ExitStatus CallerHandle::exitStatus() const
@@ -473,30 +455,6 @@ QProcess::ExitStatus CallerHandle::exitStatus() const
return m_exitStatus;
}
void CallerHandle::setBelowNormalPriority()
{
QTC_ASSERT(isCalledFromCallersThread(), return);
m_belowNormalPriority = true;
}
void CallerHandle::setNativeArguments(const QString &arguments)
{
QTC_ASSERT(isCalledFromCallersThread(), return);
m_nativeArguments = arguments;
}
void CallerHandle::setLowPriority()
{
QTC_ASSERT(isCalledFromCallersThread(), return);
m_lowPriority = true;
}
void CallerHandle::setUnixTerminalDisabled()
{
QTC_ASSERT(isCalledFromCallersThread(), return);
m_unixTerminalDisabled = true;
}
bool CallerHandle::waitForSignal(int msecs, CallerHandle::SignalType newSignal)
{
QTC_ASSERT(isCalledFromCallersThread(), return false);
@@ -812,8 +770,8 @@ CallerHandle *LauncherSocket::registerHandle(QObject *parent, quintptr token, Pr
if (m_handles.contains(token))
return nullptr; // TODO: issue a warning
CallerHandle *callerHandle = new CallerHandle(parent, token, mode);
LauncherHandle *launcherHandle = new LauncherHandle(token, mode);
CallerHandle *callerHandle = new CallerHandle(parent, token);
LauncherHandle *launcherHandle = new LauncherHandle(token);
callerHandle->setLauncherHandle(launcherHandle);
launcherHandle->setCallerHandle(callerHandle);
launcherHandle->moveToThread(thread());