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()
#include "revisioncontrolplugin.h"
+#include <kfileitem.h>
#include <QDir>
+#include <QString>
+#include <QTextStream>
RevisionControlPlugin::RevisionControlPlugin()
{
SubversionPlugin::SubversionPlugin() :
m_directory(),
- m_fileInfoHash()
+ m_revisionInfoHash()
{
}
{
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;
#include <libdolphin_export.h>
+#include <QDateTime>
#include <QString>
+class KFileItem;
+
/**
* @brief Base class for revision control plugins.
*
// TODO...
};
- enum ItemType
- {
- Directory,
- File
- };
-
RevisionControlPlugin();
virtual ~RevisionControlPlugin();
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;
};
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