diff options
author | cerf <[email protected]> | 2011-02-28 13:40:04 +0100 |
---|---|---|
committer | Tobias Hunger <[email protected]> | 2011-02-28 16:08:15 +0100 |
commit | 6c1dd96f121568773814190cf260ed01f5a88c88 (patch) | |
tree | 66cb0804d46214f664696326f26393a283d9bf9e /src/plugins/vcsbase/vcsjobrunner.h | |
parent | be81d25b73bd2446c1c2a31769e659e6dc88c818 (diff) |
Refactored the Mercurial plugin
Refactored the mercurial plugin which led to new vcsbase common
tools (VCSBaseClient, VCSBaseClientSettings and VCSJobRunner)
Merge-request: 229
Reviewed-by: Tobias Hunger <[email protected]>
Diffstat (limited to 'src/plugins/vcsbase/vcsjobrunner.h')
-rw-r--r-- | src/plugins/vcsbase/vcsjobrunner.h | 141 |
1 files changed, 141 insertions, 0 deletions
diff --git a/src/plugins/vcsbase/vcsjobrunner.h b/src/plugins/vcsbase/vcsjobrunner.h new file mode 100644 index 00000000000..36c174369be --- /dev/null +++ b/src/plugins/vcsbase/vcsjobrunner.h @@ -0,0 +1,141 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2010 Brian McGillion & Hugues Delorme +** +** Contact: Nokia Corporation ([email protected]) +** +** No Commercial Usage +** +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at [email protected]. +** +**************************************************************************/ + +#ifndef VCSJOBRUNNER_H +#define VCSJOBRUNNER_H + +#include "vcsbase_global.h" + +#include <QtCore/QThread> +#include <QtCore/QQueue> +#include <QtCore/QMutex> +#include <QtCore/QWaitCondition> +#include <QtCore/QStringList> +#include <QtCore/QSharedPointer> +#include <QtCore/QVariant> +#include <QtCore/QString> +#include <QtCore/QPointer> + +QT_BEGIN_NAMESPACE +class QProcess; +QT_END_NAMESPACE + +namespace VCSBase { +class VCSBaseEditorWidget; + +class VCSBASE_EXPORT VCSJob : public QObject +{ + Q_OBJECT +public: + enum DataEmitMode { + NoDataEmitMode, + RawDataEmitMode, + EditorDataEmitMode + }; + + VCSJob(const QString &workingDir, + const QStringList &args, + DataEmitMode emitMode = NoDataEmitMode); + VCSJob(const QString &workingDir, + const QStringList &args, + VCSBase::VCSBaseEditorWidget *editor); + + DataEmitMode dataEmitMode() const; + VCSBase::VCSBaseEditorWidget *displayEditor() const; + QStringList arguments() const; + QString workingDirectory() const; + const QVariant &cookie() const; + bool unixTerminalDisabled() const; + + void setDisplayEditor(VCSBase::VCSBaseEditorWidget *editor); + void setCookie(const QVariant &cookie); + // Disable terminal to suppress SSH prompting + void setUnixTerminalDisabled(bool v); + +signals: + void succeeded(const QVariant &cookie); // Use a queued connection + void rawData(const QByteArray &data); + +private: + friend class VCSJobRunner; + const QString m_workingDir; + const QStringList m_arguments; + bool m_emitRaw; + QVariant m_cookie; + QPointer<VCSBase::VCSBaseEditorWidget> m_editor; // User might close it + bool m_unixTerminalDisabled; +}; + +/* A job queue running in a separate thread, executing commands + * and emitting status/log signals. */ +class VCSBASE_EXPORT VCSJobRunner : public QThread +{ + Q_OBJECT +public: + VCSJobRunner(); + ~VCSJobRunner(); + void enqueueJob(const QSharedPointer<VCSJob> &job); + void restart(); + + static QString msgStartFailed(const QString &binary, const QString &why); + static QString msgTimeout(int timeoutSeconds); + + // Set environment for a VCS process to run in locale "C" + static void setProcessEnvironment(QProcess *p); + + void setSettings(const QString &bin, const QStringList &stdArgs, int timeoutMsec); + +protected: + void run(); + +signals: + void commandStarted(const QString ¬ice); + void error(const QString &error); + void output(const QByteArray &output); + +private: + void task(const QSharedPointer<VCSJob> &job); + void stop(); + + QQueue<QSharedPointer<VCSJob> > m_jobs; + QMutex m_mutex; + QWaitCondition m_waiter; + bool m_keepRunning; + QString m_binary; + QStringList m_standardArguments; + int m_timeoutMS; +}; + +} //namespace VCSBase + +#endif // VCSJOBRUNNER_H |