Vcs: Move handling of settings from VcsBaseClient to VcsBaseClientImpl

... and update users of that functionality accordingly.

Unexpected plus: Now every supported VCS actually saves their setting
when requested.

Change-Id: I02db7b2ce14e5f52d26409b2a01aea290c2a294a
Reviewed-by: Orgad Shaneh <orgads@gmail.com>
This commit is contained in:
Tobias Hunger
2015-03-26 12:22:29 +01:00
parent d3100774f9
commit 90ce38da39
49 changed files with 342 additions and 383 deletions

View File

@@ -68,13 +68,13 @@ class BazaarDiffParameterWidget : public VcsBaseEditorParameterWidget
{ {
Q_OBJECT Q_OBJECT
public: public:
BazaarDiffParameterWidget(BazaarSettings *settings, QWidget *parent = 0) : BazaarDiffParameterWidget(VcsBaseClientSettings &settings, QWidget *parent = 0) :
VcsBaseEditorParameterWidget(parent) VcsBaseEditorParameterWidget(parent)
{ {
mapSetting(addToggleButton(QLatin1String("-w"), tr("Ignore Whitespace")), mapSetting(addToggleButton(QLatin1String("-w"), tr("Ignore Whitespace")),
settings->boolPointer(BazaarSettings::diffIgnoreWhiteSpaceKey)); settings.boolPointer(BazaarSettings::diffIgnoreWhiteSpaceKey));
mapSetting(addToggleButton(QLatin1String("-B"), tr("Ignore Blank Lines")), mapSetting(addToggleButton(QLatin1String("-B"), tr("Ignore Blank Lines")),
settings->boolPointer(BazaarSettings::diffIgnoreBlankLinesKey)); settings.boolPointer(BazaarSettings::diffIgnoreBlankLinesKey));
} }
QStringList arguments() const QStringList arguments() const
@@ -95,18 +95,18 @@ class BazaarLogParameterWidget : public VcsBaseEditorParameterWidget
{ {
Q_OBJECT Q_OBJECT
public: public:
BazaarLogParameterWidget(BazaarSettings *settings, QWidget *parent = 0) : BazaarLogParameterWidget(VcsBaseClientSettings &settings, QWidget *parent = 0) :
VcsBaseEditorParameterWidget(parent) VcsBaseEditorParameterWidget(parent)
{ {
mapSetting(addToggleButton(QLatin1String("--verbose"), tr("Verbose"), mapSetting(addToggleButton(QLatin1String("--verbose"), tr("Verbose"),
tr("Show files changed in each revision.")), tr("Show files changed in each revision.")),
settings->boolPointer(BazaarSettings::logVerboseKey)); settings.boolPointer(BazaarSettings::logVerboseKey));
mapSetting(addToggleButton(QLatin1String("--forward"), tr("Forward"), mapSetting(addToggleButton(QLatin1String("--forward"), tr("Forward"),
tr("Show from oldest to newest.")), tr("Show from oldest to newest.")),
settings->boolPointer(BazaarSettings::logForwardKey)); settings.boolPointer(BazaarSettings::logForwardKey));
mapSetting(addToggleButton(QLatin1String("--include-merges"), tr("Include Merges"), mapSetting(addToggleButton(QLatin1String("--include-merges"), tr("Include Merges"),
tr("Show merged revisions.")), tr("Show merged revisions.")),
settings->boolPointer(BazaarSettings::logIncludeMergesKey)); settings.boolPointer(BazaarSettings::logIncludeMergesKey));
QList<ComboBoxItem> logChoices; QList<ComboBoxItem> logChoices;
logChoices << ComboBoxItem(tr("Detailed"), QLatin1String("long")) logChoices << ComboBoxItem(tr("Detailed"), QLatin1String("long"))
@@ -114,28 +114,23 @@ public:
<< ComboBoxItem(tr("One Line"), QLatin1String("line")) << ComboBoxItem(tr("One Line"), QLatin1String("line"))
<< ComboBoxItem(tr("GNU Change Log"), QLatin1String("gnu-changelog")); << ComboBoxItem(tr("GNU Change Log"), QLatin1String("gnu-changelog"));
mapSetting(addComboBox(QStringList(QLatin1String("--log-format=%1")), logChoices), mapSetting(addComboBox(QStringList(QLatin1String("--log-format=%1")), logChoices),
settings->stringPointer(BazaarSettings::logFormatKey)); settings.stringPointer(BazaarSettings::logFormatKey));
} }
}; };
BazaarClient::BazaarClient(BazaarSettings *settings) : BazaarClient::BazaarClient() :
VcsBaseClient(settings) VcsBaseClient(new BazaarSettings)
{ {
setDiffParameterWidgetCreator([=] { return new BazaarDiffParameterWidget(settings); }); setDiffParameterWidgetCreator([this] { return new BazaarDiffParameterWidget(settings()); });
setLogParameterWidgetCreator([=] { return new BazaarLogParameterWidget(settings); }); setLogParameterWidgetCreator([this] { return new BazaarLogParameterWidget(settings()); });
}
BazaarSettings *BazaarClient::settings() const
{
return dynamic_cast<BazaarSettings *>(VcsBaseClient::settings());
} }
bool BazaarClient::synchronousSetUserId() bool BazaarClient::synchronousSetUserId()
{ {
QStringList args; QStringList args;
args << QLatin1String("whoami") args << QLatin1String("whoami")
<< (settings()->stringValue(BazaarSettings::userNameKey) + QLatin1String(" <") << (settings().stringValue(BazaarSettings::userNameKey) + QLatin1String(" <")
+ settings()->stringValue(BazaarSettings::userEmailKey) + QLatin1Char('>')); + settings().stringValue(BazaarSettings::userEmailKey) + QLatin1Char('>'));
QByteArray stdOut; QByteArray stdOut;
return vcsFullySynchronousExec(QDir::currentPath(), args, &stdOut); return vcsFullySynchronousExec(QDir::currentPath(), args, &stdOut);
} }

View File

@@ -44,9 +44,7 @@ class BazaarClient : public VcsBase::VcsBaseClient
Q_OBJECT Q_OBJECT
public: public:
BazaarClient(BazaarSettings *settings); BazaarClient();
BazaarSettings *settings() const;
bool synchronousSetUserId(); bool synchronousSetUserId();
BranchInfo synchronousBranchQuery(const QString &repositoryRoot) const; BranchInfo synchronousBranchQuery(const QString &repositoryRoot) const;

View File

@@ -71,7 +71,7 @@ bool BazaarControl::managesFile(const QString &workingDirectory, const QString &
bool BazaarControl::isConfigured() const bool BazaarControl::isConfigured() const
{ {
const Utils::FileName binary = m_bazaarClient->settings()->binaryPath(); const Utils::FileName binary = m_bazaarClient->vcsBinary();
if (binary.isEmpty()) if (binary.isEmpty())
return false; return false;
QFileInfo fi = binary.toFileInfo(); QFileInfo fi = binary.toFileInfo();
@@ -148,8 +148,3 @@ void BazaarControl::changed(const QVariant &v)
break; break;
} }
} }
void BazaarControl::emitConfigurationChanged()
{
emit configurationChanged();
}

View File

@@ -69,7 +69,6 @@ public slots:
// files changed signals according to the variant's type: // files changed signals according to the variant's type:
// String -> repository, StringList -> files // String -> repository, StringList -> files
void changed(const QVariant &); void changed(const QVariant &);
void emitConfigurationChanged();
private: private:
BazaarClient *m_bazaarClient; BazaarClient *m_bazaarClient;

View File

@@ -165,12 +165,14 @@ bool BazaarPlugin::initialize(const QStringList &arguments, QString *errorMessag
Context context(Constants::BAZAAR_CONTEXT); Context context(Constants::BAZAAR_CONTEXT);
m_client = new BazaarClient(&m_bazaarSettings); m_client = new BazaarClient;
auto vcsCtrl = new BazaarControl(m_client); auto vcsCtrl = new BazaarControl(m_client);
initializeVcs(vcsCtrl, context); initializeVcs(vcsCtrl, context);
addAutoReleasedObject(new OptionsPage); auto options = new OptionsPage;
m_bazaarSettings.readSettings(ICore::settings()); connect(options, &OptionsPage::settingsChanged,
vcsCtrl, &Core::IVersionControl::configurationChanged);
addAutoReleasedObject(options);
connect(m_client, &VcsBaseClient::changed, vcsCtrl, &BazaarControl::changed); connect(m_client, &VcsBaseClient::changed, vcsCtrl, &BazaarControl::changed);
@@ -214,22 +216,6 @@ BazaarClient *BazaarPlugin::client() const
return m_client; return m_client;
} }
const BazaarSettings &BazaarPlugin::settings() const
{
return m_bazaarSettings;
}
void BazaarPlugin::setSettings(const BazaarSettings &settings)
{
if (settings != m_bazaarSettings) {
const bool userIdChanged = !m_bazaarSettings.sameUserId(settings);
m_bazaarSettings = settings;
if (userIdChanged)
client()->synchronousSetUserId();
static_cast<BazaarControl *>(versionControl())->emitConfigurationChanged();
}
}
void BazaarPlugin::createMenu(const Context &context) void BazaarPlugin::createMenu(const Context &context)
{ {
// Create menu item for Bazaar // Create menu item for Bazaar
@@ -402,7 +388,7 @@ void BazaarPlugin::logRepository()
const VcsBasePluginState state = currentState(); const VcsBasePluginState state = currentState();
QTC_ASSERT(state.hasTopLevel(), return); QTC_ASSERT(state.hasTopLevel(), return);
QStringList extraOptions; QStringList extraOptions;
extraOptions += QLatin1String("--limit=") + QString::number(settings().intValue(BazaarSettings::logCountKey)); extraOptions += QLatin1String("--limit=") + QString::number(m_client->settings().intValue(BazaarSettings::logCountKey));
m_client->log(state.topLevel(), QStringList(), extraOptions); m_client->log(state.topLevel(), QStringList(), extraOptions);
} }
@@ -606,9 +592,10 @@ void BazaarPlugin::showCommitWidget(const QList<VcsBaseClient::StatusItem> &stat
commitEditor->document()->setPreferredDisplayName(msg); commitEditor->document()->setPreferredDisplayName(msg);
const BranchInfo branch = m_client->synchronousBranchQuery(m_submitRepository); const BranchInfo branch = m_client->synchronousBranchQuery(m_submitRepository);
const VcsBaseClientSettings &s = m_client->settings();
commitEditor->setFields(m_submitRepository, branch, commitEditor->setFields(m_submitRepository, branch,
m_bazaarSettings.stringValue(BazaarSettings::userNameKey), s.stringValue(BazaarSettings::userNameKey),
m_bazaarSettings.stringValue(BazaarSettings::userEmailKey), status); s.stringValue(BazaarSettings::userEmailKey), status);
} }
void BazaarPlugin::diffFromEditorSelected(const QStringList &files) void BazaarPlugin::diffFromEditorSelected(const QStringList &files)

View File

@@ -70,9 +70,6 @@ public:
static BazaarPlugin *instance(); static BazaarPlugin *instance();
BazaarClient *client() const; BazaarClient *client() const;
const BazaarSettings &settings() const;
void setSettings(const BazaarSettings &settings);
private slots: private slots:
// File menu action slots // File menu action slots
void addCurrentFile(); void addCurrentFile();

View File

@@ -79,7 +79,7 @@ VcsCommand *CloneWizard::createCommand(Utils::FileName *checkoutDir)
if (!cwp) if (!cwp)
return 0; return 0;
const BazaarSettings &settings = BazaarPlugin::instance()->settings(); const VcsBaseClientSettings &settings = BazaarPlugin::instance()->client()->settings();
*checkoutDir = Utils::FileName::fromString(cwp->path() + QLatin1Char('/') + cwp->directory()); *checkoutDir = Utils::FileName::fromString(cwp->path() + QLatin1Char('/') + cwp->directory());
const CloneOptionsPanel *panel = cwp->cloneOptionsPanel(); const CloneOptionsPanel *panel = cwp->cloneOptionsPanel();

View File

@@ -28,6 +28,7 @@
** **
****************************************************************************/ ****************************************************************************/
#include "optionspage.h" #include "optionspage.h"
#include "bazaarclient.h"
#include "bazaarsettings.h" #include "bazaarsettings.h"
#include "bazaarplugin.h" #include "bazaarplugin.h"
@@ -38,6 +39,7 @@
using namespace Bazaar::Internal; using namespace Bazaar::Internal;
using namespace Bazaar; using namespace Bazaar;
using namespace VcsBase;
OptionsPageWidget::OptionsPageWidget(QWidget *parent) OptionsPageWidget::OptionsPageWidget(QWidget *parent)
: QWidget(parent) : QWidget(parent)
@@ -48,9 +50,9 @@ OptionsPageWidget::OptionsPageWidget(QWidget *parent)
m_ui.commandChooser->setHistoryCompleter(QLatin1String("Bazaar.Command.History")); m_ui.commandChooser->setHistoryCompleter(QLatin1String("Bazaar.Command.History"));
} }
BazaarSettings OptionsPageWidget::settings() const VcsBaseClientSettings OptionsPageWidget::settings() const
{ {
BazaarSettings s = BazaarPlugin::instance()->settings(); VcsBaseClientSettings s = BazaarPlugin::instance()->client()->settings();
s.setValue(BazaarSettings::binaryPathKey, m_ui.commandChooser->rawPath()); s.setValue(BazaarSettings::binaryPathKey, m_ui.commandChooser->rawPath());
s.setValue(BazaarSettings::userNameKey, m_ui.defaultUsernameLineEdit->text().trimmed()); s.setValue(BazaarSettings::userNameKey, m_ui.defaultUsernameLineEdit->text().trimmed());
s.setValue(BazaarSettings::userEmailKey, m_ui.defaultEmailLineEdit->text().trimmed()); s.setValue(BazaarSettings::userEmailKey, m_ui.defaultEmailLineEdit->text().trimmed());
@@ -59,7 +61,7 @@ BazaarSettings OptionsPageWidget::settings() const
return s; return s;
} }
void OptionsPageWidget::setSettings(const BazaarSettings &s) void OptionsPageWidget::setSettings(const VcsBaseClientSettings &s)
{ {
m_ui.commandChooser->setPath(s.stringValue(BazaarSettings::binaryPathKey)); m_ui.commandChooser->setPath(s.stringValue(BazaarSettings::binaryPathKey));
m_ui.defaultUsernameLineEdit->setText(s.stringValue(BazaarSettings::userNameKey)); m_ui.defaultUsernameLineEdit->setText(s.stringValue(BazaarSettings::userNameKey));
@@ -78,7 +80,7 @@ QWidget *OptionsPage::widget()
{ {
if (!m_optionsPageWidget) if (!m_optionsPageWidget)
m_optionsPageWidget = new OptionsPageWidget; m_optionsPageWidget = new OptionsPageWidget;
m_optionsPageWidget->setSettings(BazaarPlugin::instance()->settings()); m_optionsPageWidget->setSettings(BazaarPlugin::instance()->client()->settings());
return m_optionsPageWidget; return m_optionsPageWidget;
} }
@@ -87,11 +89,10 @@ void OptionsPage::apply()
if (!m_optionsPageWidget) if (!m_optionsPageWidget)
return; return;
BazaarPlugin *plugin = BazaarPlugin::instance(); BazaarPlugin *plugin = BazaarPlugin::instance();
const BazaarSettings newSettings = m_optionsPageWidget->settings(); const VcsBaseClientSettings newSettings = m_optionsPageWidget->settings();
if (newSettings != plugin->settings()) { VcsBaseClientSettings &s = plugin->client()->settings();
//assume success and emit signal that settings are changed; if (newSettings != s) {
plugin->setSettings(newSettings); s = newSettings;
newSettings.writeSettings(Core::ICore::settings());
emit settingsChanged(); emit settingsChanged();
} }
} }

View File

@@ -37,11 +37,13 @@
#include <QWidget> #include <QWidget>
#include <QPointer> #include <QPointer>
namespace VcsBase {
class VcsBaseClientSettings;
} // namespace VcsBase
namespace Bazaar { namespace Bazaar {
namespace Internal { namespace Internal {
class BazaarSettings;
class OptionsPageWidget : public QWidget class OptionsPageWidget : public QWidget
{ {
Q_OBJECT Q_OBJECT
@@ -49,8 +51,8 @@ class OptionsPageWidget : public QWidget
public: public:
explicit OptionsPageWidget(QWidget *parent = 0); explicit OptionsPageWidget(QWidget *parent = 0);
BazaarSettings settings() const; VcsBase::VcsBaseClientSettings settings() const;
void setSettings(const BazaarSettings &s); void setSettings(const VcsBase::VcsBaseClientSettings &s);
private: private:
Ui::OptionsPage m_ui; Ui::OptionsPage m_ui;

View File

@@ -30,6 +30,7 @@
#include "checkoutwizard.h" #include "checkoutwizard.h"
#include "checkoutwizardpage.h" #include "checkoutwizardpage.h"
#include "cvsclient.h"
#include "cvsplugin.h" #include "cvsplugin.h"
#include <coreplugin/iversioncontrol.h> #include <coreplugin/iversioncontrol.h>
@@ -72,7 +73,7 @@ VcsCommand *CheckoutWizard::createCommand(Utils::FileName *checkoutDir)
} }
QTC_ASSERT(cwp, return 0); QTC_ASSERT(cwp, return 0);
const CvsSettings settings = CvsPlugin::instance()->settings(); const CvsSettings settings = CvsPlugin::instance()->client()->settings();
const Utils::FileName binary = settings.binaryPath(); const Utils::FileName binary = settings.binaryPath();
QStringList args; QStringList args;

View File

@@ -70,40 +70,41 @@ class CvsDiffParameterWidget : public VcsBaseEditorParameterWidget
{ {
Q_OBJECT Q_OBJECT
public: public:
explicit CvsDiffParameterWidget(CvsSettings *settings, QWidget *parent = 0); explicit CvsDiffParameterWidget(VcsBaseClientSettings &settings, QWidget *parent = 0);
QStringList arguments() const; QStringList arguments() const;
private: private:
const CvsSettings *m_settings; VcsBaseClientSettings &m_settings;
}; };
CvsDiffParameterWidget::CvsDiffParameterWidget(CvsSettings *settings, QWidget *parent) CvsDiffParameterWidget::CvsDiffParameterWidget(VcsBaseClientSettings &settings,
: VcsBaseEditorParameterWidget(parent), QWidget *parent) :
m_settings(settings) VcsBaseEditorParameterWidget(parent),
m_settings(settings)
{ {
mapSetting(addToggleButton(QLatin1String("-w"), tr("Ignore Whitespace")), mapSetting(addToggleButton(QLatin1String("-w"), tr("Ignore Whitespace")),
settings->boolPointer(CvsSettings::diffIgnoreWhiteSpaceKey)); settings.boolPointer(CvsSettings::diffIgnoreWhiteSpaceKey));
mapSetting(addToggleButton(QLatin1String("-B"), tr("Ignore Blank Lines")), mapSetting(addToggleButton(QLatin1String("-B"), tr("Ignore Blank Lines")),
settings->boolPointer(CvsSettings::diffIgnoreBlankLinesKey)); settings.boolPointer(CvsSettings::diffIgnoreBlankLinesKey));
} }
QStringList CvsDiffParameterWidget::arguments() const QStringList CvsDiffParameterWidget::arguments() const
{ {
QStringList args; QStringList args;
args = m_settings->stringValue(CvsSettings::diffOptionsKey).split(QLatin1Char(' '), QString::SkipEmptyParts); args = m_settings.stringValue(CvsSettings::diffOptionsKey).split(QLatin1Char(' '),
QString::SkipEmptyParts);
args += VcsBaseEditorParameterWidget::arguments(); args += VcsBaseEditorParameterWidget::arguments();
return args; return args;
} }
CvsClient::CvsClient(CvsSettings *settings) : CvsClient::CvsClient() : VcsBaseClient(new CvsSettings)
VcsBaseClient(settings)
{ {
setDiffParameterWidgetCreator([=] { return new CvsDiffParameterWidget(settings); }); setDiffParameterWidgetCreator([this] { return new CvsDiffParameterWidget(settings()); });
} }
CvsSettings *CvsClient::settings() const CvsSettings &CvsClient::settings() const
{ {
return dynamic_cast<CvsSettings *>(VcsBaseClient::settings()); return static_cast<CvsSettings &>(VcsBaseClient::settings());
} }
Core::Id CvsClient::vcsEditorKind(VcsCommandTag cmd) const Core::Id CvsClient::vcsEditorKind(VcsCommandTag cmd) const

View File

@@ -44,9 +44,9 @@ class CvsClient : public VcsBase::VcsBaseClient
Q_OBJECT Q_OBJECT
public: public:
CvsClient(CvsSettings *settings); CvsClient();
CvsSettings *settings() const; CvsSettings &settings() const;
void diff(const QString &workingDir, const QStringList &files, void diff(const QString &workingDir, const QStringList &files,
const QStringList &extraOptions = QStringList()); const QStringList &extraOptions = QStringList());
QString findTopLevelForFile(const QFileInfo &file) const; QString findTopLevelForFile(const QFileInfo &file) const;

View File

@@ -29,6 +29,8 @@
****************************************************************************/ ****************************************************************************/
#include "cvscontrol.h" #include "cvscontrol.h"
#include "cvsclient.h"
#include "cvsplugin.h" #include "cvsplugin.h"
#include "cvssettings.h" #include "cvssettings.h"
@@ -58,7 +60,7 @@ Core::Id CvsControl::id() const
bool CvsControl::isConfigured() const bool CvsControl::isConfigured() const
{ {
const Utils::FileName binary = m_plugin->settings().binaryPath(); const Utils::FileName binary = m_plugin->client()->vcsBinary();
if (binary.isEmpty()) if (binary.isEmpty())
return false; return false;
QFileInfo fi = binary.toFileInfo(); QFileInfo fi = binary.toFileInfo();
@@ -149,8 +151,3 @@ void CvsControl::emitFilesChanged(const QStringList &l)
{ {
emit filesChanged(l); emit filesChanged(l);
} }
void CvsControl::emitConfigurationChanged()
{
emit configurationChanged();
}

View File

@@ -65,7 +65,6 @@ public:
void emitRepositoryChanged(const QString &s); void emitRepositoryChanged(const QString &s);
void emitFilesChanged(const QStringList &l); void emitFilesChanged(const QStringList &l);
void emitConfigurationChanged();
private: private:
CvsPlugin *m_plugin; CvsPlugin *m_plugin;

View File

@@ -211,6 +211,12 @@ CvsPlugin::~CvsPlugin()
cleanCommitMessageFile(); cleanCommitMessageFile();
} }
CvsClient *CvsPlugin::client() const
{
QTC_CHECK(m_client);
return m_client;
}
void CvsPlugin::cleanCommitMessageFile() void CvsPlugin::cleanCommitMessageFile()
{ {
if (!m_commitMessageFileName.isEmpty()) { if (!m_commitMessageFileName.isEmpty()) {
@@ -246,9 +252,11 @@ bool CvsPlugin::initialize(const QStringList &arguments, QString *errorMessage)
Utils::MimeDatabase::addMimeTypes(QLatin1String(":/trolltech.cvs/CVS.mimetypes.xml")); Utils::MimeDatabase::addMimeTypes(QLatin1String(":/trolltech.cvs/CVS.mimetypes.xml"));
m_settings.readSettings(ICore::settings()); m_client = new CvsClient;
m_client = new CvsClient(&m_settings);
auto options = new SettingsPage;
connect(options, &SettingsPage::settingsChanged,
versionControl(), &IVersionControl::configurationChanged);
addAutoReleasedObject(new SettingsPage); addAutoReleasedObject(new SettingsPage);
addAutoReleasedObject(new VcsSubmitEditorFactory(&submitParameters, addAutoReleasedObject(new VcsSubmitEditorFactory(&submitParameters,
@@ -503,12 +511,11 @@ bool CvsPlugin::submitEditorAboutToClose()
// Prompt user. Force a prompt unless submit was actually invoked (that // Prompt user. Force a prompt unless submit was actually invoked (that
// is, the editor was closed or shutdown). // is, the editor was closed or shutdown).
CvsSettings newSettings = m_settings;
const VcsBaseSubmitEditor::PromptSubmitResult answer = const VcsBaseSubmitEditor::PromptSubmitResult answer =
editor->promptSubmit(tr("Closing CVS Editor"), editor->promptSubmit(tr("Closing CVS Editor"),
tr("Do you want to commit the change?"), tr("Do you want to commit the change?"),
tr("The commit message check failed. Do you want to commit the change?"), tr("The commit message check failed. Do you want to commit the change?"),
newSettings.boolPointer(CvsSettings::promptOnSubmitKey), client()->settings().boolPointer(CvsSettings::promptOnSubmitKey),
!m_submitActionTriggered); !m_submitActionTriggered);
m_submitActionTriggered = false; m_submitActionTriggered = false;
switch (answer) { switch (answer) {
@@ -520,7 +527,6 @@ bool CvsPlugin::submitEditorAboutToClose()
default: default:
break; break;
} }
setSettings(newSettings); // in case someone turned prompting off
const QStringList fileList = editor->checkedFiles(); const QStringList fileList = editor->checkedFiles();
bool closeEditor = true; bool closeEditor = true;
if (!fileList.empty()) { if (!fileList.empty()) {
@@ -617,7 +623,7 @@ void CvsPlugin::revertAll()
QStringList args; QStringList args;
args << QLatin1String("update") << QLatin1String("-C") << state.topLevel(); args << QLatin1String("update") << QLatin1String("-C") << state.topLevel();
const CvsResponse revertResponse = const CvsResponse revertResponse =
runCvs(state.topLevel(), args, m_settings.timeOutMs(), runCvs(state.topLevel(), args, client()->vcsTimeout(),
SshPasswordPrompt|ShowStdOutInLogWindow); SshPasswordPrompt|ShowStdOutInLogWindow);
if (revertResponse.result == CvsResponse::Ok) if (revertResponse.result == CvsResponse::Ok)
cvsVersionControl()->emitRepositoryChanged(state.topLevel()); cvsVersionControl()->emitRepositoryChanged(state.topLevel());
@@ -633,7 +639,7 @@ void CvsPlugin::revertCurrentFile()
QStringList args; QStringList args;
args << QLatin1String("diff") << state.relativeCurrentFile(); args << QLatin1String("diff") << state.relativeCurrentFile();
const CvsResponse diffResponse = const CvsResponse diffResponse =
runCvs(state.currentFileTopLevel(), args, m_settings.timeOutMs(), 0); runCvs(state.currentFileTopLevel(), args, client()->vcsTimeout(), 0);
switch (diffResponse.result) { switch (diffResponse.result) {
case CvsResponse::Ok: case CvsResponse::Ok:
return; // Not modified, diff exit code 0 return; // Not modified, diff exit code 0
@@ -655,7 +661,7 @@ void CvsPlugin::revertCurrentFile()
args.clear(); args.clear();
args << QLatin1String("update") << QLatin1String("-C") << state.relativeCurrentFile(); args << QLatin1String("update") << QLatin1String("-C") << state.relativeCurrentFile();
const CvsResponse revertResponse = const CvsResponse revertResponse =
runCvs(state.currentFileTopLevel(), args, m_settings.timeOutMs(), runCvs(state.currentFileTopLevel(), args, client()->vcsTimeout(),
SshPasswordPrompt|ShowStdOutInLogWindow); SshPasswordPrompt|ShowStdOutInLogWindow);
if (revertResponse.result == CvsResponse::Ok) if (revertResponse.result == CvsResponse::Ok)
cvsVersionControl()->emitFilesChanged(QStringList(state.currentFile())); cvsVersionControl()->emitFilesChanged(QStringList(state.currentFile()));
@@ -717,7 +723,7 @@ void CvsPlugin::startCommit(const QString &workingDir, const QString &file)
// where we are, so, have stdout/stderr channels merged. // where we are, so, have stdout/stderr channels merged.
QStringList args = QStringList(QLatin1String("status")); QStringList args = QStringList(QLatin1String("status"));
const CvsResponse response = const CvsResponse response =
runCvs(workingDir, args, m_settings.timeOutMs(), MergeOutputChannels); runCvs(workingDir, args, client()->vcsTimeout(), MergeOutputChannels);
if (response.result != CvsResponse::Ok) if (response.result != CvsResponse::Ok)
return; return;
// Get list of added/modified/deleted files and purge out undesired ones // Get list of added/modified/deleted files and purge out undesired ones
@@ -765,7 +771,7 @@ bool CvsPlugin::commit(const QString &messageFile,
args << QLatin1String("-F") << messageFile; args << QLatin1String("-F") << messageFile;
args.append(fileList); args.append(fileList);
const CvsResponse response = const CvsResponse response =
runCvs(m_commitRepository, args, 10 * m_settings.timeOutMs(), runCvs(m_commitRepository, args, 10 * client()->vcsTimeout(),
SshPasswordPrompt|ShowStdOutInLogWindow); SshPasswordPrompt|ShowStdOutInLogWindow);
return response.result == CvsResponse::Ok ; return response.result == CvsResponse::Ok ;
} }
@@ -803,7 +809,7 @@ void CvsPlugin::filelog(const QString &workingDir,
args << QLatin1String("log"); args << QLatin1String("log");
args.append(file); args.append(file);
const CvsResponse response = const CvsResponse response =
runCvs(workingDir, args, m_settings.timeOutMs(), runCvs(workingDir, args, client()->vcsTimeout(),
SshPasswordPrompt, codec); SshPasswordPrompt, codec);
if (response.result != CvsResponse::Ok) if (response.result != CvsResponse::Ok)
return; return;
@@ -844,7 +850,7 @@ bool CvsPlugin::update(const QString &topLevel, const QString &file)
if (!file.isEmpty()) if (!file.isEmpty())
args.append(file); args.append(file);
const CvsResponse response = const CvsResponse response =
runCvs(topLevel, args, 10 * m_settings.timeOutMs(), runCvs(topLevel, args, 10 * client()->vcsTimeout(),
SshPasswordPrompt|ShowStdOutInLogWindow); SshPasswordPrompt|ShowStdOutInLogWindow);
const bool ok = response.result == CvsResponse::Ok; const bool ok = response.result == CvsResponse::Ok;
if (ok) if (ok)
@@ -891,7 +897,7 @@ bool CvsPlugin::edit(const QString &topLevel, const QStringList &files)
QStringList args(QLatin1String("edit")); QStringList args(QLatin1String("edit"));
args.append(files); args.append(files);
const CvsResponse response = const CvsResponse response =
runCvs(topLevel, args, m_settings.timeOutMs(), runCvs(topLevel, args, client()->vcsTimeout(),
ShowStdOutInLogWindow|SshPasswordPrompt); ShowStdOutInLogWindow|SshPasswordPrompt);
return response.result == CvsResponse::Ok; return response.result == CvsResponse::Ok;
} }
@@ -903,7 +909,7 @@ bool CvsPlugin::diffCheckModified(const QString &topLevel, const QStringList &fi
QStringList args(QLatin1String("-q")); QStringList args(QLatin1String("-q"));
args << QLatin1String("diff"); args << QLatin1String("diff");
args.append(files); args.append(files);
const CvsResponse response = runCvs(topLevel, args, m_settings.timeOutMs(), 0); const CvsResponse response = runCvs(topLevel, args, client()->vcsTimeout(), 0);
if (response.result == CvsResponse::OtherError) if (response.result == CvsResponse::OtherError)
return false; return false;
*modified = response.result == CvsResponse::NonNullExitCode; *modified = response.result == CvsResponse::NonNullExitCode;
@@ -931,7 +937,7 @@ bool CvsPlugin::unedit(const QString &topLevel, const QStringList &files)
args.append(QLatin1String("-y")); args.append(QLatin1String("-y"));
args.append(files); args.append(files);
const CvsResponse response = const CvsResponse response =
runCvs(topLevel, args, m_settings.timeOutMs(), runCvs(topLevel, args, client()->vcsTimeout(),
ShowStdOutInLogWindow|SshPasswordPrompt); ShowStdOutInLogWindow|SshPasswordPrompt);
return response.result == CvsResponse::Ok; return response.result == CvsResponse::Ok;
} }
@@ -950,7 +956,7 @@ void CvsPlugin::annotate(const QString &workingDir, const QString &file,
args << QLatin1String("-r") << revision; args << QLatin1String("-r") << revision;
args << file; args << file;
const CvsResponse response = const CvsResponse response =
runCvs(workingDir, args, m_settings.timeOutMs(), runCvs(workingDir, args, client()->vcsTimeout(),
SshPasswordPrompt, codec); SshPasswordPrompt, codec);
if (response.result != CvsResponse::Ok) if (response.result != CvsResponse::Ok)
return; return;
@@ -979,7 +985,7 @@ bool CvsPlugin::status(const QString &topLevel, const QString &file, const QStri
if (!file.isEmpty()) if (!file.isEmpty())
args.append(file); args.append(file);
const CvsResponse response = const CvsResponse response =
runCvs(topLevel, args, m_settings.timeOutMs(), 0); runCvs(topLevel, args, client()->vcsTimeout(), 0);
const bool ok = response.result == CvsResponse::Ok; const bool ok = response.result == CvsResponse::Ok;
if (ok) if (ok)
showOutputInEditor(title, response.stdOut, OtherContent, topLevel, 0); showOutputInEditor(title, response.stdOut, OtherContent, topLevel, 0);
@@ -1062,7 +1068,7 @@ bool CvsPlugin::describe(const QString &toplevel, const QString &file, const
QStringList args; QStringList args;
args << QLatin1String("log") << (QLatin1String("-r") + changeNr) << file; args << QLatin1String("log") << (QLatin1String("-r") + changeNr) << file;
const CvsResponse logResponse = const CvsResponse logResponse =
runCvs(toplevel, args, m_settings.timeOutMs(), SshPasswordPrompt); runCvs(toplevel, args, client()->vcsTimeout(), SshPasswordPrompt);
if (logResponse.result != CvsResponse::Ok) { if (logResponse.result != CvsResponse::Ok) {
*errorMessage = logResponse.message; *errorMessage = logResponse.message;
return false; return false;
@@ -1072,7 +1078,7 @@ bool CvsPlugin::describe(const QString &toplevel, const QString &file, const
*errorMessage = msgLogParsingFailed(); *errorMessage = msgLogParsingFailed();
return false; return false;
} }
if (m_settings.boolValue(CvsSettings::describeByCommitIdKey)) { if (client()->settings().boolValue(CvsSettings::describeByCommitIdKey)) {
// Run a log command over the repo, filtering by the commit date // Run a log command over the repo, filtering by the commit date
// and commit id, collecting all files touched by the commit. // and commit id, collecting all files touched by the commit.
const QString commitId = fileLog.front().revisions.front().commitId; const QString commitId = fileLog.front().revisions.front().commitId;
@@ -1084,7 +1090,7 @@ bool CvsPlugin::describe(const QString &toplevel, const QString &file, const
args << QLatin1String("log") << QLatin1String("-d") << (dateS + QLatin1Char('<') + nextDayS); args << QLatin1String("log") << QLatin1String("-d") << (dateS + QLatin1Char('<') + nextDayS);
const CvsResponse repoLogResponse = const CvsResponse repoLogResponse =
runCvs(toplevel, args, 10 * m_settings.timeOutMs(), SshPasswordPrompt); runCvs(toplevel, args, 10 * client()->vcsTimeout(), SshPasswordPrompt);
if (repoLogResponse.result != CvsResponse::Ok) { if (repoLogResponse.result != CvsResponse::Ok) {
*errorMessage = repoLogResponse.message; *errorMessage = repoLogResponse.message;
return false; return false;
@@ -1121,7 +1127,7 @@ bool CvsPlugin::describe(const QString &repositoryPath,
QStringList args(QLatin1String("log")); QStringList args(QLatin1String("log"));
args << (QLatin1String("-r") + it->revisions.front().revision) << it->file; args << (QLatin1String("-r") + it->revisions.front().revision) << it->file;
const CvsResponse logResponse = const CvsResponse logResponse =
runCvs(repositoryPath, args, m_settings.timeOutMs(), SshPasswordPrompt); runCvs(repositoryPath, args, client()->vcsTimeout(), SshPasswordPrompt);
if (logResponse.result != CvsResponse::Ok) { if (logResponse.result != CvsResponse::Ok) {
*errorMessage = logResponse.message; *errorMessage = logResponse.message;
return false; return false;
@@ -1134,11 +1140,11 @@ bool CvsPlugin::describe(const QString &repositoryPath,
if (!isFirstRevision(revision)) { if (!isFirstRevision(revision)) {
const QString previousRev = previousRevision(revision); const QString previousRev = previousRevision(revision);
QStringList args(QLatin1String("diff")); QStringList args(QLatin1String("diff"));
args << m_settings.stringValue(CvsSettings::diffOptionsKey) << QLatin1String("-r") << previousRev args << client()->settings().stringValue(CvsSettings::diffOptionsKey)
<< QLatin1String("-r") << it->revisions.front().revision << QLatin1String("-r") << previousRev << QLatin1String("-r")
<< it->file; << it->revisions.front().revision << it->file;
const CvsResponse diffResponse = const CvsResponse diffResponse =
runCvs(repositoryPath, args, m_settings.timeOutMs(), 0, codec); runCvs(repositoryPath, args, client()->vcsTimeout(), 0, codec);
switch (diffResponse.result) { switch (diffResponse.result) {
case CvsResponse::Ok: case CvsResponse::Ok:
case CvsResponse::NonNullExitCode: // Diff exit code != 0 case CvsResponse::NonNullExitCode: // Diff exit code != 0
@@ -1186,7 +1192,7 @@ CvsResponse CvsPlugin::runCvs(const QString &workingDirectory,
unsigned flags, unsigned flags,
QTextCodec *outputCodec) const QTextCodec *outputCodec) const
{ {
const FileName executable = m_settings.binaryPath(); const FileName executable = client()->vcsBinary();
CvsResponse response; CvsResponse response;
if (executable.isEmpty()) { if (executable.isEmpty()) {
response.result = CvsResponse::OtherError; response.result = CvsResponse::OtherError;
@@ -1195,7 +1201,7 @@ CvsResponse CvsPlugin::runCvs(const QString &workingDirectory,
} }
// Run, connect stderr to the output window // Run, connect stderr to the output window
const SynchronousProcessResponse sp_resp = const SynchronousProcessResponse sp_resp =
runVcs(workingDirectory, executable, m_settings.addOptions(arguments), runVcs(workingDirectory, executable, client()->settings().addOptions(arguments),
timeOut, flags, outputCodec); timeOut, flags, outputCodec);
response.result = CvsResponse::OtherError; response.result = CvsResponse::OtherError;
@@ -1247,20 +1253,6 @@ IEditor *CvsPlugin::showOutputInEditor(const QString& title, const QString &outp
return editor; return editor;
} }
CvsSettings CvsPlugin::settings() const
{
return m_settings;
}
void CvsPlugin::setSettings(const CvsSettings &s)
{
if (s != m_settings) {
m_settings = s;
m_settings.writeSettings(ICore::settings());
cvsVersionControl()->emitConfigurationChanged();
}
}
CvsPlugin *CvsPlugin::instance() CvsPlugin *CvsPlugin::instance()
{ {
QTC_ASSERT(m_cvsPluginInstance, return m_cvsPluginInstance); QTC_ASSERT(m_cvsPluginInstance, return m_cvsPluginInstance);
@@ -1272,7 +1264,7 @@ bool CvsPlugin::vcsAdd(const QString &workingDir, const QString &rawFileName)
QStringList args; QStringList args;
args << QLatin1String("add") << rawFileName; args << QLatin1String("add") << rawFileName;
const CvsResponse response = const CvsResponse response =
runCvs(workingDir, args, m_settings.timeOutMs(), runCvs(workingDir, args, client()->vcsTimeout(),
SshPasswordPrompt|ShowStdOutInLogWindow); SshPasswordPrompt|ShowStdOutInLogWindow);
return response.result == CvsResponse::Ok; return response.result == CvsResponse::Ok;
} }
@@ -1282,7 +1274,7 @@ bool CvsPlugin::vcsDelete(const QString &workingDir, const QString &rawFileName)
QStringList args; QStringList args;
args << QLatin1String("remove") << QLatin1String("-f") << rawFileName; args << QLatin1String("remove") << QLatin1String("-f") << rawFileName;
const CvsResponse response = const CvsResponse response =
runCvs(workingDir, args, m_settings.timeOutMs(), runCvs(workingDir, args, client()->vcsTimeout(),
SshPasswordPrompt|ShowStdOutInLogWindow); SshPasswordPrompt|ShowStdOutInLogWindow);
return response.result == CvsResponse::Ok; return response.result == CvsResponse::Ok;
} }
@@ -1328,7 +1320,7 @@ bool CvsPlugin::managesFile(const QString &workingDirectory, const QString &file
QStringList args; QStringList args;
args << QLatin1String("status") << fileName; args << QLatin1String("status") << fileName;
const CvsResponse response = const CvsResponse response =
runCvs(workingDirectory, args, m_settings.timeOutMs(), SshPasswordPrompt); runCvs(workingDirectory, args, client()->vcsTimeout(), SshPasswordPrompt);
if (response.result != CvsResponse::Ok) if (response.result != CvsResponse::Ok)
return false; return false;
return !response.stdOut.contains(QLatin1String("Status: Unknown")); return !response.stdOut.contains(QLatin1String("Status: Unknown"));

View File

@@ -78,13 +78,12 @@ public:
CvsPlugin(); CvsPlugin();
~CvsPlugin(); ~CvsPlugin();
CvsClient *client() const;
bool initialize(const QStringList &arguments, QString *errorMessage); bool initialize(const QStringList &arguments, QString *errorMessage);
CvsSubmitEditor *openCVSSubmitEditor(const QString &fileName); CvsSubmitEditor *openCVSSubmitEditor(const QString &fileName);
CvsSettings settings() const;
void setSettings(const CvsSettings &s);
// IVersionControl // IVersionControl
bool vcsAdd(const QString &workingDir, const QString &fileName); bool vcsAdd(const QString &workingDir, const QString &fileName);
bool vcsDelete(const QString &workingDir, const QString &fileName); bool vcsDelete(const QString &workingDir, const QString &fileName);

View File

@@ -29,6 +29,8 @@
****************************************************************************/ ****************************************************************************/
#include "settingspage.h" #include "settingspage.h"
#include "cvsclient.h"
#include "cvssettings.h" #include "cvssettings.h"
#include "cvsplugin.h" #include "cvsplugin.h"
@@ -43,6 +45,7 @@
using namespace Cvs::Internal; using namespace Cvs::Internal;
using namespace Utils; using namespace Utils;
using namespace VcsBase;
SettingsPageWidget::SettingsPageWidget(QWidget *parent) : SettingsPageWidget::SettingsPageWidget(QWidget *parent) :
QWidget(parent) QWidget(parent)
@@ -53,7 +56,7 @@ SettingsPageWidget::SettingsPageWidget(QWidget *parent) :
m_ui.commandPathChooser->setPromptDialogTitle(tr("CVS Command")); m_ui.commandPathChooser->setPromptDialogTitle(tr("CVS Command"));
} }
CvsSettings SettingsPageWidget::settings() const VcsBaseClientSettings SettingsPageWidget::settings() const
{ {
CvsSettings rc; CvsSettings rc;
rc.setValue(CvsSettings::binaryPathKey, m_ui.commandPathChooser->rawPath()); rc.setValue(CvsSettings::binaryPathKey, m_ui.commandPathChooser->rawPath());
@@ -65,7 +68,7 @@ CvsSettings SettingsPageWidget::settings() const
return rc; return rc;
} }
void SettingsPageWidget::setSettings(const CvsSettings &s) void SettingsPageWidget::setSettings(const VcsBaseClientSettings &s)
{ {
m_ui.commandPathChooser->setFileName(s.binaryPath()); m_ui.commandPathChooser->setFileName(s.binaryPath());
m_ui.rootLineEdit->setText(s.stringValue(CvsSettings::cvsRootKey)); m_ui.rootLineEdit->setText(s.stringValue(CvsSettings::cvsRootKey));
@@ -85,14 +88,20 @@ QWidget *SettingsPage::widget()
{ {
if (!m_widget) { if (!m_widget) {
m_widget = new SettingsPageWidget; m_widget = new SettingsPageWidget;
m_widget->setSettings(CvsPlugin::instance()->settings()); m_widget->setSettings(CvsPlugin::instance()->client()->settings());
} }
return m_widget; return m_widget;
} }
void SettingsPage::apply() void SettingsPage::apply()
{ {
CvsPlugin::instance()->setSettings(m_widget->settings()); VcsBaseClientSettings &s = CvsPlugin::instance()->client()->settings();
const VcsBaseClientSettings newSettings = m_widget->settings();
if (s != newSettings) {
s = newSettings;
s.writeSettings(Core::ICore::settings());
emit settingsChanged();
}
} }
void SettingsPage::finish() void SettingsPage::finish()

View File

@@ -43,11 +43,13 @@ QT_BEGIN_NAMESPACE
class QSettings; class QSettings;
QT_END_NAMESPACE QT_END_NAMESPACE
namespace VcsBase {
class VcsBaseClientSettings;
} // namespace VcsBase
namespace Cvs { namespace Cvs {
namespace Internal { namespace Internal {
class CvsSettings;
class SettingsPageWidget : public QWidget class SettingsPageWidget : public QWidget
{ {
Q_OBJECT Q_OBJECT
@@ -55,8 +57,8 @@ class SettingsPageWidget : public QWidget
public: public:
explicit SettingsPageWidget(QWidget *parent = 0); explicit SettingsPageWidget(QWidget *parent = 0);
CvsSettings settings() const; VcsBase::VcsBaseClientSettings settings() const;
void setSettings(const CvsSettings &); void setSettings(const VcsBase::VcsBaseClientSettings &);
private: private:
Ui::SettingsPage m_ui; Ui::SettingsPage m_ui;
@@ -74,6 +76,9 @@ public:
void apply(); void apply();
void finish(); void finish();
signals:
void settingsChanged();
private: private:
QPointer<SettingsPageWidget> m_widget; QPointer<SettingsPageWidget> m_widget;
}; };

View File

@@ -646,7 +646,7 @@ void BranchModel::parseOutputLine(const QString &line)
const QString fullName = lineParts.at(1); const QString fullName = lineParts.at(1);
bool current = (sha == m_currentSha); bool current = (sha == m_currentSha);
bool showTags = m_client->settings()->boolValue(GitSettings::showTagsKey); bool showTags = m_client->settings().boolValue(GitSettings::showTagsKey);
// insert node into tree: // insert node into tree:
QStringList nameParts = fullName.split(QLatin1Char('/')); QStringList nameParts = fullName.split(QLatin1Char('/'));

View File

@@ -393,21 +393,19 @@ class BaseGitDiffArgumentsWidget : public VcsBaseEditorParameterWidget
Q_OBJECT Q_OBJECT
public: public:
BaseGitDiffArgumentsWidget(GitSettings *settings, QWidget *parent = 0) : BaseGitDiffArgumentsWidget(VcsBaseClientSettings &settings, QWidget *parent = 0) :
VcsBaseEditorParameterWidget(parent) VcsBaseEditorParameterWidget(parent)
{ {
QTC_ASSERT(settings, return);
m_patienceButton = addToggleButton( m_patienceButton = addToggleButton(
QLatin1String("--patience"), QLatin1String("--patience"),
tr("Patience"), tr("Patience"),
tr("Use the patience algorithm for calculating the differences.")); tr("Use the patience algorithm for calculating the differences."));
mapSetting(m_patienceButton, settings->boolPointer(GitSettings::diffPatienceKey)); mapSetting(m_patienceButton, settings.boolPointer(GitSettings::diffPatienceKey));
m_ignoreWSButton = addToggleButton( m_ignoreWSButton = addToggleButton(
QLatin1String("--ignore-space-change"), tr("Ignore Whitespace"), QLatin1String("--ignore-space-change"), tr("Ignore Whitespace"),
tr("Ignore whitespace only changes.")); tr("Ignore whitespace only changes."));
mapSetting(m_ignoreWSButton, mapSetting(m_ignoreWSButton,
settings->boolPointer(GitSettings::ignoreSpaceChangesInDiffKey)); settings.boolPointer(GitSettings::ignoreSpaceChangesInDiffKey));
} }
protected: protected:
@@ -420,15 +418,15 @@ class GitBlameArgumentsWidget : public VcsBaseEditorParameterWidget
Q_OBJECT Q_OBJECT
public: public:
GitBlameArgumentsWidget(GitSettings *settings, QWidget *parent = 0) : GitBlameArgumentsWidget(VcsBaseClientSettings &settings, QWidget *parent = 0) :
VcsBaseEditorParameterWidget(parent) VcsBaseEditorParameterWidget(parent)
{ {
mapSetting(addToggleButton(QString(), tr("Omit Date"), mapSetting(addToggleButton(QString(), tr("Omit Date"),
tr("Hide the date of a change from the output.")), tr("Hide the date of a change from the output.")),
settings->boolPointer(GitSettings::omitAnnotationDateKey)); settings.boolPointer(GitSettings::omitAnnotationDateKey));
mapSetting(addToggleButton(QLatin1String("-w"), tr("Ignore Whitespace"), mapSetting(addToggleButton(QLatin1String("-w"), tr("Ignore Whitespace"),
tr("Ignore whitespace only changes.")), tr("Ignore whitespace only changes.")),
settings->boolPointer(GitSettings::ignoreSpaceChangesInBlameKey)); settings.boolPointer(GitSettings::ignoreSpaceChangesInBlameKey));
} }
}; };
@@ -437,12 +435,12 @@ class GitLogArgumentsWidget : public BaseGitDiffArgumentsWidget
Q_OBJECT Q_OBJECT
public: public:
GitLogArgumentsWidget(GitSettings *settings, QWidget *parent = 0) : GitLogArgumentsWidget(VcsBaseClientSettings &settings, QWidget *parent = 0) :
BaseGitDiffArgumentsWidget(settings, parent) BaseGitDiffArgumentsWidget(settings, parent)
{ {
QToolButton *diffButton = addToggleButton(QLatin1String("--patch"), tr("Show Diff"), QToolButton *diffButton = addToggleButton(QLatin1String("--patch"), tr("Show Diff"),
tr("Show difference.")); tr("Show difference."));
mapSetting(diffButton, settings->boolPointer(GitSettings::logDiffKey)); mapSetting(diffButton, settings.boolPointer(GitSettings::logDiffKey));
connect(diffButton, &QToolButton::toggled, m_patienceButton, &QToolButton::setVisible); connect(diffButton, &QToolButton::toggled, m_patienceButton, &QToolButton::setVisible);
connect(diffButton, &QToolButton::toggled, m_ignoreWSButton, &QToolButton::setVisible); connect(diffButton, &QToolButton::toggled, m_ignoreWSButton, &QToolButton::setVisible);
m_patienceButton->setVisible(diffButton->isChecked()); m_patienceButton->setVisible(diffButton->isChecked());
@@ -452,7 +450,7 @@ public:
graphArguments << (QLatin1String("--pretty=format:") + QLatin1String(graphLogFormatC)); graphArguments << (QLatin1String("--pretty=format:") + QLatin1String(graphLogFormatC));
QToolButton *graphButton = addToggleButton(graphArguments, tr("Graph"), QToolButton *graphButton = addToggleButton(graphArguments, tr("Graph"),
tr("Show textual graph log.")); tr("Show textual graph log."));
mapSetting(graphButton, settings->boolPointer(GitSettings::graphLogKey)); mapSetting(graphButton, settings.boolPointer(GitSettings::graphLogKey));
} }
}; };
@@ -605,13 +603,10 @@ static inline void msgCannotRun(const QStringList &args, const QString &workingD
const char *GitClient::stashNamePrefix = "stash@{"; const char *GitClient::stashNamePrefix = "stash@{";
GitClient::GitClient(GitSettings *settings) : GitClient::GitClient() : VcsBase::VcsBaseClientImpl(new GitSettings),
m_cachedGitVersion(0), m_cachedGitVersion(0),
m_settings(settings),
m_disableEditor(false) m_disableEditor(false)
{ {
QTC_CHECK(settings);
connect(ICore::instance(), &ICore::saveSettingsRequested, this, &GitClient::saveSettings);
m_gitQtcEditor = QString::fromLatin1("\"%1\" -client -block -pid %2") m_gitQtcEditor = QString::fromLatin1("\"%1\" -client -block -pid %2")
.arg(QCoreApplication::applicationFilePath()) .arg(QCoreApplication::applicationFilePath())
.arg(QCoreApplication::applicationPid()); .arg(QCoreApplication::applicationPid());
@@ -908,7 +903,7 @@ void GitClient::log(const QString &workingDirectory, const QString &fileName,
arguments << QLatin1String("log") << QLatin1String(noColorOption) arguments << QLatin1String("log") << QLatin1String(noColorOption)
<< QLatin1String(decorateOption); << QLatin1String(decorateOption);
int logCount = settings()->intValue(GitSettings::logCountKey); int logCount = settings().intValue(GitSettings::logCountKey);
if (logCount > 0) if (logCount > 0)
arguments << QLatin1String("-n") << QString::number(logCount); arguments << QLatin1String("-n") << QString::number(logCount);
@@ -939,7 +934,7 @@ void GitClient::reflog(const QString &workingDirectory)
arguments << QLatin1String("reflog") << QLatin1String(noColorOption) arguments << QLatin1String("reflog") << QLatin1String(noColorOption)
<< QLatin1String(decorateOption); << QLatin1String(decorateOption);
int logCount = settings()->intValue(GitSettings::logCountKey); int logCount = settings().intValue(GitSettings::logCountKey);
if (logCount > 0) if (logCount > 0)
arguments << QLatin1String("-n") << QString::number(logCount); arguments << QLatin1String("-n") << QString::number(logCount);
@@ -983,11 +978,6 @@ void GitClient::show(const QString &source, const QString &id, const QString &na
}); });
} }
void GitClient::saveSettings()
{
settings()->writeSettings(ICore::settings());
}
void GitClient::slotBlameRevisionRequested(const QString &workingDirectory, const QString &file, void GitClient::slotBlameRevisionRequested(const QString &workingDirectory, const QString &file,
QString change, int lineNumber) QString change, int lineNumber)
{ {
@@ -2027,14 +2017,14 @@ VcsCommand *GitClient::executeGit(const QString &workingDirectory,
QProcessEnvironment GitClient::processEnvironment() const QProcessEnvironment GitClient::processEnvironment() const
{ {
QProcessEnvironment environment = QProcessEnvironment::systemEnvironment(); QProcessEnvironment environment = QProcessEnvironment::systemEnvironment();
QString gitPath = settings()->stringValue(GitSettings::pathKey); QString gitPath = settings().stringValue(GitSettings::pathKey);
if (!gitPath.isEmpty()) { if (!gitPath.isEmpty()) {
gitPath += HostOsInfo::pathListSeparator(); gitPath += HostOsInfo::pathListSeparator();
gitPath += environment.value(QLatin1String("PATH")); gitPath += environment.value(QLatin1String("PATH"));
environment.insert(QLatin1String("PATH"), gitPath); environment.insert(QLatin1String("PATH"), gitPath);
} }
if (HostOsInfo::isWindowsHost() if (HostOsInfo::isWindowsHost()
&& settings()->boolValue(GitSettings::winSetHomeEnvironmentKey)) { && settings().boolValue(GitSettings::winSetHomeEnvironmentKey)) {
environment.insert(QLatin1String("HOME"), QDir::toNativeSeparators(QDir::homePath())); environment.insert(QLatin1String("HOME"), QDir::toNativeSeparators(QDir::homePath()));
} }
environment.insert(QLatin1String("GIT_EDITOR"), m_disableEditor ? QLatin1String("true") : m_gitQtcEditor); environment.insert(QLatin1String("GIT_EDITOR"), m_disableEditor ? QLatin1String("true") : m_gitQtcEditor);
@@ -2414,7 +2404,7 @@ void GitClient::launchGitK(const QString &workingDirectory, const QString &fileN
void GitClient::launchRepositoryBrowser(const QString &workingDirectory) void GitClient::launchRepositoryBrowser(const QString &workingDirectory)
{ {
const QString repBrowserBinary = settings()->stringValue(GitSettings::repositoryBrowserCmd); const QString repBrowserBinary = settings().stringValue(GitSettings::repositoryBrowserCmd);
if (!repBrowserBinary.isEmpty()) if (!repBrowserBinary.isEmpty())
QProcess::startDetached(repBrowserBinary, QStringList(workingDirectory), workingDirectory); QProcess::startDetached(repBrowserBinary, QStringList(workingDirectory), workingDirectory);
} }
@@ -2434,7 +2424,7 @@ bool GitClient::tryLauchingGitK(const QProcessEnvironment &env,
binary = wish; binary = wish;
} }
} }
const QString gitkOpts = settings()->stringValue(GitSettings::gitkOptionsKey); const QString gitkOpts = settings().stringValue(GitSettings::gitkOptionsKey);
if (!gitkOpts.isEmpty()) if (!gitkOpts.isEmpty())
arguments.append(QtcProcess::splitArgs(gitkOpts, HostOsInfo::hostOs())); arguments.append(QtcProcess::splitArgs(gitkOpts, HostOsInfo::hostOs()));
if (!fileName.isEmpty()) if (!fileName.isEmpty())
@@ -2443,7 +2433,7 @@ bool GitClient::tryLauchingGitK(const QProcessEnvironment &env,
// This should always use QProcess::startDetached (as not to kill // This should always use QProcess::startDetached (as not to kill
// the child), but that does not have an environment parameter. // the child), but that does not have an environment parameter.
bool success = false; bool success = false;
if (!settings()->stringValue(GitSettings::pathKey).isEmpty()) { if (!settings().stringValue(GitSettings::pathKey).isEmpty()) {
auto process = new QProcess(this); auto process = new QProcess(this);
process->setWorkingDirectory(workingDirectory); process->setWorkingDirectory(workingDirectory);
process->setProcessEnvironment(env); process->setProcessEnvironment(env);
@@ -2495,12 +2485,12 @@ FileName GitClient::gitBinDirectory()
FileName GitClient::vcsBinary(bool *ok, QString *errorMessage) const FileName GitClient::vcsBinary(bool *ok, QString *errorMessage) const
{ {
return settings()->gitExecutable(ok, errorMessage); return static_cast<GitSettings &>(settings()).gitExecutable(ok, errorMessage);
} }
int GitClient::vcsTimeout() const int GitClient::vcsTimeout() const
{ {
return settings()->intValue(GitSettings::timeoutKey); return settings().intValue(GitSettings::timeoutKey);
} }
QTextCodec *GitClient::encoding(const QString &workingDirectory, const QByteArray &configVar) const QTextCodec *GitClient::encoding(const QString &workingDirectory, const QByteArray &configVar) const
@@ -3060,7 +3050,7 @@ void GitClient::subversionLog(const QString &workingDirectory)
{ {
QStringList arguments; QStringList arguments;
arguments << QLatin1String("svn") << QLatin1String("log"); arguments << QLatin1String("svn") << QLatin1String("log");
int logCount = settings()->intValue(GitSettings::logCountKey); int logCount = settings().intValue(GitSettings::logCountKey);
if (logCount > 0) if (logCount > 0)
arguments << (QLatin1String("--limit=") + QString::number(logCount)); arguments << (QLatin1String("--limit=") + QString::number(logCount));
@@ -3131,7 +3121,7 @@ void GitClient::asyncCommand(const QString &workingDirectory, const QStringList
// Git might request an editor, so this must be done asynchronously // Git might request an editor, so this must be done asynchronously
// and without timeout // and without timeout
QString gitCommand = arguments.first(); QString gitCommand = arguments.first();
VcsOutputWindow::appendCommand(workingDirectory, settings()->binaryPath(), arguments); VcsOutputWindow::appendCommand(workingDirectory, vcsBinary(), arguments);
VcsCommand *command = createCommand(workingDirectory, 0, VcsWindowOutputBind); VcsCommand *command = createCommand(workingDirectory, 0, VcsWindowOutputBind);
new ConflictHandler(command, workingDirectory, gitCommand); new ConflictHandler(command, workingDirectory, gitCommand);
if (hasProgress) if (hasProgress)
@@ -3176,7 +3166,7 @@ void GitClient::interactiveRebase(const QString &workingDirectory, const QString
if (fixup) if (fixup)
arguments << QLatin1String("--autosquash"); arguments << QLatin1String("--autosquash");
arguments << commit + QLatin1Char('^'); arguments << commit + QLatin1Char('^');
VcsOutputWindow::appendCommand(workingDirectory, settings()->binaryPath(), arguments); VcsOutputWindow::appendCommand(workingDirectory, vcsBinary(), arguments);
if (fixup) if (fixup)
m_disableEditor = true; m_disableEditor = true;
asyncCommand(workingDirectory, arguments, true); asyncCommand(workingDirectory, arguments, true);
@@ -3333,11 +3323,6 @@ bool GitClient::cloneRepository(const QString &directory,const QByteArray &url)
} }
} }
GitSettings *GitClient::settings() const
{
return m_settings;
}
// determine version as '(major << 16) + (minor << 8) + patch' or 0. // determine version as '(major << 16) + (minor << 8) + patch' or 0.
unsigned GitClient::gitVersion(QString *errorMessage) const unsigned GitClient::gitVersion(QString *errorMessage) const
{ {

View File

@@ -138,7 +138,7 @@ public:
static const char *stashNamePrefix; static const char *stashNamePrefix;
explicit GitClient(GitSettings *settings); explicit GitClient();
Utils::FileName vcsBinary(bool *ok = 0, QString *errorMessage = 0) const; Utils::FileName vcsBinary(bool *ok = 0, QString *errorMessage = 0) const;
int vcsTimeout() const; int vcsTimeout() const;
@@ -331,8 +331,6 @@ public:
QStringList synchronousRepositoryBranches(const QString &repositoryURL, QStringList synchronousRepositoryBranches(const QString &repositoryURL,
const QString &workingDirectory = QString()) const; const QString &workingDirectory = QString()) const;
GitSettings *settings() const;
QProcessEnvironment processEnvironment() const; QProcessEnvironment processEnvironment() const;
bool beginStashScope(const QString &workingDirectory, const QString &command, bool beginStashScope(const QString &workingDirectory, const QString &command,
@@ -350,7 +348,6 @@ public slots:
void show(const QString &source, void show(const QString &source,
const QString &id, const QString &id,
const QString &name = QString()); const QString &name = QString());
void saveSettings();
private slots: private slots:
void slotBlameRevisionRequested(const QString &workingDirectory, const QString &file, void slotBlameRevisionRequested(const QString &workingDirectory, const QString &file,
@@ -441,7 +438,6 @@ private:
mutable Utils::FileName m_gitVersionForBinary; mutable Utils::FileName m_gitVersionForBinary;
mutable unsigned m_cachedGitVersion; mutable unsigned m_cachedGitVersion;
GitSettings *m_settings;
QString m_gitQtcEditor; QString m_gitQtcEditor;
QMap<QString, StashInfo> m_stashInfo; QMap<QString, StashInfo> m_stashInfo;
QStringList m_updatedSubmodules; QStringList m_updatedSubmodules;

View File

@@ -184,7 +184,8 @@ void GitEditorWidget::setPlainTextFiltered(const QString &text)
switch (contentType()) switch (contentType())
{ {
case AnnotateOutput: { case AnnotateOutput: {
const bool omitAnnotationDate = plugin->settings().boolValue(GitSettings::omitAnnotationDateKey); const bool omitAnnotationDate
= plugin->gitClient()->settings().boolValue(GitSettings::omitAnnotationDateKey);
if (omitAnnotationDate) if (omitAnnotationDate)
modText = removeAnnotationDate(text); modText = removeAnnotationDate(text);
break; break;

View File

@@ -274,14 +274,15 @@ bool GitPlugin::initialize(const QStringList &arguments, QString *errorMessage)
Context context(Constants::GIT_CONTEXT); Context context(Constants::GIT_CONTEXT);
m_settings.readSettings(ICore::settings()); m_gitClient = new GitClient;
m_gitClient = new GitClient(&m_settings);
initializeVcs(new GitVersionControl(m_gitClient), context); initializeVcs(new GitVersionControl(m_gitClient), context);
// Create the settings Page // Create the settings Page
addAutoReleasedObject(new SettingsPage()); SettingsPage *options = new SettingsPage;
connect(options, &SettingsPage::settingsChanged,
versionControl(), &IVersionControl::configurationChanged);
addAutoReleasedObject(options);
static const char *describeSlot = SLOT(show(QString,QString)); static const char *describeSlot = SLOT(show(QString,QString));
const int editorCount = sizeof(editorParameters) / sizeof(editorParameters[0]); const int editorCount = sizeof(editorParameters) / sizeof(editorParameters[0]);
@@ -1109,7 +1110,7 @@ void GitPlugin::pull()
const VcsBasePluginState state = currentState(); const VcsBasePluginState state = currentState();
QTC_ASSERT(state.hasTopLevel(), return); QTC_ASSERT(state.hasTopLevel(), return);
QString topLevel = state.topLevel(); QString topLevel = state.topLevel();
bool rebase = m_settings.boolValue(GitSettings::pullRebaseKey); bool rebase = gitClient()->settings().boolValue(GitSettings::pullRebaseKey);
if (!rebase) { if (!rebase) {
QString currentBranch = m_gitClient->synchronousCurrentLocalBranch(topLevel); QString currentBranch = m_gitClient->synchronousCurrentLocalBranch(topLevel);
@@ -1415,26 +1416,11 @@ void GitPlugin::updateBranches(const QString &repository)
void GitPlugin::updateRepositoryBrowserAction() void GitPlugin::updateRepositoryBrowserAction()
{ {
const bool repositoryEnabled = currentState().hasTopLevel(); const bool repositoryEnabled = currentState().hasTopLevel();
const bool hasRepositoryBrowserCmd = !m_settings.stringValue(GitSettings::repositoryBrowserCmd).isEmpty(); const bool hasRepositoryBrowserCmd
= !gitClient()->settings().stringValue(GitSettings::repositoryBrowserCmd).isEmpty();
m_repositoryBrowserAction->setEnabled(repositoryEnabled && hasRepositoryBrowserCmd); m_repositoryBrowserAction->setEnabled(repositoryEnabled && hasRepositoryBrowserCmd);
} }
const GitSettings &GitPlugin::settings() const
{
return m_settings;
}
void GitPlugin::setSettings(const GitSettings &s)
{
if (s == m_settings)
return;
m_settings = s;
m_gitClient->saveSettings();
static_cast<GitVersionControl *>(versionControl())->emitConfigurationChanged();
updateRepositoryBrowserAction();
}
GitClient *GitPlugin::gitClient() const GitClient *GitPlugin::gitClient() const
{ {
return m_gitClient; return m_gitClient;

View File

@@ -85,9 +85,6 @@ public:
GitVersionControl *gitVersionControl() const; GitVersionControl *gitVersionControl() const;
const GitSettings &settings() const;
void setSettings(const GitSettings &s);
GitClient *gitClient() const; GitClient *gitClient() const;
Gerrit::Internal::GerritPlugin *gerritPlugin() const; Gerrit::Internal::GerritPlugin *gerritPlugin() const;

View File

@@ -143,7 +143,7 @@ QString GitVersionControl::vcsTopic(const QString &directory)
QStringList GitVersionControl::additionalToolsPath() const QStringList GitVersionControl::additionalToolsPath() const
{ {
QStringList res = m_client->settings()->searchPathList(); QStringList res = m_client->settings().searchPathList();
const QString binaryPath = m_client->gitBinDirectory().toString(); const QString binaryPath = m_client->gitBinDirectory().toString();
if (!binaryPath.isEmpty() && !res.contains(binaryPath)) if (!binaryPath.isEmpty() && !res.contains(binaryPath))
res << binaryPath; res << binaryPath;
@@ -180,10 +180,5 @@ void GitVersionControl::emitRepositoryChanged(const QString &r)
emit repositoryChanged(r); emit repositoryChanged(r);
} }
void GitVersionControl::emitConfigurationChanged()
{
emit configurationChanged();
}
} // Internal } // Internal
} // Git } // Git

View File

@@ -66,7 +66,6 @@ public:
void emitFilesChanged(const QStringList &); void emitFilesChanged(const QStringList &);
void emitRepositoryChanged(const QString &); void emitRepositoryChanged(const QString &);
void emitConfigurationChanged();
private: private:
GitClient *m_client; GitClient *m_client;

View File

@@ -217,7 +217,7 @@ LogChangeDialog::LogChangeDialog(bool isReset, QWidget *parent) :
m_resetTypeComboBox->addItem(tr("Mixed"), QLatin1String("--mixed")); m_resetTypeComboBox->addItem(tr("Mixed"), QLatin1String("--mixed"));
m_resetTypeComboBox->addItem(tr("Soft"), QLatin1String("--soft")); m_resetTypeComboBox->addItem(tr("Soft"), QLatin1String("--soft"));
GitClient *client = GitPlugin::instance()->gitClient(); GitClient *client = GitPlugin::instance()->gitClient();
m_resetTypeComboBox->setCurrentIndex(client->settings()->intValue( m_resetTypeComboBox->setCurrentIndex(client->settings().intValue(
GitSettings::lastResetIndexKey)); GitSettings::lastResetIndexKey));
popUpLayout->addWidget(m_resetTypeComboBox); popUpLayout->addWidget(m_resetTypeComboBox);
popUpLayout->addItem(new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Ignored)); popUpLayout->addItem(new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Ignored));
@@ -247,8 +247,8 @@ bool LogChangeDialog::runDialog(const QString &repository,
if (QDialog::exec() == QDialog::Accepted) { if (QDialog::exec() == QDialog::Accepted) {
if (m_resetTypeComboBox) { if (m_resetTypeComboBox) {
GitClient *client = GitPlugin::instance()->gitClient(); GitClient *client = GitPlugin::instance()->gitClient();
client->settings()->setValue(GitSettings::lastResetIndexKey, client->settings().setValue(GitSettings::lastResetIndexKey,
m_resetTypeComboBox->currentIndex()); m_resetTypeComboBox->currentIndex());
} }
return true; return true;
} }

View File

@@ -33,6 +33,7 @@
#include "gitplugin.h" #include "gitplugin.h"
#include "gitclient.h" #include "gitclient.h"
#include <coreplugin/icore.h>
#include <vcsbase/vcsbaseconstants.h> #include <vcsbase/vcsbaseconstants.h>
#include <utils/hostosinfo.h> #include <utils/hostosinfo.h>
#include <coreplugin/messagebox.h> #include <coreplugin/messagebox.h>
@@ -41,6 +42,8 @@
#include <QDebug> #include <QDebug>
#include <QTextStream> #include <QTextStream>
using namespace VcsBase;
namespace Git { namespace Git {
namespace Internal { namespace Internal {
@@ -66,7 +69,7 @@ SettingsPageWidget::SettingsPageWidget(QWidget *parent) :
m_ui.repBrowserCommandPathChooser->setPromptDialogTitle(tr("Git Repository Browser Command")); m_ui.repBrowserCommandPathChooser->setPromptDialogTitle(tr("Git Repository Browser Command"));
} }
GitSettings SettingsPageWidget::settings() const VcsBaseClientSettings SettingsPageWidget::settings() const
{ {
GitSettings rc; GitSettings rc;
rc.setValue(GitSettings::pathKey, m_ui.pathLineEdit->text()); rc.setValue(GitSettings::pathKey, m_ui.pathLineEdit->text());
@@ -80,7 +83,7 @@ GitSettings SettingsPageWidget::settings() const
return rc; return rc;
} }
void SettingsPageWidget::setSettings(const GitSettings &s) void SettingsPageWidget::setSettings(const VcsBaseClientSettings &s)
{ {
m_ui.pathLineEdit->setText(s.stringValue(GitSettings::pathKey)); m_ui.pathLineEdit->setText(s.stringValue(GitSettings::pathKey));
m_ui.logCountSpinBox->setValue(s.intValue(GitSettings::logCountKey)); m_ui.logCountSpinBox->setValue(s.intValue(GitSettings::logCountKey));
@@ -104,24 +107,29 @@ QWidget *SettingsPage::widget()
{ {
if (!m_widget) { if (!m_widget) {
m_widget = new SettingsPageWidget; m_widget = new SettingsPageWidget;
m_widget->setSettings(GitPlugin::instance()->settings()); m_widget->setSettings(GitPlugin::instance()->gitClient()->settings());
} }
return m_widget; return m_widget;
} }
void SettingsPage::apply() void SettingsPage::apply()
{ {
const GitSettings newSettings = m_widget->settings();
// Warn if git cannot be found in path if the widget is on top // Warn if git cannot be found in path if the widget is on top
const VcsBaseClientSettings newSettings = m_widget->settings();
if (m_widget->isVisible()) { if (m_widget->isVisible()) {
bool gitFoundOk; bool gitFoundOk;
QString errorMessage; QString errorMessage;
newSettings.gitExecutable(&gitFoundOk, &errorMessage); static_cast<const GitSettings &>(newSettings).gitExecutable(&gitFoundOk, &errorMessage);
if (!gitFoundOk) if (!gitFoundOk)
Core::AsynchronousMessageBox::warning(tr("Git Settings"), errorMessage); Core::AsynchronousMessageBox::warning(tr("Git Settings"), errorMessage);
} }
GitPlugin::instance()->setSettings(newSettings); VcsBaseClientSettings &s = GitPlugin::instance()->gitClient()->settings();
if (s != newSettings) {
s = newSettings;
s.writeSettings(Core::ICore::settings());
emit settingsChanged();
}
} }
void SettingsPage::finish() void SettingsPage::finish()

View File

@@ -42,18 +42,20 @@ QT_BEGIN_NAMESPACE
class QSettings; class QSettings;
QT_END_NAMESPACE QT_END_NAMESPACE
namespace VcsBase {
class VcsBaseClientSettings;
} // namespace VcsBase
namespace Git { namespace Git {
namespace Internal { namespace Internal {
class GitSettings;
class SettingsPageWidget : public QWidget { class SettingsPageWidget : public QWidget {
Q_OBJECT Q_OBJECT
public: public:
explicit SettingsPageWidget(QWidget *parent = 0); explicit SettingsPageWidget(QWidget *parent = 0);
GitSettings settings() const; VcsBase::VcsBaseClientSettings settings() const;
void setSettings(const GitSettings &); void setSettings(const VcsBase::VcsBaseClientSettings &s);
private: private:
Ui::SettingsPage m_ui; Ui::SettingsPage m_ui;
@@ -70,6 +72,9 @@ public:
void apply(); void apply();
void finish(); void finish();
signals:
void settingsChanged();
private: private:
QPointer<SettingsPageWidget> m_widget; QPointer<SettingsPageWidget> m_widget;
}; };

View File

@@ -30,6 +30,7 @@
#include "clonewizard.h" #include "clonewizard.h"
#include "clonewizardpage.h" #include "clonewizardpage.h"
#include "mercurialclient.h"
#include "mercurialplugin.h" #include "mercurialplugin.h"
#include "mercurialsettings.h" #include "mercurialsettings.h"
@@ -74,7 +75,7 @@ VcsCommand *CloneWizard::createCommand(Utils::FileName *checkoutDir)
if (!cwp) if (!cwp)
return 0; return 0;
const MercurialSettings &settings = MercurialPlugin::settings(); const VcsBaseClientSettings &settings = MercurialPlugin::client()->settings();
QString path = cwp->path(); QString path = cwp->path();
QString directory = cwp->directory(); QString directory = cwp->directory();

View File

@@ -58,25 +58,20 @@ class MercurialDiffParameterWidget : public VcsBaseEditorParameterWidget
{ {
Q_OBJECT Q_OBJECT
public: public:
MercurialDiffParameterWidget(MercurialSettings *settings, QWidget *parent = 0) : MercurialDiffParameterWidget(VcsBaseClientSettings &settings, QWidget *parent = 0) :
VcsBaseEditorParameterWidget(parent) VcsBaseEditorParameterWidget(parent)
{ {
mapSetting(addToggleButton(QLatin1String("-w"), tr("Ignore Whitespace")), mapSetting(addToggleButton(QLatin1String("-w"), tr("Ignore Whitespace")),
settings->boolPointer(MercurialSettings::diffIgnoreWhiteSpaceKey)); settings.boolPointer(MercurialSettings::diffIgnoreWhiteSpaceKey));
mapSetting(addToggleButton(QLatin1String("-B"), tr("Ignore Blank Lines")), mapSetting(addToggleButton(QLatin1String("-B"), tr("Ignore Blank Lines")),
settings->boolPointer(MercurialSettings::diffIgnoreBlankLinesKey)); settings.boolPointer(MercurialSettings::diffIgnoreBlankLinesKey));
} }
}; };
MercurialClient::MercurialClient(MercurialSettings *settings) : MercurialClient::MercurialClient() :
VcsBaseClient(settings) VcsBaseClient(new MercurialSettings)
{ {
setDiffParameterWidgetCreator([=] { return new MercurialDiffParameterWidget(settings); }); setDiffParameterWidgetCreator([this] { return new MercurialDiffParameterWidget(settings()); });
}
MercurialSettings *MercurialClient::settings() const
{
return dynamic_cast<MercurialSettings *>(VcsBaseClient::settings());
} }
bool MercurialClient::manifestSync(const QString &repository, const QString &relativeFilename) bool MercurialClient::manifestSync(const QString &repository, const QString &relativeFilename)

View File

@@ -42,9 +42,7 @@ class MercurialClient : public VcsBase::VcsBaseClient
{ {
Q_OBJECT Q_OBJECT
public: public:
MercurialClient(MercurialSettings *settings); MercurialClient();
MercurialSettings *settings() const;
bool synchronousClone(const QString &workingDir, bool synchronousClone(const QString &workingDir,
const QString &srcLocation, const QString &srcLocation,

View File

@@ -98,7 +98,7 @@ bool MercurialControl::managesFile(const QString &workingDirectory, const QStrin
bool MercurialControl::isConfigured() const bool MercurialControl::isConfigured() const
{ {
const Utils::FileName binary = mercurialClient->settings()->binaryPath(); const Utils::FileName binary = mercurialClient->vcsBinary();
if (binary.isEmpty()) if (binary.isEmpty())
return false; return false;
QFileInfo fi = binary.toFileInfo(); QFileInfo fi = binary.toFileInfo();
@@ -186,10 +186,5 @@ void MercurialControl::changed(const QVariant &v)
} }
} }
void MercurialControl::emitConfigurationChanged()
{
emit configurationChanged();
}
} // namespace Internal } // namespace Internal
} // namespace Mercurial } // namespace Mercurial

View File

@@ -70,7 +70,6 @@ public slots:
// files changed signals according to the variant's type: // files changed signals according to the variant's type:
// String -> repository, StringList -> files // String -> repository, StringList -> files
void changed(const QVariant&); void changed(const QVariant&);
void emitConfigurationChanged();
private: private:
MercurialClient *mercurialClient; MercurialClient *mercurialClient;

View File

@@ -136,12 +136,11 @@ bool MercurialPlugin::initialize(const QStringList & /* arguments */, QString *
{ {
Core::Context context(Constants::MERCURIAL_CONTEXT); Core::Context context(Constants::MERCURIAL_CONTEXT);
m_client = new MercurialClient(&mercurialSettings); m_client = new MercurialClient;
initializeVcs(new MercurialControl(m_client), context); initializeVcs(new MercurialControl(m_client), context);
optionsPage = new OptionsPage(); optionsPage = new OptionsPage();
addAutoReleasedObject(optionsPage); addAutoReleasedObject(optionsPage);
mercurialSettings.readSettings(core->settings());
connect(m_client, SIGNAL(changed(QVariant)), versionControl(), SLOT(changed(QVariant))); connect(m_client, SIGNAL(changed(QVariant)), versionControl(), SLOT(changed(QVariant)));
connect(m_client, SIGNAL(needUpdate()), this, SLOT(update())); connect(m_client, SIGNAL(needUpdate()), this, SLOT(update()));
@@ -176,19 +175,6 @@ bool MercurialPlugin::initialize(const QStringList & /* arguments */, QString *
return true; return true;
} }
const MercurialSettings &MercurialPlugin::settings()
{
return m_instance->mercurialSettings;
}
void MercurialPlugin::setSettings(const MercurialSettings &settings)
{
if (settings != m_instance->mercurialSettings) {
m_instance->mercurialSettings = settings;
static_cast<MercurialControl *>(m_instance->versionControl())->emitConfigurationChanged();
}
}
void MercurialPlugin::createMenu(const Core::Context &context) void MercurialPlugin::createMenu(const Core::Context &context)
{ {
// Create menu item for Mercurial // Create menu item for Mercurial

View File

@@ -75,9 +75,6 @@ public:
static MercurialPlugin *instance() { return m_instance; } static MercurialPlugin *instance() { return m_instance; }
static MercurialClient *client() { return m_instance->m_client; } static MercurialClient *client() { return m_instance->m_client; }
static const MercurialSettings &settings();
static void setSettings(const MercurialSettings &settings);
private slots: private slots:
// File menu action slots // File menu action slots
void addCurrentFile(); void addCurrentFile();

View File

@@ -29,6 +29,8 @@
****************************************************************************/ ****************************************************************************/
#include "optionspage.h" #include "optionspage.h"
#include "mercurialclient.h"
#include "mercurialsettings.h" #include "mercurialsettings.h"
#include "mercurialplugin.h" #include "mercurialplugin.h"
@@ -38,6 +40,8 @@
#include <QTextStream> #include <QTextStream>
using namespace VcsBase;
namespace Mercurial { namespace Mercurial {
namespace Internal { namespace Internal {
@@ -50,9 +54,9 @@ OptionsPageWidget::OptionsPageWidget(QWidget *parent) :
m_ui.commandChooser->setPromptDialogTitle(tr("Mercurial Command")); m_ui.commandChooser->setPromptDialogTitle(tr("Mercurial Command"));
} }
MercurialSettings OptionsPageWidget::settings() const VcsBaseClientSettings OptionsPageWidget::settings() const
{ {
MercurialSettings s = MercurialPlugin::settings(); MercurialSettings s;
s.setValue(MercurialSettings::binaryPathKey, m_ui.commandChooser->rawPath()); s.setValue(MercurialSettings::binaryPathKey, m_ui.commandChooser->rawPath());
s.setValue(MercurialSettings::userNameKey, m_ui.defaultUsernameLineEdit->text().trimmed()); s.setValue(MercurialSettings::userNameKey, m_ui.defaultUsernameLineEdit->text().trimmed());
s.setValue(MercurialSettings::userEmailKey, m_ui.defaultEmailLineEdit->text().trimmed()); s.setValue(MercurialSettings::userEmailKey, m_ui.defaultEmailLineEdit->text().trimmed());
@@ -61,7 +65,7 @@ MercurialSettings OptionsPageWidget::settings() const
return s; return s;
} }
void OptionsPageWidget::setSettings(const MercurialSettings &s) void OptionsPageWidget::setSettings(const VcsBaseClientSettings &s)
{ {
m_ui.commandChooser->setPath(s.stringValue(MercurialSettings::binaryPathKey)); m_ui.commandChooser->setPath(s.stringValue(MercurialSettings::binaryPathKey));
m_ui.defaultUsernameLineEdit->setText(s.stringValue(MercurialSettings::userNameKey)); m_ui.defaultUsernameLineEdit->setText(s.stringValue(MercurialSettings::userNameKey));
@@ -80,7 +84,7 @@ QWidget *OptionsPage::widget()
{ {
if (!optionsPageWidget) if (!optionsPageWidget)
optionsPageWidget = new OptionsPageWidget; optionsPageWidget = new OptionsPageWidget;
optionsPageWidget->setSettings(MercurialPlugin::settings()); optionsPageWidget->setSettings(MercurialPlugin::client()->settings());
return optionsPageWidget; return optionsPageWidget;
} }
@@ -88,13 +92,15 @@ void OptionsPage::apply()
{ {
if (!optionsPageWidget) if (!optionsPageWidget)
return; return;
const MercurialSettings newSettings = optionsPageWidget->settings();
if (newSettings != MercurialPlugin::settings()) { const VcsBaseClientSettings newSettings = optionsPageWidget->settings();
//assume success and emit signal that settings are changed; VcsBaseClientSettings &s = MercurialPlugin::instance()->client()->settings();
MercurialPlugin::setSettings(newSettings); if (s != newSettings) {
newSettings.writeSettings(Core::ICore::settings()); s = newSettings;
s.writeSettings(Core::ICore::settings());
emit settingsChanged(); emit settingsChanged();
} }
} }
void OptionsPage::finish() void OptionsPage::finish()

View File

@@ -38,11 +38,13 @@
#include <QWidget> #include <QWidget>
#include <QPointer> #include <QPointer>
namespace VcsBase {
class VcsBaseClientSettings;
} // namespace VcsBase
namespace Mercurial { namespace Mercurial {
namespace Internal { namespace Internal {
class MercurialSettings;
class OptionsPageWidget : public QWidget class OptionsPageWidget : public QWidget
{ {
Q_OBJECT Q_OBJECT
@@ -50,8 +52,8 @@ class OptionsPageWidget : public QWidget
public: public:
explicit OptionsPageWidget(QWidget *parent = 0); explicit OptionsPageWidget(QWidget *parent = 0);
MercurialSettings settings() const; VcsBase::VcsBaseClientSettings settings() const;
void setSettings(const MercurialSettings &s); void setSettings(const VcsBase::VcsBaseClientSettings &s);
private: private:
Ui::OptionsPage m_ui; Ui::OptionsPage m_ui;

View File

@@ -74,8 +74,9 @@ VcsCommand *CheckoutWizard::createCommand(FileName *checkoutDir)
} }
QTC_ASSERT(cwp, return 0); QTC_ASSERT(cwp, return 0);
const SubversionSettings settings = SubversionPlugin::instance()->settings(); SubversionClient *client = SubversionPlugin::instance()->client();
const FileName binary = settings.binaryPath(); const VcsBaseClientSettings &settings = client->settings();
const FileName binary = client->vcsBinary();
const QString directory = cwp->directory(); const QString directory = cwp->directory();
QStringList args; QStringList args;
args << QLatin1String("checkout"); args << QLatin1String("checkout");

View File

@@ -29,8 +29,10 @@
****************************************************************************/ ****************************************************************************/
#include "settingspage.h" #include "settingspage.h"
#include "subversionsettings.h"
#include "subversionclient.h"
#include "subversionplugin.h" #include "subversionplugin.h"
#include "subversionsettings.h"
#include <coreplugin/icore.h> #include <coreplugin/icore.h>
#include <extensionsystem/pluginmanager.h> #include <extensionsystem/pluginmanager.h>
@@ -43,6 +45,7 @@
using namespace Subversion::Internal; using namespace Subversion::Internal;
using namespace Utils; using namespace Utils;
using namespace VcsBase;
SettingsPageWidget::SettingsPageWidget(QWidget *parent) : SettingsPageWidget::SettingsPageWidget(QWidget *parent) :
QWidget(parent) QWidget(parent)
@@ -53,7 +56,7 @@ SettingsPageWidget::SettingsPageWidget(QWidget *parent) :
m_ui.pathChooser->setPromptDialogTitle(tr("Subversion Command")); m_ui.pathChooser->setPromptDialogTitle(tr("Subversion Command"));
} }
SubversionSettings SettingsPageWidget::settings() const VcsBase::VcsBaseClientSettings SettingsPageWidget::settings() const
{ {
SubversionSettings rc; SubversionSettings rc;
rc.setValue(SubversionSettings::binaryPathKey, m_ui.pathChooser->rawPath()); rc.setValue(SubversionSettings::binaryPathKey, m_ui.pathChooser->rawPath());
@@ -70,7 +73,7 @@ SubversionSettings SettingsPageWidget::settings() const
return rc; return rc;
} }
void SettingsPageWidget::setSettings(const SubversionSettings &s) void SettingsPageWidget::setSettings(const VcsBaseClientSettings &s)
{ {
m_ui.pathChooser->setFileName(s.binaryPath()); m_ui.pathChooser->setFileName(s.binaryPath());
m_ui.usernameLineEdit->setText(s.stringValue(SubversionSettings::userKey)); m_ui.usernameLineEdit->setText(s.stringValue(SubversionSettings::userKey));
@@ -94,14 +97,20 @@ QWidget *SettingsPage::widget()
{ {
if (!m_widget) { if (!m_widget) {
m_widget = new SettingsPageWidget; m_widget = new SettingsPageWidget;
m_widget->setSettings(SubversionPlugin::instance()->settings()); m_widget->setSettings(SubversionPlugin::instance()->client()->settings());
} }
return m_widget; return m_widget;
} }
void SettingsPage::apply() void SettingsPage::apply()
{ {
SubversionPlugin::instance()->setSettings(m_widget->settings()); const VcsBaseClientSettings newSettings = m_widget->settings();
VcsBaseClientSettings &s = SubversionPlugin::instance()->client()->settings();
if (s != newSettings) {
s = newSettings;
s.writeSettings(Core::ICore::settings());
emit settingsChanged();
}
} }
void SettingsPage::finish() void SettingsPage::finish()

View File

@@ -43,11 +43,13 @@ QT_BEGIN_NAMESPACE
class QSettings; class QSettings;
QT_END_NAMESPACE QT_END_NAMESPACE
namespace VcsBase {
class VcsBaseClientSettings;
} // namespace VcsBa
namespace Subversion { namespace Subversion {
namespace Internal { namespace Internal {
class SubversionSettings;
class SettingsPageWidget : public QWidget class SettingsPageWidget : public QWidget
{ {
Q_OBJECT Q_OBJECT
@@ -55,8 +57,8 @@ class SettingsPageWidget : public QWidget
public: public:
explicit SettingsPageWidget(QWidget *parent = 0); explicit SettingsPageWidget(QWidget *parent = 0);
SubversionSettings settings() const; VcsBase::VcsBaseClientSettings settings() const;
void setSettings(const SubversionSettings &); void setSettings(const VcsBase::VcsBaseClientSettings &s);
private: private:
Ui::SettingsPage m_ui; Ui::SettingsPage m_ui;
@@ -74,6 +76,9 @@ public:
void apply(); void apply();
void finish(); void finish();
signals:
void settingsChanged();
private: private:
QPointer<SettingsPageWidget> m_widget; QPointer<SettingsPageWidget> m_widget;
}; };

View File

@@ -62,24 +62,18 @@ class SubversionLogParameterWidget : public VcsBaseEditorParameterWidget
{ {
Q_OBJECT Q_OBJECT
public: public:
SubversionLogParameterWidget(SubversionSettings *settings, QWidget *parent = 0) : SubversionLogParameterWidget(VcsBaseClientSettings &settings, QWidget *parent = 0) :
VcsBaseEditorParameterWidget(parent) VcsBaseEditorParameterWidget(parent)
{ {
mapSetting(addToggleButton(QLatin1String("--verbose"), tr("Verbose"), mapSetting(addToggleButton(QLatin1String("--verbose"), tr("Verbose"),
tr("Show files changed in each revision")), tr("Show files changed in each revision")),
settings->boolPointer(SubversionSettings::logVerboseKey)); settings.boolPointer(SubversionSettings::logVerboseKey));
} }
}; };
SubversionClient::SubversionClient(SubversionSettings *settings) : SubversionClient::SubversionClient() : VcsBaseClient(new SubversionSettings)
VcsBaseClient(settings)
{ {
setLogParameterWidgetCreator([=] { return new SubversionLogParameterWidget(settings); }); setLogParameterWidgetCreator([this] { return new SubversionLogParameterWidget(settings()); });
}
SubversionSettings *SubversionClient::settings() const
{
return dynamic_cast<SubversionSettings *>(VcsBaseClient::settings());
} }
VcsCommand *SubversionClient::createCommitCmd(const QString &repositoryRoot, VcsCommand *SubversionClient::createCommitCmd(const QString &repositoryRoot,
@@ -89,7 +83,7 @@ VcsCommand *SubversionClient::createCommitCmd(const QString &repositoryRoot,
{ {
const QStringList svnExtraOptions = const QStringList svnExtraOptions =
QStringList(extraOptions) QStringList(extraOptions)
<< SubversionClient::addAuthenticationOptions(*settings()) << SubversionClient::addAuthenticationOptions(settings())
<< QLatin1String(Constants::NON_INTERACTIVE_OPTION) << QLatin1String(Constants::NON_INTERACTIVE_OPTION)
<< QLatin1String("--encoding") << QLatin1String("utf8") << QLatin1String("--encoding") << QLatin1String("utf8")
<< QLatin1String("--file") << commitMessageFile; << QLatin1String("--file") << commitMessageFile;
@@ -124,9 +118,9 @@ Id SubversionClient::vcsEditorKind(VcsCommandTag cmd) const
} }
// Add authorization options to the command line arguments. // Add authorization options to the command line arguments.
QStringList SubversionClient::addAuthenticationOptions(const SubversionSettings &settings) QStringList SubversionClient::addAuthenticationOptions(const VcsBaseClientSettings &settings)
{ {
if (!settings.hasAuthentication()) if (!static_cast<const SubversionSettings &>(settings).hasAuthentication())
return QStringList(); return QStringList();
const QString userName = settings.stringValue(SubversionSettings::userKey); const QString userName = settings.stringValue(SubversionSettings::userKey);
@@ -223,7 +217,7 @@ void DiffController::setChangeNumber(int changeNumber)
QString DiffController::getDescription() const QString DiffController::getDescription() const
{ {
QStringList args(QLatin1String("log")); QStringList args(QLatin1String("log"));
args << SubversionClient::addAuthenticationOptions(*m_client->settings()); args << SubversionClient::addAuthenticationOptions(m_client->settings());
args << QLatin1String("-r"); args << QLatin1String("-r");
args << QString::number(m_changeNumber); args << QString::number(m_changeNumber);
const SubversionResponse logResponse = const SubversionResponse logResponse =
@@ -247,7 +241,7 @@ void DiffController::postCollectTextualDiffOutput()
QStringList args; QStringList args;
args << QLatin1String("diff"); args << QLatin1String("diff");
args << m_client->addAuthenticationOptions(*m_client->settings()); args << m_client->addAuthenticationOptions(m_client->settings());
args << QLatin1String("--internal-diff"); args << QLatin1String("--internal-diff");
if (ignoreWhitespace()) if (ignoreWhitespace())
args << QLatin1String("-x") << QLatin1String("-uw"); args << QLatin1String("-x") << QLatin1String("-uw");
@@ -312,10 +306,10 @@ void SubversionClient::log(const QString &workingDir,
const QStringList &extraOptions, const QStringList &extraOptions,
bool enableAnnotationContextMenu) bool enableAnnotationContextMenu)
{ {
const auto logCount = settings()->intValue(SubversionSettings::logCountKey); const auto logCount = settings().intValue(SubversionSettings::logCountKey);
QStringList svnExtraOptions = QStringList svnExtraOptions =
QStringList(extraOptions) QStringList(extraOptions)
<< SubversionClient::addAuthenticationOptions(*settings()); << SubversionClient::addAuthenticationOptions(settings());
if (logCount > 0) if (logCount > 0)
svnExtraOptions << QLatin1String("-l") << QString::number(logCount); svnExtraOptions << QLatin1String("-l") << QString::number(logCount);

View File

@@ -48,9 +48,7 @@ class SubversionClient : public VcsBase::VcsBaseClient
Q_OBJECT Q_OBJECT
public: public:
SubversionClient(SubversionSettings *settings); SubversionClient();
SubversionSettings *settings() const;
VcsBase::VcsCommand *createCommitCmd(const QString &repositoryRoot, VcsBase::VcsCommand *createCommitCmd(const QString &repositoryRoot,
const QStringList &files, const QStringList &files,
@@ -75,7 +73,7 @@ public:
StatusItem parseStatusLine(const QString &line) const; StatusItem parseStatusLine(const QString &line) const;
// Add authorization options to the command line arguments. // Add authorization options to the command line arguments.
static QStringList addAuthenticationOptions(const SubversionSettings &settings); static QStringList addAuthenticationOptions(const VcsBase::VcsBaseClientSettings &settings);
QString synchronousTopic(const QString &repository); QString synchronousTopic(const QString &repository);

View File

@@ -29,6 +29,8 @@
****************************************************************************/ ****************************************************************************/
#include "subversioncontrol.h" #include "subversioncontrol.h"
#include "subversionclient.h"
#include "subversionplugin.h" #include "subversionplugin.h"
#include "subversionsettings.h" #include "subversionsettings.h"
@@ -80,7 +82,7 @@ Core::Id SubversionControl::id() const
bool SubversionControl::isConfigured() const bool SubversionControl::isConfigured() const
{ {
const Utils::FileName binary = m_plugin->settings().binaryPath(); const Utils::FileName binary = m_plugin->client()->vcsBinary();
if (binary.isEmpty()) if (binary.isEmpty())
return false; return false;
QFileInfo fi = binary.toFileInfo(); QFileInfo fi = binary.toFileInfo();
@@ -161,10 +163,5 @@ void SubversionControl::emitFilesChanged(const QStringList &l)
emit filesChanged(l); emit filesChanged(l);
} }
void SubversionControl::emitConfigurationChanged()
{
emit configurationChanged();
}
} // namespace Internal } // namespace Internal
} // namespace Subversion } // namespace Subversion

View File

@@ -62,7 +62,6 @@ public:
void emitRepositoryChanged(const QString &); void emitRepositoryChanged(const QString &);
void emitFilesChanged(const QStringList &); void emitFilesChanged(const QStringList &);
void emitConfigurationChanged();
private: private:
SubversionPlugin *m_plugin; SubversionPlugin *m_plugin;

View File

@@ -247,8 +247,7 @@ bool SubversionPlugin::initialize(const QStringList & /*arguments */, QString *e
Utils::MimeDatabase::addMimeTypes(QLatin1String(":/trolltech.subversion/Subversion.mimetypes.xml")); Utils::MimeDatabase::addMimeTypes(QLatin1String(":/trolltech.subversion/Subversion.mimetypes.xml"));
m_settings.readSettings(ICore::settings()); m_client = new SubversionClient;
m_client = new SubversionClient(&m_settings);
addAutoReleasedObject(new SettingsPage); addAutoReleasedObject(new SettingsPage);
@@ -451,6 +450,12 @@ bool SubversionPlugin::initialize(const QStringList & /*arguments */, QString *e
return true; return true;
} }
SubversionClient *SubversionPlugin::client() const
{
QTC_CHECK(m_client);
return m_client;
}
bool SubversionPlugin::submitEditorAboutToClose() bool SubversionPlugin::submitEditorAboutToClose()
{ {
if (!isCommitEditorOpen()) if (!isCommitEditorOpen())
@@ -470,7 +475,7 @@ bool SubversionPlugin::submitEditorAboutToClose()
// Prompt user. Force a prompt unless submit was actually invoked (that // Prompt user. Force a prompt unless submit was actually invoked (that
// is, the editor was closed or shutdown). // is, the editor was closed or shutdown).
SubversionSettings newSettings = m_settings; VcsBaseClientSettings &newSettings = client()->settings();
const VcsBaseSubmitEditor::PromptSubmitResult answer = const VcsBaseSubmitEditor::PromptSubmitResult answer =
editor->promptSubmit(tr("Closing Subversion Editor"), editor->promptSubmit(tr("Closing Subversion Editor"),
tr("Do you want to commit the change?"), tr("Do you want to commit the change?"),
@@ -487,7 +492,6 @@ bool SubversionPlugin::submitEditorAboutToClose()
default: default:
break; break;
} }
setSettings(newSettings); // in case someone turned prompting off
const QStringList fileList = editor->checkedFiles(); const QStringList fileList = editor->checkedFiles();
bool closeEditor = true; bool closeEditor = true;
if (!fileList.empty()) { if (!fileList.empty()) {
@@ -578,7 +582,7 @@ void SubversionPlugin::revertAll()
// NoteL: Svn "revert ." doesn not work. // NoteL: Svn "revert ." doesn not work.
QStringList args; QStringList args;
args << QLatin1String("revert"); args << QLatin1String("revert");
args << SubversionClient::addAuthenticationOptions(settings()); args << SubversionClient::addAuthenticationOptions(client()->settings());
args << QLatin1String("--recursive") << state.topLevel(); args << QLatin1String("--recursive") << state.topLevel();
const SubversionResponse revertResponse const SubversionResponse revertResponse
= runSvn(state.topLevel(), args, m_client->vcsTimeout() * 1000, = runSvn(state.topLevel(), args, m_client->vcsTimeout() * 1000,
@@ -596,7 +600,7 @@ void SubversionPlugin::revertCurrentFile()
QTC_ASSERT(state.hasFile(), return); QTC_ASSERT(state.hasFile(), return);
QStringList args(QLatin1String("diff")); QStringList args(QLatin1String("diff"));
args << SubversionClient::addAuthenticationOptions(settings()); args << SubversionClient::addAuthenticationOptions(client()->settings());
args.push_back(state.relativeCurrentFile()); args.push_back(state.relativeCurrentFile());
const SubversionResponse diffResponse const SubversionResponse diffResponse
@@ -617,7 +621,7 @@ void SubversionPlugin::revertCurrentFile()
// revert // revert
args.clear(); args.clear();
args << QLatin1String("revert"); args << QLatin1String("revert");
args << SubversionClient::addAuthenticationOptions(settings()); args << SubversionClient::addAuthenticationOptions(client()->settings());
args << state.relativeCurrentFile(); args << state.relativeCurrentFile();
const SubversionResponse revertResponse const SubversionResponse revertResponse
@@ -680,7 +684,7 @@ void SubversionPlugin::startCommit(const QString &workingDir, const QStringList
} }
QStringList args(QLatin1String("status")); QStringList args(QLatin1String("status"));
args << SubversionClient::addAuthenticationOptions(settings()); args << SubversionClient::addAuthenticationOptions(client()->settings());
args += files; args += files;
const SubversionResponse response const SubversionResponse response
@@ -760,7 +764,7 @@ void SubversionPlugin::svnStatus(const QString &workingDir, const QString &relat
const VcsBasePluginState state = currentState(); const VcsBasePluginState state = currentState();
QTC_ASSERT(state.hasTopLevel(), return); QTC_ASSERT(state.hasTopLevel(), return);
QStringList args(QLatin1String("status")); QStringList args(QLatin1String("status"));
args << SubversionClient::addAuthenticationOptions(settings()); args << SubversionClient::addAuthenticationOptions(client()->settings());
if (!relativePath.isEmpty()) if (!relativePath.isEmpty())
args.append(relativePath); args.append(relativePath);
VcsOutputWindow::setRepository(workingDir); VcsOutputWindow::setRepository(workingDir);
@@ -786,7 +790,7 @@ void SubversionPlugin::updateProject()
void SubversionPlugin::svnUpdate(const QString &workingDir, const QString &relativePath) void SubversionPlugin::svnUpdate(const QString &workingDir, const QString &relativePath)
{ {
QStringList args(QLatin1String("update")); QStringList args(QLatin1String("update"));
args << SubversionClient::addAuthenticationOptions(settings()); args << SubversionClient::addAuthenticationOptions(client()->settings());
args.push_back(QLatin1String(Constants::NON_INTERACTIVE_OPTION)); args.push_back(QLatin1String(Constants::NON_INTERACTIVE_OPTION));
if (!relativePath.isEmpty()) if (!relativePath.isEmpty())
args.append(relativePath); args.append(relativePath);
@@ -820,8 +824,9 @@ void SubversionPlugin::vcsAnnotate(const QString &workingDir, const QString &fil
QTextCodec *codec = VcsBaseEditor::getCodec(source); QTextCodec *codec = VcsBaseEditor::getCodec(source);
QStringList args(QLatin1String("annotate")); QStringList args(QLatin1String("annotate"));
args << SubversionClient::addAuthenticationOptions(settings()); const VcsBaseClientSettings &s = client()->settings();
if (m_settings.boolValue(SubversionSettings::spaceIgnorantAnnotationKey)) args << SubversionClient::addAuthenticationOptions(s);
if (s.boolValue(SubversionSettings::spaceIgnorantAnnotationKey))
args << QLatin1String("-x") << QLatin1String("-uw"); args << QLatin1String("-x") << QLatin1String("-uw");
if (!revision.isEmpty()) if (!revision.isEmpty())
args << QLatin1String("-r") << revision; args << QLatin1String("-r") << revision;
@@ -913,7 +918,7 @@ SubversionResponse SubversionPlugin::runSvn(const QString &workingDir,
const QStringList &arguments, int timeOut, const QStringList &arguments, int timeOut,
unsigned flags, QTextCodec *outputCodec) const unsigned flags, QTextCodec *outputCodec) const
{ {
const FileName executable = m_settings.binaryPath(); const FileName executable = client()->vcsBinary();
SubversionResponse response; SubversionResponse response;
if (executable.isEmpty()) { if (executable.isEmpty()) {
response.error = true; response.error = true;
@@ -960,20 +965,6 @@ IEditor *SubversionPlugin::showOutputInEditor(const QString &title, const QStrin
return editor; return editor;
} }
SubversionSettings SubversionPlugin::settings() const
{
return m_settings;
}
void SubversionPlugin::setSettings(const SubversionSettings &s)
{
if (s != m_settings) {
m_settings = s;
m_settings.writeSettings(ICore::settings());
subVersionControl()->emitConfigurationChanged();
}
}
SubversionPlugin *SubversionPlugin::instance() SubversionPlugin *SubversionPlugin::instance()
{ {
QTC_ASSERT(m_subversionPluginInstance, return m_subversionPluginInstance); QTC_ASSERT(m_subversionPluginInstance, return m_subversionPluginInstance);
@@ -1004,7 +995,7 @@ bool SubversionPlugin::vcsAdd(const QString &workingDir, const QString &rawFileN
const QString file = QDir::toNativeSeparators(rawFileName); const QString file = QDir::toNativeSeparators(rawFileName);
QStringList args; QStringList args;
args << QLatin1String("add") args << QLatin1String("add")
<< SubversionClient::addAuthenticationOptions(settings()) << SubversionClient::addAuthenticationOptions(client()->settings())
<< QLatin1String("--parents") << file; << QLatin1String("--parents") << file;
const SubversionResponse response const SubversionResponse response
= runSvn(workingDir, args, m_client->vcsTimeout() * 1000, = runSvn(workingDir, args, m_client->vcsTimeout() * 1000,
@@ -1018,7 +1009,8 @@ bool SubversionPlugin::vcsDelete(const QString &workingDir, const QString &rawFi
QStringList args; QStringList args;
args << QLatin1String("delete"); args << QLatin1String("delete");
args << SubversionClient::addAuthenticationOptions(settings()) << QLatin1String("--force") << file; args << SubversionClient::addAuthenticationOptions(client()->settings())
<< QLatin1String("--force") << file;
const SubversionResponse response const SubversionResponse response
= runSvn(workingDir, args, m_client->vcsTimeout() * 1000, = runSvn(workingDir, args, m_client->vcsTimeout() * 1000,
@@ -1029,7 +1021,7 @@ bool SubversionPlugin::vcsDelete(const QString &workingDir, const QString &rawFi
bool SubversionPlugin::vcsMove(const QString &workingDir, const QString &from, const QString &to) bool SubversionPlugin::vcsMove(const QString &workingDir, const QString &from, const QString &to)
{ {
QStringList args(QLatin1String("move")); QStringList args(QLatin1String("move"));
args << SubversionClient::addAuthenticationOptions(settings()); args << SubversionClient::addAuthenticationOptions(client()->settings());
args << QDir::toNativeSeparators(from) << QDir::toNativeSeparators(to); args << QDir::toNativeSeparators(from) << QDir::toNativeSeparators(to);
const SubversionResponse response const SubversionResponse response
= runSvn(workingDir, args, m_client->vcsTimeout() * 1000, = runSvn(workingDir, args, m_client->vcsTimeout() * 1000,
@@ -1093,7 +1085,7 @@ bool SubversionPlugin::managesFile(const QString &workingDirectory, const QStrin
{ {
QStringList args; QStringList args;
args << QLatin1String("status"); args << QLatin1String("status");
args << SubversionClient::addAuthenticationOptions(settings()) << fileName; args << SubversionClient::addAuthenticationOptions(client()->settings()) << fileName;
SubversionResponse response SubversionResponse response
= runSvn(workingDirectory, args, m_client->vcsTimeout() * 1000, 0); = runSvn(workingDirectory, args, m_client->vcsTimeout() * 1000, 0);
return response.stdOut.isEmpty() || response.stdOut.at(0) != QLatin1Char('?'); return response.stdOut.isEmpty() || response.stdOut.at(0) != QLatin1Char('?');

View File

@@ -75,10 +75,9 @@ public:
bool initialize(const QStringList &arguments, QString *errorMessage); bool initialize(const QStringList &arguments, QString *errorMessage);
SubversionSubmitEditor *openSubversionSubmitEditor(const QString &fileName); SubversionClient *client() const;
SubversionSettings settings() const; SubversionSubmitEditor *openSubversionSubmitEditor(const QString &fileName);
void setSettings(const SubversionSettings &s);
// IVersionControl // IVersionControl
bool vcsAdd(const QString &workingDir, const QString &fileName); bool vcsAdd(const QString &workingDir, const QString &fileName);
@@ -150,7 +149,6 @@ private:
const QStringList m_svnDirectories; const QStringList m_svnDirectories;
SubversionSettings m_settings;
SubversionClient *m_client; SubversionClient *m_client;
QString m_commitMessageFileName; QString m_commitMessageFileName;
QString m_commitRepository; QString m_commitRepository;

View File

@@ -79,25 +79,66 @@ static Core::IEditor *locateEditor(const char *property, const QString &entry)
namespace VcsBase { namespace VcsBase {
class VcsBaseClientImplPrivate
{
public:
VcsBaseClientImplPrivate(VcsBaseClientSettings *settings);
~VcsBaseClientImplPrivate();
VcsBaseClientSettings *m_clientSettings;
};
VcsBaseClientImplPrivate::VcsBaseClientImplPrivate(VcsBaseClientSettings *settings) :
m_clientSettings(settings)
{
m_clientSettings->readSettings(Core::ICore::settings());
}
VcsBaseClientImplPrivate::~VcsBaseClientImplPrivate()
{
delete m_clientSettings;
}
VcsBaseClientImpl::VcsBaseClientImpl(VcsBaseClientSettings *settings) :
d(new VcsBaseClientImplPrivate(settings))
{
connect(Core::ICore::instance(), &Core::ICore::saveSettingsRequested,
this, &VcsBaseClientImpl::saveSettings);
}
VcsBaseClientImpl::~VcsBaseClientImpl()
{
delete d;
}
VcsBaseClientSettings &VcsBaseClientImpl::settings() const
{
return *d->m_clientSettings;
}
void VcsBaseClientImpl::saveSettings()
{
settings().writeSettings(Core::ICore::settings());
}
class VcsBaseClientPrivate class VcsBaseClientPrivate
{ {
public: public:
VcsBaseClientPrivate(VcsBaseClient *client, VcsBaseClientSettings *settings); VcsBaseClientPrivate(VcsBaseClient *client);
void bindCommandToEditor(VcsCommand *cmd, VcsBaseEditorWidget *editor); void bindCommandToEditor(VcsCommand *cmd, VcsBaseEditorWidget *editor);
VcsBaseEditorParameterWidget *createDiffEditor(); VcsBaseEditorParameterWidget *createDiffEditor();
VcsBaseEditorParameterWidget *createLogEditor(); VcsBaseEditorParameterWidget *createLogEditor();
VcsBaseClientSettings *m_clientSettings;
QSignalMapper *m_cmdFinishedMapper; QSignalMapper *m_cmdFinishedMapper;
VcsBaseClient::ParameterWidgetCreator m_diffParamWidgetCreator; VcsBaseClient::ParameterWidgetCreator m_diffParamWidgetCreator;
VcsBaseClient::ParameterWidgetCreator m_logParamWidgetCreator; VcsBaseClient::ParameterWidgetCreator m_logParamWidgetCreator;
}; };
VcsBaseClientPrivate::VcsBaseClientPrivate(VcsBaseClient *client, VcsBaseClientSettings *settings) : VcsBaseClientPrivate::VcsBaseClientPrivate(VcsBaseClient *client) :
m_clientSettings(settings),
m_cmdFinishedMapper(new QSignalMapper(client)) m_cmdFinishedMapper(new QSignalMapper(client))
{ } { }
@@ -124,11 +165,10 @@ VcsBaseClient::StatusItem::StatusItem(const QString &s, const QString &f) :
{ } { }
VcsBaseClient::VcsBaseClient(VcsBaseClientSettings *settings) : VcsBaseClient::VcsBaseClient(VcsBaseClientSettings *settings) :
d(new VcsBaseClientPrivate(this, settings)) VcsBaseClientImpl(settings),
d(new VcsBaseClientPrivate(this))
{ {
qRegisterMetaType<QVariant>(); qRegisterMetaType<QVariant>();
connect(Core::ICore::instance(), &Core::ICore::saveSettingsRequested,
this, &VcsBaseClient::saveSettings);
connect(d->m_cmdFinishedMapper, static_cast<void (QSignalMapper::*)(QWidget*)>(&QSignalMapper::mapped), connect(d->m_cmdFinishedMapper, static_cast<void (QSignalMapper::*)(QWidget*)>(&QSignalMapper::mapped),
this, &VcsBaseClient::commandFinishedGotoLine); this, &VcsBaseClient::commandFinishedGotoLine);
} }
@@ -495,11 +535,6 @@ void VcsBaseClient::commit(const QString &repositoryRoot,
enqueueJob(cmd, args); enqueueJob(cmd, args);
} }
VcsBaseClientSettings *VcsBaseClient::settings() const
{
return d->m_clientSettings;
}
QString VcsBaseClient::vcsEditorTitle(const QString &vcsCmd, const QString &sourceId) const QString VcsBaseClient::vcsEditorTitle(const QString &vcsCmd, const QString &sourceId) const
{ {
return vcsBinary().toFileInfo().baseName() + return vcsBinary().toFileInfo().baseName() +
@@ -577,12 +612,12 @@ void VcsBaseClient::resetCachedVcsInfo(const QString &workingDir)
Utils::FileName VcsBaseClient::vcsBinary() const Utils::FileName VcsBaseClient::vcsBinary() const
{ {
return d->m_clientSettings->binaryPath(); return settings().binaryPath();
} }
int VcsBaseClient::vcsTimeout() const int VcsBaseClient::vcsTimeout() const
{ {
return d->m_clientSettings->intValue(VcsBaseClientSettings::timeoutKey); return settings().intValue(VcsBaseClientSettings::timeoutKey);
} }
void VcsBaseClient::statusParser(const QString &text) void VcsBaseClient::statusParser(const QString &text)
@@ -612,11 +647,6 @@ void VcsBaseClient::annotateRevision(const QString &workingDirectory, const QSt
annotate(workingDirectory, file, changeCopy, lineNumber); annotate(workingDirectory, file, changeCopy, lineNumber);
} }
void VcsBaseClient::saveSettings()
{
settings()->writeSettings(Core::ICore::settings());
}
void VcsBaseClient::commandFinishedGotoLine(QWidget *editorObject) void VcsBaseClient::commandFinishedGotoLine(QWidget *editorObject)
{ {
VcsBaseEditorWidget *editor = qobject_cast<VcsBaseEditorWidget *>(editorObject); VcsBaseEditorWidget *editor = qobject_cast<VcsBaseEditorWidget *>(editorObject);

View File

@@ -59,6 +59,7 @@ class VcsCommand;
class VcsBaseEditorWidget; class VcsBaseEditorWidget;
class VcsBaseClientSettings; class VcsBaseClientSettings;
class VcsJob; class VcsJob;
class VcsBaseClientImplPrivate;
class VcsBaseClientPrivate; class VcsBaseClientPrivate;
class VcsBaseEditorParameterWidget; class VcsBaseEditorParameterWidget;
@@ -67,6 +68,15 @@ class VCSBASE_EXPORT VcsBaseClientImpl : public QObject
Q_OBJECT Q_OBJECT
public: public:
explicit VcsBaseClientImpl(VcsBaseClientSettings *settings);
~VcsBaseClientImpl();
VcsBaseClientSettings &settings() const;
private:
void saveSettings();
VcsBaseClientImplPrivate *d;
}; };
class VCSBASE_EXPORT VcsBaseClient : public VcsBaseClientImpl class VCSBASE_EXPORT VcsBaseClient : public VcsBaseClientImpl
@@ -131,7 +141,6 @@ public:
virtual QString findTopLevelForFile(const QFileInfo &file) const = 0; virtual QString findTopLevelForFile(const QFileInfo &file) const = 0;
virtual VcsBaseClientSettings *settings() const;
virtual QProcessEnvironment processEnvironment() const; virtual QProcessEnvironment processEnvironment() const;
Utils::FileName vcsBinary() const; Utils::FileName vcsBinary() const;
@@ -207,7 +216,6 @@ protected:
private: private:
void statusParser(const QString&); void statusParser(const QString&);
void annotateRevision(const QString&, const QString&, const QString&, int); void annotateRevision(const QString&, const QString&, const QString&, int);
void saveSettings();
void commandFinishedGotoLine(QWidget*); void commandFinishedGotoLine(QWidget*);
friend class VcsBaseClientPrivate; friend class VcsBaseClientPrivate;