diff options
author | Friedemann Kleint <Friedemann.Kleint@nokia.com> | 2010-02-26 17:43:37 +0100 |
---|---|---|
committer | Friedemann Kleint <Friedemann.Kleint@nokia.com> | 2010-02-26 17:43:37 +0100 |
commit | 214679d65ba4ebd2d2be0b177f5eeac7df6d32aa (patch) | |
tree | 3250efa96ff614dff3c2e4c6522a4f03abc85b4d /src/plugins/git/gitcommand.cpp | |
parent | 1e09e55bc3fd466ba03decfe956e64d1c819ee99 (diff) | |
download | qt-creator-214679d65ba4ebd2d2be0b177f5eeac7df6d32aa.tar.gz |
Git: Improve Timeouts.
- Observe timeout setting when running synchronous commands.
- Increase Default on Windows
- Stop process with terminate first (signal).
Task-number: QTCREATORBUG-777
Diffstat (limited to 'src/plugins/git/gitcommand.cpp')
-rw-r--r-- | src/plugins/git/gitcommand.cpp | 23 |
1 files changed, 20 insertions, 3 deletions
diff --git a/src/plugins/git/gitcommand.cpp b/src/plugins/git/gitcommand.cpp index fed9d81b67..e1f4ac3a94 100644 --- a/src/plugins/git/gitcommand.cpp +++ b/src/plugins/git/gitcommand.cpp @@ -112,6 +112,22 @@ void GitCommand::execute() QLatin1String("Git.action")); } +QString GitCommand::msgTimeout(int seconds) +{ + return tr("Error: Git timed out after %1s.").arg(seconds); +} + +bool GitCommand::stopProcess(QProcess &p) +{ + if (p.state() != QProcess::Running) + return true; + p.terminate(); + if (p.waitForFinished(300)) + return true; + p.kill(); + return p.waitForFinished(300); +} + void GitCommand::run() { if (Git::Constants::debug) @@ -139,10 +155,11 @@ void GitCommand::run() } process.closeWriteChannel(); - if (!process.waitForFinished(m_jobs.at(j).timeout * 1000)) { - process.terminate(); + const int timeOutSeconds = m_jobs.at(j).timeout; + if (!process.waitForFinished(timeOutSeconds * 1000)) { + stopProcess(process); ok = false; - error += QLatin1String("Error: Git timed out"); + error += msgTimeout(timeOutSeconds); break; } |