[SCM] Kaboom - Debian KDE 3->4 migration tool branch, master, updated. master/0.9.1-49-ga8983c3

George Kiagiadakis gkiagia-guest at alioth.debian.org
Sun Apr 5 18:15:04 UTC 2009


The following commit has been merged in the master branch:
commit bb7bea6fd50904cdc8ab13a3710c87ad78b98eeb
Author: George Kiagiadakis <gkiagia at users.sourceforge.net>
Date:   Sun Apr 5 21:08:15 2009 +0300

    When copying, replace "/.kde4/" with "/.kde/" in all files under $KDEHOME/share/config.

diff --git a/diroperations/recursivedirjob.cpp b/diroperations/recursivedirjob.cpp
index 4f7ff95..beeafdf 100644
--- a/diroperations/recursivedirjob.cpp
+++ b/diroperations/recursivedirjob.cpp
@@ -16,7 +16,9 @@
     along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 #include "recursivedirjob_p.h"
+#include "../kaboomsettings.h"
 #include <QtCore/QDir>
+#include <QtCore/QFile>
 #include <QtCore/QFileInfo>
 #include <QtCore/QStack>
 #include <QtCore/QList>
@@ -157,7 +159,7 @@ void RecursiveDirJob::run()
     }
 }
 
-static quint64 stat_size(const QString & fileName)
+quint64 RecursiveDirJobHelper::stat_size(const QString & fileName)
 {
     struct stat buf;
     if ( ::lstat(QFile::encodeName(fileName), &buf) != 0 ) {
@@ -312,7 +314,8 @@ void RecursiveDirJobHelper::recursiveCpDir(const QString & sourcePath, const QSt
                     if ( !QFile::remove(dest.absoluteFilePath(currentName)) )
                         emit errorOccured(Error(Error::RmFail, dest.absoluteFilePath(currentName)));
                 }
-                if ( !QFile::copy( source.absoluteFilePath(currentName), dest.absoluteFilePath(currentName) ) )
+                if ( !internal_copy( source.absoluteFilePath(currentName), dest.absoluteFilePath(currentName),
+                                        options & RecursiveDirJob::ReplaceKde4InFiles ) )
                     emit errorOccured(Error(Error::CopyFail, source.absoluteFilePath(currentName)));
             }
             else
@@ -426,3 +429,71 @@ void RecursiveDirJobHelper::recursiveRmDir(const QString & dir)
     }
 }
 
+
+struct UpdateEntry {
+    enum Type { DirWithSubdirs, File };
+    Type type;
+    const char *relativePath;
+};
+
+static const UpdateEntry updateEntries[] = {
+    {UpdateEntry::DirWithSubdirs, "/share/config/"},
+};
+
+bool RecursiveDirJobHelper::internal_copy(const QString & sourceFile, const QString & destFile, bool replaceKde4InFiles)
+{
+    if ( !replaceKde4InFiles ) {
+        return QFile::copy(sourceFile, destFile);
+    } else {
+        for (unsigned int i = 0; i < sizeof(updateEntries) / sizeof(UpdateEntry); i++) {
+            UpdateEntry entry = updateEntries[i];
+            QString path = KaboomSettings::instance().kdehomeDir().absolutePath() + entry.relativePath;
+
+            if ( (entry.type == UpdateEntry::File && destFile == path) ||
+                 (entry.type == UpdateEntry::DirWithSubdirs && destFile.startsWith(path)) )
+            {
+                qDebug() << "Doing copy with s/.kde4/.kde/ of" << sourceFile;
+                return copyWithReplaceKde4(sourceFile, destFile);
+            }
+        }
+
+        return QFile::copy(sourceFile, destFile);
+    }
+}
+
+bool RecursiveDirJobHelper::copyWithReplaceKde4(const QString & sourceFileName, const QString & destFileName)
+{
+    QFile sourceFile(sourceFileName);
+    QFile destFile(destFileName);
+
+    if ( !sourceFile.open(QIODevice::ReadOnly) ) {
+        qCritical() << "copyWithReplaceKde4:" << "Could not open" << sourceFileName << "for reading";
+        return false;
+    }
+
+    if ( !destFile.open(QIODevice::WriteOnly) ) {
+        qCritical() << "copyWithReplaceKde4:" << "Could not open" << destFileName << "for writing";
+        return false;
+    }
+
+    while ( !sourceFile.atEnd() ) {
+        QByteArray b = sourceFile.readLine();
+        if ( b.isEmpty() ) {
+            qCritical() << "copyWithReplaceKde4:" << "Could not read from" << sourceFileName;
+            return false;
+        }
+        if ( destFile.write( b.replace("/.kde4/", "/.kde/") ) == -1 ) {
+            qCritical() << "copyWithReplaceKde4:" << "Could not write to" << destFileName;
+            return false;
+        }
+    }
+
+    if ( !destFile.flush() ) {
+        qCritical() << "copyWithReplaceKde4:" << "Could not flush" << destFileName;
+        return false;
+    }
+
+    destFile.close();
+    sourceFile.close();
+    return true;
+}
diff --git a/diroperations/recursivedirjob.h b/diroperations/recursivedirjob.h
index df3913a..f726ec1 100644
--- a/diroperations/recursivedirjob.h
+++ b/diroperations/recursivedirjob.h
@@ -57,7 +57,7 @@ public:
         QString m_info;
     };
 
-    enum CopyOption { NoOptions = 0x0, RemoveDestination = 0x1, OverWrite = 0x2 };
+    enum CopyOption { NoOptions = 0x0, RemoveDestination = 0x1, OverWrite = 0x2, ReplaceKde4InFiles = 0x4 };
     Q_DECLARE_FLAGS(CopyOptions, CopyOption);
 
     virtual ~RecursiveDirJob();
diff --git a/diroperations/recursivedirjob_p.h b/diroperations/recursivedirjob_p.h
index 886ed60..5e82d5f 100644
--- a/diroperations/recursivedirjob_p.h
+++ b/diroperations/recursivedirjob_p.h
@@ -39,6 +39,10 @@ signals:
     void errorOccured(RecursiveDirJob::Error e);
 
 private:
+    quint64 stat_size(const QString & fileName);
+    bool internal_copy(const QString & sourceFile, const QString & destFile, bool replaceKde4InFiles);
+    bool copyWithReplaceKde4(const QString & sourceFileName, const QString & destFileName);
+
     bool m_reportProgress;
 };
 
diff --git a/migrationpage.cpp b/migrationpage.cpp
index 76dbeee..0eed0aa 100644
--- a/migrationpage.cpp
+++ b/migrationpage.cpp
@@ -133,7 +133,7 @@ void MigrationPagePrivate::doMagic()
       case MigrationTool::Merge:
         job = RecursiveDirJob::recursiveCpDir(KaboomSettings::instance().kde4homeDir().canonicalPath(),
                                               KaboomSettings::instance().kdehomeDir().canonicalPath(),
-                                              RecursiveDirJob::OverWrite);
+                                              RecursiveDirJob::OverWrite | RecursiveDirJob::ReplaceKde4InFiles);
         qDebug() << "do magic experimental merge";
         break;
       case MigrationTool::Clean:
@@ -143,7 +143,7 @@ void MigrationPagePrivate::doMagic()
       case MigrationTool::Move:
         job = RecursiveDirJob::recursiveCpDir(KaboomSettings::instance().kde4homeDir().canonicalPath(),
                                               KaboomSettings::instance().kdehomeDir().path(),
-                                              RecursiveDirJob::RemoveDestination);
+                                              RecursiveDirJob::RemoveDestination | RecursiveDirJob::ReplaceKde4InFiles);
         qDebug() << "move .kde4 over .kde";
         break;
   }

-- 
Kaboom - Debian KDE 3->4 migration tool



More information about the pkg-kde-commits mailing list