From b7927fe1b02132b6a70c98c59dc1783f36608af2 Mon Sep 17 00:00:00 2001
From: Orgad Shaneh <orgads@gmail.com>
Date: Wed, 16 May 2012 21:13:42 +0300
Subject: [PATCH] Gerrit: Support plink

Change-Id: I7fe7c5d47b17b2e5d8179e7deb9cb8e566f15912
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@nokia.com>
---
 src/plugins/git/gerrit/gerritoptionspage.cpp |  1 +
 src/plugins/git/gerrit/gerritparameters.cpp  | 16 +++++++++++++++-
 src/plugins/git/gerrit/gerritparameters.h    |  2 ++
 3 files changed, 18 insertions(+), 1 deletion(-)

diff --git a/src/plugins/git/gerrit/gerritoptionspage.cpp b/src/plugins/git/gerrit/gerritoptionspage.cpp
index 80c92817b6d..54d0451d200 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 447db636c6f..2ab0b787c2a 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 62f792d24e6..46e847c2a91 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)
-- 
GitLab