diff options
-rw-r--r-- | src/plugins/clearcase/activityselector.cpp | 11 | ||||
-rw-r--r-- | src/plugins/clearcase/activityselector.h | 3 | ||||
-rw-r--r-- | src/plugins/clearcase/clearcaseplugin.cpp | 275 | ||||
-rw-r--r-- | src/plugins/clearcase/clearcaseplugin.h | 235 | ||||
-rw-r--r-- | src/plugins/clearcase/clearcasesync.cpp | 49 | ||||
-rw-r--r-- | src/plugins/clearcase/clearcasesync.h | 6 | ||||
-rw-r--r-- | src/plugins/clearcase/settingspage.cpp | 4 |
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(¤t); + QList<QStringPair> activities = ClearCasePlugin::activities(¤t); 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) |