From c7cd4c9aa4aecbe028be5959cedecac1681dfa00 Mon Sep 17 00:00:00 2001 From: Knut Petter Svendsen Date: Tue, 2 Apr 2013 21:15:35 +0200 Subject: [PATCH] ClearCase: Assume Read Only file is Checked In for dynamic view Assume that read only files on dynamic views are checked in files. That assumption gives a better status until all files are indexed. Once all files are indexed the correct state will be used (in case the assumption was wrong). Change-Id: I7097b89801b6798399560d727566419e72f13b2f Reviewed-by: Orgad Shaneh --- src/plugins/clearcase/clearcasesync.cpp | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/src/plugins/clearcase/clearcasesync.cpp b/src/plugins/clearcase/clearcasesync.cpp index 51451f787dd..e5039371ea2 100644 --- a/src/plugins/clearcase/clearcasesync.cpp +++ b/src/plugins/clearcase/clearcasesync.cpp @@ -67,23 +67,36 @@ void ClearCaseSync::run(QFutureInterface &future, const QString &topLevel, return; QDir topLevelDir(topLevel); + const bool isDynamic = m_plugin->isDynamic(); + QStringList args(QLatin1String("ls")); if (hot) { // find all files whose permissions changed OR hijacked files // (might have become checked out) const StatusMap::Iterator send = m_statusMap->end(); for (StatusMap::Iterator it = m_statusMap->begin(); it != send; ++it) { - const bool permChanged = it.value().permissions != QFileInfo(topLevel, it.key()).permissions(); + const QFileInfo fi(topLevel, it.key()); + const bool permChanged = it.value().permissions != fi.permissions(); if (permChanged || it.value().status == FileStatus::Hijacked) { files.append(it.key()); it.value().status = FileStatus::Unknown; ++total; + } else if (isDynamic && !fi.isWritable()) { // assume a read only file is checked in + it.value().status = FileStatus::CheckedIn; + ++total; } } args << files; } else { - foreach (const QString &file, files) - m_plugin->setStatus(topLevelDir.relativeFilePath(file), FileStatus::Unknown, false); + foreach (const QString &file, files) { + if (isDynamic) { // assume a read only file is checked in + const QFileInfo fi(topLevelDir, file); + if (!fi.isWritable()) + m_plugin->setStatus(topLevelDir.relativeFilePath(file), FileStatus::CheckedIn, false); + } else { + m_plugin->setStatus(topLevelDir.relativeFilePath(file), FileStatus::Unknown, false); + } + } args << QLatin1String("-recurse"); QStringList vobs;