diff options
author | Friedemann Kleint <[email protected]> | 2010-05-21 17:46:00 +0200 |
---|---|---|
committer | Friedemann Kleint <[email protected]> | 2010-05-21 17:46:00 +0200 |
commit | 5364f5c152a2cdbcdb3abb1b80b658474e081411 (patch) | |
tree | 3306f8665c8ce1149cbf65a75acac00599752d29 /src/plugins/vcsbase/checkoutjobs.cpp | |
parent | 91c4b0305c0d36da4d959d1be744ee61863b4642 (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.cpp | 43 |
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 |