]> cloud.milkyroute.net Git - dolphin.git/commitdiff
simplify the revision control API
authorPeter Penz <peter.penz19@gmail.com>
Wed, 15 Jul 2009 06:27:53 +0000 (06:27 +0000)
committerPeter Penz <peter.penz19@gmail.com>
Wed, 15 Jul 2009 06:27:53 +0000 (06:27 +0000)
svn path=/trunk/KDE/kdebase/apps/; revision=996886

src/revisioncontrolobserver.cpp
src/revisioncontrolplugin.cpp
src/revisioncontrolplugin.h

index f20ff996d916215778c7550b0ee9f85946f3c13b..9b8cb25838061755b0f05a00d091020a8458e9bc 100644 (file)
@@ -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<int>(revision)), Qt::DecorationRole);
     }
     m_view->viewport()->repaint(); // TODO: this should not be necessary, as DolphinModel::setData() calls dataChanged()
index aafe443cd8e1eceba36997bea8e68ce1517571c9..dde8d86654dfe83fe36a39b9dce2c331b7b9f98f 100644 (file)
 
 #include "revisioncontrolplugin.h"
 
+#include <kfileitem.h>
 #include <QDir>
+#include <QString>
+#include <QTextStream>
 
 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;
index 2fd7d77c08ce14c7466779f37cbff01ad6122924..687160c52b982cc05dd08084f5ceb1c473bed2b6 100644 (file)
 
 #include <libdolphin_export.h>
 
+#include <QDateTime>
 #include <QString>
 
+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<QString, QFileInfo> m_fileInfoHash;
+    QHash<QString, RevisionInfo> m_revisionInfoHash;
 };
 #endif // REVISIONCONTROLPLUGIN_H