Don't upgrate config file with upd file from kde4.

This patch is necessary because:
When we use kf5 + kde4 application, kconf_update which launchs at the start when we launch kde.
But it will migrate some config file, for example it will show that we need to migrate konversation
so it will create a konversationrc in .config/

But when we launch konversation there is a kdelibs4migrator which wants to migrate settings and config in .config
but it shows a konversationrc in .config so it will never migrate and we will lose all settings.

So we can force to remove all .upd in kf5 but it will not fix problem during migration or when we have kde4 application
install in same directory as kf5.

So now I force for each upd file to have a "Version=5" so kconf_update (kf5) will migrate just kf5 upd file and it will fix my bugs.

REVIEW: 121797
CHANGELOG: Now kconf_update doesn't process upd file from kde4. We need to add "Version=5" in top of the upd file otherwise it will be skipped.
wilder
Montel Laurent 11 years ago
parent 19ae8748a9
commit 915976c123
  1. 78
      autotests/test_kconf_update.cpp
  2. 4
      src/kconf_update/README.kconf_update
  3. 19
      src/kconf_update/kconf_update.cpp

@ -82,6 +82,8 @@ void TestKConfUpdate::test_data()
QTest::addColumn<QString>("newConfName");
QTest::addColumn<QString>("expectedNewConfContent");
QTest::addColumn<QString>("expectedOldConfContent");
QTest::addColumn<bool>("useVersion5");
QTest::addColumn<bool>("shouldUpdateWork");
QTest::newRow("moveKeysSameFile")
<<
@ -104,6 +106,8 @@ void TestKConfUpdate::test_data()
"new=value\n"
<<
""
<< true
<< true
;
QTest::newRow("moveKeysOtherFile")
<<
@ -132,6 +136,8 @@ void TestKConfUpdate::test_data()
"\n"
"[stay]\n"
"foo=bar\n"
<< true
<< true
;
QTest::newRow("allKeys")
<<
@ -161,6 +167,8 @@ void TestKConfUpdate::test_data()
"foo=bar\n"
<<
""
<< true
<< true
;
QTest::newRow("allKeysSubGroup")
<<
@ -198,6 +206,8 @@ void TestKConfUpdate::test_data()
"foo=bar\n"
<<
""
<< true
<< true
;
QTest::newRow("removeGroup")
<<
@ -221,6 +231,8 @@ void TestKConfUpdate::test_data()
"key=value\n"
<<
""
<< true
<< true
;
QTest::newRow("moveKeysSameFileDontExist")
<<
@ -247,6 +259,50 @@ void TestKConfUpdate::test_data()
"key1=value1\n"
<<
""
<< true
<< true
;
QTest::newRow("DontMigrateWhenFileDoesntHaveVersion")
<<
"File=testrc\n"
"Group=group\n"
"Key=old,new\n"
"Options=overwrite\n"
<<
"testrc"
<<
"[group]\n"
"old=value\n"
<<
"testrc"
<<
"[group]\n"
"old=value\n"
<<
""
<< false
<< false
;
QTest::newRow("DontMigrateWhenUpdateCantDoItMissingFilename")
<<
"Group=group\n"
"Key=old,new\n"
"Options=overwrite\n"
<<
"testrc"
<<
"[group]\n"
"old=value\n"
<<
"testrc"
<<
"[group]\n"
"old=value\n"
<<
""
<< true
<< false
;
}
@ -258,9 +314,14 @@ void TestKConfUpdate::test()
QFETCH(QString, newConfName);
QFETCH(QString, expectedNewConfContent);
QFETCH(QString, expectedOldConfContent);
QFETCH(bool, useVersion5);
QFETCH(bool, shouldUpdateWork);
// Prepend the Id= field to the upd content
updContent = QString("Id=%1\n").arg(QTest::currentDataTag()) + updContent;
// Prepend Version and the Id= field to the upd content
const QString header = QString("Id=%1\n").arg(QTest::currentDataTag());
updContent = header + updContent;
if (useVersion5)
updContent.prepend("Version=5\n");
QString oldConfPath = QStandardPaths::writableLocation(QStandardPaths::GenericConfigLocation) + QLatin1Char('/') + oldConfName;
QString newConfPath = QStandardPaths::writableLocation(QStandardPaths::GenericConfigLocation) + QLatin1Char('/') + newConfName;
@ -278,12 +339,16 @@ void TestKConfUpdate::test()
.arg(QTest::currentDataTag());
QString newConfContentAfter = readFile(newConfPath);
expectedNewConfContent = expectedNewConfContent.arg(updateInfo);
if (shouldUpdateWork) {
expectedNewConfContent = expectedNewConfContent.arg(updateInfo);
}
QCOMPARE(newConfContentAfter, expectedNewConfContent);
if (oldConfName != newConfName) {
QString oldConfContentAfter = readFile(oldConfPath);
expectedOldConfContent = expectedOldConfContent.arg(updateInfo);
if (shouldUpdateWork) {
expectedOldConfContent = expectedOldConfContent.arg(updateInfo);
}
QCOMPARE(oldConfContentAfter, expectedOldConfContent);
}
}
@ -548,8 +613,8 @@ void TestKConfUpdate::testScript()
QFETCH(QString, oldConfContent);
QFETCH(QString, expectedNewConfContent);
// Prepend the Id= field to the upd content
updContent = QString("Id=%1\n").arg(QTest::currentDataTag()) + updContent;
// Prepend the Version and Id= field to the upd content
updContent = QString("Version=5\nId=%1\n").arg(QTest::currentDataTag()) + updContent;
QSharedPointer<QTemporaryFile> updFile(writeUpdFile(updContent));
@ -573,3 +638,4 @@ void TestKConfUpdate::testScript()
QCOMPARE(newConfContent, expectedNewConfContent);
}

@ -51,6 +51,9 @@ Commas (,) are used to seperate fields and may not occur as part
of any field and all of the keywords are case-sensitive, i.e. you
cannot say "key" instead of "Key" for example.
Starting from KDE Frameworks 5 make sure to put Version=5 before the first "Id=" otherwise the upd file
will be skipped and the config file will not be updated.
For the rest the file is parsed and executed sequentially from top to bottom.
Each line can contain one entry. The following entries are recognized:
@ -161,6 +164,7 @@ Example update file
===================
# This is comment
Version=5
Id=kde2.2
File=kioslaverc,kio_httprc
Group=Proxy Settings

@ -29,6 +29,7 @@
#include <QCoreApplication>
#include <QtCore/QDir>
#include <QProcess>
#include <QDebug>
#include <kconfig.h>
#include <kconfiggroup.h>
@ -239,13 +240,21 @@ bool KonfUpdate::checkFile(const QString &filename)
int lineCount = 0;
resetOptions();
QString id;
bool foundVersion = false;
while (!ts.atEnd()) {
const QString line = ts.readLine().trimmed();
lineCount++;
if (line.startsWith("Version=5")) {
foundVersion = true;
}
++lineCount;
if (line.isEmpty() || (line[0] == '#')) {
continue;
}
if (line.startsWith("Id=")) {
if (!foundVersion) {
qDebug() << QStringLiteral("Missing \"Version=5\", file \'%1\' will be skipped.").arg(filename);
return true;
}
id = m_currentFilename + ':' + line.mid(3);
} else if (line.startsWith("File=")) {
checkGotFile(line.mid(5), id);
@ -315,13 +324,21 @@ bool KonfUpdate::updateFile(const QString &filename)
ts.setCodec(QTextCodec::codecForName("ISO-8859-1"));
m_lineCount = 0;
resetOptions();
bool foundVersion = false;
while (!ts.atEnd()) {
m_line = ts.readLine().trimmed();
if (m_line.startsWith("Version=5")) {
foundVersion = true;
}
m_lineCount++;
if (m_line.isEmpty() || (m_line[0] == QLatin1Char('#'))) {
continue;
}
if (m_line.startsWith(QLatin1String("Id="))) {
if (!foundVersion) {
qDebug() << QStringLiteral("Missing \"Version=5\", file \'%1\' will be skipped.").arg(filename);
break;
}
gotId(m_line.mid(3));
} else if (m_skip) {
continue;

Loading…
Cancel
Save