Header cleanup.

This commit is contained in:
Friedemann Kleint
2011-03-02 12:49:55 +01:00
parent 586d1440be
commit 48ca10b090
4 changed files with 103 additions and 76 deletions

View File

@@ -68,19 +68,32 @@ inline Core::IEditor *locateEditor(const Core::ICore *core, const char *property
namespace VCSBase { namespace VCSBase {
class VCSBaseClientPrivate
{
public:
explicit VCSBaseClientPrivate(const VCSBaseClientSettings &settings);
VCSJobRunner *m_jobManager;
Core::ICore *m_core;
const VCSBaseClientSettings& m_clientSettings;
};
VCSBaseClientPrivate::VCSBaseClientPrivate(const VCSBaseClientSettings &settings) :
m_jobManager(0), m_core(Core::ICore::instance()), m_clientSettings(settings)
{
}
VCSBaseClient::VCSBaseClient(const VCSBaseClientSettings &settings) : VCSBaseClient::VCSBaseClient(const VCSBaseClientSettings &settings) :
m_jobManager(0), d(new VCSBaseClientPrivate(settings))
m_core(Core::ICore::instance()),
m_clientSettings(settings)
{ {
qRegisterMetaType<QVariant>(); qRegisterMetaType<QVariant>();
} }
VCSBaseClient::~VCSBaseClient() VCSBaseClient::~VCSBaseClient()
{ {
if (m_jobManager) { if (d->m_jobManager) {
delete m_jobManager; delete d->m_jobManager;
m_jobManager = 0; d->m_jobManager = 0;
} }
} }
@@ -175,8 +188,8 @@ bool VCSBaseClient::vcsFullySynchronousExec(const QString &workingDir,
vcsProcess.setWorkingDirectory(workingDir); vcsProcess.setWorkingDirectory(workingDir);
VCSJobRunner::setProcessEnvironment(&vcsProcess); VCSJobRunner::setProcessEnvironment(&vcsProcess);
const QString binary = m_clientSettings.binary(); const QString binary = d->m_clientSettings.binary();
const QStringList arguments = m_clientSettings.standardArguments() + args; const QStringList arguments = d->m_clientSettings.standardArguments() + args;
VCSBase::VCSBaseOutputWindow *outputWindow = VCSBase::VCSBaseOutputWindow::instance(); VCSBase::VCSBaseOutputWindow *outputWindow = VCSBase::VCSBaseOutputWindow::instance();
outputWindow->appendCommand(workingDir, binary, args); outputWindow->appendCommand(workingDir, binary, args);
@@ -191,10 +204,10 @@ bool VCSBaseClient::vcsFullySynchronousExec(const QString &workingDir,
vcsProcess.closeWriteChannel(); vcsProcess.closeWriteChannel();
QByteArray stdErr; QByteArray stdErr;
if (!Utils::SynchronousProcess::readDataFromProcess(vcsProcess, m_clientSettings.timeoutMilliSeconds(), if (!Utils::SynchronousProcess::readDataFromProcess(vcsProcess, d->m_clientSettings.timeoutMilliSeconds(),
output, &stdErr, true)) { output, &stdErr, true)) {
Utils::SynchronousProcess::stopProcess(vcsProcess); Utils::SynchronousProcess::stopProcess(vcsProcess);
outputWindow->appendError(VCSJobRunner::msgTimeout(binary, m_clientSettings.timeoutSeconds())); outputWindow->appendError(VCSJobRunner::msgTimeout(binary, d->m_clientSettings.timeoutSeconds()));
return false; return false;
} }
if (!stdErr.isEmpty()) if (!stdErr.isEmpty())
@@ -209,10 +222,10 @@ Utils::SynchronousProcessResponse VCSBaseClient::vcsSynchronousExec(
unsigned flags, unsigned flags,
QTextCodec *outputCodec) QTextCodec *outputCodec)
{ {
const QString binary = m_clientSettings.binary(); const QString binary = d->m_clientSettings.binary();
const QStringList arguments = m_clientSettings.standardArguments() + args; const QStringList arguments = d->m_clientSettings.standardArguments() + args;
return VCSBase::VCSBasePlugin::runVCS(workingDirectory, binary, arguments, return VCSBase::VCSBasePlugin::runVCS(workingDirectory, binary, arguments,
m_clientSettings.timeoutMilliSeconds(), d->m_clientSettings.timeoutMilliSeconds(),
flags, outputCodec); flags, outputCodec);
} }
@@ -416,17 +429,17 @@ void VCSBaseClient::commit(const QString &repositoryRoot,
void VCSBaseClient::settingsChanged() void VCSBaseClient::settingsChanged()
{ {
if (m_jobManager) { if (d->m_jobManager) {
m_jobManager->setSettings(m_clientSettings.binary(), d->m_jobManager->setSettings(d->m_clientSettings.binary(),
m_clientSettings.standardArguments(), d->m_clientSettings.standardArguments(),
m_clientSettings.timeoutMilliSeconds()); d->m_clientSettings.timeoutMilliSeconds());
m_jobManager->restart(); d->m_jobManager->restart();
} }
} }
QString VCSBaseClient::vcsEditorTitle(const QString &vcsCmd, const QString &sourceId) const QString VCSBaseClient::vcsEditorTitle(const QString &vcsCmd, const QString &sourceId) const
{ {
return m_clientSettings.binary() + QLatin1Char(' ') + vcsCmd + QLatin1Char(' ') + sourceId; return d->m_clientSettings.binary() + QLatin1Char(' ') + vcsCmd + QLatin1Char(' ') + sourceId;
} }
VCSBase::VCSBaseEditorWidget *VCSBaseClient::createVCSEditor(const QString &kind, QString title, VCSBase::VCSBaseEditorWidget *VCSBaseClient::createVCSEditor(const QString &kind, QString title,
@@ -435,7 +448,7 @@ VCSBase::VCSBaseEditorWidget *VCSBaseClient::createVCSEditor(const QString &kind
const QString &dynamicPropertyValue) const const QString &dynamicPropertyValue) const
{ {
VCSBase::VCSBaseEditorWidget *baseEditor = 0; VCSBase::VCSBaseEditorWidget *baseEditor = 0;
Core::IEditor *outputEditor = locateEditor(m_core, registerDynamicProperty, dynamicPropertyValue); Core::IEditor *outputEditor = locateEditor(d->m_core, registerDynamicProperty, dynamicPropertyValue);
const QString progressMsg = tr("Working..."); const QString progressMsg = tr("Working...");
if (outputEditor) { if (outputEditor) {
// Exists already // Exists already
@@ -443,7 +456,7 @@ VCSBase::VCSBaseEditorWidget *VCSBaseClient::createVCSEditor(const QString &kind
baseEditor = VCSBase::VCSBaseEditorWidget::getVcsBaseEditor(outputEditor); baseEditor = VCSBase::VCSBaseEditorWidget::getVcsBaseEditor(outputEditor);
QTC_ASSERT(baseEditor, return 0); QTC_ASSERT(baseEditor, return 0);
} else { } else {
outputEditor = m_core->editorManager()->openEditorWithContents(kind, &title, progressMsg); outputEditor = d->m_core->editorManager()->openEditorWithContents(kind, &title, progressMsg);
outputEditor->file()->setProperty(registerDynamicProperty, dynamicPropertyValue); outputEditor->file()->setProperty(registerDynamicProperty, dynamicPropertyValue);
baseEditor = VCSBase::VCSBaseEditorWidget::getVcsBaseEditor(outputEditor); baseEditor = VCSBase::VCSBaseEditorWidget::getVcsBaseEditor(outputEditor);
connect(baseEditor, SIGNAL(annotateRevisionRequested(QString,QString,int)), connect(baseEditor, SIGNAL(annotateRevisionRequested(QString,QString,int)),
@@ -454,21 +467,21 @@ VCSBase::VCSBaseEditorWidget *VCSBaseClient::createVCSEditor(const QString &kind
baseEditor->setCodec(VCSBase::VCSBaseEditorWidget::getCodec(source)); baseEditor->setCodec(VCSBase::VCSBaseEditorWidget::getCodec(source));
} }
m_core->editorManager()->activateEditor(outputEditor, Core::EditorManager::ModeSwitch); d->m_core->editorManager()->activateEditor(outputEditor, Core::EditorManager::ModeSwitch);
baseEditor->setForceReadOnly(true); baseEditor->setForceReadOnly(true);
return baseEditor; return baseEditor;
} }
void VCSBaseClient::enqueueJob(const QSharedPointer<VCSJob> &job) void VCSBaseClient::enqueueJob(const QSharedPointer<VCSJob> &job)
{ {
if (!m_jobManager) { if (!d->m_jobManager) {
m_jobManager = new VCSJobRunner(); d->m_jobManager = new VCSJobRunner();
m_jobManager->setSettings(m_clientSettings.binary(), d->m_jobManager->setSettings(d->m_clientSettings.binary(),
m_clientSettings.standardArguments(), d->m_clientSettings.standardArguments(),
m_clientSettings.timeoutMilliSeconds()); d->m_clientSettings.timeoutMilliSeconds());
m_jobManager->start(); d->m_jobManager->start();
} }
m_jobManager->enqueueJob(job); d->m_jobManager->enqueueJob(job);
} }
} // namespace VCSBase } // namespace VCSBase

View File

@@ -40,6 +40,7 @@
#include <QtCore/QStringList> #include <QtCore/QStringList>
#include <QtCore/QPair> #include <QtCore/QPair>
#include <QtCore/QSharedPointer> #include <QtCore/QSharedPointer>
#include <QtCore/QScopedPointer>
#include <QtCore/QHash> #include <QtCore/QHash>
#include <QtCore/QVariant> #include <QtCore/QVariant>
@@ -60,8 +61,8 @@ namespace VCSBase {
class VCSBaseEditorWidget; class VCSBaseEditorWidget;
class VCSBaseClientSettings; class VCSBaseClientSettings;
class VCSJobRunner;
class VCSJob; class VCSJob;
class VCSBaseClientPrivate;
class VCSBASE_EXPORT VCSBaseClient : public QObject class VCSBASE_EXPORT VCSBaseClient : public QObject
{ {
@@ -69,7 +70,7 @@ class VCSBASE_EXPORT VCSBaseClient : public QObject
public: public:
typedef QHash<int, QVariant> ExtraCommandOptions; typedef QHash<int, QVariant> ExtraCommandOptions;
VCSBaseClient(const VCSBaseClientSettings &settings); explicit VCSBaseClient(const VCSBaseClientSettings &settings);
~VCSBaseClient(); ~VCSBaseClient();
virtual bool synchronousCreateRepository(const QString &workingDir); virtual bool synchronousCreateRepository(const QString &workingDir);
virtual bool synchronousClone(const QString &workingDir, virtual bool synchronousClone(const QString &workingDir,
@@ -180,9 +181,7 @@ private slots:
void slotAnnotateRevisionRequested(const QString &source, QString change, int lineNumber); void slotAnnotateRevisionRequested(const QString &source, QString change, int lineNumber);
private: private:
VCSJobRunner *m_jobManager; QScopedPointer<VCSBaseClientPrivate> d;
Core::ICore *m_core;
const VCSBaseClientSettings& m_clientSettings;
}; };
} //namespace VCSBase } //namespace VCSBase

View File

@@ -45,8 +45,12 @@
#include <QtCore/QString> #include <QtCore/QString>
#include <QtCore/QDebug> #include <QtCore/QDebug>
#include <QtCore/QDir> #include <QtCore/QDir>
#include <QtCore/QQueue>
#include <QtCore/QMutex>
#include <QtCore/QWaitCondition>
#include <QtCore/QSharedPointer>
using namespace VCSBase; namespace VCSBase {
VCSJob::VCSJob(const QString &workingDir, VCSJob::VCSJob(const QString &workingDir,
const QStringList &args, const QStringList &args,
@@ -124,10 +128,26 @@ void VCSJob::setUnixTerminalDisabled(bool v)
m_unixTerminalDisabled = v; m_unixTerminalDisabled = v;
} }
class VCSJobRunnerPrivate
{
public:
VCSJobRunnerPrivate();
QQueue<QSharedPointer<VCSJob> > m_jobs;
QMutex m_mutex;
QWaitCondition m_waiter;
bool m_keepRunning;
QString m_binary;
QStringList m_standardArguments;
int m_timeoutMS;
};
VCSJobRunner::VCSJobRunner() : VCSJobRunnerPrivate::VCSJobRunnerPrivate() :
m_keepRunning(true) m_keepRunning(true), m_timeoutMS(30000)
{
}
VCSJobRunner::VCSJobRunner() : d(new VCSJobRunnerPrivate)
{ {
VCSBase::VCSBaseOutputWindow *ow = VCSBase::VCSBaseOutputWindow::instance(); VCSBase::VCSBaseOutputWindow *ow = VCSBase::VCSBaseOutputWindow::instance();
connect(this, SIGNAL(error(QString)), connect(this, SIGNAL(error(QString)),
@@ -144,12 +164,12 @@ VCSJobRunner::~VCSJobRunner()
void VCSJobRunner::stop() void VCSJobRunner::stop()
{ {
{ {
QMutexLocker mutexLocker(&m_mutex); Q_UNUSED(mutexLocker); QMutexLocker mutexLocker(&d->m_mutex); Q_UNUSED(mutexLocker);
m_keepRunning = false; d->m_keepRunning = false;
//Create a dummy task to break the cycle //Create a dummy task to break the cycle
QSharedPointer<VCSJob> job(0); QSharedPointer<VCSJob> job(0);
m_jobs.enqueue(job); d->m_jobs.enqueue(job);
m_waiter.wakeAll(); d->m_waiter.wakeAll();
} }
wait(); wait();
@@ -158,34 +178,34 @@ void VCSJobRunner::stop()
void VCSJobRunner::restart() void VCSJobRunner::restart()
{ {
stop(); stop();
m_mutex.lock(); d->m_mutex.lock();
m_keepRunning = true; d->m_keepRunning = true;
m_mutex.unlock(); d->m_mutex.unlock();
start(); start();
} }
void VCSJobRunner::enqueueJob(const QSharedPointer<VCSJob> &job) void VCSJobRunner::enqueueJob(const QSharedPointer<VCSJob> &job)
{ {
QMutexLocker mutexLocker(&m_mutex); Q_UNUSED(mutexLocker); QMutexLocker mutexLocker(&d->m_mutex); Q_UNUSED(mutexLocker);
m_jobs.enqueue(job); d->m_jobs.enqueue(job);
m_waiter.wakeAll(); d->m_waiter.wakeAll();
} }
void VCSJobRunner::run() void VCSJobRunner::run()
{ {
forever { forever {
m_mutex.lock(); d->m_mutex.lock();
while (m_jobs.count() == 0) while (d->m_jobs.count() == 0)
m_waiter.wait(&m_mutex); d->m_waiter.wait(&d->m_mutex);
if (!m_keepRunning) { if (!d->m_keepRunning) {
m_jobs.clear(); d->m_jobs.clear();
m_mutex.unlock(); d->m_mutex.unlock();
return; return;
} }
QSharedPointer<VCSJob> job = m_jobs.dequeue(); QSharedPointer<VCSJob> job = d->m_jobs.dequeue();
m_mutex.unlock(); d->m_mutex.unlock();
task(job); task(job);
} }
@@ -218,9 +238,9 @@ void VCSJobRunner::setSettings(const QString &bin,
const QStringList &stdArgs, const QStringList &stdArgs,
int timeoutMsec) int timeoutMsec)
{ {
m_binary = bin; d->m_binary = bin;
m_standardArguments = stdArgs; d->m_standardArguments = stdArgs;
m_timeoutMS = timeoutMsec; d->m_timeoutMS = timeoutMsec;
} }
void VCSJobRunner::task(const QSharedPointer<VCSJob> &job) void VCSJobRunner::task(const QSharedPointer<VCSJob> &job)
@@ -250,8 +270,8 @@ void VCSJobRunner::task(const QSharedPointer<VCSJob> &job)
break; break;
} }
const QStringList args = m_standardArguments + taskData->arguments(); const QStringList args = d->m_standardArguments + taskData->arguments();
emit commandStarted(VCSBase::VCSBaseOutputWindow::msgExecutionLogEntry(taskData->workingDirectory(), m_binary, args)); emit commandStarted(VCSBase::VCSBaseOutputWindow::msgExecutionLogEntry(taskData->workingDirectory(), d->m_binary, args));
//infom the user of what we are going to try and perform //infom the user of what we are going to try and perform
if (Constants::Internal::debug) if (Constants::Internal::debug)
@@ -267,10 +287,10 @@ void VCSJobRunner::task(const QSharedPointer<VCSJob> &job)
vcsProcess->setWorkingDirectory(taskData->workingDirectory()); vcsProcess->setWorkingDirectory(taskData->workingDirectory());
VCSJobRunner::setProcessEnvironment(vcsProcess.data()); VCSJobRunner::setProcessEnvironment(vcsProcess.data());
vcsProcess->start(m_binary, args); vcsProcess->start(d->m_binary, args);
if (!vcsProcess->waitForStarted()) { if (!vcsProcess->waitForStarted()) {
emit error(msgStartFailed(m_binary, vcsProcess->errorString())); emit error(msgStartFailed(d->m_binary, vcsProcess->errorString()));
return; return;
} }
@@ -279,9 +299,9 @@ void VCSJobRunner::task(const QSharedPointer<VCSJob> &job)
QByteArray stdOutput; QByteArray stdOutput;
QByteArray stdErr; QByteArray stdErr;
if (!Utils::SynchronousProcess::readDataFromProcess(*vcsProcess, m_timeoutMS, &stdOutput, &stdErr, false)) { if (!Utils::SynchronousProcess::readDataFromProcess(*vcsProcess, d->m_timeoutMS, &stdOutput, &stdErr, false)) {
Utils::SynchronousProcess::stopProcess(*vcsProcess); Utils::SynchronousProcess::stopProcess(*vcsProcess);
emit error(msgTimeout(m_binary, m_timeoutMS / 1000)); emit error(msgTimeout(d->m_binary, d->m_timeoutMS / 1000));
return; return;
} }
@@ -305,3 +325,5 @@ void VCSJobRunner::task(const QSharedPointer<VCSJob> &job)
//output signal connection must be made //output signal connection must be made
disconnect(this, SIGNAL(output(QByteArray)), 0, 0); disconnect(this, SIGNAL(output(QByteArray)), 0, 0);
} }
} // namespace VCSBase

View File

@@ -37,14 +37,12 @@
#include "vcsbase_global.h" #include "vcsbase_global.h"
#include <QtCore/QThread> #include <QtCore/QThread>
#include <QtCore/QQueue>
#include <QtCore/QMutex>
#include <QtCore/QWaitCondition>
#include <QtCore/QStringList> #include <QtCore/QStringList>
#include <QtCore/QSharedPointer>
#include <QtCore/QVariant>
#include <QtCore/QString> #include <QtCore/QString>
#include <QtCore/QPointer> #include <QtCore/QPointer>
#include <QtCore/QSharedPointer>
#include <QtCore/QScopedPointer>
#include <QtCore/QVariant>
QT_BEGIN_NAMESPACE QT_BEGIN_NAMESPACE
class QProcess; class QProcess;
@@ -52,6 +50,7 @@ QT_END_NAMESPACE
namespace VCSBase { namespace VCSBase {
class VCSBaseEditorWidget; class VCSBaseEditorWidget;
class VCSJobRunnerPrivate;
class VCSBASE_EXPORT VCSJob : public QObject class VCSBASE_EXPORT VCSJob : public QObject
{ {
@@ -127,13 +126,7 @@ private:
void task(const QSharedPointer<VCSJob> &job); void task(const QSharedPointer<VCSJob> &job);
void stop(); void stop();
QQueue<QSharedPointer<VCSJob> > m_jobs; QScopedPointer<VCSJobRunnerPrivate> d;
QMutex m_mutex;
QWaitCondition m_waiter;
bool m_keepRunning;
QString m_binary;
QStringList m_standardArguments;
int m_timeoutMS;
}; };
} //namespace VCSBase } //namespace VCSBase