From 8cf30e86df8f2d1692b25f44ce646570e89fdd29 Mon Sep 17 00:00:00 2001 From: Tobias Hunger <tobias.hunger@nokia.com> Date: Fri, 9 Apr 2010 13:10:59 +0200 Subject: [PATCH] Allow overriding the return value of abstractprocessstep::run This is needed to enable additional checks on the result. Reviewed-by: dt --- .../projectexplorer/abstractprocessstep.cpp | 29 +++++++++++++------ .../projectexplorer/abstractprocessstep.h | 4 ++- src/plugins/qt4projectmanager/qmakestep.cpp | 4 +-- src/plugins/qt4projectmanager/qmakestep.h | 2 +- 4 files changed, 26 insertions(+), 13 deletions(-) diff --git a/src/plugins/projectexplorer/abstractprocessstep.cpp b/src/plugins/projectexplorer/abstractprocessstep.cpp index 05a9ad3806c..55d94dd474e 100644 --- a/src/plugins/projectexplorer/abstractprocessstep.cpp +++ b/src/plugins/projectexplorer/abstractprocessstep.cpp @@ -185,7 +185,8 @@ void AbstractProcessStep::run(QFutureInterface<bool> &fi) m_timer = 0; // 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; m_process = 0; @@ -198,22 +199,27 @@ void AbstractProcessStep::run(QFutureInterface<bool> &fi) 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 (ok) - emit addOutput(tr("<font color=\"#0000ff\">Exited with code %1.</font>").arg(m_process->exitCode())); + if (status == QProcess::NormalExit && exitCode == 0) + emit addOutput(tr("<font color=\"#0000ff\">The process \"%1\" exited normally.</font>").arg(m_command)); + 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 - emit addOutput(tr("<font color=\"#ff0000\"><b>Exited with code %1.</b></font>").arg(m_process->exitCode())); - return ok; + emit addOutput(tr("<font color=\"#ff0000\"><b>The process \"%1\" crashed.</b></font>").arg(m_command)); } 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() @@ -260,6 +266,11 @@ void AbstractProcessStep::checkForCancel() 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); QString filePath = QDir::cleanPath(task.file.trimmed()); if (!filePath.isEmpty() && !QDir::isAbsolutePath(filePath)) { diff --git a/src/plugins/projectexplorer/abstractprocessstep.h b/src/plugins/projectexplorer/abstractprocessstep.h index 0705cfde392..98399fdab2b 100644 --- a/src/plugins/projectexplorer/abstractprocessstep.h +++ b/src/plugins/projectexplorer/abstractprocessstep.h @@ -125,10 +125,12 @@ protected: virtual void processStarted(); /// Called after the process Finished /// 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, /// by default adds a message to the output window 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() /// the default implementation adds the line to the /// application output window diff --git a/src/plugins/qt4projectmanager/qmakestep.cpp b/src/plugins/qt4projectmanager/qmakestep.cpp index 065e22f7420..97783005521 100644 --- a/src/plugins/qt4projectmanager/qmakestep.cpp +++ b/src/plugins/qt4projectmanager/qmakestep.cpp @@ -266,9 +266,9 @@ void QMakeStep::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) m_forced = true; qt4BuildConfiguration()->emitBuildDirectoryInitialized(); diff --git a/src/plugins/qt4projectmanager/qmakestep.h b/src/plugins/qt4projectmanager/qmakestep.h index 436183ec001..79156622d18 100644 --- a/src/plugins/qt4projectmanager/qmakestep.h +++ b/src/plugins/qt4projectmanager/qmakestep.h @@ -100,7 +100,7 @@ protected: virtual bool fromMap(const QVariantMap &map); virtual void processStartupFailed(); - virtual bool processFinished(int exitCode, QProcess::ExitStatus status); + virtual bool processSucceeded(int exitCode, QProcess::ExitStatus status); private: void ctor(); -- GitLab