diff options
author | Friedemann Kleint <[email protected]> | 2010-03-01 10:06:05 +0100 |
---|---|---|
committer | Friedemann Kleint <[email protected]> | 2010-03-01 10:06:32 +0100 |
commit | a1fed931c45c81566fd3d806abcb39b7c7bffabd (patch) | |
tree | 7d163fbe9545b3fb2a3cc95e822e9e5fbaafa802 /src/plugins/git/gitclient.cpp | |
parent | 1f940786fbd1e99441b91e071c242858e7439da2 (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.cpp | 22 |
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(); } |