AbstractProcessStep: Connect to QtcProcess::done() signal

Instead of connecting to finished() signal.

Change-Id: I2c1266bf699f54053fde37bb7ff22a93131e6b11
Reviewed-by: hjk <hjk@qt.io>
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
This commit is contained in:
Jarek Kobus
2022-04-06 12:54:14 +02:00
parent f01ebebb93
commit 8e586dfa02

View File

@@ -208,7 +208,6 @@ void AbstractProcessStep::doRun()
CommandLine::Raw); CommandLine::Raw);
if (!effectiveCommand.executable().isExecutableFile()) { if (!effectiveCommand.executable().isExecutableFile()) {
processStartupFailed(); processStartupFailed();
finish(false);
return; return;
} }
@@ -233,14 +232,12 @@ void AbstractProcessStep::doRun()
this, &AbstractProcessStep::processReadyReadStdOutput); this, &AbstractProcessStep::processReadyReadStdOutput);
connect(d->m_process.get(), &QtcProcess::readyReadStandardError, connect(d->m_process.get(), &QtcProcess::readyReadStandardError,
this, &AbstractProcessStep::processReadyReadStdError); this, &AbstractProcessStep::processReadyReadStdError);
connect(d->m_process.get(), &QtcProcess::finished, connect(d->m_process.get(), &QtcProcess::done,
this, &AbstractProcessStep::slotProcessFinished); this, &AbstractProcessStep::slotProcessFinished);
d->m_process->start(); d->m_process->start();
if (!d->m_process->waitForStarted()) { if (!d->m_process->waitForStarted()) {
processStartupFailed();
d->m_process.reset(); d->m_process.reset();
finish(false);
return; return;
} }
processStarted(); processStarted();
@@ -281,15 +278,13 @@ void AbstractProcessStep::setupProcessParameters(ProcessParameters *params) cons
void AbstractProcessStep::Private::cleanUp(int exitCode, QProcess::ExitStatus status) void AbstractProcessStep::Private::cleanUp(int exitCode, QProcess::ExitStatus status)
{ {
// The process has finished, leftover data is read in processFinished // The process has finished, leftover data was read in slotProcessFinished
q->processFinished(exitCode, status); q->processFinished(exitCode, status);
const bool returnValue = q->processSucceeded(exitCode, status) const bool returnValue = q->processSucceeded(exitCode, status) || m_ignoreReturnValue;
|| m_ignoreReturnValue;
if (m_process) if (m_process)
m_process.release()->deleteLater(); m_process.release()->deleteLater();
// Report result
q->finish(returnValue); q->finish(returnValue);
} }
@@ -316,7 +311,7 @@ void AbstractProcessStep::processStarted()
void AbstractProcessStep::processFinished(int exitCode, QProcess::ExitStatus status) void AbstractProcessStep::processFinished(int exitCode, QProcess::ExitStatus status)
{ {
QString command = d->m_param.effectiveCommand().toUserOutput(); const QString command = d->m_param.effectiveCommand().toUserOutput();
if (status == QProcess::NormalExit && exitCode == 0) { if (status == QProcess::NormalExit && exitCode == 0) {
emit addOutput(tr("The process \"%1\" exited normally.").arg(command), emit addOutput(tr("The process \"%1\" exited normally.").arg(command),
BuildStep::OutputFormat::NormalMessage); BuildStep::OutputFormat::NormalMessage);
@@ -345,6 +340,7 @@ void AbstractProcessStep::processStartupFailed()
QString err = d->m_process ? d->m_process->errorString() : QString(); QString err = d->m_process ? d->m_process->errorString() : QString();
if (!err.isEmpty()) if (!err.isEmpty())
emit addOutput(err, OutputFormat::ErrorMessage); emit addOutput(err, OutputFormat::ErrorMessage);
finish(false);
} }
/*! /*!
@@ -401,6 +397,10 @@ void AbstractProcessStep::finish(bool success)
void AbstractProcessStep::slotProcessFinished() void AbstractProcessStep::slotProcessFinished()
{ {
QTC_ASSERT(d->m_process.get(), return); QTC_ASSERT(d->m_process.get(), return);
if (d->m_process->error() == QProcess::FailedToStart) {
processStartupFailed();
return;
}
stdError(d->stderrStream->toUnicode(d->m_process->readAllStandardError())); stdError(d->stderrStream->toUnicode(d->m_process->readAllStandardError()));
stdOutput(d->stdoutStream->toUnicode(d->m_process->readAllStandardOutput())); stdOutput(d->stdoutStream->toUnicode(d->m_process->readAllStandardOutput()));
d->cleanUp(d->m_process->exitCode(), d->m_process->exitStatus()); d->cleanUp(d->m_process->exitCode(), d->m_process->exitStatus());