From ae01e13d322ec0bcd4f734efcbfd87405d8e6b2d Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Tue, 11 Jul 2023 19:35:16 +0200 Subject: [PATCH] AbstractProcessStep: Move process done handler from QMakeStep The done handler is going to be used for other processes, too. Change-Id: I3c60ec75656aa45bd57ec3ca8336cf310c78bd3e Reviewed-by: Reviewed-by: hjk --- .../projectexplorer/abstractprocessstep.cpp | 43 +++++++++++++------ .../projectexplorer/abstractprocessstep.h | 2 +- src/plugins/qmakeprojectmanager/qmakestep.cpp | 33 ++------------ 3 files changed, 36 insertions(+), 42 deletions(-) diff --git a/src/plugins/projectexplorer/abstractprocessstep.cpp b/src/plugins/projectexplorer/abstractprocessstep.cpp index 806d9159f95..96e6f2291d9 100644 --- a/src/plugins/projectexplorer/abstractprocessstep.cpp +++ b/src/plugins/projectexplorer/abstractprocessstep.cpp @@ -185,7 +185,14 @@ void AbstractProcessStep::doRun() d->m_process.reset(new Process); setupProcess(d->m_process.get()); - connect(d->m_process.get(), &Process::done, this, &AbstractProcessStep::handleProcessDone); + connect(d->m_process.get(), &Process::done, this, [this] { + if (d->m_process->error() == QProcess::FailedToStart) { + processStartupFailed(); + d->m_process.release()->deleteLater(); + return; + } + d->cleanUp(d->m_process->exitCode(), d->m_process->exitStatus()); + }); d->m_process->start(); } @@ -241,6 +248,29 @@ void AbstractProcessStep::setupProcess(Process *process) }); } +void AbstractProcessStep::handleProcessDone(const Process &process) +{ + const QString command = displayedParameters()->effectiveCommand().toUserOutput(); + if (process.result() == ProcessResult::FinishedWithSuccess) { + emit addOutput(Tr::tr("The process \"%1\" exited normally.").arg(command), + OutputFormat::NormalMessage); + } else if (process.result() == ProcessResult::FinishedWithError) { + emit addOutput(Tr::tr("The process \"%1\" exited with code %2.") + .arg(command, QString::number(process.exitCode())), + OutputFormat::ErrorMessage); + } else if (process.result() == ProcessResult::StartFailed) { + emit addOutput(Tr::tr("Could not start process \"%1\" %2.") + .arg(command, displayedParameters()->prettyArguments()), + OutputFormat::ErrorMessage); + const QString errorString = process.errorString(); + if (!errorString.isEmpty()) + emit addOutput(errorString, OutputFormat::ErrorMessage); + } else { + emit addOutput(Tr::tr("The process \"%1\" crashed.").arg(command), + OutputFormat::ErrorMessage); + } +} + void AbstractProcessStep::runTaskTree(const Group &recipe) { setupStreams(); @@ -375,15 +405,4 @@ void AbstractProcessStep::finish(ProcessResult result) emit finished(isSuccess(result)); } -void AbstractProcessStep::handleProcessDone() -{ - QTC_ASSERT(d->m_process.get(), return); - if (d->m_process->error() == QProcess::FailedToStart) { - processStartupFailed(); - d->m_process.release()->deleteLater(); - return; - } - d->cleanUp(d->m_process->exitCode(), d->m_process->exitStatus()); -} - } // namespace ProjectExplorer diff --git a/src/plugins/projectexplorer/abstractprocessstep.h b/src/plugins/projectexplorer/abstractprocessstep.h index 0ac03036d8f..ec0d6a7e803 100644 --- a/src/plugins/projectexplorer/abstractprocessstep.h +++ b/src/plugins/projectexplorer/abstractprocessstep.h @@ -52,13 +52,13 @@ protected: bool checkWorkingDirectory(); void setupProcess(Utils::Process *process); + void handleProcessDone(const Utils::Process &process); void runTaskTree(const Tasking::Group &recipe); ProcessParameters *displayedParameters() const; private: void setupStreams(); void processStartupFailed(); - void handleProcessDone(); class Private; Private *d; diff --git a/src/plugins/qmakeprojectmanager/qmakestep.cpp b/src/plugins/qmakeprojectmanager/qmakestep.cpp index d0c07e02f73..292a6439dff 100644 --- a/src/plugins/qmakeprojectmanager/qmakestep.cpp +++ b/src/plugins/qmakeprojectmanager/qmakestep.cpp @@ -281,8 +281,6 @@ void QMakeStep::doRun() if (!checkWorkingDirectory()) return; - m_needToRunQMake = false; - using namespace Tasking; const auto setupQMake = [this](Process &process) { @@ -301,39 +299,16 @@ void QMakeStep::doRun() setupProcess(&process); }; - const auto onProcessDone = [this](const Process &) { - const QString command = displayedParameters()->effectiveCommand().toUserOutput(); - emit addOutput(Tr::tr("The process \"%1\" exited normally.").arg(command), - OutputFormat::NormalMessage); - }; - - const auto onProcessError = [this](const Process &process) { - const QString command = displayedParameters()->effectiveCommand().toUserOutput(); - if (process.result() == ProcessResult::FinishedWithError) { - emit addOutput(Tr::tr("The process \"%1\" exited with code %2.") - .arg(command, QString::number(process.exitCode())), - OutputFormat::ErrorMessage); - } else if (process.result() == ProcessResult::StartFailed) { - emit addOutput(Tr::tr("Could not start process \"%1\" %2.") - .arg(command, displayedParameters()->prettyArguments()), - OutputFormat::ErrorMessage); - const QString errorString = process.errorString(); - if (!errorString.isEmpty()) - emit addOutput(errorString, OutputFormat::ErrorMessage); - } else { - emit addOutput(Tr::tr("The process \"%1\" crashed.").arg(command), - OutputFormat::ErrorMessage); - } - m_needToRunQMake = true; - }; + const auto onProcessDone = [this](const Process &process) { handleProcessDone(process); }; const auto onDone = [this] { emit buildConfiguration()->buildDirectoryInitialized(); + m_needToRunQMake = false; }; - QList processList = {ProcessTask(setupQMake, onProcessDone, onProcessError)}; + QList processList = {ProcessTask(setupQMake, onProcessDone, onProcessDone)}; if (m_runMakeQmake) - processList << ProcessTask(setupMakeQMake, onProcessDone, onProcessError); + processList << ProcessTask(setupMakeQMake, onProcessDone, onProcessDone); processList << onGroupDone(onDone); runTaskTree(Group(processList));