summaryrefslogtreecommitdiff
path: root/src/plugins/vcsbase/command.cpp
diff options
context:
space:
mode:
authorjkobus <jaroslaw.kobus@digia.com>2013-09-24 16:40:10 +0200
committerJarek Kobus <jaroslaw.kobus@digia.com>2013-09-26 14:25:39 +0200
commit696b0a8b8039e7d920f0daad967b51f179db60d4 (patch)
treed2791c7947af6996a5cc5fb4120c520abe888db8 /src/plugins/vcsbase/command.cpp
parent005bef92950dc29cfd5f2ef5825a5bbd9bebad97 (diff)
downloadqt-creator-696b0a8b8039e7d920f0daad967b51f179db60d4.tar.gz
Introduce ExitCodeInterpreter, useful when exit code != 0 is valid
Task-number: QTCREATORBUG-10207 Change-Id: I3b440d40a968f09afc613b686ee50da6465ad88e Reviewed-by: Tobias Hunger <tobias.hunger@digia.com>
Diffstat (limited to 'src/plugins/vcsbase/command.cpp')
-rw-r--r--src/plugins/vcsbase/command.cpp39
1 files changed, 23 insertions, 16 deletions
diff --git a/src/plugins/vcsbase/command.cpp b/src/plugins/vcsbase/command.cpp
index 8aa3d1fdf6..85148aee10 100644
--- a/src/plugins/vcsbase/command.cpp
+++ b/src/plugins/vcsbase/command.cpp
@@ -78,10 +78,11 @@ class CommandPrivate
{
public:
struct Job {
- explicit Job(const QStringList &a, int t);
+ explicit Job(const QStringList &a, int t, Utils::ExitCodeInterpreter *interpreter = 0);
QStringList arguments;
int timeout;
+ Utils::ExitCodeInterpreter *exitCodeInterpreter;
};
CommandPrivate(const QString &binary,
@@ -130,9 +131,10 @@ CommandPrivate::~CommandPrivate()
delete m_progressParser;
}
-CommandPrivate::Job::Job(const QStringList &a, int t) :
+CommandPrivate::Job::Job(const QStringList &a, int t, Utils::ExitCodeInterpreter *interpreter) :
arguments(a),
- timeout(t)
+ timeout(t),
+ exitCodeInterpreter(interpreter)
{
// Finished cookie is emitted via queued slot, needs metatype
static const int qvMetaId = qRegisterMetaType<QVariant>();
@@ -188,14 +190,14 @@ void Command::addFlags(unsigned f)
d->m_flags |= f;
}
-void Command::addJob(const QStringList &arguments)
+void Command::addJob(const QStringList &arguments, Utils::ExitCodeInterpreter *interpreter)
{
- addJob(arguments, defaultTimeout());
+ addJob(arguments, defaultTimeout(), interpreter);
}
-void Command::addJob(const QStringList &arguments, int timeout)
+void Command::addJob(const QStringList &arguments, int timeout, Utils::ExitCodeInterpreter *interpreter)
{
- d->m_jobs.push_back(Internal::CommandPrivate::Job(arguments, timeout));
+ d->m_jobs.push_back(Internal::CommandPrivate::Job(arguments, timeout, interpreter));
}
void Command::execute()
@@ -249,10 +251,12 @@ void Command::run(QFutureInterface<void> &future)
d->m_lastExecExitCode = -1;
d->m_lastExecSuccess = true;
for (int j = 0; j < count; j++) {
- const int timeOutSeconds = d->m_jobs.at(j).timeout;
+ const Internal::CommandPrivate::Job &job = d->m_jobs.at(j);
+ const int timeOutSeconds = job.timeout;
Utils::SynchronousProcessResponse resp = runVcs(
- d->m_jobs.at(j).arguments,
- timeOutSeconds >= 0 ? timeOutSeconds * 1000 : -1);
+ job.arguments,
+ timeOutSeconds >= 0 ? timeOutSeconds * 1000 : -1,
+ job.exitCodeInterpreter);
stdOut += resp.stdOut;
stdErr += resp.stdErr;
d->m_lastExecExitCode = resp.exitCode;
@@ -309,7 +313,8 @@ signals:
void appendMessage(const QString &text);
};
-Utils::SynchronousProcessResponse Command::runVcs(const QStringList &arguments, int timeoutMS)
+Utils::SynchronousProcessResponse Command::runVcs(const QStringList &arguments, int timeoutMS,
+ Utils::ExitCodeInterpreter *interpreter)
{
Utils::SynchronousProcessResponse response;
OutputProxy outputProxy;
@@ -353,9 +358,10 @@ Utils::SynchronousProcessResponse Command::runVcs(const QStringList &arguments,
// if (d->m_flags & ExpectRepoChanges)
// Core::DocumentManager::expectDirectoryChange(d->m_workingDirectory);
if (d->m_flags & VcsBasePlugin::FullySynchronously) {
- response = runSynchronous(arguments, timeoutMS);
+ response = runSynchronous(arguments, timeoutMS, interpreter);
} else {
Utils::SynchronousProcess process;
+ process.setExitCodeInterpreter(interpreter);
connect(this, SIGNAL(doTerminate()), &process, SLOT(terminate()));
if (!d->m_workingDirectory.isEmpty())
process.setWorkingDirectory(d->m_workingDirectory);
@@ -412,7 +418,8 @@ Utils::SynchronousProcessResponse Command::runVcs(const QStringList &arguments,
return response;
}
-Utils::SynchronousProcessResponse Command::runSynchronous(const QStringList &arguments, int timeoutMS)
+Utils::SynchronousProcessResponse Command::runSynchronous(const QStringList &arguments, int timeoutMS,
+ Utils::ExitCodeInterpreter *interpreter)
{
Utils::SynchronousProcessResponse response;
@@ -465,15 +472,15 @@ Utils::SynchronousProcessResponse Command::runSynchronous(const QStringList &arg
}
}
+ Utils::ExitCodeInterpreter defaultInterpreter(this);
+ Utils::ExitCodeInterpreter *currentInterpreter = interpreter ? interpreter : &defaultInterpreter;
// Result
if (timedOut) {
response.result = Utils::SynchronousProcessResponse::Hang;
} else if (process->exitStatus() != QProcess::NormalExit) {
response.result = Utils::SynchronousProcessResponse::TerminatedAbnormally;
} else {
- response.result = process->exitCode() == 0 ?
- Utils::SynchronousProcessResponse::Finished :
- Utils::SynchronousProcessResponse::FinishedError;
+ response.result = currentInterpreter->interpretExitCode(process->exitCode());
}
return response;
}