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);
|
d->m_process.reset(new Process);
|
||||||
setupProcess(d->m_process.get());
|
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();
|
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)
|
void AbstractProcessStep::runTaskTree(const Group &recipe)
|
||||||
{
|
{
|
||||||
setupStreams();
|
setupStreams();
|
||||||
@@ -375,15 +405,4 @@ void AbstractProcessStep::finish(ProcessResult result)
|
|||||||
emit finished(isSuccess(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
|
} // namespace ProjectExplorer
|
||||||
|
@@ -52,13 +52,13 @@ protected:
|
|||||||
|
|
||||||
bool checkWorkingDirectory();
|
bool checkWorkingDirectory();
|
||||||
void setupProcess(Utils::Process *process);
|
void setupProcess(Utils::Process *process);
|
||||||
|
void handleProcessDone(const Utils::Process &process);
|
||||||
void runTaskTree(const Tasking::Group &recipe);
|
void runTaskTree(const Tasking::Group &recipe);
|
||||||
ProcessParameters *displayedParameters() const;
|
ProcessParameters *displayedParameters() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void setupStreams();
|
void setupStreams();
|
||||||
void processStartupFailed();
|
void processStartupFailed();
|
||||||
void handleProcessDone();
|
|
||||||
|
|
||||||
class Private;
|
class Private;
|
||||||
Private *d;
|
Private *d;
|
||||||
|
@@ -281,8 +281,6 @@ void QMakeStep::doRun()
|
|||||||
if (!checkWorkingDirectory())
|
if (!checkWorkingDirectory())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
m_needToRunQMake = false;
|
|
||||||
|
|
||||||
using namespace Tasking;
|
using namespace Tasking;
|
||||||
|
|
||||||
const auto setupQMake = [this](Process &process) {
|
const auto setupQMake = [this](Process &process) {
|
||||||
@@ -301,39 +299,16 @@ void QMakeStep::doRun()
|
|||||||
setupProcess(&process);
|
setupProcess(&process);
|
||||||
};
|
};
|
||||||
|
|
||||||
const auto onProcessDone = [this](const Process &) {
|
const auto onProcessDone = [this](const Process &process) { handleProcessDone(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 onDone = [this] {
|
const auto onDone = [this] {
|
||||||
emit buildConfiguration()->buildDirectoryInitialized();
|
emit buildConfiguration()->buildDirectoryInitialized();
|
||||||
|
m_needToRunQMake = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
QList<GroupItem> processList = {ProcessTask(setupQMake, onProcessDone, onProcessError)};
|
QList<GroupItem> processList = {ProcessTask(setupQMake, onProcessDone, onProcessDone)};
|
||||||
if (m_runMakeQmake)
|
if (m_runMakeQmake)
|
||||||
processList << ProcessTask(setupMakeQMake, onProcessDone, onProcessError);
|
processList << ProcessTask(setupMakeQMake, onProcessDone, onProcessDone);
|
||||||
processList << onGroupDone(onDone);
|
processList << onGroupDone(onDone);
|
||||||
|
|
||||||
runTaskTree(Group(processList));
|
runTaskTree(Group(processList));
|
||||||
|
Reference in New Issue
Block a user