┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Penz <[email protected]>2009-07-15 06:27:53 +0000
committerPeter Penz <[email protected]>2009-07-15 06:27:53 +0000
commitfae6ac51a10502e75547397828d18d25a3d8cbbd (patch)
treee032c8bb7bff53f2924a534de3ac6c188eeba5ff
parent027bfb1789cfc47545b708e6fe1d4391c2319f68 (diff)
simplify the revision control API
svn path=/trunk/KDE/kdebase/apps/; revision=996886
-rw-r--r--src/revisioncontrolobserver.cpp6
-rw-r--r--src/revisioncontrolplugin.cpp46
-rw-r--r--src/revisioncontrolplugin.h23
3 files changed, 38 insertions, 37 deletions
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<int>(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 <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;
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 <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