aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/clearcase
diff options
context:
space:
mode:
authorhjk <hjk@qt.io>2020-02-06 17:49:35 +0100
committerhjk <hjk@qt.io>2020-02-07 09:27:09 +0000
commit11c242427caa71eefde2fd2ffe9f108a6e52fbca (patch)
tree0437360ed56996b3a9ba99d34222a8a66c21a6d5 /src/plugins/clearcase
parent2234c517c0857fead795983e7540916e8dc430fd (diff)
ClearCase: Partially move plugin pimpl to .cpp
Unfortuately, some deep accesses are not easy to get rid of. Make them available by static functions in the plugin itself. Definitely not the favorite setup, but allows to proceed with the QObject removals. Change-Id: Idc1624d2a4751b15159c3e36dcf8d2d476550167 Reviewed-by: Orgad Shaneh <orgads@gmail.com>
Diffstat (limited to 'src/plugins/clearcase')
-rw-r--r--src/plugins/clearcase/activityselector.cpp11
-rw-r--r--src/plugins/clearcase/activityselector.h3
-rw-r--r--src/plugins/clearcase/clearcaseplugin.cpp275
-rw-r--r--src/plugins/clearcase/clearcaseplugin.h235
-rw-r--r--src/plugins/clearcase/clearcasesync.cpp49
-rw-r--r--src/plugins/clearcase/clearcasesync.h6
-rw-r--r--src/plugins/clearcase/settingspage.cpp4
7 files changed, 310 insertions, 273 deletions
diff --git a/src/plugins/clearcase/activityselector.cpp b/src/plugins/clearcase/activityselector.cpp
index 99d15c1c79..ad7644d394 100644
--- a/src/plugins/clearcase/activityselector.cpp
+++ b/src/plugins/clearcase/activityselector.cpp
@@ -38,10 +38,9 @@
using namespace ClearCase;
using namespace ClearCase::Internal;
-ActivitySelector::ActivitySelector(QWidget *parent) : QWidget(parent),
- m_plugin(ClearCasePluginPrivate::instance())
+ActivitySelector::ActivitySelector(QWidget *parent) : QWidget(parent)
{
- QTC_ASSERT(m_plugin->isUcm(), return);
+ QTC_ASSERT(ClearCasePlugin::viewData().isUcm, return);
auto hboxLayout = new QHBoxLayout(this);
hboxLayout->setContentsMargins(0, 0, 0, 0);
@@ -55,7 +54,7 @@ ActivitySelector::ActivitySelector(QWidget *parent) : QWidget(parent),
hboxLayout->addWidget(m_cmbActivity);
QString addText = tr("Add");
- if (!m_plugin->settings().autoAssignActivityName)
+ if (!ClearCasePlugin::settings().autoAssignActivityName)
addText.append(QLatin1String("..."));
auto btnAdd = new QToolButton;
btnAdd->setText(addText);
@@ -78,7 +77,7 @@ void ActivitySelector::userChanged()
bool ActivitySelector::refresh()
{
int current;
- QList<QStringPair> activities = m_plugin->activities(&current);
+ QList<QStringPair> activities = ClearCasePlugin::activities(&current);
m_cmbActivity->clear();
foreach (const QStringPair &activity, activities)
m_cmbActivity->addItem(activity.second, activity.first);
@@ -113,6 +112,6 @@ void ActivitySelector::setActivity(const QString &act)
void ActivitySelector::newActivity()
{
- if (m_plugin->newActivity())
+ if (ClearCasePlugin::newActivity())
refresh();
}
diff --git a/src/plugins/clearcase/activityselector.h b/src/plugins/clearcase/activityselector.h
index 2e62d1c288..638e6963fe 100644
--- a/src/plugins/clearcase/activityselector.h
+++ b/src/plugins/clearcase/activityselector.h
@@ -35,8 +35,6 @@ QT_END_NAMESPACE
namespace ClearCase {
namespace Internal {
-class ClearCasePluginPrivate;
-
class ActivitySelector : public QWidget
{
Q_OBJECT
@@ -54,7 +52,6 @@ public:
private:
void userChanged();
- ClearCasePluginPrivate *m_plugin = nullptr;
bool m_changed = false;
QComboBox *m_cmbActivity = nullptr;
};
diff --git a/src/plugins/clearcase/clearcaseplugin.cpp b/src/plugins/clearcase/clearcaseplugin.cpp
index a2225c01c5..d572b2a7fe 100644
--- a/src/plugins/clearcase/clearcaseplugin.cpp
+++ b/src/plugins/clearcase/clearcaseplugin.cpp
@@ -60,11 +60,14 @@
#include <utils/hostosinfo.h>
#include <utils/qtcassert.h>
#include <utils/runextensions.h>
+
#include <vcsbase/basevcseditorfactory.h>
#include <vcsbase/basevcssubmiteditorfactory.h>
#include <vcsbase/vcsbaseeditor.h>
+#include <vcsbase/vcscommand.h>
#include <vcsbase/vcsoutputwindow.h>
#include <vcsbase/vcsbasesubmiteditor.h>
+#include <vcsbase/vcsbaseplugin.h>
#include <QAction>
#include <QDebug>
@@ -85,7 +88,6 @@
#include <QRegExp>
#include <QSharedPointer>
#include <QTextCodec>
-#include <QtPlugin>
#include <QUrl>
#include <QUuid>
#include <QVariant>
@@ -121,6 +123,15 @@ static const char CMD_ID_UPDATE_VIEW[] = "ClearCase.UpdateView";
static const char CMD_ID_CHECKIN_ALL[] = "ClearCase.CheckInAll";
static const char CMD_ID_STATUS[] = "ClearCase.Status";
+class ClearCaseResponse
+{
+public:
+ bool error = false;
+ QString stdOut;
+ QString stdErr;
+ QString message;
+};
+
static const VcsBaseEditorParameters editorParameters[] = {
{
LogOutput,
@@ -150,6 +161,195 @@ static QString debugCodec(const QTextCodec *c)
return c ? QString::fromLatin1(c->name()) : QString::fromLatin1("Null codec");
}
+class ClearCasePluginPrivate final : public VcsBase::VcsBasePluginPrivate
+{
+ Q_OBJECT
+ enum { SilentRun = VcsBase::VcsCommand::NoOutput | VcsBase::VcsCommand::FullySynchronously };
+
+public:
+ ClearCasePluginPrivate();
+ ~ClearCasePluginPrivate() final;
+
+ // IVersionControl
+ QString displayName() const final;
+ Core::Id id() const final;
+
+ bool isVcsFileOrDirectory(const Utils::FilePath &fileName) const final;
+
+ bool managesDirectory(const QString &directory, QString *topLevel) const final;
+ bool managesFile(const QString &workingDirectory, const QString &fileName) const final;
+
+ bool isConfigured() const final;
+
+ bool supportsOperation(Operation operation) const final;
+ OpenSupportMode openSupportMode(const QString &fileName) const final;
+ bool vcsOpen(const QString &fileName) final;
+ SettingsFlags settingsFlags() const final;
+ bool vcsAdd(const QString &fileName) final;
+ bool vcsDelete(const QString &filename) final;
+ bool vcsMove(const QString &from, const QString &to) final;
+ bool vcsCreateRepository(const QString &directory) final;
+
+ bool vcsAnnotate(const QString &file, int line) final;
+
+ QString vcsOpenText() const final;
+ QString vcsMakeWritableText() const final;
+ QString vcsTopic(const QString &directory) final;
+
+ ///
+ ClearCaseSubmitEditor *openClearCaseSubmitEditor(const QString &fileName, bool isUcm);
+
+ const ClearCaseSettings &settings() const;
+ void setSettings(const ClearCaseSettings &s);
+
+ // IVersionControl
+ bool vcsOpen(const QString &workingDir, const QString &fileName);
+ bool vcsAdd(const QString &workingDir, const QString &fileName);
+ bool vcsDelete(const QString &workingDir, const QString &fileName);
+ bool vcsCheckIn(const QString &workingDir, const QStringList &files, const QString &activity,
+ bool isIdentical, bool isPreserve, bool replaceActivity);
+ bool vcsUndoCheckOut(const QString &workingDir, const QString &fileName, bool keep);
+ bool vcsUndoHijack(const QString &workingDir, const QString &fileName, bool keep);
+ bool vcsMove(const QString &workingDir, const QString &from, const QString &to);
+ bool vcsSetActivity(const QString &workingDir, const QString &title, const QString &activity);
+
+ static ClearCasePluginPrivate *instance();
+
+ QString ccGetCurrentActivity() const;
+ QList<QStringPair> activities(int *current = nullptr) const;
+ QString ccGetPredecessor(const QString &version) const;
+ QStringList ccGetActiveVobs() const;
+ ViewData ccGetView(const QString &workingDir) const;
+ QString ccGetComment(const QString &workingDir, const QString &fileName) const;
+ bool ccFileOp(const QString &workingDir, const QString &title, const QStringList &args,
+ const QString &fileName, const QString &file2 = QString());
+ FileStatus vcsStatus(const QString &file) const;
+ void checkAndReIndexUnknownFile(const QString &file);
+ QString currentView() const { return m_viewData.name; }
+ QString viewRoot() const { return m_viewData.root; }
+ void refreshActivities();
+ inline bool isUcm() const { return m_viewData.isUcm; }
+ inline bool isDynamic() const { return m_viewData.isDynamic; }
+ void setStatus(const QString &file, FileStatus::Status status, bool update = true);
+
+ bool ccCheckUcm(const QString &viewname, const QString &workingDir) const;
+#ifdef WITH_TESTS
+ inline void setFakeCleartool(const bool b = true) { m_fakeClearTool = b; }
+#endif
+
+ void vcsAnnotateHelper(const QString &workingDir, const QString &file,
+ const QString &revision = QString(), int lineNumber = -1) const;
+ bool newActivity();
+ void updateStreamAndView();
+ void describe(const QString &source, const QString &changeNr);
+
+protected:
+ void updateActions(VcsBase::VcsBasePluginPrivate::ActionState) override;
+ bool submitEditorAboutToClose() override;
+ QString ccGet(const QString &workingDir, const QString &file, const QString &prefix = QString());
+ QList<QStringPair> ccGetActivities() const;
+
+private:
+ void syncSlot();
+ Q_INVOKABLE void updateStatusActions();
+
+ QString commitDisplayName() const final;
+ void checkOutCurrentFile();
+ void addCurrentFile();
+ void undoCheckOutCurrent();
+ void undoHijackCurrent();
+ void diffActivity();
+ void diffCurrentFile();
+ void startCheckInAll();
+ void startCheckInActivity();
+ void startCheckInCurrentFile();
+ void historyCurrentFile();
+ void annotateCurrentFile();
+ void viewStatus();
+ void commitFromEditor() override;
+ void diffCheckInFiles(const QStringList &);
+ void updateIndex();
+ void updateView();
+ void projectChanged(ProjectExplorer::Project *project);
+ void tasksFinished(Core::Id type);
+ void closing();
+
+ inline bool isCheckInEditorOpen() const;
+ QStringList getVobList() const;
+ QString ccManagesDirectory(const QString &directory) const;
+ QString ccViewRoot(const QString &directory) const;
+ QString findTopLevel(const QString &directory) const;
+ Core::IEditor *showOutputInEditor(const QString& title, const QString &output,
+ int editorType, const QString &source,
+ QTextCodec *codec) const;
+ QString runCleartoolSync(const QString &workingDir, const QStringList &arguments) const;
+ ClearCaseResponse runCleartool(const QString &workingDir, const QStringList &arguments,
+ int timeOutS, unsigned flags,
+ QTextCodec *outputCodec = nullptr) const;
+ static void sync(QFutureInterface<void> &future, QStringList files);
+
+ void history(const QString &workingDir,
+ const QStringList &file = QStringList(),
+ bool enableAnnotationContextMenu = false);
+ QString ccGetFileVersion(const QString &workingDir, const QString &file) const;
+ void ccUpdate(const QString &workingDir, const QStringList &relativePaths = QStringList());
+ void ccDiffWithPred(const QString &workingDir, const QStringList &files);
+ void startCheckIn(const QString &workingDir, const QStringList &files = QStringList());
+ void cleanCheckInMessageFile();
+ QString ccGetFileActivity(const QString &workingDir, const QString &file);
+ QStringList ccGetActivityVersions(const QString &workingDir, const QString &activity);
+ void diffGraphical(const QString &file1, const QString &file2 = QString());
+ QString diffExternal(QString file1, QString file2 = QString(), bool keep = false);
+ QString getFile(const QString &nativeFile, const QString &prefix);
+ static void rmdir(const QString &path);
+ QString runExtDiff(const QString &workingDir, const QStringList &arguments, int timeOutS,
+ QTextCodec *outputCodec = nullptr);
+ static QString getDriveLetterOfPath(const QString &directory);
+
+ FileStatus::Status getFileStatus(const QString &fileName) const;
+ void updateStatusForFile(const QString &absFile);
+ void updateEditDerivedObjectWarning(const QString &fileName, const FileStatus::Status status);
+
+ ClearCaseSettings m_settings;
+
+ QString m_checkInMessageFileName;
+ QString m_checkInView;
+ QString m_topLevel;
+ QString m_stream;
+ ViewData m_viewData;
+ QString m_intStream;
+ QString m_activity;
+ QString m_diffPrefix;
+
+ Core::CommandLocator *m_commandLocator = nullptr;
+ Utils::ParameterAction *m_checkOutAction = nullptr;
+ Utils::ParameterAction *m_checkInCurrentAction = nullptr;
+ Utils::ParameterAction *m_undoCheckOutAction = nullptr;
+ Utils::ParameterAction *m_undoHijackAction = nullptr;
+ Utils::ParameterAction *m_diffCurrentAction = nullptr;
+ Utils::ParameterAction *m_historyCurrentAction = nullptr;
+ Utils::ParameterAction *m_annotateCurrentAction = nullptr;
+ Utils::ParameterAction *m_addFileAction = nullptr;
+ QAction *m_diffActivityAction = nullptr;
+ QAction *m_updateIndexAction = nullptr;
+ Utils::ParameterAction *m_updateViewAction = nullptr;
+ Utils::ParameterAction *m_checkInActivityAction = nullptr;
+ QAction *m_checkInAllAction = nullptr;
+ QAction *m_statusAction = nullptr;
+
+ QAction *m_menuAction = nullptr;
+ bool m_submitActionTriggered = false;
+ QMutex *m_activityMutex;
+ QList<QStringPair> m_activities;
+ QSharedPointer<StatusMap> m_statusMap;
+
+ friend class ClearCasePlugin;
+#ifdef WITH_TESTS
+ bool m_fakeClearTool = false;
+ QString m_tempFile;
+#endif
+};
+
// ------------- ClearCasePlugin
static ClearCasePluginPrivate *dd = nullptr;
@@ -162,12 +362,6 @@ ClearCasePluginPrivate::~ClearCasePluginPrivate()
delete m_activityMutex;
}
-ClearCasePlugin::~ClearCasePlugin()
-{
- delete dd;
- dd = nullptr;
-}
-
void ClearCasePluginPrivate::cleanCheckInMessageFile()
{
if (!m_checkInMessageFileName.isEmpty()) {
@@ -2176,7 +2370,7 @@ void ClearCasePluginPrivate::closing()
void ClearCasePluginPrivate::sync(QFutureInterface<void> &future, QStringList files)
{
ClearCasePluginPrivate *plugin = ClearCasePluginPrivate::instance();
- ClearCaseSync ccSync(plugin, plugin->m_statusMap);
+ ClearCaseSync ccSync(plugin->m_statusMap);
connect(&ccSync, &ClearCaseSync::updateStreamAndView, plugin, &ClearCasePluginPrivate::updateStreamAndView);
ccSync.run(future, files);
}
@@ -2309,6 +2503,59 @@ bool ClearCasePluginPrivate::vcsCreateRepository(const QString &)
return false;
}
+// ClearCasePlugin
+
+ClearCasePlugin::~ClearCasePlugin()
+{
+ delete dd;
+ dd = nullptr;
+}
+
+bool ClearCasePlugin::newActivity()
+{
+ return dd->newActivity();
+}
+
+const QList<QStringPair> ClearCasePlugin::activities(int *current)
+{
+ return dd->activities(current);
+}
+
+QStringList ClearCasePlugin::ccGetActiveVobs()
+{
+ return dd->ccGetActiveVobs();
+}
+
+void ClearCasePlugin::refreshActivities()
+{
+ dd->refreshActivities();
+}
+
+const ViewData ClearCasePlugin::viewData()
+{
+ return dd->m_viewData;
+}
+
+void ClearCasePlugin::setStatus(const QString &file, FileStatus::Status status, bool update)
+{
+ dd->setStatus(file, status, update);
+}
+
+const ClearCaseSettings &ClearCasePlugin::settings()
+{
+ return dd->m_settings;
+}
+
+void ClearCasePlugin::setSettings(const ClearCaseSettings &s)
+{
+ dd->setSettings(s);
+}
+
+QSharedPointer<StatusMap> ClearCasePlugin::statusMap()
+{
+ return dd->m_statusMap;
+}
+
#ifdef WITH_TESTS
void ClearCasePlugin::testDiffFileResolving_data()
@@ -2388,14 +2635,14 @@ void ClearCasePlugin::testFileStatusParsing()
QFETCH(QString, cleartoolLsLine);
QFETCH(int, status);
- ClearCaseSync ccSync(dd, dd->m_statusMap);
+ ClearCaseSync ccSync(dd->m_statusMap);
ccSync.verifyParseStatus(filename, cleartoolLsLine, static_cast<FileStatus::Status>(status));
}
void ClearCasePlugin::testFileNotManaged()
{
dd->m_statusMap = QSharedPointer<StatusMap>(new StatusMap);
- ClearCaseSync ccSync(dd, dd->m_statusMap);
+ ClearCaseSync ccSync(dd->m_statusMap);
ccSync.verifyFileNotManaged();
}
@@ -2403,21 +2650,21 @@ void ClearCasePlugin::testFileCheckedOutDynamicView()
{
dd->m_statusMap = QSharedPointer<StatusMap>(new StatusMap);
- ClearCaseSync ccSync(dd, dd->m_statusMap);
+ ClearCaseSync ccSync(dd->m_statusMap);
ccSync.verifyFileCheckedOutDynamicView();
}
void ClearCasePlugin::testFileCheckedInDynamicView()
{
dd->m_statusMap = QSharedPointer<StatusMap>(new StatusMap);
- ClearCaseSync ccSync(dd, dd->m_statusMap);
+ ClearCaseSync ccSync(dd->m_statusMap);
ccSync.verifyFileCheckedInDynamicView();
}
void ClearCasePlugin::testFileNotManagedDynamicView()
{
dd->m_statusMap = QSharedPointer<StatusMap>(new StatusMap);
- ClearCaseSync ccSync(dd, dd->m_statusMap);
+ ClearCaseSync ccSync(dd->m_statusMap);
ccSync.verifyFileNotManagedDynamicView();
}
@@ -2564,3 +2811,5 @@ void ClearCasePlugin::testVcsStatusDynamicNotManaged()
} // namespace Internal
} // namespace ClearCase
+
+#include "clearcaseplugin.moc"
diff --git a/src/plugins/clearcase/clearcaseplugin.h b/src/plugins/clearcase/clearcaseplugin.h
index 0c756d5c0c..dd1f593dd3 100644
--- a/src/plugins/clearcase/clearcaseplugin.h
+++ b/src/plugins/clearcase/clearcaseplugin.h
@@ -28,9 +28,7 @@
#include "clearcasesettings.h"
-#include <coreplugin/id.h>
-#include <vcsbase/vcsbaseplugin.h>
-#include <vcsbase/vcscommand.h>
+#include <extensionsystem/iplugin.h>
#include <QFile>
#include <QPair>
@@ -38,38 +36,10 @@
#include <QMetaType>
#include <QSharedPointer>
-QT_BEGIN_NAMESPACE
-class QAction;
-template <typename T>
-class QFutureInterface;
-class QMutex;
-using QStringPair = QPair<QString, QString>;
-class QTextCodec;
-QT_END_NAMESPACE
-
-namespace Core {
-class CommandLocator;
-class IVersionControl;
-class IEditor;
-} // namespace Core
-
-namespace Utils { class ParameterAction; }
-namespace VcsBase { class VcsBaseSubmitEditor; }
-namespace ProjectExplorer { class Project; }
-
namespace ClearCase {
namespace Internal {
-class ClearCaseSubmitEditor;
-
-class ClearCaseResponse
-{
-public:
- bool error = false;
- QString stdOut;
- QString stdErr;
- QString message;
-};
+using QStringPair = QPair<QString, QString>;
class FileStatus
{
@@ -103,195 +73,6 @@ public:
QString root;
};
-class ClearCasePluginPrivate final : public VcsBase::VcsBasePluginPrivate
-{
- Q_OBJECT
- enum { SilentRun = VcsBase::VcsCommand::NoOutput | VcsBase::VcsCommand::FullySynchronously };
-
-public:
- ClearCasePluginPrivate();
- ~ClearCasePluginPrivate() final;
-
- // IVersionControl
- QString displayName() const final;
- Core::Id id() const final;
-
- bool isVcsFileOrDirectory(const Utils::FilePath &fileName) const final;
-
- bool managesDirectory(const QString &directory, QString *topLevel) const final;
- bool managesFile(const QString &workingDirectory, const QString &fileName) const final;
-
- bool isConfigured() const final;
-
- bool supportsOperation(Operation operation) const final;
- OpenSupportMode openSupportMode(const QString &fileName) const final;
- bool vcsOpen(const QString &fileName) final;
- SettingsFlags settingsFlags() const final;
- bool vcsAdd(const QString &fileName) final;
- bool vcsDelete(const QString &filename) final;
- bool vcsMove(const QString &from, const QString &to) final;
- bool vcsCreateRepository(const QString &directory) final;
-
- bool vcsAnnotate(const QString &file, int line) final;
-
- QString vcsOpenText() const final;
- QString vcsMakeWritableText() const final;
- QString vcsTopic(const QString &directory) final;
-
- ///
- ClearCaseSubmitEditor *openClearCaseSubmitEditor(const QString &fileName, bool isUcm);
-
- const ClearCaseSettings &settings() const;
- void setSettings(const ClearCaseSettings &s);
-
- // IVersionControl
- bool vcsOpen(const QString &workingDir, const QString &fileName);
- bool vcsAdd(const QString &workingDir, const QString &fileName);
- bool vcsDelete(const QString &workingDir, const QString &fileName);
- bool vcsCheckIn(const QString &workingDir, const QStringList &files, const QString &activity,
- bool isIdentical, bool isPreserve, bool replaceActivity);
- bool vcsUndoCheckOut(const QString &workingDir, const QString &fileName, bool keep);
- bool vcsUndoHijack(const QString &workingDir, const QString &fileName, bool keep);
- bool vcsMove(const QString &workingDir, const QString &from, const QString &to);
- bool vcsSetActivity(const QString &workingDir, const QString &title, const QString &activity);
-
- static ClearCasePluginPrivate *instance();
-
- QString ccGetCurrentActivity() const;
- QList<QStringPair> activities(int *current = nullptr) const;
- QString ccGetPredecessor(const QString &version) const;
- QStringList ccGetActiveVobs() const;
- ViewData ccGetView(const QString &workingDir) const;
- QString ccGetComment(const QString &workingDir, const QString &fileName) const;
- bool ccFileOp(const QString &workingDir, const QString &title, const QStringList &args,
- const QString &fileName, const QString &file2 = QString());
- FileStatus vcsStatus(const QString &file) const;
- void checkAndReIndexUnknownFile(const QString &file);
- QString currentView() const { return m_viewData.name; }
- QString viewRoot() const { return m_viewData.root; }
- void refreshActivities();
- inline bool isUcm() const { return m_viewData.isUcm; }
- inline bool isDynamic() const { return m_viewData.isDynamic; }
- void setStatus(const QString &file, FileStatus::Status status, bool update = true);
-
- bool ccCheckUcm(const QString &viewname, const QString &workingDir) const;
-#ifdef WITH_TESTS
- inline void setFakeCleartool(const bool b = true) { m_fakeClearTool = b; }
-#endif
-
- void vcsAnnotateHelper(const QString &workingDir, const QString &file,
- const QString &revision = QString(), int lineNumber = -1) const;
- bool newActivity();
- void updateStreamAndView();
- void describe(const QString &source, const QString &changeNr);
-
-protected:
- void updateActions(VcsBase::VcsBasePluginPrivate::ActionState) override;
- bool submitEditorAboutToClose() override;
- QString ccGet(const QString &workingDir, const QString &file, const QString &prefix = QString());
- QList<QStringPair> ccGetActivities() const;
-
-private:
- void syncSlot();
- Q_INVOKABLE void updateStatusActions();
-
- QString commitDisplayName() const final;
- void checkOutCurrentFile();
- void addCurrentFile();
- void undoCheckOutCurrent();
- void undoHijackCurrent();
- void diffActivity();
- void diffCurrentFile();
- void startCheckInAll();
- void startCheckInActivity();
- void startCheckInCurrentFile();
- void historyCurrentFile();
- void annotateCurrentFile();
- void viewStatus();
- void commitFromEditor() override;
- void diffCheckInFiles(const QStringList &);
- void updateIndex();
- void updateView();
- void projectChanged(ProjectExplorer::Project *project);
- void tasksFinished(Core::Id type);
- void closing();
-
- inline bool isCheckInEditorOpen() const;
- QStringList getVobList() const;
- QString ccManagesDirectory(const QString &directory) const;
- QString ccViewRoot(const QString &directory) const;
- QString findTopLevel(const QString &directory) const;
- Core::IEditor *showOutputInEditor(const QString& title, const QString &output,
- int editorType, const QString &source,
- QTextCodec *codec) const;
- QString runCleartoolSync(const QString &workingDir, const QStringList &arguments) const;
- ClearCaseResponse runCleartool(const QString &workingDir, const QStringList &arguments,
- int timeOutS, unsigned flags,
- QTextCodec *outputCodec = nullptr) const;
- static void sync(QFutureInterface<void> &future, QStringList files);
-
- void history(const QString &workingDir,
- const QStringList &file = QStringList(),
- bool enableAnnotationContextMenu = false);
- QString ccGetFileVersion(const QString &workingDir, const QString &file) const;
- void ccUpdate(const QString &workingDir, const QStringList &relativePaths = QStringList());
- void ccDiffWithPred(const QString &workingDir, const QStringList &files);
- void startCheckIn(const QString &workingDir, const QStringList &files = QStringList());
- void cleanCheckInMessageFile();
- QString ccGetFileActivity(const QString &workingDir, const QString &file);
- QStringList ccGetActivityVersions(const QString &workingDir, const QString &activity);
- void diffGraphical(const QString &file1, const QString &file2 = QString());
- QString diffExternal(QString file1, QString file2 = QString(), bool keep = false);
- QString getFile(const QString &nativeFile, const QString &prefix);
- static void rmdir(const QString &path);
- QString runExtDiff(const QString &workingDir, const QStringList &arguments, int timeOutS,
- QTextCodec *outputCodec = nullptr);
- static QString getDriveLetterOfPath(const QString &directory);
-
- FileStatus::Status getFileStatus(const QString &fileName) const;
- void updateStatusForFile(const QString &absFile);
- void updateEditDerivedObjectWarning(const QString &fileName, const FileStatus::Status status);
-
- ClearCaseSettings m_settings;
-
- QString m_checkInMessageFileName;
- QString m_checkInView;
- QString m_topLevel;
- QString m_stream;
- ViewData m_viewData;
- QString m_intStream;
- QString m_activity;
- QString m_diffPrefix;
-
- Core::CommandLocator *m_commandLocator = nullptr;
- Utils::ParameterAction *m_checkOutAction = nullptr;
- Utils::ParameterAction *m_checkInCurrentAction = nullptr;
- Utils::ParameterAction *m_undoCheckOutAction = nullptr;
- Utils::ParameterAction *m_undoHijackAction = nullptr;
- Utils::ParameterAction *m_diffCurrentAction = nullptr;
- Utils::ParameterAction *m_historyCurrentAction = nullptr;
- Utils::ParameterAction *m_annotateCurrentAction = nullptr;
- Utils::ParameterAction *m_addFileAction = nullptr;
- QAction *m_diffActivityAction = nullptr;
- QAction *m_updateIndexAction = nullptr;
- Utils::ParameterAction *m_updateViewAction = nullptr;
- Utils::ParameterAction *m_checkInActivityAction = nullptr;
- QAction *m_checkInAllAction = nullptr;
- QAction *m_statusAction = nullptr;
-
- QAction *m_menuAction = nullptr;
- bool m_submitActionTriggered = false;
- QMutex *m_activityMutex;
- QList<QStringPair> m_activities;
- QSharedPointer<StatusMap> m_statusMap;
-
- friend class ClearCasePlugin;
-#ifdef WITH_TESTS
- bool m_fakeClearTool = false;
- QString m_tempFile;
-#endif
-};
-
class ClearCasePlugin final : public ExtensionSystem::IPlugin
{
Q_OBJECT
@@ -299,6 +80,18 @@ class ClearCasePlugin final : public ExtensionSystem::IPlugin
~ClearCasePlugin() final;
+public:
+ static bool newActivity();
+ static const QList<QStringPair> activities(int *current);
+ static QStringList ccGetActiveVobs();
+ static void refreshActivities();
+ static const ViewData viewData();
+ static void setStatus(const QString &file, FileStatus::Status status, bool update);
+ static const ClearCaseSettings &settings();
+ static void setSettings(const ClearCaseSettings &s);
+ static QSharedPointer<StatusMap> statusMap();
+
+private:
bool initialize(const QStringList &arguments, QString *error_message) final;
void extensionsInitialized() final;
diff --git a/src/plugins/clearcase/clearcasesync.cpp b/src/plugins/clearcase/clearcasesync.cpp
index 7466e2acd9..cc8efeb0c5 100644
--- a/src/plugins/clearcase/clearcasesync.cpp
+++ b/src/plugins/clearcase/clearcasesync.cpp
@@ -41,8 +41,7 @@
namespace ClearCase {
namespace Internal {
-ClearCaseSync::ClearCaseSync(ClearCasePluginPrivate *plugin, QSharedPointer<StatusMap> statusMap) :
- m_plugin(plugin),
+ClearCaseSync::ClearCaseSync(QSharedPointer<StatusMap> statusMap) :
m_statusMap(statusMap)
{ }
@@ -65,19 +64,17 @@ QStringList ClearCaseSync::updateStatusHotFiles(const QString &viewRoot, int &to
}
// Set status for all files to unknown until we're done indexing
-void ClearCaseSync::invalidateStatus(const QDir &viewRootDir,
- const QStringList &files)
+void ClearCaseSync::invalidateStatus(const QDir &viewRootDir, const QStringList &files)
{
- foreach (const QString &file, files) {
- m_plugin->setStatus(viewRootDir.absoluteFilePath(file), FileStatus::Unknown, false);
- }
+ for (const QString &file : files)
+ ClearCasePlugin::setStatus(viewRootDir.absoluteFilePath(file), FileStatus::Unknown, false);
}
void ClearCaseSync::invalidateStatusAllFiles()
{
const StatusMap::ConstIterator send = m_statusMap->constEnd();
for (StatusMap::ConstIterator it = m_statusMap->constBegin(); it != send; ++it)
- m_plugin->setStatus(it.key(), FileStatus::Unknown, false);
+ ClearCasePlugin::setStatus(it.key(), FileStatus::Unknown, false);
}
void ClearCaseSync::processCleartoolLsLine(const QDir &viewRootDir, const QString &buffer)
@@ -100,23 +97,23 @@ void ClearCaseSync::processCleartoolLsLine(const QDir &viewRootDir, const QStrin
if (reState.indexIn(buffer, wspos + 1, QRegExp::CaretAtOffset) != -1) {
ccState = reState.cap();
if (ccState.indexOf(QLatin1String("hijacked")) != -1)
- m_plugin->setStatus(absFile, FileStatus::Hijacked, true);
+ ClearCasePlugin::setStatus(absFile, FileStatus::Hijacked, true);
else if (ccState.indexOf(QLatin1String("loaded but missing")) != -1)
- m_plugin->setStatus(absFile, FileStatus::Missing, false);
+ ClearCasePlugin::setStatus(absFile, FileStatus::Missing, false);
}
else if (buffer.lastIndexOf(QLatin1String("CHECKEDOUT"), wspos) != -1)
- m_plugin->setStatus(absFile, FileStatus::CheckedOut, true);
+ ClearCasePlugin::setStatus(absFile, FileStatus::CheckedOut, true);
// don't care about checked-in files not listed in project
else if (m_statusMap->contains(absFile))
- m_plugin->setStatus(absFile, FileStatus::CheckedIn, true);
+ ClearCasePlugin::setStatus(absFile, FileStatus::CheckedIn, true);
}
void ClearCaseSync::updateTotalFilesCount(const QString &view, ClearCaseSettings settings,
const int processed)
{
- settings = m_plugin->settings(); // Might have changed while task was running
+ settings = ClearCasePlugin::settings(); // Might have changed while task was running
settings.totalFiles[view] = processed;
- m_plugin->setSettings(settings);
+ ClearCasePlugin::setSettings(settings);
}
void ClearCaseSync::updateStatusForNotManagedFiles(const QStringList &files)
@@ -124,14 +121,14 @@ void ClearCaseSync::updateStatusForNotManagedFiles(const QStringList &files)
foreach (const QString &file, files) {
QString absFile = QFileInfo(file).absoluteFilePath();
if (!m_statusMap->contains(absFile))
- m_plugin->setStatus(absFile, FileStatus::NotManaged, false);
+ ClearCasePlugin::setStatus(absFile, FileStatus::NotManaged, false);
}
}
void ClearCaseSync::syncSnapshotView(QFutureInterface<void> &future, QStringList &files,
const ClearCaseSettings &settings)
{
- QString view = m_plugin->currentView();
+ QString view = ClearCasePlugin::viewData().name;
int totalFileCount = files.size();
const bool hot = (totalFileCount < 10);
@@ -139,7 +136,7 @@ void ClearCaseSync::syncSnapshotView(QFutureInterface<void> &future, QStringList
if (!hot)
totalFileCount = settings.totalFiles.value(view, totalFileCount);
- const QString viewRoot = m_plugin->viewRoot();
+ const QString viewRoot = ClearCasePlugin::viewData().root;
const QDir viewRootDir(viewRoot);
QStringList args(QLatin1String("ls"));
@@ -154,7 +151,7 @@ void ClearCaseSync::syncSnapshotView(QFutureInterface<void> &future, QStringList
if (!settings.indexOnlyVOBs.isEmpty())
vobs = settings.indexOnlyVOBs.split(QLatin1Char(','));
else
- vobs = m_plugin->ccGetActiveVobs();
+ vobs = ClearCasePlugin::ccGetActiveVobs();
args << vobs;
}
@@ -201,7 +198,7 @@ void ClearCaseSync::syncSnapshotView(QFutureInterface<void> &future, QStringList
void ClearCaseSync::processCleartoolLscheckoutLine(const QString &buffer)
{
QString absFile = buffer.trimmed();
- m_plugin->setStatus(absFile, FileStatus::CheckedOut, true);
+ ClearCasePlugin::setStatus(absFile, FileStatus::CheckedOut, true);
}
///
@@ -219,7 +216,7 @@ void ClearCaseSync::syncDynamicView(QFutureInterface<void> &future,
<< QLatin1String("-cview")
<< QLatin1String("-s");
- const QString viewRoot = m_plugin->viewRoot();
+ const QString viewRoot = ClearCasePlugin::viewData().root;
QProcess process;
process.setWorkingDirectory(viewRoot);
@@ -252,7 +249,7 @@ void ClearCaseSync::syncDynamicView(QFutureInterface<void> &future,
void ClearCaseSync::run(QFutureInterface<void> &future, QStringList &files)
{
- ClearCaseSettings settings = m_plugin->settings();
+ ClearCaseSettings settings = ClearCasePlugin::settings();
if (settings.disableIndexer)
return;
@@ -261,14 +258,14 @@ void ClearCaseSync::run(QFutureInterface<void> &future, QStringList &files)
return;
// refresh activities list
- if (m_plugin->isUcm())
- m_plugin->refreshActivities();
+ if (ClearCasePlugin::viewData().isUcm)
+ ClearCasePlugin::refreshActivities();
- QString view = m_plugin->currentView();
+ QString view = ClearCasePlugin::viewData().name;
if (view.isEmpty())
emit updateStreamAndView();
- if (m_plugin->isDynamic())
+ if (ClearCasePlugin::viewData().isDynamic)
syncDynamicView(future, settings);
else
syncSnapshotView(future, files, settings);
@@ -311,7 +308,7 @@ void ClearCaseSync::verifyParseStatus(const QString &fileName,
// The algorithm doesn't store checked in files in the index, unless it was there already
QCOMPARE(m_statusMap->count(), 0);
QCOMPARE(m_statusMap->contains(fileName), false);
- m_plugin->setStatus(fileName, FileStatus::Unknown, false);
+ ClearCasePlugin::setStatus(fileName, FileStatus::Unknown, false);
processCleartoolLsLine(QDir(QLatin1String("/")), cleartoolLsLine);
}
diff --git a/src/plugins/clearcase/clearcasesync.h b/src/plugins/clearcase/clearcasesync.h
index cff98b4cd2..4753e59f70 100644
--- a/src/plugins/clearcase/clearcasesync.h
+++ b/src/plugins/clearcase/clearcasesync.h
@@ -27,6 +27,9 @@
#include "clearcaseplugin.h"
+#include <QDir>
+#include <QFutureInterface>
+
namespace ClearCase {
namespace Internal {
@@ -34,7 +37,7 @@ class ClearCaseSync : public QObject
{
Q_OBJECT
public:
- explicit ClearCaseSync(ClearCasePluginPrivate *plugin, QSharedPointer<StatusMap> statusMap);
+ explicit ClearCaseSync(QSharedPointer<StatusMap> statusMap);
void run(QFutureInterface<void> &future, QStringList &files);
QStringList updateStatusHotFiles(const QString &viewRoot, int &total);
@@ -55,7 +58,6 @@ signals:
void updateStreamAndView();
private:
- ClearCasePluginPrivate *const m_plugin;
QSharedPointer<StatusMap> m_statusMap;
#ifdef WITH_TESTS
diff --git a/src/plugins/clearcase/settingspage.cpp b/src/plugins/clearcase/settingspage.cpp
index fd6e671270..039f0cc075 100644
--- a/src/plugins/clearcase/settingspage.cpp
+++ b/src/plugins/clearcase/settingspage.cpp
@@ -65,7 +65,7 @@ SettingsPageWidget::SettingsPageWidget()
m_ui.commandPathChooser->setExpectedKind(PathChooser::ExistingCommand);
m_ui.commandPathChooser->setHistoryCompleter(QLatin1String("ClearCase.Command.History"));
- ClearCaseSettings s = ClearCasePluginPrivate::instance()->settings();
+ const ClearCaseSettings &s = ClearCasePlugin::settings();
m_ui.commandPathChooser->setPath(s.ccCommand);
m_ui.timeOutSpinBox->setValue(s.timeOutS);
@@ -117,7 +117,7 @@ void SettingsPageWidget::apply()
rc.indexOnlyVOBs = m_ui.indexOnlyVOBsEdit->text();
rc.extDiffAvailable = m_ui.externalDiffRadioButton->isEnabled();
- ClearCasePluginPrivate::instance()->setSettings(rc);
+ ClearCasePlugin::setSettings(rc);
}
ClearCaseSettingsPage::ClearCaseSettingsPage(QObject *parent)