┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src/revisioncontrolplugin.cpp
diff options
context:
space:
mode:
authorPeter Penz <[email protected]>2009-07-12 14:00:45 +0000
committerPeter Penz <[email protected]>2009-07-12 14:00:45 +0000
commitfa4680cb38028aceb68d41e1937d27c71d1f121b (patch)
treeda709625c38a42bf448077d985c75b0365a58252 /src/revisioncontrolplugin.cpp
parent2df2d4ea7ee63a43a327b4ffb1c5cddd176aff91 (diff)
Enable Dolphin to show the revision states of files that are under revision control systems like SVN, Git, CVS, ... The current code is an early draft and it is planned that all plugins (SVN, Git, CVS, ...) are maintained outside Dolphin. If the API is stable enough, a discussion will be done at [email protected] regarding the location of the plugins (the current implementation of SubversionPlugin is only temporary located in Dolphin for testing purposes).
RevisionControlObserver is implemented in a way that no recognizable slowdown is given for directories that are not under revision control. CCBUG: 192158 svn path=/trunk/KDE/kdebase/apps/; revision=995351
Diffstat (limited to 'src/revisioncontrolplugin.cpp')
-rw-r--r--src/revisioncontrolplugin.cpp82
1 files changed, 82 insertions, 0 deletions
diff --git a/src/revisioncontrolplugin.cpp b/src/revisioncontrolplugin.cpp
new file mode 100644
index 000000000..6c0f82fb8
--- /dev/null
+++ b/src/revisioncontrolplugin.cpp
@@ -0,0 +1,82 @@
+/***************************************************************************
+ * Copyright (C) 2009 by Peter Penz <[email protected]> *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *
+ ***************************************************************************/
+
+#include "revisioncontrolplugin.h"
+
+#include <QDir>
+
+RevisionControlPlugin::RevisionControlPlugin()
+{
+}
+
+RevisionControlPlugin::~RevisionControlPlugin()
+{
+}
+
+// ----------------------------------------------------------------------------
+
+SubversionPlugin::SubversionPlugin() :
+ m_directory(),
+ m_fileInfoHash()
+{
+}
+
+SubversionPlugin::~SubversionPlugin()
+{
+}
+
+QString SubversionPlugin::fileName() const
+{
+ return ".svn";
+}
+
+bool SubversionPlugin::beginRetrieval(const QString& directory)
+{
+ Q_ASSERT(directory.endsWith('/'));
+ const QString path = directory + ".svn/text-base/";
+
+ QDir dir(path);
+ const QFileInfoList fileInfoList = dir.entryInfoList();
+ const int size = fileInfoList.size();
+ 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));
+ }
+ }
+ return size > 0;
+}
+
+void SubversionPlugin::endRetrieval()
+{
+}
+
+RevisionControlPlugin::RevisionState SubversionPlugin::revisionState(const QString& fileName)
+{
+ if (m_fileInfoHash.contains(fileName)) {
+ // TODO...
+ return RevisionControlPlugin::LatestRevision;
+ }
+
+ return RevisionControlPlugin::LocalRevision;
+}