[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