diff --git a/src/plugins/git/clonewizardpage.cpp b/src/plugins/git/clonewizardpage.cpp index 860a0c80633349c39bdadd17d262c6b08acbe2df..8c712d14f328bfd17073a32c37ab79d70b1561aa 100644 --- a/src/plugins/git/clonewizardpage.cpp +++ b/src/plugins/git/clonewizardpage.cpp @@ -114,7 +114,7 @@ QSharedPointer<VCSBase::AbstractCheckoutJob> CloneWizardPage::createCheckoutJob( args.pop_front(); VCSBase::AbstractCheckoutJob *job = new VCSBase::ProcessCheckoutJob(binary, args, workingDirectory, - client->processEnvironment().toStringList()); + client->processEnvironment()); return QSharedPointer<VCSBase::AbstractCheckoutJob>(job); } diff --git a/src/plugins/vcsbase/checkoutjobs.cpp b/src/plugins/vcsbase/checkoutjobs.cpp index e707595637b764e7c3bdde0e899a52ccd49f7050..70ff42c4439261e556efd16e704c78a040b0f794 100644 --- a/src/plugins/vcsbase/checkoutjobs.cpp +++ b/src/plugins/vcsbase/checkoutjobs.cpp @@ -46,7 +46,7 @@ struct ProcessCheckoutJobPrivate { ProcessCheckoutJobPrivate(const QString &binary, const QStringList &args, const QString &workingDirectory, - const QStringList &env); + QProcessEnvironment env); QSharedPointer<QProcess> process; const QString binary; @@ -65,16 +65,13 @@ static inline QSharedPointer<QProcess> createProcess() ProcessCheckoutJobPrivate::ProcessCheckoutJobPrivate(const QString &b, const QStringList &a, const QString &workingDirectory, - const QStringList &env) : + QProcessEnvironment processEnv) : process(createProcess()), binary(b), args(a) { if (!workingDirectory.isEmpty()) process->setWorkingDirectory(workingDirectory); - if (!env.empty()) - process->setEnvironment(env); - QProcessEnvironment processEnv = process->processEnvironment(); VCSBasePlugin::setProcessEnvironment(&processEnv); process->setProcessEnvironment(processEnv); } @@ -82,7 +79,7 @@ ProcessCheckoutJobPrivate::ProcessCheckoutJobPrivate(const QString &b, ProcessCheckoutJob::ProcessCheckoutJob(const QString &binary, const QStringList &args, const QString &workingDirectory, - const QStringList &env, + const QProcessEnvironment &env, QObject *parent) : AbstractCheckoutJob(parent), d(new ProcessCheckoutJobPrivate(binary, args, workingDirectory, env)) diff --git a/src/plugins/vcsbase/checkoutjobs.h b/src/plugins/vcsbase/checkoutjobs.h index ab6c8c91ad3f43399708617181b7eebc77a27e26..9c467ff4f3f2af05b6c53defb9cb6e88c8be17ab 100644 --- a/src/plugins/vcsbase/checkoutjobs.h +++ b/src/plugins/vcsbase/checkoutjobs.h @@ -35,6 +35,7 @@ #include <QtCore/QObject> #include <QtCore/QStringList> #include <QtCore/QProcess> +#include <QtCore/QProcessEnvironment> QT_BEGIN_NAMESPACE class QStringList; @@ -74,7 +75,7 @@ public: explicit ProcessCheckoutJob(const QString &binary, const QStringList &args, const QString &workingDirectory = QString(), - const QStringList &env = QStringList(), + const QProcessEnvironment &env = QProcessEnvironment::systemEnvironment(), QObject *parent = 0); virtual ~ProcessCheckoutJob(); diff --git a/src/plugins/vcsbase/commonvcssettings.cpp b/src/plugins/vcsbase/commonvcssettings.cpp index 621e85f895f5be14d11fabf0f95eda0cc57c7281..8747450d36ef7f8339b89742d28dec964f38f878 100644 --- a/src/plugins/vcsbase/commonvcssettings.cpp +++ b/src/plugins/vcsbase/commonvcssettings.cpp @@ -43,17 +43,24 @@ static const char sshPasswordPromptKeyC[] = "SshPasswordPrompt"; static const int lineWrapWidthDefault = 72; static const bool lineWrapDefault = true; +// Return default for the ssh-askpass command (default to environment) +static inline QString sshPasswordPromptDefault() +{ + const QByteArray envSetting = qgetenv("SSH_ASKPASS"); + if (!envSetting.isEmpty()) + return QString::fromLocal8Bit(envSetting); #ifdef Q_OS_WIN -static const char sshPasswordPromptDefaultC[] = "win-ssh-askpass"; + return QLatin1String("win-ssh-askpass"); #else -static const char sshPasswordPromptDefaultC[] = "ssh-askpass"; + return QLatin1String("ssh-askpass"); #endif +} namespace VCSBase { namespace Internal { CommonVcsSettings::CommonVcsSettings() : - sshPasswordPrompt(QLatin1String(sshPasswordPromptDefaultC)), + sshPasswordPrompt(sshPasswordPromptDefault()), lineWrap(lineWrapDefault), lineWrapWidth(lineWrapWidthDefault) { @@ -67,7 +74,12 @@ void CommonVcsSettings::toSettings(QSettings *s) const s->setValue(QLatin1String(submitMessageCheckScriptKeyC), submitMessageCheckScript); s->setValue(QLatin1String(lineWrapKeyC), lineWrap); s->setValue(QLatin1String(lineWrapWidthKeyC), lineWrapWidth); - s->setValue(QLatin1String(sshPasswordPromptKeyC), sshPasswordPrompt); + // Do not store the default setting to avoid clobbering the environment. + if (sshPasswordPrompt != sshPasswordPromptDefault()) { + s->setValue(QLatin1String(sshPasswordPromptKeyC), sshPasswordPrompt); + } else { + s->remove(QLatin1String(sshPasswordPromptKeyC)); + } s->endGroup(); } @@ -79,7 +91,7 @@ void CommonVcsSettings::fromSettings(QSettings *s) submitMessageCheckScript = s->value(QLatin1String(submitMessageCheckScriptKeyC), QString()).toString(); lineWrap = s->value(QLatin1String(lineWrapKeyC), lineWrapDefault).toBool(); lineWrapWidth = s->value(QLatin1String(lineWrapWidthKeyC), lineWrapWidthDefault).toInt(); - sshPasswordPrompt = s->value(QLatin1String(sshPasswordPromptKeyC), QLatin1String(sshPasswordPromptDefaultC)).toString(); + sshPasswordPrompt = s->value(QLatin1String(sshPasswordPromptKeyC), sshPasswordPromptDefault()).toString(); s->endGroup(); }