aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/clearcase
diff options
context:
space:
mode:
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 99d15c1c799..ad7644d3946 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 2e62d1c2886..638e6963fe2 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 a2225c01c54..d572b2a7fec 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 0c756d5c0c6..dd1f593dd33 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 7466e2acd96..cc8efeb0c5d 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 cff98b4cd2a..4753e59f709 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 fd6e6712707..039f0cc0750 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)