aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/vcsbase/checkoutjobs.cpp
diff options
context:
space:
mode:
authorFriedemann Kleint <[email protected]>2010-05-21 17:46:00 +0200
committerFriedemann Kleint <[email protected]>2010-05-21 17:46:00 +0200
commit5364f5c152a2cdbcdb3abb1b80b658474e081411 (patch)
tree3306f8665c8ce1149cbf65a75acac00599752d29 /src/plugins/vcsbase/checkoutjobs.cpp
parent91c4b0305c0d36da4d959d1be744ee61863b4642 (diff)
VCS: Show message box on timeouts/Add SSH prompt.
- Use message boxes on timeouts. - Add a configuration for a graphical SSH password prompt binary with defaults - Launch commands that require authentification with no terminal on UNIX and environment variable SSH_ASKPASS set accordingly. - First attempt at introduce a common function to synchronously run VCS commands in base plugin with flags. - Use standard execution log entries in all VCS plugins (outputwindow).
Diffstat (limited to 'src/plugins/vcsbase/checkoutjobs.cpp')
-rw-r--r--src/plugins/vcsbase/checkoutjobs.cpp43
1 files changed, 29 insertions, 14 deletions
diff --git a/src/plugins/vcsbase/checkoutjobs.cpp b/src/plugins/vcsbase/checkoutjobs.cpp
index 3d18fed83e2..e707595637b 100644
--- a/src/plugins/vcsbase/checkoutjobs.cpp
+++ b/src/plugins/vcsbase/checkoutjobs.cpp
@@ -29,6 +29,8 @@
#include "checkoutjobs.h"
+#include <vcsbaseplugin.h>
+
#include <QtCore/QDebug>
#include <utils/synchronousprocess.h>
@@ -46,22 +48,35 @@ struct ProcessCheckoutJobPrivate {
const QString &workingDirectory,
const QStringList &env);
- QProcess process;
+ QSharedPointer<QProcess> process;
const QString binary;
const QStringList args;
};
+// Use a terminal-less process to suppress SSH prompts.
+static inline QSharedPointer<QProcess> createProcess()
+{
+ unsigned flags = 0;
+ if (VCSBasePlugin::isSshPromptConfigured())
+ flags = Utils::SynchronousProcess::UnixTerminalDisabled;
+ return Utils::SynchronousProcess::createProcess(flags);
+}
+
ProcessCheckoutJobPrivate::ProcessCheckoutJobPrivate(const QString &b,
const QStringList &a,
const QString &workingDirectory,
const QStringList &env) :
+ process(createProcess()),
binary(b),
args(a)
-{
+{
if (!workingDirectory.isEmpty())
- process.setWorkingDirectory(workingDirectory);
+ process->setWorkingDirectory(workingDirectory);
if (!env.empty())
- process.setEnvironment(env);
+ process->setEnvironment(env);
+ QProcessEnvironment processEnv = process->processEnvironment();
+ VCSBasePlugin::setProcessEnvironment(&processEnv);
+ process->setProcessEnvironment(processEnv);
}
ProcessCheckoutJob::ProcessCheckoutJob(const QString &binary,
@@ -74,11 +89,11 @@ ProcessCheckoutJob::ProcessCheckoutJob(const QString &binary,
{
if (debug)
qDebug() << "ProcessCheckoutJob" << binary << args << workingDirectory;
- connect(&d->process, SIGNAL(error(QProcess::ProcessError)), this, SLOT(slotError(QProcess::ProcessError)));
- connect(&d->process, SIGNAL(finished(int,QProcess::ExitStatus)), this, SLOT(slotFinished(int,QProcess::ExitStatus)));
- connect(&d->process, SIGNAL(readyReadStandardOutput()), this, SLOT(slotOutput()));
- d->process.setProcessChannelMode(QProcess::MergedChannels);
- d->process.closeWriteChannel();
+ connect(d->process.data(), SIGNAL(error(QProcess::ProcessError)), this, SLOT(slotError(QProcess::ProcessError)));
+ connect(d->process.data(), SIGNAL(finished(int,QProcess::ExitStatus)), this, SLOT(slotFinished(int,QProcess::ExitStatus)));
+ connect(d->process.data(), SIGNAL(readyReadStandardOutput()), this, SLOT(slotOutput()));
+ d->process->setProcessChannelMode(QProcess::MergedChannels);
+ d->process->closeWriteChannel();
}
ProcessCheckoutJob::~ProcessCheckoutJob()
@@ -88,7 +103,7 @@ ProcessCheckoutJob::~ProcessCheckoutJob()
void ProcessCheckoutJob::slotOutput()
{
- const QByteArray data = d->process.readAllStandardOutput();
+ const QByteArray data = d->process->readAllStandardOutput();
const QString s = QString::fromLocal8Bit(data, data.endsWith('\n') ? data.size() - 1: data.size());
if (debug)
qDebug() << s;
@@ -99,10 +114,10 @@ void ProcessCheckoutJob::slotError(QProcess::ProcessError error)
{
switch (error) {
case QProcess::FailedToStart:
- emit failed(tr("Unable to start %1: %2").arg(d->binary, d->process.errorString()));
+ emit failed(tr("Unable to start %1: %2").arg(d->binary, d->process->errorString()));
break;
default:
- emit failed(d->process.errorString());
+ emit failed(d->process->errorString());
break;
}
}
@@ -129,7 +144,7 @@ void ProcessCheckoutJob::slotFinished (int exitCode, QProcess::ExitStatus exitSt
void ProcessCheckoutJob::start()
{
- d->process.start(d->binary, d->args);
+ d->process->start(d->binary, d->args);
}
void ProcessCheckoutJob::cancel()
@@ -138,7 +153,7 @@ void ProcessCheckoutJob::cancel()
qDebug() << "ProcessCheckoutJob::start";
emit output(tr("Stopping..."));
- Utils::SynchronousProcess::stopProcess(d->process);
+ Utils::SynchronousProcess::stopProcess(*d->process);
}
} // namespace VCSBase