diff --git a/src/plugins/clearcase/clearcasecontrol.cpp b/src/plugins/clearcase/clearcasecontrol.cpp index 8ee90b2fe22f6f7df92944260f3d51703c1147ef..ab51b25322d5a3c1c194a051e629ae5838579a81 100644 --- a/src/plugins/clearcase/clearcasecontrol.cpp +++ b/src/plugins/clearcase/clearcasecontrol.cpp @@ -146,7 +146,7 @@ QString ClearCaseControl::vcsMakeWritableText() const QString ClearCaseControl::vcsTopic(const QString &directory) { - return m_plugin->ccGetView(directory); + return m_plugin->ccGetView(directory).name; } void ClearCaseControl::emitRepositoryChanged(const QString &s) diff --git a/src/plugins/clearcase/clearcaseplugin.cpp b/src/plugins/clearcase/clearcaseplugin.cpp index e1159dcf85ba5fe1385ffd65609d4c27d02e70f7..e54715173f9ca0cd476dd611c5aaa8bcd66c0feb 100644 --- a/src/plugins/clearcase/clearcaseplugin.cpp +++ b/src/plugins/clearcase/clearcaseplugin.cpp @@ -159,10 +159,14 @@ static inline QString debugCodec(const QTextCodec *c) // ------------- ClearCasePlugin ClearCasePlugin *ClearCasePlugin::m_clearcasePluginInstance = 0; +ViewData::ViewData() : + isDynamic(false), + isUcm(false) +{ +} + ClearCasePlugin::ClearCasePlugin() : VcsBase::VcsBasePlugin(QLatin1String(ClearCase::Constants::CLEARCASECHECKINEDITOR_ID)), - m_isDynamic(false), - m_isUcm(false), m_commandLocator(0), m_checkOutAction(0), m_checkInCurrentAction(0), @@ -234,9 +238,7 @@ QString ClearCasePlugin::findTopLevel(const QString &directory) const return topLevel; // Dynamic view - bool isDynamic; - ccGetView(directory, &isDynamic); - if (isDynamic) { + if (ccGetView(directory).isDynamic) { QDir dir(directory); // Go up to one level before root QDir outer = dir; @@ -245,7 +247,7 @@ QString ClearCasePlugin::findTopLevel(const QString &directory) const dir.cdUp(); topLevel = dir.path(); // M:/View_Name dir.cdUp(); // Z:/ (dynamic view with assigned letter) - if (!ccGetView(dir.path()).isEmpty()) + if (!ccGetView(dir.path()).name.isEmpty()) topLevel = dir.path(); } @@ -594,12 +596,12 @@ void ClearCasePlugin::updateStatusActions() m_checkOutAction->setEnabled(hasFile && (fileStatus.status & (FileStatus::CheckedIn | FileStatus::Hijacked))); m_undoCheckOutAction->setEnabled(hasFile && (fileStatus.status & FileStatus::CheckedOut)); - m_undoHijackAction->setEnabled(!m_isDynamic && hasFile && (fileStatus.status & FileStatus::Hijacked)); + m_undoHijackAction->setEnabled(!m_viewData.isDynamic && hasFile && (fileStatus.status & FileStatus::Hijacked)); m_checkInCurrentAction->setEnabled(hasFile && (fileStatus.status & FileStatus::CheckedOut)); m_addFileAction->setEnabled(hasFile && (fileStatus.status & FileStatus::NotManaged)); - m_checkInActivityAction->setEnabled(m_isUcm); - m_diffActivityAction->setEnabled(m_isUcm); + m_checkInActivityAction->setEnabled(m_viewData.isUcm); + m_diffActivityAction->setEnabled(m_viewData.isUcm); } void ClearCasePlugin::updateActions(VcsBase::VcsBasePlugin::ActionState as) @@ -614,7 +616,7 @@ void ClearCasePlugin::updateActions(VcsBase::VcsBasePlugin::ActionState as) if (hasTopLevel) m_topLevel = state.topLevel(); - m_updateViewAction->setParameter(m_isDynamic ? QString() : m_view); + m_updateViewAction->setParameter(m_viewData.isDynamic ? QString() : m_viewData.name); const QString fileName = state.currentFileName(); m_checkOutAction->setParameter(fileName); @@ -1009,10 +1011,10 @@ void ClearCasePlugin::startCheckIn(const QString &workingDir, const QStringList m_checkInMessageFileName = saver.fileName(); m_checkInView = workingDir; // Create a submit editor and set file list - ClearCaseSubmitEditor *editor = openClearCaseSubmitEditor(m_checkInMessageFileName, m_isUcm); + ClearCaseSubmitEditor *editor = openClearCaseSubmitEditor(m_checkInMessageFileName, m_viewData.isUcm); editor->setStatusList(files); - if (m_isUcm && (files.size() == 1)) { + if (m_viewData.isUcm && (files.size() == 1)) { QString activity = ccGetFileActivity(workingDir, files.first()); editor->submitEditorWidget()->setActivity(activity); } @@ -1072,9 +1074,9 @@ void ClearCasePlugin::history(const QString &workingDir, void ClearCasePlugin::viewStatus() { - if (m_view.isEmpty()) - m_view = ccGetView(m_topLevel); - QTC_ASSERT(!m_view.isEmpty() && !m_settings.disableIndexer, return); + if (m_viewData.name.isEmpty()) + m_viewData = ccGetView(m_topLevel); + QTC_ASSERT(!m_viewData.name.isEmpty() && !m_settings.disableIndexer, return); VcsBase::VcsBaseOutputWindow *outputwindow = VcsBase::VcsBaseOutputWindow::instance(); outputwindow->appendCommand(QLatin1String("Indexed files status (C=Checked Out, H=Hijacked, ?=Missing)")); bool anymod = false; @@ -1318,7 +1320,7 @@ bool ClearCasePlugin::vcsOpen(const QString &workingDir, const QString &fileName const QString file = QDir::toNativeSeparators(relFile); const QString title = QString::fromLatin1("Checkout %1").arg(file); - CheckOutDialog coDialog(title, m_isUcm); + CheckOutDialog coDialog(title, m_viewData.isUcm); if (!m_settings.disableIndexer && (fi.isWritable() || m_statusMap->value(relFile).status == FileStatus::Unknown)) @@ -1328,11 +1330,11 @@ bool ClearCasePlugin::vcsOpen(const QString &workingDir, const QString &fileName return true; } // Only snapshot views can have hijacked files - bool isHijacked = (!m_isDynamic && (m_statusMap->value(relFile).status & FileStatus::Hijacked)); + bool isHijacked = (!m_viewData.isDynamic && (m_statusMap->value(relFile).status & FileStatus::Hijacked)); if (!isHijacked) coDialog.hideHijack(); if (coDialog.exec() == QDialog::Accepted) { - if (m_isUcm && !vcsSetActivity(topLevel, title, coDialog.activity())) + if (m_viewData.isUcm && !vcsSetActivity(topLevel, title, coDialog.activity())) return false; Core::FileChangeBlocker fcb(absPath); @@ -1475,7 +1477,7 @@ bool ClearCasePlugin::ccFileOp(const QString &workingDir, const QString &title, fileOpDlg.setWindowTitle(title); verticalLayout = new QVBoxLayout(&fileOpDlg); - if (m_isUcm) { + if (m_viewData.isUcm) { actSelector = new ActivitySelector; verticalLayout->addWidget(actSelector); } @@ -1501,7 +1503,7 @@ bool ClearCasePlugin::ccFileOp(const QString &workingDir, const QString &title, return true; QString comment = commentEdit->toPlainText(); - if (m_isUcm && actSelector->changed()) + if (m_viewData.isUcm && actSelector->changed()) vcsSetActivity(workingDir, fileOpDlg.windowTitle(), actSelector->activity()); QString dirName = QDir::toNativeSeparators(QFileInfo(workingDir, fileName).absolutePath()); @@ -1708,25 +1710,16 @@ bool ClearCasePlugin::ccCheckUcm(const QString &viewname, const QString &working return QRegExp(QLatin1String("(^|\\n)ucm\\n")).indexIn(catcsData) != -1; } -QString ClearCasePlugin::ccGetView(const QString &workingDir, bool *isDynamic, bool *isUcm) const +ViewData ClearCasePlugin::ccGetView(const QString &workingDir) const { + ViewData res; QStringList args(QLatin1String("lsview")); args << QLatin1String("-cview"); QString data = runCleartoolSync(workingDir, args); - if (data.isEmpty()) { - if (isDynamic) - *isDynamic = false; - return QString(); - } - if (isDynamic) - *isDynamic = !data.isEmpty() && (data.at(0) == QLatin1Char('*')); - - QString viewname = data.mid(2, data.indexOf(QLatin1Char(' '), 2) - 2); - if (isUcm) - *isUcm = ccCheckUcm(viewname, workingDir); - - return viewname; - + res.isDynamic = !data.isEmpty() && (data.at(0) == QLatin1Char('*')); + res.name = data.mid(2, data.indexOf(QLatin1Char(' '), 2) - 2); + res.isUcm = ccCheckUcm(res.name, workingDir); + return res; } void ClearCasePlugin::updateStreamAndView() @@ -1739,15 +1732,15 @@ void ClearCasePlugin::updateStreamAndView() QRegExp intStreamExp(QLatin1String("stream:([^@]*)")); if (intStreamExp.indexIn(sresponse.mid(tabPos + 1)) != -1) m_intStream = intStreamExp.cap(1); - m_view = ccGetView(m_topLevel, &m_isDynamic, &m_isUcm); - m_updateViewAction->setParameter(m_isDynamic ? QString() : m_view); + m_viewData = ccGetView(m_topLevel); + m_updateViewAction->setParameter(m_viewData.isDynamic ? QString() : m_viewData.name); } void ClearCasePlugin::projectChanged(ProjectExplorer::Project *project) { - if (m_view == ccGetView(m_topLevel)) // New project on same view as old project + if (m_viewData.name == ccGetView(m_topLevel).name) // New project on same view as old project return; - m_view.clear(); + m_viewData = ViewData(); m_stream.clear(); m_intStream.clear(); disconnect(Core::ICore::mainWindow(), SIGNAL(windowActivated()), this, SLOT(syncSlot())); @@ -1760,12 +1753,12 @@ void ClearCasePlugin::projectChanged(ProjectExplorer::Project *project) return; connect(Core::ICore::mainWindow(), SIGNAL(windowActivated()), this, SLOT(syncSlot())); updateStreamAndView(); - if (m_view.isEmpty()) + if (m_viewData.name.isEmpty()) return; updateIndex(); } if ( ClearCase::Constants::debug ) - qDebug() << "stream: " << m_stream << "; intStream: " << m_intStream << "view: " << m_view; + qDebug() << "stream: " << m_stream << "; intStream: " << m_intStream << "view: " << m_viewData.name; } void ClearCasePlugin::tasksFinished(const QString &type) diff --git a/src/plugins/clearcase/clearcaseplugin.h b/src/plugins/clearcase/clearcaseplugin.h index c2fe94df124d297cfa4e0c2d140ac9617de81681..7f8a5e32525949743d70e0d9b41f2a391a8a90b6 100644 --- a/src/plugins/clearcase/clearcaseplugin.h +++ b/src/plugins/clearcase/clearcaseplugin.h @@ -99,6 +99,16 @@ public: typedef QHash<QString, FileStatus> StatusMap; +class ViewData +{ +public: + ViewData(); + + QString name; + bool isDynamic; + bool isUcm; +}; + class ClearCasePlugin : public VcsBase::VcsBasePlugin { Q_OBJECT @@ -141,13 +151,13 @@ public: QList<QStringPair> activities(int *current = 0) const; QString ccGetPredecessor(const QString &version) const; QStringList ccGetActiveVobs() const; - QString ccGetView(const QString &workingDir, bool *isDynamic = 0, bool *isUcm = 0) const; + ViewData ccGetView(const QString &workingDir) 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; - QString currentView() const { return m_view; } + QString currentView() const { return m_viewData.name; } void refreshActivities(); - inline bool isUcm() const { return m_isUcm; } + inline bool isUcm() const { return m_viewData.isUcm; } void setStatus(const QString &file, FileStatus::Status status, bool update = true); bool ccCheckUcm(const QString &viewname, const QString &workingDir) const; @@ -225,9 +235,7 @@ private: QString m_checkInView; QString m_topLevel; QString m_stream; - QString m_view; - bool m_isDynamic; - bool m_isUcm; + ViewData m_viewData; QString m_intStream; QString m_activity; QString m_diffPrefix;