forked from qt-creator/qt-creator
Gerrit: Persist server details
Avoid repeating connection tests for the same server between runs. Change-Id: Iecea52af986a708f317878c171d4fcea088cbbde Reviewed-by: André Hartmann <aha_1980@gmx.de> Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
This commit is contained in:
committed by
Orgad Shaneh
parent
a6a271881f
commit
c1d013437f
@@ -29,12 +29,14 @@
|
|||||||
#include "../gitplugin.h"
|
#include "../gitplugin.h"
|
||||||
#include "../gitclient.h"
|
#include "../gitclient.h"
|
||||||
|
|
||||||
|
#include <coreplugin/icore.h>
|
||||||
#include <coreplugin/shellcommand.h>
|
#include <coreplugin/shellcommand.h>
|
||||||
#include <utils/hostosinfo.h>
|
#include <utils/hostosinfo.h>
|
||||||
|
|
||||||
#include <QFile>
|
#include <QFile>
|
||||||
#include <QJsonDocument>
|
#include <QJsonDocument>
|
||||||
#include <QRegularExpression>
|
#include <QRegularExpression>
|
||||||
|
#include <QSettings>
|
||||||
|
|
||||||
using namespace Utils;
|
using namespace Utils;
|
||||||
using namespace Git::Internal;
|
using namespace Git::Internal;
|
||||||
@@ -44,6 +46,11 @@ namespace Internal {
|
|||||||
|
|
||||||
static const char defaultHostC[] = "codereview.qt-project.org";
|
static const char defaultHostC[] = "codereview.qt-project.org";
|
||||||
static const char accountUrlC[] = "/accounts/self";
|
static const char accountUrlC[] = "/accounts/self";
|
||||||
|
static const char isGerritKey[] = "IsGerrit";
|
||||||
|
static const char rootPathKey[] = "RootPath";
|
||||||
|
static const char userNameKey[] = "UserName";
|
||||||
|
static const char fullNameKey[] = "FullName";
|
||||||
|
static const char isAuthenticatedKey[] = "IsAuthenticated";
|
||||||
|
|
||||||
bool GerritUser::isSameAs(const GerritUser &other) const
|
bool GerritUser::isSameAs(const GerritUser &other) const
|
||||||
{
|
{
|
||||||
@@ -136,12 +143,60 @@ bool GerritServer::fillFromRemote(const QString &remote, const GerritParameters
|
|||||||
curlBinary = parameters.curl;
|
curlBinary = parameters.curl;
|
||||||
if (curlBinary.isEmpty() || !QFile::exists(curlBinary))
|
if (curlBinary.isEmpty() || !QFile::exists(curlBinary))
|
||||||
return false;
|
return false;
|
||||||
rootPath = r.path;
|
switch (loadSettings()) {
|
||||||
// Strip the last part of the path, which is always the repo name
|
case Invalid:
|
||||||
// The rest of the path needs to be inspected to find the root path
|
rootPath = r.path;
|
||||||
// (can be http://example.net/review)
|
// Strip the last part of the path, which is always the repo name
|
||||||
ascendPath();
|
// The rest of the path needs to be inspected to find the root path
|
||||||
return resolveRoot();
|
// (can be http://example.net/review)
|
||||||
|
ascendPath();
|
||||||
|
return resolveRoot();
|
||||||
|
case NotGerrit:
|
||||||
|
return false;
|
||||||
|
case Valid:
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
GerritServer::StoredHostValidity GerritServer::loadSettings()
|
||||||
|
{
|
||||||
|
StoredHostValidity validity = Invalid;
|
||||||
|
QSettings *settings = Core::ICore::settings();
|
||||||
|
settings->beginGroup("Gerrit/" + host);
|
||||||
|
if (!settings->value(isGerritKey, true).toBool()) {
|
||||||
|
validity = NotGerrit;
|
||||||
|
} else if (settings->contains(isAuthenticatedKey)) {
|
||||||
|
rootPath = settings->value(rootPathKey).toString();
|
||||||
|
user.userName = settings->value(userNameKey).toString();
|
||||||
|
user.fullName = settings->value(fullNameKey).toString();
|
||||||
|
authenticated = settings->value(isAuthenticatedKey).toBool();
|
||||||
|
validity = Valid;
|
||||||
|
}
|
||||||
|
settings->endGroup();
|
||||||
|
return validity;
|
||||||
|
}
|
||||||
|
|
||||||
|
void GerritServer::saveSettings(StoredHostValidity validity) const
|
||||||
|
{
|
||||||
|
QSettings *settings = Core::ICore::settings();
|
||||||
|
settings->beginGroup("Gerrit/" + host);
|
||||||
|
switch (validity) {
|
||||||
|
case NotGerrit:
|
||||||
|
settings->setValue(isGerritKey, false);
|
||||||
|
break;
|
||||||
|
case Valid:
|
||||||
|
settings->setValue(rootPathKey, rootPath);
|
||||||
|
settings->setValue(userNameKey, user.userName);
|
||||||
|
settings->setValue(fullNameKey, user.fullName);
|
||||||
|
settings->setValue(isAuthenticatedKey, authenticated);
|
||||||
|
break;
|
||||||
|
case Invalid:
|
||||||
|
settings->clear();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
settings->endGroup();
|
||||||
}
|
}
|
||||||
|
|
||||||
QStringList GerritServer::curlArguments()
|
QStringList GerritServer::curlArguments()
|
||||||
@@ -182,6 +237,7 @@ bool GerritServer::setupAuthentication()
|
|||||||
if (!dialog.exec())
|
if (!dialog.exec())
|
||||||
return false;
|
return false;
|
||||||
authenticated = dialog.isAuthenticated();
|
authenticated = dialog.isAuthenticated();
|
||||||
|
saveSettings(Valid);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -199,12 +255,15 @@ bool GerritServer::resolveRoot()
|
|||||||
for (;;) {
|
for (;;) {
|
||||||
switch (testConnection()) {
|
switch (testConnection()) {
|
||||||
case 200:
|
case 200:
|
||||||
|
saveSettings(Valid);
|
||||||
return true;
|
return true;
|
||||||
case 401:
|
case 401:
|
||||||
return setupAuthentication();
|
return setupAuthentication();
|
||||||
case 404:
|
case 404:
|
||||||
if (!ascendPath())
|
if (!ascendPath()) {
|
||||||
|
saveSettings(NotGerrit);
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
default: // unknown error - fail
|
default: // unknown error - fail
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -61,6 +61,13 @@ public:
|
|||||||
RestUrl
|
RestUrl
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum StoredHostValidity
|
||||||
|
{
|
||||||
|
Invalid,
|
||||||
|
NotGerrit,
|
||||||
|
Valid
|
||||||
|
};
|
||||||
|
|
||||||
GerritServer();
|
GerritServer();
|
||||||
GerritServer(const QString &host, unsigned short port, const QString &userName, HostType type);
|
GerritServer(const QString &host, unsigned short port, const QString &userName, HostType type);
|
||||||
bool operator==(const GerritServer &other) const;
|
bool operator==(const GerritServer &other) const;
|
||||||
@@ -68,6 +75,8 @@ public:
|
|||||||
QString hostArgument() const;
|
QString hostArgument() const;
|
||||||
QString url(UrlType urlType = DefaultUrl) const;
|
QString url(UrlType urlType = DefaultUrl) const;
|
||||||
bool fillFromRemote(const QString &remote, const GerritParameters ¶meters);
|
bool fillFromRemote(const QString &remote, const GerritParameters ¶meters);
|
||||||
|
StoredHostValidity loadSettings();
|
||||||
|
void saveSettings(StoredHostValidity validity) const;
|
||||||
int testConnection();
|
int testConnection();
|
||||||
static QStringList curlArguments();
|
static QStringList curlArguments();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user