forked from qt-creator/qt-creator
Mercurial: Save resources, polishing.
Start the jobrunner on demand, save options only if changed, give it the structure used elsewhere in the VCS plugins. Remove last traces of the cmd /c hack.
This commit is contained in:
@@ -76,15 +76,15 @@ QSharedPointer<VCSBase::AbstractCheckoutJob> CloneWizard::createJob(const QList<
|
|||||||
if (!page)
|
if (!page)
|
||||||
return QSharedPointer<VCSBase::AbstractCheckoutJob>();
|
return QSharedPointer<VCSBase::AbstractCheckoutJob>();
|
||||||
|
|
||||||
MercurialSettings *settings = MercurialPlugin::instance()->settings();
|
const MercurialSettings &settings = MercurialPlugin::instance()->settings();
|
||||||
|
|
||||||
QStringList args = settings->standardArguments();
|
QStringList args = settings.standardArguments();
|
||||||
QString path = page->path();
|
QString path = page->path();
|
||||||
QString directory = page->directory();
|
QString directory = page->directory();
|
||||||
|
|
||||||
args << QLatin1String("clone") << page->repository() << directory;
|
args << QLatin1String("clone") << page->repository() << directory;
|
||||||
*checkoutPath = path + QLatin1Char('/') + directory;
|
*checkoutPath = path + QLatin1Char('/') + directory;
|
||||||
|
|
||||||
return QSharedPointer<VCSBase::AbstractCheckoutJob>(new VCSBase::ProcessCheckoutJob(settings->binary(),
|
return QSharedPointer<VCSBase::AbstractCheckoutJob>(new VCSBase::ProcessCheckoutJob(settings.binary(),
|
||||||
args, path));
|
args, path));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -60,11 +60,10 @@ inline Core::IEditor* locateEditor(const Core::ICore *core, const char *property
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
MercurialClient::MercurialClient()
|
MercurialClient::MercurialClient() :
|
||||||
: core(Core::ICore::instance())
|
jobManager(0),
|
||||||
|
core(Core::ICore::instance())
|
||||||
{
|
{
|
||||||
jobManager = new MercurialJobRunner();
|
|
||||||
jobManager->start();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
MercurialClient::~MercurialClient()
|
MercurialClient::~MercurialClient()
|
||||||
@@ -118,9 +117,9 @@ bool MercurialClient::executeHgSynchronously(const QFileInfo &file, const QStrin
|
|||||||
QProcess hgProcess;
|
QProcess hgProcess;
|
||||||
hgProcess.setWorkingDirectory(file.isDir() ? file.absoluteFilePath() : file.absolutePath());
|
hgProcess.setWorkingDirectory(file.isDir() ? file.absoluteFilePath() : file.absolutePath());
|
||||||
|
|
||||||
const MercurialSettings *settings = MercurialPlugin::instance()->settings();
|
const MercurialSettings &settings = MercurialPlugin::instance()->settings();
|
||||||
const QString binary = settings->binary();
|
const QString binary = settings.binary();
|
||||||
const QStringList arguments = MercurialPlugin::instance()->standardArguments() + args;
|
const QStringList arguments = settings.standardArguments() + args;
|
||||||
|
|
||||||
VCSBase::VCSBaseOutputWindow *outputWindow = VCSBase::VCSBaseOutputWindow::instance();
|
VCSBase::VCSBaseOutputWindow *outputWindow = VCSBase::VCSBaseOutputWindow::instance();
|
||||||
outputWindow->appendCommand(MercurialJobRunner::msgExecute(binary, arguments));
|
outputWindow->appendCommand(MercurialJobRunner::msgExecute(binary, arguments));
|
||||||
@@ -134,9 +133,9 @@ bool MercurialClient::executeHgSynchronously(const QFileInfo &file, const QStrin
|
|||||||
|
|
||||||
hgProcess.closeWriteChannel();
|
hgProcess.closeWriteChannel();
|
||||||
|
|
||||||
if (!hgProcess.waitForFinished(settings->timeout())) {
|
if (!hgProcess.waitForFinished(settings.timeoutMilliSeconds())) {
|
||||||
hgProcess.terminate();
|
hgProcess.terminate();
|
||||||
outputWindow->appendError(MercurialJobRunner::msgTimeout(settings->timeout()));
|
outputWindow->appendError(MercurialJobRunner::msgTimeout(settings.timeoutSeconds()));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -170,7 +169,7 @@ void MercurialClient::annotate(const QFileInfo &file)
|
|||||||
"annotate", file.absoluteFilePath());
|
"annotate", file.absoluteFilePath());
|
||||||
|
|
||||||
QSharedPointer<HgTask> job(new HgTask(file.absolutePath(), args, editor));
|
QSharedPointer<HgTask> job(new HgTask(file.absolutePath(), args, editor));
|
||||||
jobManager->enqueueJob(job);
|
enqueueJob(job);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MercurialClient::diff(const QFileInfo &fileOrDir)
|
void MercurialClient::diff(const QFileInfo &fileOrDir)
|
||||||
@@ -198,7 +197,7 @@ void MercurialClient::diff(const QFileInfo &fileOrDir)
|
|||||||
"diff", id);
|
"diff", id);
|
||||||
|
|
||||||
QSharedPointer<HgTask> job(new HgTask(workingPath, args, editor));
|
QSharedPointer<HgTask> job(new HgTask(workingPath, args, editor));
|
||||||
jobManager->enqueueJob(job);
|
enqueueJob(job);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MercurialClient::log(const QFileInfo &fileOrDir)
|
void MercurialClient::log(const QFileInfo &fileOrDir)
|
||||||
@@ -223,7 +222,7 @@ void MercurialClient::log(const QFileInfo &fileOrDir)
|
|||||||
"log", id);
|
"log", id);
|
||||||
|
|
||||||
QSharedPointer<HgTask> job(new HgTask(workingDir, args, editor));
|
QSharedPointer<HgTask> job(new HgTask(workingDir, args, editor));
|
||||||
jobManager->enqueueJob(job);
|
enqueueJob(job);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MercurialClient::revert(const QFileInfo &fileOrDir, const QString &revision)
|
void MercurialClient::revert(const QFileInfo &fileOrDir, const QString &revision)
|
||||||
@@ -239,7 +238,7 @@ void MercurialClient::revert(const QFileInfo &fileOrDir, const QString &revision
|
|||||||
|
|
||||||
QSharedPointer<HgTask> job(new HgTask(fileOrDir.isDir() ? fileOrDir.absoluteFilePath() :
|
QSharedPointer<HgTask> job(new HgTask(fileOrDir.isDir() ? fileOrDir.absoluteFilePath() :
|
||||||
fileOrDir.absolutePath(), args, false));
|
fileOrDir.absolutePath(), args, false));
|
||||||
jobManager->enqueueJob(job);
|
enqueueJob(job);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MercurialClient::status(const QFileInfo &fileOrDir)
|
void MercurialClient::status(const QFileInfo &fileOrDir)
|
||||||
@@ -250,7 +249,7 @@ void MercurialClient::status(const QFileInfo &fileOrDir)
|
|||||||
|
|
||||||
QSharedPointer<HgTask> job(new HgTask(fileOrDir.isDir() ? fileOrDir.absoluteFilePath() :
|
QSharedPointer<HgTask> job(new HgTask(fileOrDir.isDir() ? fileOrDir.absoluteFilePath() :
|
||||||
fileOrDir.absolutePath(), args, false));
|
fileOrDir.absolutePath(), args, false));
|
||||||
jobManager->enqueueJob(job);
|
enqueueJob(job);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MercurialClient::statusWithSignal(const QFileInfo &repositoryRoot)
|
void MercurialClient::statusWithSignal(const QFileInfo &repositoryRoot)
|
||||||
@@ -261,7 +260,7 @@ void MercurialClient::statusWithSignal(const QFileInfo &repositoryRoot)
|
|||||||
connect(job.data(), SIGNAL(rawData(QByteArray)),
|
connect(job.data(), SIGNAL(rawData(QByteArray)),
|
||||||
this, SLOT(statusParser(QByteArray)));
|
this, SLOT(statusParser(QByteArray)));
|
||||||
|
|
||||||
jobManager->enqueueJob(job);
|
enqueueJob(job);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MercurialClient::statusParser(const QByteArray &data)
|
void MercurialClient::statusParser(const QByteArray &data)
|
||||||
@@ -302,7 +301,7 @@ void MercurialClient::import(const QFileInfo &repositoryRoot, const QStringList
|
|||||||
args += files;
|
args += files;
|
||||||
|
|
||||||
QSharedPointer<HgTask> job(new HgTask(repositoryRoot.absoluteFilePath(), args, false));
|
QSharedPointer<HgTask> job(new HgTask(repositoryRoot.absoluteFilePath(), args, false));
|
||||||
jobManager->enqueueJob(job);
|
enqueueJob(job);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MercurialClient::pull(const QFileInfo &repositoryRoot, const QString &repository)
|
void MercurialClient::pull(const QFileInfo &repositoryRoot, const QString &repository)
|
||||||
@@ -312,7 +311,7 @@ void MercurialClient::pull(const QFileInfo &repositoryRoot, const QString &repos
|
|||||||
args.append(repository);
|
args.append(repository);
|
||||||
|
|
||||||
QSharedPointer<HgTask> job(new HgTask(repositoryRoot.absoluteFilePath(), args, false));
|
QSharedPointer<HgTask> job(new HgTask(repositoryRoot.absoluteFilePath(), args, false));
|
||||||
jobManager->enqueueJob(job);
|
enqueueJob(job);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MercurialClient::push(const QFileInfo &repositoryRoot, const QString &repository)
|
void MercurialClient::push(const QFileInfo &repositoryRoot, const QString &repository)
|
||||||
@@ -322,7 +321,7 @@ void MercurialClient::push(const QFileInfo &repositoryRoot, const QString &repos
|
|||||||
args.append(repository);
|
args.append(repository);
|
||||||
|
|
||||||
QSharedPointer<HgTask> job(new HgTask(repositoryRoot.absoluteFilePath(), args, false));
|
QSharedPointer<HgTask> job(new HgTask(repositoryRoot.absoluteFilePath(), args, false));
|
||||||
jobManager->enqueueJob(job);
|
enqueueJob(job);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MercurialClient::incoming(const QFileInfo &repositoryRoot, const QString &repository)
|
void MercurialClient::incoming(const QFileInfo &repositoryRoot, const QString &repository)
|
||||||
@@ -341,7 +340,7 @@ void MercurialClient::incoming(const QFileInfo &repositoryRoot, const QString &r
|
|||||||
true, "incoming", id);
|
true, "incoming", id);
|
||||||
|
|
||||||
QSharedPointer<HgTask> job(new HgTask(repositoryRoot.absoluteFilePath(), args, editor));
|
QSharedPointer<HgTask> job(new HgTask(repositoryRoot.absoluteFilePath(), args, editor));
|
||||||
jobManager->enqueueJob(job);
|
enqueueJob(job);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MercurialClient::outgoing(const QFileInfo &repositoryRoot)
|
void MercurialClient::outgoing(const QFileInfo &repositoryRoot)
|
||||||
@@ -358,7 +357,7 @@ void MercurialClient::outgoing(const QFileInfo &repositoryRoot)
|
|||||||
"outgoing", id);
|
"outgoing", id);
|
||||||
|
|
||||||
QSharedPointer<HgTask> job(new HgTask(repositoryRoot.absoluteFilePath(), args, editor));
|
QSharedPointer<HgTask> job(new HgTask(repositoryRoot.absoluteFilePath(), args, editor));
|
||||||
jobManager->enqueueJob(job);
|
enqueueJob(job);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MercurialClient::view(const QString &source, const QString &id)
|
void MercurialClient::view(const QString &source, const QString &id)
|
||||||
@@ -374,7 +373,7 @@ void MercurialClient::view(const QString &source, const QString &id)
|
|||||||
true, "view", id);
|
true, "view", id);
|
||||||
|
|
||||||
QSharedPointer<HgTask> job(new HgTask(source, args, editor));
|
QSharedPointer<HgTask> job(new HgTask(source, args, editor));
|
||||||
jobManager->enqueueJob(job);
|
enqueueJob(job);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MercurialClient::update(const QFileInfo &repositoryRoot, const QString &revision)
|
void MercurialClient::update(const QFileInfo &repositoryRoot, const QString &revision)
|
||||||
@@ -384,7 +383,7 @@ void MercurialClient::update(const QFileInfo &repositoryRoot, const QString &rev
|
|||||||
args << revision;
|
args << revision;
|
||||||
|
|
||||||
QSharedPointer<HgTask> job(new HgTask(repositoryRoot.absoluteFilePath(), args, false));
|
QSharedPointer<HgTask> job(new HgTask(repositoryRoot.absoluteFilePath(), args, false));
|
||||||
jobManager->enqueueJob(job);
|
enqueueJob(job);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MercurialClient::commit(const QFileInfo &repositoryRoot, const QStringList &files,
|
void MercurialClient::commit(const QFileInfo &repositoryRoot, const QStringList &files,
|
||||||
@@ -395,7 +394,7 @@ void MercurialClient::commit(const QFileInfo &repositoryRoot, const QStringList
|
|||||||
args << QLatin1String("-u") << committerInfo;
|
args << QLatin1String("-u") << committerInfo;
|
||||||
args << QLatin1String("-l") << commitMessageFile << files;
|
args << QLatin1String("-l") << commitMessageFile << files;
|
||||||
QSharedPointer<HgTask> job(new HgTask(repositoryRoot.absoluteFilePath(), args, false));
|
QSharedPointer<HgTask> job(new HgTask(repositoryRoot.absoluteFilePath(), args, false));
|
||||||
jobManager->enqueueJob(job);
|
enqueueJob(job);
|
||||||
}
|
}
|
||||||
|
|
||||||
QString MercurialClient::findTopLevelForFile(const QFileInfo &file)
|
QString MercurialClient::findTopLevelForFile(const QFileInfo &file)
|
||||||
@@ -443,3 +442,12 @@ VCSBase::VCSBaseEditor *MercurialClient::createVCSEditor(const QString &kind, QS
|
|||||||
core->editorManager()->activateEditor(outputEditor);
|
core->editorManager()->activateEditor(outputEditor);
|
||||||
return baseEditor;
|
return baseEditor;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MercurialClient::enqueueJob(const QSharedPointer<HgTask> &job)
|
||||||
|
{
|
||||||
|
if (!jobManager) {
|
||||||
|
jobManager = new MercurialJobRunner();
|
||||||
|
jobManager->start();
|
||||||
|
}
|
||||||
|
jobManager->enqueueJob(job);
|
||||||
|
}
|
||||||
|
|||||||
@@ -32,6 +32,7 @@
|
|||||||
|
|
||||||
#include <QtCore/QObject>
|
#include <QtCore/QObject>
|
||||||
#include <QtCore/QPair>
|
#include <QtCore/QPair>
|
||||||
|
#include <QtCore/QSharedPointer>
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
class QFileInfo;
|
class QFileInfo;
|
||||||
@@ -49,6 +50,7 @@ namespace Mercurial {
|
|||||||
namespace Internal {
|
namespace Internal {
|
||||||
|
|
||||||
class MercurialJobRunner;
|
class MercurialJobRunner;
|
||||||
|
class HgTask;
|
||||||
|
|
||||||
class MercurialClient : public QObject
|
class MercurialClient : public QObject
|
||||||
{
|
{
|
||||||
@@ -90,6 +92,7 @@ private slots:
|
|||||||
private:
|
private:
|
||||||
bool executeHgSynchronously(const QFileInfo &file, const QStringList &args,
|
bool executeHgSynchronously(const QFileInfo &file, const QStringList &args,
|
||||||
QByteArray *output=0) const;
|
QByteArray *output=0) const;
|
||||||
|
void enqueueJob(const QSharedPointer<HgTask> &);
|
||||||
|
|
||||||
MercurialJobRunner *jobManager;
|
MercurialJobRunner *jobManager;
|
||||||
Core::ICore *core;
|
Core::ICore *core;
|
||||||
|
|||||||
@@ -97,10 +97,10 @@ void MercurialJobRunner::restart()
|
|||||||
|
|
||||||
void MercurialJobRunner::getSettings()
|
void MercurialJobRunner::getSettings()
|
||||||
{
|
{
|
||||||
const MercurialSettings *settings = MercurialPlugin::instance()->settings();
|
const MercurialSettings &settings = MercurialPlugin::instance()->settings();
|
||||||
binary = settings->binary();
|
binary = settings.binary();
|
||||||
timeout = settings->timeout();
|
timeout = settings.timeoutMilliSeconds();
|
||||||
standardArguments = settings->standardArguments();
|
standardArguments = settings.standardArguments();
|
||||||
}
|
}
|
||||||
|
|
||||||
void MercurialJobRunner::enqueueJob(const QSharedPointer<HgTask> &job)
|
void MercurialJobRunner::enqueueJob(const QSharedPointer<HgTask> &job)
|
||||||
@@ -142,9 +142,9 @@ QString MercurialJobRunner::msgStartFailed(const QString &binary, const QString
|
|||||||
return tr("Unable to start mercurial process '%1': %2").arg(binary, why);
|
return tr("Unable to start mercurial process '%1': %2").arg(binary, why);
|
||||||
}
|
}
|
||||||
|
|
||||||
QString MercurialJobRunner::msgTimeout(int timeoutMS)
|
QString MercurialJobRunner::msgTimeout(int timeoutSeconds)
|
||||||
{
|
{
|
||||||
return tr("Timed out after %1ms waiting for mercurial process to finish.").arg(timeoutMS);
|
return tr("Timed out after %1s waiting for mercurial process to finish.").arg(timeoutSeconds);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MercurialJobRunner::task(const QSharedPointer<HgTask> &job)
|
void MercurialJobRunner::task(const QSharedPointer<HgTask> &job)
|
||||||
@@ -192,7 +192,7 @@ void MercurialJobRunner::task(const QSharedPointer<HgTask> &job)
|
|||||||
|
|
||||||
if (!hgProcess.waitForFinished(timeout)) {
|
if (!hgProcess.waitForFinished(timeout)) {
|
||||||
hgProcess.terminate();
|
hgProcess.terminate();
|
||||||
emit error(msgTimeout(timeout));
|
emit error(msgTimeout(timeout / 1000));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -83,7 +83,7 @@ public:
|
|||||||
|
|
||||||
static QString msgExecute(const QString &binary, const QStringList &args);
|
static QString msgExecute(const QString &binary, const QStringList &args);
|
||||||
static QString msgStartFailed(const QString &binary, const QString &why);
|
static QString msgStartFailed(const QString &binary, const QString &why);
|
||||||
static QString msgTimeout(int timeoutMS);
|
static QString msgTimeout(int timeoutSeconds);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void run();
|
void run();
|
||||||
|
|||||||
@@ -121,8 +121,7 @@ static inline const VCSBase::VCSBaseEditorParameters *findType(int ie)
|
|||||||
|
|
||||||
MercurialPlugin *MercurialPlugin::m_instance = 0;
|
MercurialPlugin *MercurialPlugin::m_instance = 0;
|
||||||
|
|
||||||
MercurialPlugin::MercurialPlugin()
|
MercurialPlugin::MercurialPlugin() :
|
||||||
: mercurialSettings(new MercurialSettings),
|
|
||||||
optionsPage(0),
|
optionsPage(0),
|
||||||
client(0),
|
client(0),
|
||||||
mercurialVC(0),
|
mercurialVC(0),
|
||||||
@@ -139,11 +138,6 @@ MercurialPlugin::~MercurialPlugin()
|
|||||||
client = 0;
|
client = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mercurialSettings) {
|
|
||||||
delete mercurialSettings;
|
|
||||||
mercurialSettings = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
deleteCommitLog();
|
deleteCommitLog();
|
||||||
|
|
||||||
m_instance = 0;
|
m_instance = 0;
|
||||||
@@ -161,6 +155,7 @@ bool MercurialPlugin::initialize(const QStringList &arguments, QString *error_me
|
|||||||
|
|
||||||
optionsPage = new OptionsPage();
|
optionsPage = new OptionsPage();
|
||||||
addAutoReleasedObject(optionsPage);
|
addAutoReleasedObject(optionsPage);
|
||||||
|
mercurialSettings.readSettings(core->settings());
|
||||||
|
|
||||||
client = new MercurialClient();
|
client = new MercurialClient();
|
||||||
connect(optionsPage, SIGNAL(settingsChanged()), client, SLOT(settingsChanged()));
|
connect(optionsPage, SIGNAL(settingsChanged()), client, SLOT(settingsChanged()));
|
||||||
@@ -194,14 +189,21 @@ void MercurialPlugin::extensionsInitialized()
|
|||||||
this, SLOT(currentProjectChanged(ProjectExplorer::Project *)));
|
this, SLOT(currentProjectChanged(ProjectExplorer::Project *)));
|
||||||
}
|
}
|
||||||
|
|
||||||
MercurialSettings *MercurialPlugin::settings()
|
const MercurialSettings &MercurialPlugin::settings() const
|
||||||
{
|
{
|
||||||
return mercurialSettings;
|
return mercurialSettings;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MercurialPlugin::setSettings(const MercurialSettings &settings)
|
||||||
|
{
|
||||||
|
if (settings != mercurialSettings) {
|
||||||
|
mercurialSettings = settings;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
QStringList MercurialPlugin::standardArguments() const
|
QStringList MercurialPlugin::standardArguments() const
|
||||||
{
|
{
|
||||||
return mercurialSettings->standardArguments();
|
return mercurialSettings.standardArguments();
|
||||||
}
|
}
|
||||||
|
|
||||||
void MercurialPlugin::createMenu()
|
void MercurialPlugin::createMenu()
|
||||||
@@ -530,8 +532,8 @@ void MercurialPlugin::showCommitWidget(const QList<QPair<QString, QString> > &st
|
|||||||
|
|
||||||
QString branch = client->branchQuerySync(currentProjectRoot());
|
QString branch = client->branchQuerySync(currentProjectRoot());
|
||||||
|
|
||||||
commitEditor->setFields(currentProjectRoot(), branch, mercurialSettings->userName(),
|
commitEditor->setFields(currentProjectRoot(), branch, mercurialSettings.userName(),
|
||||||
mercurialSettings->email(), status);
|
mercurialSettings.email(), status);
|
||||||
|
|
||||||
commitEditor->registerActions(editorUndo, editorRedo, editorCommit, editorDiff);
|
commitEditor->registerActions(editorUndo, editorRedo, editorCommit, editorDiff);
|
||||||
connect(commitEditor, SIGNAL(diffSelectedFiles(const QStringList &)),
|
connect(commitEditor, SIGNAL(diffSelectedFiles(const QStringList &)),
|
||||||
@@ -564,11 +566,11 @@ bool MercurialPlugin::closeEditor(Core::IEditor *editor)
|
|||||||
if (!editorFile || !commitEditor)
|
if (!editorFile || !commitEditor)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
bool dummyPrompt = settings()->prompt();
|
bool dummyPrompt = mercurialSettings.prompt();
|
||||||
const VCSBase::VCSBaseSubmitEditor::PromptSubmitResult response =
|
const VCSBase::VCSBaseSubmitEditor::PromptSubmitResult response =
|
||||||
commitEditor->promptSubmit(tr("Close commit editor"), tr("Do you want to commit the changes?"),
|
commitEditor->promptSubmit(tr("Close commit editor"), tr("Do you want to commit the changes?"),
|
||||||
tr("Message check failed. Do you want to proceed?"),
|
tr("Message check failed. Do you want to proceed?"),
|
||||||
&dummyPrompt, settings()->prompt());
|
&dummyPrompt, mercurialSettings.prompt());
|
||||||
|
|
||||||
switch (response) {
|
switch (response) {
|
||||||
case VCSBase::VCSBaseSubmitEditor::SubmitCanceled:
|
case VCSBase::VCSBaseSubmitEditor::SubmitCanceled:
|
||||||
|
|||||||
@@ -30,6 +30,8 @@
|
|||||||
#ifndef MERCURIALPLUGIN_H
|
#ifndef MERCURIALPLUGIN_H
|
||||||
#define MERCURIALPLUGIN_H
|
#define MERCURIALPLUGIN_H
|
||||||
|
|
||||||
|
#include "mercurialsettings.h"
|
||||||
|
|
||||||
#include <extensionsystem/iplugin.h>
|
#include <extensionsystem/iplugin.h>
|
||||||
#include <coreplugin/icorelistener.h>
|
#include <coreplugin/icorelistener.h>
|
||||||
|
|
||||||
@@ -85,7 +87,8 @@ public:
|
|||||||
bool closeEditor(Core::IEditor *editor);
|
bool closeEditor(Core::IEditor *editor);
|
||||||
QStringList standardArguments() const;
|
QStringList standardArguments() const;
|
||||||
|
|
||||||
MercurialSettings *settings();
|
const MercurialSettings &settings() const;
|
||||||
|
void setSettings(const MercurialSettings &settings);
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
// File menu action Slots
|
// File menu action Slots
|
||||||
@@ -146,7 +149,7 @@ private:
|
|||||||
|
|
||||||
//Variables
|
//Variables
|
||||||
static MercurialPlugin *m_instance;
|
static MercurialPlugin *m_instance;
|
||||||
MercurialSettings *mercurialSettings;
|
MercurialSettings mercurialSettings;
|
||||||
OptionsPage *optionsPage;
|
OptionsPage *optionsPage;
|
||||||
MercurialClient *client;
|
MercurialClient *client;
|
||||||
|
|
||||||
|
|||||||
@@ -30,40 +30,53 @@
|
|||||||
#include "mercurialsettings.h"
|
#include "mercurialsettings.h"
|
||||||
#include "constants.h"
|
#include "constants.h"
|
||||||
|
|
||||||
#include <coreplugin/icore.h>
|
|
||||||
#include <QtCore/QSettings>
|
#include <QtCore/QSettings>
|
||||||
|
|
||||||
|
|
||||||
using namespace Mercurial::Internal;
|
using namespace Mercurial::Internal;
|
||||||
|
|
||||||
MercurialSettings::MercurialSettings()
|
enum { timeOutDefaultSeconds = 30 };
|
||||||
|
|
||||||
|
MercurialSettings::MercurialSettings() :
|
||||||
|
m_binary(QLatin1String(Constants::MERCURIALDEFAULT)),
|
||||||
|
m_logCount(0),
|
||||||
|
m_timeoutSeconds(timeOutDefaultSeconds),
|
||||||
|
m_prompt(true)
|
||||||
{
|
{
|
||||||
readSettings();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QString MercurialSettings::binary() const
|
QString MercurialSettings::binary() const
|
||||||
{
|
{
|
||||||
return bin;
|
return m_binary;
|
||||||
}
|
}
|
||||||
|
|
||||||
QString MercurialSettings::application() const
|
void MercurialSettings::setBinary(const QString &b)
|
||||||
{
|
{
|
||||||
return app;
|
m_binary = b;
|
||||||
}
|
}
|
||||||
|
|
||||||
QStringList MercurialSettings::standardArguments() const
|
QStringList MercurialSettings::standardArguments() const
|
||||||
{
|
{
|
||||||
return standardArgs;
|
return m_standardArguments;
|
||||||
}
|
}
|
||||||
|
|
||||||
QString MercurialSettings::userName() const
|
QString MercurialSettings::userName() const
|
||||||
{
|
{
|
||||||
return user;
|
return m_user;
|
||||||
|
}
|
||||||
|
|
||||||
|
void MercurialSettings::setUserName(const QString &u)
|
||||||
|
{
|
||||||
|
m_user = u;
|
||||||
}
|
}
|
||||||
|
|
||||||
QString MercurialSettings::email() const
|
QString MercurialSettings::email() const
|
||||||
{
|
{
|
||||||
return mail;
|
return m_mail;
|
||||||
|
}
|
||||||
|
|
||||||
|
void MercurialSettings::setEmail(const QString &m)
|
||||||
|
{
|
||||||
|
m_mail = m;
|
||||||
}
|
}
|
||||||
|
|
||||||
int MercurialSettings::logCount() const
|
int MercurialSettings::logCount() const
|
||||||
@@ -71,16 +84,26 @@ int MercurialSettings::logCount() const
|
|||||||
return m_logCount;
|
return m_logCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
int MercurialSettings::timeout() const
|
void MercurialSettings::setLogCount(int l)
|
||||||
|
{
|
||||||
|
m_logCount = l;
|
||||||
|
}
|
||||||
|
|
||||||
|
int MercurialSettings::timeoutMilliSeconds() const
|
||||||
{
|
{
|
||||||
//return timeout is in Ms
|
//return timeout is in Ms
|
||||||
return m_timeout * 1000;
|
return m_timeoutSeconds * 1000;
|
||||||
}
|
}
|
||||||
|
|
||||||
int MercurialSettings::timeoutSeconds() const
|
int MercurialSettings::timeoutSeconds() const
|
||||||
{
|
{
|
||||||
//return timeout in seconds (as the user specifies on the options page
|
//return timeout in seconds (as the user specifies on the options page
|
||||||
return m_timeout;
|
return m_timeoutSeconds;
|
||||||
|
}
|
||||||
|
|
||||||
|
void MercurialSettings::setTimeoutSeconds(int s)
|
||||||
|
{
|
||||||
|
m_timeoutSeconds = s;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool MercurialSettings::prompt() const
|
bool MercurialSettings::prompt() const
|
||||||
@@ -88,50 +111,39 @@ bool MercurialSettings::prompt() const
|
|||||||
return m_prompt;
|
return m_prompt;
|
||||||
}
|
}
|
||||||
|
|
||||||
void MercurialSettings::writeSettings(const QString &application, const QString &userName,
|
void MercurialSettings::setPrompt(bool b)
|
||||||
const QString &email, int logCount, int timeout, bool prompt)
|
|
||||||
{
|
{
|
||||||
QSettings *settings = Core::ICore::instance()->settings();
|
m_prompt = b;
|
||||||
if (settings) {
|
|
||||||
settings->beginGroup(QLatin1String("Mercurial"));
|
|
||||||
settings->setValue(QLatin1String(Constants::MERCURIALPATH), application);
|
|
||||||
settings->setValue(QLatin1String(Constants::MERCURIALUSERNAME), userName);
|
|
||||||
settings->setValue(QLatin1String(Constants::MERCURIALEMAIL), email);
|
|
||||||
settings->setValue(QLatin1String(Constants::MERCURIALLOGCOUNT), logCount);
|
|
||||||
settings->setValue(QLatin1String(Constants::MERCURIALTIMEOUT), timeout);
|
|
||||||
settings->setValue(QLatin1String(Constants::MERCURIALPROMPTSUBMIT), prompt);
|
|
||||||
settings->endGroup();
|
|
||||||
}
|
|
||||||
|
|
||||||
app = application;
|
|
||||||
user = userName;
|
|
||||||
mail = email;
|
|
||||||
m_logCount = logCount;
|
|
||||||
m_timeout = timeout;
|
|
||||||
m_prompt = prompt;
|
|
||||||
setBinAndArgs();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void MercurialSettings::readSettings()
|
void MercurialSettings::writeSettings(QSettings *settings) const
|
||||||
{
|
{
|
||||||
QSettings *settings = Core::ICore::instance()->settings();
|
settings->beginGroup(QLatin1String("Mercurial"));
|
||||||
if (settings) {
|
settings->setValue(QLatin1String(Constants::MERCURIALPATH), m_binary);
|
||||||
settings->beginGroup(QLatin1String("Mercurial"));
|
settings->setValue(QLatin1String(Constants::MERCURIALUSERNAME), m_user);
|
||||||
app = settings->value(QLatin1String(Constants::MERCURIALPATH),
|
settings->setValue(QLatin1String(Constants::MERCURIALEMAIL), m_mail);
|
||||||
QLatin1String(Constants::MERCURIALDEFAULT)).toString();
|
settings->setValue(QLatin1String(Constants::MERCURIALLOGCOUNT), m_logCount);
|
||||||
user = settings->value(QLatin1String(Constants::MERCURIALUSERNAME), QString()).toString();
|
settings->setValue(QLatin1String(Constants::MERCURIALTIMEOUT), m_timeoutSeconds);
|
||||||
mail = settings->value(QLatin1String(Constants::MERCURIALEMAIL), QString()).toString();
|
settings->setValue(QLatin1String(Constants::MERCURIALPROMPTSUBMIT), m_prompt);
|
||||||
m_logCount = settings->value(QLatin1String(Constants::MERCURIALLOGCOUNT), 0).toInt();
|
settings->endGroup();
|
||||||
m_timeout = settings->value(QLatin1String(Constants::MERCURIALTIMEOUT), 30).toInt();
|
|
||||||
m_prompt = settings->value(QLatin1String(Constants::MERCURIALPROMPTSUBMIT), true).toBool();
|
|
||||||
settings->endGroup();
|
|
||||||
}
|
|
||||||
|
|
||||||
setBinAndArgs();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void MercurialSettings::setBinAndArgs()
|
void MercurialSettings::readSettings(const QSettings *settings)
|
||||||
{
|
{
|
||||||
standardArgs.clear();
|
const QString keyRoot = QLatin1String("Mercurial/");
|
||||||
bin = app;
|
m_binary = settings->value(keyRoot + QLatin1String(Constants::MERCURIALPATH),
|
||||||
|
QLatin1String(Constants::MERCURIALDEFAULT)).toString();
|
||||||
|
m_user = settings->value(keyRoot + QLatin1String(Constants::MERCURIALUSERNAME), QString()).toString();
|
||||||
|
m_mail = settings->value(keyRoot + QLatin1String(Constants::MERCURIALEMAIL), QString()).toString();
|
||||||
|
m_logCount = settings->value(keyRoot + QLatin1String(Constants::MERCURIALLOGCOUNT), 0).toInt();
|
||||||
|
m_timeoutSeconds = settings->value(keyRoot + QLatin1String(Constants::MERCURIALTIMEOUT), timeOutDefaultSeconds).toInt();
|
||||||
|
m_prompt = settings->value(keyRoot + QLatin1String(Constants::MERCURIALPROMPTSUBMIT), true).toBool();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool MercurialSettings::equals(const MercurialSettings &rhs) const
|
||||||
|
{
|
||||||
|
return m_binary == rhs.m_binary && m_standardArguments == rhs.m_standardArguments
|
||||||
|
&& m_user == rhs.m_user && m_mail == rhs.m_mail
|
||||||
|
&& m_logCount == rhs.m_logCount && m_timeoutSeconds == rhs.m_timeoutSeconds
|
||||||
|
&& m_prompt == rhs.m_prompt;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,6 +33,10 @@
|
|||||||
#include <QtCore/QString>
|
#include <QtCore/QString>
|
||||||
#include <QtCore/QStringList>
|
#include <QtCore/QStringList>
|
||||||
|
|
||||||
|
QT_BEGIN_NAMESPACE
|
||||||
|
class QSettings;
|
||||||
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
namespace Mercurial {
|
namespace Mercurial {
|
||||||
namespace Internal {
|
namespace Internal {
|
||||||
|
|
||||||
@@ -42,32 +46,50 @@ public:
|
|||||||
MercurialSettings();
|
MercurialSettings();
|
||||||
|
|
||||||
QString binary() const;
|
QString binary() const;
|
||||||
QString application() const;
|
void setBinary(const QString &);
|
||||||
|
|
||||||
|
// Calculated.
|
||||||
QStringList standardArguments() const;
|
QStringList standardArguments() const;
|
||||||
|
|
||||||
QString userName() const;
|
QString userName() const;
|
||||||
|
void setUserName(const QString &);
|
||||||
|
|
||||||
QString email() const;
|
QString email() const;
|
||||||
|
void setEmail(const QString &);
|
||||||
|
|
||||||
int logCount() const;
|
int logCount() const;
|
||||||
int timeout() const;
|
void setLogCount(int l);
|
||||||
|
|
||||||
|
int timeoutMilliSeconds() const;
|
||||||
int timeoutSeconds() const;
|
int timeoutSeconds() const;
|
||||||
|
void setTimeoutSeconds(int s);
|
||||||
|
|
||||||
bool prompt() const;
|
bool prompt() const;
|
||||||
void writeSettings(const QString &application, const QString &userName,
|
void setPrompt(bool b);
|
||||||
const QString &email, int logCount, int timeout, bool prompt);
|
|
||||||
|
void writeSettings(QSettings *settings) const;
|
||||||
|
void readSettings(const QSettings *settings);
|
||||||
|
|
||||||
|
bool equals(const MercurialSettings &rhs) const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
void readSettings();
|
void readSettings();
|
||||||
void setBinAndArgs();
|
|
||||||
|
|
||||||
QString bin; // used because windows requires cmd.exe to run the mercurial binary
|
QString m_binary;
|
||||||
// in this case the actual mercurial binary will be part of the standard args
|
QStringList m_standardArguments;
|
||||||
QString app; // this is teh actual mercurial executable
|
QString m_user;
|
||||||
QStringList standardArgs;
|
QString m_mail;
|
||||||
QString user;
|
|
||||||
QString mail;
|
|
||||||
int m_logCount;
|
int m_logCount;
|
||||||
int m_timeout;
|
int m_timeoutSeconds;
|
||||||
bool m_prompt;
|
bool m_prompt;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
inline bool operator==(const MercurialSettings &s1, const MercurialSettings &s2)
|
||||||
|
{ return s1.equals(s2); }
|
||||||
|
inline bool operator!=(const MercurialSettings &s1, const MercurialSettings &s2)
|
||||||
|
{ return !s1.equals(s2); }
|
||||||
|
|
||||||
} //namespace Internal
|
} //namespace Internal
|
||||||
} //namespace Mercurial
|
} //namespace Mercurial
|
||||||
|
|
||||||
|
|||||||
@@ -31,6 +31,7 @@
|
|||||||
#include "mercurialsettings.h"
|
#include "mercurialsettings.h"
|
||||||
#include "mercurialplugin.h"
|
#include "mercurialplugin.h"
|
||||||
|
|
||||||
|
#include <coreplugin/icore.h>
|
||||||
#include <utils/pathchooser.h>
|
#include <utils/pathchooser.h>
|
||||||
#include <vcsbase/vcsbaseconstants.h>
|
#include <vcsbase/vcsbaseconstants.h>
|
||||||
|
|
||||||
@@ -45,24 +46,26 @@ OptionsPageWidget::OptionsPageWidget(QWidget *parent) :
|
|||||||
m_ui.commandChooser->setPromptDialogTitle(tr("Mercurial Command"));
|
m_ui.commandChooser->setPromptDialogTitle(tr("Mercurial Command"));
|
||||||
}
|
}
|
||||||
|
|
||||||
void OptionsPageWidget::updateOptions()
|
MercurialSettings OptionsPageWidget::settings() const
|
||||||
{
|
{
|
||||||
MercurialSettings *settings = MercurialPlugin::instance()->settings();
|
MercurialSettings rc;
|
||||||
m_ui.commandChooser->setPath(settings->application());
|
rc.setBinary(m_ui.commandChooser->path());
|
||||||
m_ui.defaultUsernameLineEdit->setText(settings->userName());
|
rc.setUserName(m_ui.defaultUsernameLineEdit->text().trimmed());
|
||||||
m_ui.defaultEmailLineEdit->setText(settings->email());
|
rc.setEmail(m_ui.defaultEmailLineEdit->text().trimmed());
|
||||||
m_ui.logEntriesCount->setValue(settings->logCount());
|
rc.setLogCount(m_ui.logEntriesCount->value());
|
||||||
m_ui.timeout->setValue(settings->timeoutSeconds());
|
rc.setTimeoutSeconds(m_ui.timeout->value());
|
||||||
m_ui.promptOnSubmitCheckBox->setChecked(settings->prompt());
|
rc.setPrompt(m_ui.promptOnSubmitCheckBox->isChecked());
|
||||||
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
void OptionsPageWidget::saveOptions()
|
void OptionsPageWidget::setSettings(const MercurialSettings &s)
|
||||||
{
|
{
|
||||||
MercurialSettings *settings = MercurialPlugin::instance()->settings();
|
m_ui.commandChooser->setPath(s.binary());
|
||||||
|
m_ui.defaultUsernameLineEdit->setText(s.userName());
|
||||||
settings->writeSettings(m_ui.commandChooser->path(), m_ui.defaultUsernameLineEdit->text(),
|
m_ui.defaultEmailLineEdit->setText(s.email());
|
||||||
m_ui.defaultEmailLineEdit->text(), m_ui.logEntriesCount->value(),
|
m_ui.logEntriesCount->setValue(s.logCount());
|
||||||
m_ui.timeout->value(), m_ui.promptOnSubmitCheckBox->isChecked());
|
m_ui.timeout->setValue(s.timeoutSeconds());
|
||||||
|
m_ui.promptOnSubmitCheckBox->setChecked(s.prompt());
|
||||||
}
|
}
|
||||||
|
|
||||||
OptionsPage::OptionsPage()
|
OptionsPage::OptionsPage()
|
||||||
@@ -93,7 +96,7 @@ QWidget *OptionsPage::createPage(QWidget *parent)
|
|||||||
{
|
{
|
||||||
if (!optionsPageWidget)
|
if (!optionsPageWidget)
|
||||||
optionsPageWidget = new OptionsPageWidget(parent);
|
optionsPageWidget = new OptionsPageWidget(parent);
|
||||||
optionsPageWidget.data()->updateOptions();
|
optionsPageWidget->setSettings(MercurialPlugin::instance()->settings());
|
||||||
return optionsPageWidget;
|
return optionsPageWidget;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -101,8 +104,13 @@ void OptionsPage::apply()
|
|||||||
{
|
{
|
||||||
if (!optionsPageWidget)
|
if (!optionsPageWidget)
|
||||||
return;
|
return;
|
||||||
optionsPageWidget.data()->saveOptions();
|
MercurialPlugin *plugin = MercurialPlugin::instance();
|
||||||
//assume success and emit signal that settings are changed;
|
const MercurialSettings newSettings = optionsPageWidget->settings();
|
||||||
emit settingsChanged();
|
if (newSettings != plugin->settings()) {
|
||||||
|
//assume success and emit signal that settings are changed;
|
||||||
|
plugin->setSettings(newSettings);
|
||||||
|
newSettings.writeSettings(Core::ICore::instance()->settings());
|
||||||
|
emit settingsChanged();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -40,13 +40,16 @@
|
|||||||
namespace Mercurial {
|
namespace Mercurial {
|
||||||
namespace Internal {
|
namespace Internal {
|
||||||
|
|
||||||
|
class MercurialSettings;
|
||||||
|
|
||||||
class OptionsPageWidget : public QWidget
|
class OptionsPageWidget : public QWidget
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
explicit OptionsPageWidget(QWidget *parent = 0);
|
explicit OptionsPageWidget(QWidget *parent = 0);
|
||||||
void updateOptions();
|
|
||||||
void saveOptions();
|
MercurialSettings settings() const;
|
||||||
|
void setSettings(const MercurialSettings &s);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Ui::OptionsPage m_ui;
|
Ui::OptionsPage m_ui;
|
||||||
|
|||||||
Reference in New Issue
Block a user