From: Peter Penz Date: Wed, 15 Jul 2009 06:27:53 +0000 (+0000) Subject: simplify the revision control API X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/commitdiff_plain/fae6ac51a10502e75547397828d18d25a3d8cbbd simplify the revision control API svn path=/trunk/KDE/kdebase/apps/; revision=996886 --- diff --git a/src/revisioncontrolobserver.cpp b/src/revisioncontrolobserver.cpp index f20ff996d..9b8cb2583 100644 --- a/src/revisioncontrolobserver.cpp +++ b/src/revisioncontrolobserver.cpp @@ -113,11 +113,7 @@ void RevisionControlObserver::updateItemStates() for (int row = 0; row < rowCount; ++row) { const QModelIndex index = m_dolphinModel->index(row, DolphinModel::Revision); const KFileItem item = m_dolphinModel->itemForIndex(index); - const RevisionControlPlugin::ItemType type = item.isDir() ? - RevisionControlPlugin::Directory : - RevisionControlPlugin::File; - - const RevisionControlPlugin::RevisionState revision = m_plugin->revisionState(item.name(), type); + const RevisionControlPlugin::RevisionState revision = m_plugin->revisionState(item); m_dolphinModel->setData(index, QVariant(static_cast(revision)), Qt::DecorationRole); } m_view->viewport()->repaint(); // TODO: this should not be necessary, as DolphinModel::setData() calls dataChanged() diff --git a/src/revisioncontrolplugin.cpp b/src/revisioncontrolplugin.cpp index aafe443cd..dde8d8665 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() { } @@ -50,40 +53,39 @@ bool SubversionPlugin::beginRetrieval(const QString& directory) { Q_ASSERT(directory.endsWith('/')); m_directory = directory; - const QString path = directory + ".svn/text-base/"; - QDir dir(path); - const QFileInfoList fileInfoList = dir.entryInfoList(); - const int size = fileInfoList.size(); + QFile file(directory + ".svn/entries"); + if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { + return false; + } + + QTextStream in(&file); QString fileName; - for (int i = 0; i < size; ++i) { - fileName = fileInfoList.at(i).fileName(); - // Remove the ".svn-base" postfix to be able to compare the filenames - // 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)); + QString line; + while (!in.atEnd()) { + fileName = line; + line = in.readLine(); + const bool isRevisioned = !line.isEmpty() && + ((line == QLatin1String("dir")) || + (line == QLatin1String("file"))); + if (isRevisioned) { + RevisionInfo info; // TODO + m_revisionInfoHash.insert(fileName, info); } } - return size > 0; + return true; } void SubversionPlugin::endRetrieval() { } -RevisionControlPlugin::RevisionState SubversionPlugin::revisionState(const QString& name, ItemType type) +RevisionControlPlugin::RevisionState SubversionPlugin::revisionState(const KFileItem& item) { - if (m_fileInfoHash.contains(name)) { + const QString name = item.name(); + if (m_revisionInfoHash.contains(name)) { // TODO... return RevisionControlPlugin::LatestRevision; - } else if (type == Directory) { - QFile file(m_directory + name + "/.svn"); - if (file.open(QIODevice::ReadOnly)) { - file.close(); - // TODO... - return RevisionControlPlugin::LatestRevision; - } } return RevisionControlPlugin::LocalRevision; diff --git a/src/revisioncontrolplugin.h b/src/revisioncontrolplugin.h index 2fd7d77c0..687160c52 100644 --- a/src/revisioncontrolplugin.h +++ b/src/revisioncontrolplugin.h @@ -22,8 +22,11 @@ #include +#include #include +class KFileItem; + /** * @brief Base class for revision control plugins. * @@ -41,12 +44,6 @@ public: // TODO... }; - enum ItemType - { - Directory, - File - }; - RevisionControlPlugin(); virtual ~RevisionControlPlugin(); @@ -74,12 +71,12 @@ public: virtual void endRetrieval() = 0; /** - * Returns the revision state for the file with the name \p fileName. + * Returns the revision state for the file \p item. * It is assured that RevisionControlPlugin::beginInfoRetrieval() has been * invoked before and that the file is part of the directory specified * in beginInfoRetrieval(). */ - virtual RevisionState revisionState(const QString& name, ItemType type) = 0; + virtual RevisionState revisionState(const KFileItem& item) = 0; }; @@ -100,11 +97,17 @@ public: virtual QString fileName() const; virtual bool beginRetrieval(const QString& directory); virtual void endRetrieval(); - virtual RevisionControlPlugin::RevisionState revisionState(const QString& name, ItemType type); + virtual RevisionControlPlugin::RevisionState revisionState(const KFileItem& item); private: + struct RevisionInfo + { + // TODO... + QDateTime timeStamp; + }; + QString m_directory; - QHash m_fileInfoHash; + QHash m_revisionInfoHash; }; #endif // REVISIONCONTROLPLUGIN_H