forked from qt-creator/qt-creator
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 <orgads@gmail.com>
This commit is contained in:
@@ -83,12 +83,23 @@ bool ClearCaseControl::supportsOperation(Operation operation) const
|
||||
return rc;
|
||||
}
|
||||
|
||||
Core::IVersionControl::OpenSupportMode ClearCaseControl::openSupportMode() const
|
||||
Core::IVersionControl::OpenSupportMode ClearCaseControl::openSupportMode(const QString &fileName) const
|
||||
{
|
||||
if (m_plugin->isDynamic())
|
||||
return IVersionControl::OpenMandatory; // Checkout is the only option for dynamic views
|
||||
else
|
||||
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);
|
||||
|
||||
Reference in New Issue
Block a user