forked from qt-creator/qt-creator
Allow overriding the return value of abstractprocessstep::run
This is needed to enable additional checks on the result. Reviewed-by: dt
This commit is contained in:
@@ -185,7 +185,8 @@ void AbstractProcessStep::run(QFutureInterface<bool> &fi)
|
|||||||
m_timer = 0;
|
m_timer = 0;
|
||||||
|
|
||||||
// The process has finished, leftover data is read in processFinished
|
// The process has finished, leftover data is read in processFinished
|
||||||
bool returnValue = processFinished(m_process->exitCode(), m_process->exitStatus());
|
processFinished(m_process->exitCode(), m_process->exitStatus());
|
||||||
|
bool returnValue = processSucceeded(m_process->exitCode(), m_process->exitStatus()) || m_ignoreReturnValue;
|
||||||
|
|
||||||
delete m_process;
|
delete m_process;
|
||||||
m_process = 0;
|
m_process = 0;
|
||||||
@@ -198,22 +199,27 @@ void AbstractProcessStep::run(QFutureInterface<bool> &fi)
|
|||||||
|
|
||||||
void AbstractProcessStep::processStarted()
|
void AbstractProcessStep::processStarted()
|
||||||
{
|
{
|
||||||
emit addOutput(tr("<font color=\"#0000ff\">Starting: %1 %2</font>\n").arg(m_command, Qt::escape(m_arguments.join(" "))));
|
emit addOutput(tr("<font color=\"#0000ff\">Starting: \"%1\" %2</font>\n").arg(m_command, Qt::escape(m_arguments.join(" "))));
|
||||||
}
|
}
|
||||||
|
|
||||||
bool AbstractProcessStep::processFinished(int exitCode, QProcess::ExitStatus status)
|
void AbstractProcessStep::processFinished(int exitCode, QProcess::ExitStatus status)
|
||||||
{
|
{
|
||||||
const bool ok = status == QProcess::NormalExit && (exitCode == 0 || m_ignoreReturnValue);
|
if (status == QProcess::NormalExit && exitCode == 0)
|
||||||
if (ok)
|
emit addOutput(tr("<font color=\"#0000ff\">The process \"%1\" exited normally.</font>").arg(m_command));
|
||||||
emit addOutput(tr("<font color=\"#0000ff\">Exited with code %1.</font>").arg(m_process->exitCode()));
|
else if (status == QProcess::NormalExit)
|
||||||
|
emit addOutput(tr("<font color=\"#ff0000\"><b>The process \"%1\" exited with code %2.</b></font>").arg(m_command, m_process->exitCode()));
|
||||||
else
|
else
|
||||||
emit addOutput(tr("<font color=\"#ff0000\"><b>Exited with code %1.</b></font>").arg(m_process->exitCode()));
|
emit addOutput(tr("<font color=\"#ff0000\"><b>The process \"%1\" crashed.</b></font>").arg(m_command));
|
||||||
return ok;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void AbstractProcessStep::processStartupFailed()
|
void AbstractProcessStep::processStartupFailed()
|
||||||
{
|
{
|
||||||
emit addOutput(tr("<font color=\"#ff0000\"><b>Could not start process %1 </b></font>").arg(m_command));
|
emit addOutput(tr("<font color=\"#ff0000\"><b>Could not start process \"%1\"</b></font>").arg(m_command));
|
||||||
|
}
|
||||||
|
|
||||||
|
bool AbstractProcessStep::processSucceeded(int exitCode, QProcess::ExitStatus status)
|
||||||
|
{
|
||||||
|
return exitCode == 0 && status == QProcess::NormalExit;
|
||||||
}
|
}
|
||||||
|
|
||||||
void AbstractProcessStep::processReadyReadStdOutput()
|
void AbstractProcessStep::processReadyReadStdOutput()
|
||||||
@@ -260,6 +266,11 @@ void AbstractProcessStep::checkForCancel()
|
|||||||
|
|
||||||
void AbstractProcessStep::taskAdded(const ProjectExplorer::Task &task)
|
void AbstractProcessStep::taskAdded(const ProjectExplorer::Task &task)
|
||||||
{
|
{
|
||||||
|
// Do not bother to report issues if we do not care about the results of
|
||||||
|
// the buildstep anyway:
|
||||||
|
if (m_ignoreReturnValue)
|
||||||
|
return;
|
||||||
|
|
||||||
Task editable(task);
|
Task editable(task);
|
||||||
QString filePath = QDir::cleanPath(task.file.trimmed());
|
QString filePath = QDir::cleanPath(task.file.trimmed());
|
||||||
if (!filePath.isEmpty() && !QDir::isAbsolutePath(filePath)) {
|
if (!filePath.isEmpty() && !QDir::isAbsolutePath(filePath)) {
|
||||||
|
|||||||
@@ -125,10 +125,12 @@ protected:
|
|||||||
virtual void processStarted();
|
virtual void processStarted();
|
||||||
/// Called after the process Finished
|
/// Called after the process Finished
|
||||||
/// the default implementation adds a line to the output window
|
/// the default implementation adds a line to the output window
|
||||||
virtual bool processFinished(int exitCode, QProcess::ExitStatus status);
|
virtual void processFinished(int exitCode, QProcess::ExitStatus status);
|
||||||
/// Called if the process could not be started,
|
/// Called if the process could not be started,
|
||||||
/// by default adds a message to the output window
|
/// by default adds a message to the output window
|
||||||
virtual void processStartupFailed();
|
virtual void processStartupFailed();
|
||||||
|
/// Called to test whether a prcess succeeded or not.
|
||||||
|
virtual bool processSucceeded(int exitCode, QProcess::ExitStatus status);
|
||||||
/// Called for each line of output on stdOut()
|
/// Called for each line of output on stdOut()
|
||||||
/// the default implementation adds the line to the
|
/// the default implementation adds the line to the
|
||||||
/// application output window
|
/// application output window
|
||||||
|
|||||||
@@ -266,9 +266,9 @@ void QMakeStep::processStartupFailed()
|
|||||||
AbstractProcessStep::processStartupFailed();
|
AbstractProcessStep::processStartupFailed();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool QMakeStep::processFinished(int exitCode, QProcess::ExitStatus status)
|
bool QMakeStep::processSucceeded(int exitCode, QProcess::ExitStatus status)
|
||||||
{
|
{
|
||||||
bool result = AbstractProcessStep::processFinished(exitCode, status);
|
bool result = AbstractProcessStep::processSucceeded(exitCode, status);
|
||||||
if (!result)
|
if (!result)
|
||||||
m_forced = true;
|
m_forced = true;
|
||||||
qt4BuildConfiguration()->emitBuildDirectoryInitialized();
|
qt4BuildConfiguration()->emitBuildDirectoryInitialized();
|
||||||
|
|||||||
@@ -100,7 +100,7 @@ protected:
|
|||||||
virtual bool fromMap(const QVariantMap &map);
|
virtual bool fromMap(const QVariantMap &map);
|
||||||
|
|
||||||
virtual void processStartupFailed();
|
virtual void processStartupFailed();
|
||||||
virtual bool processFinished(int exitCode, QProcess::ExitStatus status);
|
virtual bool processSucceeded(int exitCode, QProcess::ExitStatus status);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void ctor();
|
void ctor();
|
||||||
|
|||||||
Reference in New Issue
Block a user