X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/fa4680cb38028aceb68d41e1937d27c71d1f121b..c92c5cada0bb687d29f4af1eb1230f28cc2bdf6c:/src/revisioncontrolplugin.cpp diff --git a/src/revisioncontrolplugin.cpp b/src/revisioncontrolplugin.cpp index 6c0f82fb8..5e6783335 100644 --- a/src/revisioncontrolplugin.cpp +++ b/src/revisioncontrolplugin.cpp @@ -19,7 +19,10 @@ #include "revisioncontrolplugin.h" +#include #include +#include +#include RevisionControlPlugin::RevisionControlPlugin() { @@ -33,7 +36,7 @@ RevisionControlPlugin::~RevisionControlPlugin() SubversionPlugin::SubversionPlugin() : m_directory(), - m_fileInfoHash() + m_revisionInfoHash() { } @@ -49,6 +52,7 @@ QString SubversionPlugin::fileName() const bool SubversionPlugin::beginRetrieval(const QString& directory) { Q_ASSERT(directory.endsWith('/')); + m_directory = directory; const QString path = directory + ".svn/text-base/"; QDir dir(path); @@ -61,7 +65,10 @@ bool SubversionPlugin::beginRetrieval(const QString& directory) // in a fast way in SubversionPlugin::revisionState(). fileName.chop(sizeof(".svn-base") / sizeof(char) - 1); if (!fileName.isEmpty()) { - m_fileInfoHash.insert(fileName, fileInfoList.at(i)); + RevisionInfo info; + info.size = fileInfoList.at(i).size(); + info.timeStamp = fileInfoList.at(i).lastModified(); + m_revisionInfoHash.insert(fileName, info); } } return size > 0; @@ -71,11 +78,33 @@ void SubversionPlugin::endRetrieval() { } -RevisionControlPlugin::RevisionState SubversionPlugin::revisionState(const QString& fileName) +RevisionControlPlugin::RevisionState SubversionPlugin::revisionState(const KFileItem& item) { - if (m_fileInfoHash.contains(fileName)) { - // TODO... - return RevisionControlPlugin::LatestRevision; + const QString name = item.name(); + if (item.isDir()) { + QFile file(m_directory + name + "/.svn"); + if (file.open(QIODevice::ReadOnly)) { + file.close(); + // TODO... + return RevisionControlPlugin::LatestRevision; + } + } else if (m_revisionInfoHash.contains(name)) { + const RevisionInfo info = m_revisionInfoHash.value(item.name()); + const QDateTime localTimeStamp = item.time(KFileItem::ModificationTime).dateTime(); + const QDateTime versionedTimeStamp = info.timeStamp; + + if (localTimeStamp > versionedTimeStamp) { + if (info.size != item.size()) { + return RevisionControlPlugin::EditingRevision; + } + // TODO: a comparison of the content is required + } else if (localTimeStamp < versionedTimeStamp) { + if (info.size != item.size()) { + return RevisionControlPlugin::UpdateRequiredRevision; + } + // TODO: a comparison of the content is required + } + return RevisionControlPlugin::LatestRevision; } return RevisionControlPlugin::LocalRevision;