diff options
| -rw-r--r-- | autotests/test_kconf_update.cpp | 78 | ||||
| -rw-r--r-- | src/kconf_update/README.kconf_update | 4 | ||||
| -rw-r--r-- | src/kconf_update/kconf_update.cpp | 19 | 
3 files changed, 94 insertions, 7 deletions
| diff --git a/autotests/test_kconf_update.cpp b/autotests/test_kconf_update.cpp index d4f5c52d..e4e2b416 100644 --- a/autotests/test_kconf_update.cpp +++ b/autotests/test_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);  } + diff --git a/src/kconf_update/README.kconf_update b/src/kconf_update/README.kconf_update index 281fb9e5..72509286 100644 --- a/src/kconf_update/README.kconf_update +++ b/src/kconf_update/README.kconf_update @@ -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 diff --git a/src/kconf_update/kconf_update.cpp b/src/kconf_update/kconf_update.cpp index 255a382e..309bc3c2 100644 --- a/src/kconf_update/kconf_update.cpp +++ b/src/kconf_update/kconf_update.cpp @@ -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; | 
