aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/clearcase
diff options
context:
space:
mode:
authorKnut Petter Svendsen <knutpett@pvv.org>2013-11-20 12:55:23 +0100
committerKnut Petter Svendsen <knutpett@pvv.org>2013-12-05 13:47:47 +0100
commit48fdbe244deb7e51bf84d67100aa7f008477c52a (patch)
tree9ea9786c75fde4ed65e8ae5a907d1d246ca40beb /src/plugins/clearcase
parent0bb76dc984f022ddc7508f783d67d5fb82d6df98 (diff)
ClearCase: Handle Derived Objects
Derived Objects (DO) should not be checked in or out. Ideally they should not be edited at all, but in the case where a user by accident opens a DO and it is read only do not offer to vcsOpen() the file. Change-Id: I5aee9655ca8696c6d7291950946052261526c751 Reviewed-by: Orgad Shaneh <orgads@gmail.com>
Diffstat (limited to 'src/plugins/clearcase')
-rw-r--r--src/plugins/clearcase/clearcaseplugin.cpp17
-rw-r--r--src/plugins/clearcase/clearcaseplugin.h3
2 files changed, 14 insertions, 6 deletions
diff --git a/src/plugins/clearcase/clearcaseplugin.cpp b/src/plugins/clearcase/clearcaseplugin.cpp
index f2251acca80..5f9d37e028f 100644
--- a/src/plugins/clearcase/clearcaseplugin.cpp
+++ b/src/plugins/clearcase/clearcaseplugin.cpp
@@ -256,16 +256,22 @@ FileStatus::Status ClearCasePlugin::getFileStatus(const QString &fileName) const
QString buffer = runCleartoolSync(viewRoot, args);
const int atatpos = buffer.indexOf(QLatin1String("@@"));
- if (atatpos != -1) { // probably managed file
- // find first whitespace. anything before that is not interesting
- const int wspos = buffer.indexOf(QRegExp(QLatin1String("\\s")));
+ if (atatpos != -1) { // probably a managed file
const QString absFile =
viewRootDir.absoluteFilePath(
QDir::fromNativeSeparators(buffer.left(atatpos)));
-
QTC_CHECK(QFile(absFile).exists());
QTC_CHECK(!absFile.isEmpty());
+ // "cleartool ls" of a derived object looks like this:
+ // /path/to/file/export/MyFile.h@@--11-13T19:52.266580
+ const QChar c = buffer.at(atatpos + 2);
+ const bool isDerivedObject = c != QLatin1Char('/') && c != QLatin1Char('\\');
+ if (isDerivedObject)
+ return FileStatus::Derived;
+
+ // find first whitespace. anything before that is not interesting
+ const int wspos = buffer.indexOf(QRegExp(QLatin1String("\\s")));
if (buffer.lastIndexOf(QLatin1String("CHECKEDOUT"), wspos) != -1)
return FileStatus::CheckedOut;
else
@@ -1940,7 +1946,8 @@ bool ClearCasePlugin::ccCheckUcm(const QString &viewname, const QString &working
bool ClearCasePlugin::managesFile(const QString &workingDirectory, const QString &fileName) const
{
QString absFile = QFileInfo(QDir(workingDirectory), fileName).absoluteFilePath();
- return getFileStatus(absFile) != FileStatus::NotManaged;
+ const FileStatus::Status status = getFileStatus(absFile);
+ return status != FileStatus::NotManaged && status != FileStatus::Derived;
}
ViewData ClearCasePlugin::ccGetView(const QString &workingDir) const
diff --git a/src/plugins/clearcase/clearcaseplugin.h b/src/plugins/clearcase/clearcaseplugin.h
index 7ce1dbf79f5..af7af67800b 100644
--- a/src/plugins/clearcase/clearcaseplugin.h
+++ b/src/plugins/clearcase/clearcaseplugin.h
@@ -89,7 +89,8 @@ public:
CheckedOut = 0x02,
Hijacked = 0x04,
NotManaged = 0x08,
- Missing = 0x10
+ Missing = 0x10,
+ Derived = 0x20
} status;
QFile::Permissions permissions;