forked from qt-creator/qt-creator
AbstractProcessStep: Move process done handler from QMakeStep
The done handler is going to be used for other processes, too. Change-Id: I3c60ec75656aa45bd57ec3ca8336cf310c78bd3e Reviewed-by: <github-actions-qt-creator@cristianadam.eu> Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
@@ -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
|
||||
|
@@ -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;
|
||||
|
@@ -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<GroupItem> processList = {ProcessTask(setupQMake, onProcessDone, onProcessError)};
|
||||
QList<GroupItem> processList = {ProcessTask(setupQMake, onProcessDone, onProcessDone)};
|
||||
if (m_runMakeQmake)
|
||||
processList << ProcessTask(setupMakeQMake, onProcessDone, onProcessError);
|
||||
processList << ProcessTask(setupMakeQMake, onProcessDone, onProcessDone);
|
||||
processList << onGroupDone(onDone);
|
||||
|
||||
runTaskTree(Group(processList));
|
||||
|
Reference in New Issue
Block a user