diff hgrunner.h @ 109:1721c580c10e

* Add a queueing mechanism for Hg actions, instead of refusing to start an action if something else is already happening. This is essential now that actions can be prompted by asynchronous events (e.g. filesystem watcher). * Make Revert behave sensibly
author Chris Cannam
date Fri, 26 Nov 2010 12:48:29 +0000
parents fdca34c989c0
children 0f039d3cc38e
line wrap: on
line diff
--- a/hgrunner.h	Thu Nov 25 21:08:17 2010 +0000
+++ b/hgrunner.h	Fri Nov 26 12:48:29 2010 +0000
@@ -18,12 +18,16 @@
 #ifndef HGRUNNER_H
 #define HGRUNNER_H
 
+#include "hgaction.h"
+
 #include <QProgressBar>
 #include <QProcess>
 #include <QByteArray>
 #include <QRect>
 #include <QFile>
 
+#include <deque>
+
 class HgRunner : public QProgressBar
 {
     Q_OBJECT
@@ -32,29 +36,28 @@
     HgRunner(QWidget * parent = 0);
     ~HgRunner();
 
-    void startHgCommand(QString workingDir, QStringList params, bool interactive = false);
-    void startCommand(QString command, QString workingDir, QStringList params, bool interactive = false);
-
+    void requestAction(HgAction action);
+/*
     bool isCommandRunning();
     void killCurrentCommand();
 
-    int getExitCode();
-    QProcess::ExitStatus getExitStatus();
+    void hideProgBar();
+*/    
+signals:
+    void commandCompleted(HgAction action, QString stdout);
+    void commandFailed(HgAction action, QString stderr);
 
-    void hideProgBar();
-
-    QString getOutput();
-    
-signals:
-    void commandCompleted();
-    void commandFailed();
+private slots:
+    void started();
+    void finished(int procExitCode, QProcess::ExitStatus procExitStatus);
+    void dataReady();
 
 private:
-    void setProcExitInfo(int procExitCode, QProcess::ExitStatus procExitStatus);
-    QString getLastCommandLine();
-    void presentErrorToUser();
+    void checkQueue();
+    void startCommand(HgAction action);
     QString getHgBinaryName();
     void closeProcInput();
+    void killCurrentCommand();
 
     void noteUsername(QString);
     void noteRealm(QString);
@@ -70,18 +73,13 @@
     bool m_isRunning;
     QProcess *m_proc;
     QString m_output;
-    int m_exitCode;
-    QProcess::ExitStatus m_exitStatus;
-    QString m_lastHgCommand;
-    QString m_lastParams;
 
     QString m_userName;
     QString m_realm;
 
-private slots:
-    void started();
-    void finished(int procExitCode, QProcess::ExitStatus procExitStatus);
-    void dataReady();
+    typedef std::deque<HgAction> ActionQueue;
+    ActionQueue m_queue;
+    HgAction m_currentAction;
 };
 
 #endif // HGRUNNER_H