aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/vcsbase/vcsjobrunner.h
diff options
context:
space:
mode:
authorcerf <[email protected]>2011-02-28 13:40:04 +0100
committerTobias Hunger <[email protected]>2011-02-28 16:08:15 +0100
commit6c1dd96f121568773814190cf260ed01f5a88c88 (patch)
tree66cb0804d46214f664696326f26393a283d9bf9e /src/plugins/vcsbase/vcsjobrunner.h
parentbe81d25b73bd2446c1c2a31769e659e6dc88c818 (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.h141
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 &notice);
+ 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