summaryrefslogtreecommitdiff
path: root/src/plugins/git/gitcommand.cpp
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@nokia.com>2010-02-26 17:43:37 +0100
committerFriedemann Kleint <Friedemann.Kleint@nokia.com>2010-02-26 17:43:37 +0100
commit214679d65ba4ebd2d2be0b177f5eeac7df6d32aa (patch)
tree3250efa96ff614dff3c2e4c6522a4f03abc85b4d /src/plugins/git/gitcommand.cpp
parent1e09e55bc3fd466ba03decfe956e64d1c819ee99 (diff)
downloadqt-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.cpp23
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;
}