aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/git/gitclient.cpp
diff options
context:
space:
mode:
authorFriedemann Kleint <[email protected]>2010-03-01 10:06:05 +0100
committerFriedemann Kleint <[email protected]>2010-03-01 10:06:32 +0100
commita1fed931c45c81566fd3d806abcb39b7c7bffabd (patch)
tree7d163fbe9545b3fb2a3cc95e822e9e5fbaafa802 /src/plugins/git/gitclient.cpp
parent1f940786fbd1e99441b91e071c242858e7439da2 (diff)
VCS: Fix time-out handling for synchronous processes.
Introduce static utilities to Utils::SynchronousProcess for synchronous processes that mimicks the handling of Utils::SynchronousProcess (apply timeout after no more data are available on stdout/stderr as opposed to waitForFinished()). Task-number: QTCREATORBUG-777
Diffstat (limited to 'src/plugins/git/gitclient.cpp')
-rw-r--r--src/plugins/git/gitclient.cpp22
1 files changed, 9 insertions, 13 deletions
diff --git a/src/plugins/git/gitclient.cpp b/src/plugins/git/gitclient.cpp
index c7a150a2ef4..b9bbbdbc383 100644
--- a/src/plugins/git/gitclient.cpp
+++ b/src/plugins/git/gitclient.cpp
@@ -49,6 +49,7 @@
#include <texteditor/itexteditor.h>
#include <utils/qtcassert.h>
+#include <utils/synchronousprocess.h>
#include <vcsbase/vcsbaseeditor.h>
#include <vcsbase/vcsbaseoutputwindow.h>
@@ -1042,22 +1043,16 @@ bool GitClient::synchronousGit(const QString &workingDirectory,
return false;
}
- if (!process.waitForFinished(m_settings.timeoutSeconds * 1000)) {
- if (errorText)
- *errorText = GitCommand::msgTimeout(m_settings.timeoutSeconds).toLocal8Bit();
- GitCommand::stopProcess(process);
+ if (!Utils::SynchronousProcess::readDataFromProcess(process, m_settings.timeoutSeconds * 1000,
+ outputText, errorText)) {
+ *errorText->append(GitCommand::msgTimeout(m_settings.timeoutSeconds).toLocal8Bit());
+ Utils::SynchronousProcess::stopProcess(process);
return false;
}
- if (outputText)
- *outputText = process.readAllStandardOutput();
-
- if (errorText)
- *errorText = process.readAllStandardError();
-
if (Git::Constants::debug)
- qDebug() << "synchronousGit ex=" << process.exitCode();
- return process.exitCode() == 0;
+ qDebug() << "synchronousGit ex=" << process.exitStatus() << process.exitCode();
+ return process.exitStatus() == QProcess::NormalExit && process.exitCode() == 0;
}
static inline int
@@ -1546,7 +1541,8 @@ QString GitClient::readConfig(const QString &workingDirectory, const QStringList
arguments << QLatin1String("config") << configVar;
QByteArray outputText;
- if (synchronousGit(workingDirectory, arguments, &outputText, 0, false))
+ QByteArray errorText;
+ if (synchronousGit(workingDirectory, arguments, &outputText, &errorText, false))
return commandOutputFromLocal8Bit(outputText);
return QString();
}