Commit 16b4c2e0 authored by Knut Petter Svendsen's avatar Knut Petter Svendsen

ClearCase: Handle read-only view private files

View private files have state NotManaged. In the corner case
where a NotManaged file is read-only they should be made
writeable by the ReadOnlyFilesDialog, and not vcsOpen()-ed.

Change-Id: Icfeab6bebb76cc01da693b3bfff7b46c45b106b4
Reviewed-by: Orgad Shaneh's avatarOrgad Shaneh <orgads@gmail.com>
parent 4c0d07a9
......@@ -83,12 +83,23 @@ bool ClearCaseControl::supportsOperation(Operation operation) const
return rc;
}
Core::IVersionControl::OpenSupportMode ClearCaseControl::openSupportMode() const
{
if (m_plugin->isDynamic())
return IVersionControl::OpenMandatory; // Checkout is the only option for dynamic views
else
Core::IVersionControl::OpenSupportMode ClearCaseControl::openSupportMode(const QString &fileName) const
{
if (m_plugin->isDynamic()) {
// NB! Has to use managesFile() and not vcsStatus() since the index can only be guaranteed
// to be up to date if the file has been explicitly opened, which is not the case when
// doing a search and replace as a part of a refactoring.
if (m_plugin->managesFile(QFileInfo(fileName).absolutePath(), fileName)) {
// Checkout is the only option for managed files in dynamic views
return IVersionControl::OpenMandatory;
} else {
// Not managed files can be edited without noticing the VCS
return IVersionControl::NoOpen;
}
} else {
return IVersionControl::OpenOptional; // Snapshot views supports Hijack and check out
}
}
bool ClearCaseControl::vcsOpen(const QString &fileName)
......@@ -153,6 +164,8 @@ QString ClearCaseControl::vcsOpenText() const
QString ClearCaseControl::vcsMakeWritableText() const
{
if (m_plugin->isDynamic())
return QString();
return tr("&Hijack");
}
......
......@@ -53,7 +53,7 @@ public:
bool isConfigured() const;
bool supportsOperation(Operation operation) const;
OpenSupportMode openSupportMode() const;
OpenSupportMode openSupportMode(const QString &fileName) const;
bool vcsOpen(const QString &fileName);
SettingsFlags settingsFlags() const;
bool vcsAdd(const QString &fileName);
......
......@@ -389,7 +389,7 @@ void ReadOnlyFilesDialog::initDialog(const QStringList &fileNames)
IVersionControl *versionControlForFile =
VcsManager::findVersionControlForDirectory(directory);
const bool fileManagedByVCS = versionControlForFile
&& versionControlForFile->openSupportMode() != IVersionControl::NoOpen;
&& versionControlForFile->openSupportMode(fileName) != IVersionControl::NoOpen;
if (fileManagedByVCS) {
const QString vcsOpenTextForFile =
versionControlForFile->vcsOpenText().remove(QLatin1Char('&'));
......@@ -407,7 +407,7 @@ void ReadOnlyFilesDialog::initDialog(const QStringList &fileNames)
vcsMakeWritableTextForAll.clear();
}
// Add make writable if it is supported by the reposetory.
if (versionControlForFile->openSupportMode() == IVersionControl::OpenOptional) {
if (versionControlForFile->openSupportMode(fileName) == IVersionControl::OpenOptional) {
useMakeWritable = true;
createRadioButtonForItem(item, radioButtonGroup, MakeWritable);
}
......
......@@ -1896,7 +1896,7 @@ void EditorManager::vcsOpenCurrentEditor()
const QString directory = QFileInfo(document->filePath()).absolutePath();
IVersionControl *versionControl = VcsManager::findVersionControlForDirectory(directory);
if (!versionControl || versionControl->openSupportMode() == IVersionControl::NoOpen)
if (!versionControl || versionControl->openSupportMode(document->filePath()) == IVersionControl::NoOpen)
return;
if (!versionControl->vcsOpen(document->filePath())) {
......@@ -1958,7 +1958,7 @@ void EditorManager::updateMakeWritableWarning()
bool promptVCS = false;
const QString directory = QFileInfo(document->filePath()).absolutePath();
IVersionControl *versionControl = VcsManager::findVersionControlForDirectory(directory);
if (versionControl && versionControl->openSupportMode() != IVersionControl::NoOpen) {
if (versionControl && versionControl->openSupportMode(document->filePath()) != IVersionControl::NoOpen) {
if (versionControl->settingsFlags() & IVersionControl::AutoOpen) {
vcsOpenCurrentEditor();
ww = false;
......
......@@ -46,8 +46,9 @@ QString IVersionControl::vcsTopic(const QString &)
return QString();
}
IVersionControl::OpenSupportMode IVersionControl::openSupportMode() const
IVersionControl::OpenSupportMode IVersionControl::openSupportMode(const QString &fileName) const
{
Q_UNUSED(fileName);
return NoOpen;
}
......
......@@ -100,9 +100,9 @@ public:
virtual bool supportsOperation(Operation operation) const = 0;
/*!
* Returns the open support mode.
* Returns the open support mode for \a fileName.
*/
virtual OpenSupportMode openSupportMode() const;
virtual OpenSupportMode openSupportMode(const QString &fileName) const;
/*!
* Called prior to save, if the file is read only. Should be implemented if
......
......@@ -81,8 +81,9 @@ bool CvsControl::supportsOperation(Operation operation) const
return rc;
}
Core::IVersionControl::OpenSupportMode CvsControl::openSupportMode() const
Core::IVersionControl::OpenSupportMode CvsControl::openSupportMode(const QString &fileName) const
{
Q_UNUSED(fileName);
return OpenOptional;
}
......
......@@ -52,7 +52,7 @@ public:
bool isConfigured() const;
bool supportsOperation(Operation operation) const;
OpenSupportMode openSupportMode() const;
OpenSupportMode openSupportMode(const QString &fileName) const;
bool vcsOpen(const QString &fileName);
bool vcsAdd(const QString &fileName);
bool vcsDelete(const QString &filename);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment