diff --git a/src/plugins/git/gerrit/gerritoptionspage.cpp b/src/plugins/git/gerrit/gerritoptionspage.cpp index 80c92817b6dbb64c9ae2862196d585960f575a5f..54d0451d200cbdc4b0170a27b4f9de0a9f457246 100644 --- a/src/plugins/git/gerrit/gerritoptionspage.cpp +++ b/src/plugins/git/gerrit/gerritoptionspage.cpp @@ -124,6 +124,7 @@ GerritParameters GerritOptionsWidget::parameters() const result.port = m_portSpinBox->value(); result.additionalQueries = m_additionalQueriesLineEdit->text().trimmed(); result.https = m_httpsCheckBox->isChecked(); + result.setPortFlagBySshType(); return result; } diff --git a/src/plugins/git/gerrit/gerritparameters.cpp b/src/plugins/git/gerrit/gerritparameters.cpp index 447db636c6f8ed3b6fba709c39c1f641b62b4f45..2ab0b787c2a1c8783f2bcc4eca016f5049643d1c 100644 --- a/src/plugins/git/gerrit/gerritparameters.cpp +++ b/src/plugins/git/gerrit/gerritparameters.cpp @@ -38,6 +38,7 @@ #else # include <utils/environment.h> #endif +#include <utils/pathchooser.h> #include <QDebug> #include <QFileInfo> #include <QSettings> @@ -49,12 +50,15 @@ static const char settingsGroupC[] = "Gerrit"; static const char hostKeyC[] = "Host"; static const char userKeyC[] = "User"; static const char portKeyC[] = "Port"; +static const char portFlagKeyC[] = "PortFlag"; static const char sshKeyC[] = "Ssh"; static const char httpsKeyC[] = "Https"; static const char defaultHostC[] = "codereview.qt-project.org"; static const char defaultSshC[] = "ssh"; static const char additionalQueriesKeyC[] = "AdditionalQueries"; +static const char defaultPortFlag[] = "-p"; + enum { defaultPort = 29418 }; static inline QString detectSsh() @@ -83,17 +87,25 @@ static inline QString detectSsh() return ssh; } +void GerritParameters::setPortFlagBySshType() +{ + const QString version = Utils::PathChooser::toolVersion(ssh, QStringList(QLatin1String("-V"))); + portFlag = (version.contains(QLatin1String("plink"), Qt::CaseInsensitive)) ? + QLatin1String("-P") : QLatin1String(defaultPortFlag); +} + GerritParameters::GerritParameters() : host(QLatin1String(defaultHostC)) , port(defaultPort) , https(true) + , portFlag(QLatin1String(defaultPortFlag)) { } QStringList GerritParameters::baseCommandArguments() const { QStringList result; - result << ssh << QLatin1String("-p") << QString::number(port) + result << ssh << portFlag << QString::number(port) << sshHostArgument() << QLatin1String("gerrit"); return result; } @@ -116,6 +128,7 @@ void GerritParameters::toSettings(QSettings *s) const s->setValue(QLatin1String(hostKeyC), host); s->setValue(QLatin1String(userKeyC), user); s->setValue(QLatin1String(portKeyC), port); + s->setValue(QLatin1String(portFlagKeyC), portFlag); s->setValue(QLatin1String(sshKeyC), ssh); s->setValue(QLatin1String(additionalQueriesKeyC), additionalQueries); s->setValue(QLatin1String(httpsKeyC), https); @@ -129,6 +142,7 @@ void GerritParameters::fromSettings(const QSettings *s) user = s->value(rootKey + QLatin1String(userKeyC), QString()).toString(); ssh = s->value(rootKey + QLatin1String(sshKeyC), QString()).toString(); port = s->value(rootKey + QLatin1String(portKeyC), QVariant(int(defaultPort))).toInt(); + portFlag = s->value(rootKey + QLatin1String(portFlagKeyC), QLatin1String(defaultPortFlag)).toString(); additionalQueries = s->value(rootKey + QLatin1String(additionalQueriesKeyC), QString()).toString(); https = s->value(rootKey + QLatin1String(httpsKeyC), QVariant(true)).toBool(); if (ssh.isEmpty()) diff --git a/src/plugins/git/gerrit/gerritparameters.h b/src/plugins/git/gerrit/gerritparameters.h index 62f792d24e608aacf0d1666f3ad8cdd67ea2f15d..46e847c2a916836379425df66582bebdddfed2ce 100644 --- a/src/plugins/git/gerrit/gerritparameters.h +++ b/src/plugins/git/gerrit/gerritparameters.h @@ -51,6 +51,7 @@ public: bool equals(const GerritParameters &rhs) const; void toSettings(QSettings *) const; void fromSettings(const QSettings *); + void setPortFlagBySshType(); QString host; unsigned short port; @@ -58,6 +59,7 @@ public: QString ssh; QString additionalQueries; bool https; + QString portFlag; }; inline bool operator==(const GerritParameters &p1, const GerritParameters &p2)