Git-Url: http://git.frugalware.org/gitweb/gitweb.cgi?p=kde5.git;a=commitdiff;h=dac6e0e47cfc5825f5a443d744d87e810ff7acc1
commit dac6e0e47cfc5825f5a443d744d87e810ff7acc1 Author: crazy <[email protected]> Date: Mon Jan 16 13:49:53 2017 +0100 kcoreaddons-5.30.1-1-x86_64 * Version bump diff --git a/source/kf5/kcoreaddons/FrugalBuild b/source/kf5/kcoreaddons/FrugalBuild index eef9884..3736740 100644 --- a/source/kf5/kcoreaddons/FrugalBuild +++ b/source/kf5/kcoreaddons/FrugalBuild @@ -2,17 +2,15 @@ # Maintainer: Melko <[email protected]> pkgname=kcoreaddons -pkgver=5.30.0 -pkgrel=2 +pkgver=5.30.1 +pkgrel=1 pkgdesc="Utilities for core application functionality and accessing the OS." groups=('kf5') archs=("x86_64") _F_kde_project="frameworks" Finclude kf5 -source+=(ServiceTypes.patch) depends=("qt5-base>=$_F_kdever_qt5" 'shared-mime-info') makedepends+=("qt5-x11extras>=$_F_kdever_qt5" "qt5-tools>=$_F_kdever_qt5") -sha1sums=('fe4a4531d2ac063be7bb3731f6a00530d74927eb' \ - 'af3e72c902ef8fd21f213e47d5e72766a72c9562') +sha1sums=('73345b6aac6ba6b77153a04be7ca492ebfb15010') # optimization OK diff --git a/source/kf5/kcoreaddons/ServiceTypes.patch b/source/kf5/kcoreaddons/ServiceTypes.patch deleted file mode 100644 index c40803b..0000000 --- a/source/kf5/kcoreaddons/ServiceTypes.patch +++ /dev/null @@ -1,228 +0,0 @@ -From 2a9b56e9340760822b1dfece73bc045c64033ef1 Mon Sep 17 00:00:00 2001 -From: Marco Martin <[email protected]> -Date: Wed, 11 Jan 2017 16:03:16 +0100 -Subject: parse the desktop file 2 times - -Summary: -Search for the ServiceTypes key in the desktop file before -parsing it "for real", because how it's parsed depends from -the service type definition, so if the servicetype is defined -at the bottom of the file or after keys dependent from the type, -those keys would be parsed incorrectly - -Test Plan: -things using plugins like plasmashell still start correctly, -dropping on the desktop a text file now proposes to create a notes widget. -The notes widget has ServiceTypes defined *after* X-Plasma-DropMimetypes -which is a stringlist, that would be misinterpreted as a string -otherwise - -Reviewers: #plasma, dfaure, davidedmundson, apol - -Reviewed By: apol - -Subscribers: apol, plasma-devel, #frameworks - -Tags: #plasma, #frameworks - -Differential Revision: https://phabricator.kde.org/D4082 ---- - autotests/data/twostepsparsetest.desktop | 20 ++++++ - autotests/kpluginmetadatatest.cpp | 11 ++++ - src/lib/plugin/desktopfileparser.cpp | 109 ++++++++++++++++++++----------- - 3 files changed, 102 insertions(+), 38 deletions(-) - create mode 100644 autotests/data/twostepsparsetest.desktop - -diff --git a/autotests/data/twostepsparsetest.desktop b/autotests/data/twostepsparsetest.desktop -new file mode 100644 -index 0000000..b31a5d6 ---- /dev/null -+++ b/autotests/data/twostepsparsetest.desktop -@@ -0,0 +1,20 @@ -+[Desktop Entry] -+Name=Parse Test -+Comment=Two Steps Parsing Test -+Type=Service -+Icon=preferences-system-time -+MimeType=image/png;application/pdf; -+ -+X-Test-List=first,second -+X-KDE-ServiceTypes=example/servicetype -+X-KDE-Library=fakeplugin -+X-KDE-FormFactors=mediacenter,desktop -+X-KDE-PluginInfo-Author=Sebastian Kügler [email protected] -+X-KDE-PluginInfo-Name=fakeplugin -+X-KDE-PluginInfo-Version=1.0 -+X-KDE-PluginInfo-Website=http://kde.org/ -+X-KDE-PluginInfo-Category=Examples -+X-KDE-PluginInfo-Depends= -+X-KDE-PluginInfo-License=LGPL -+X-KDE-PluginInfo-EnabledByDefault=true -diff --git a/autotests/kpluginmetadatatest.cpp b/autotests/kpluginmetadatatest.cpp -index d1c6ae2..a5f98cd 100644 ---- a/autotests/kpluginmetadatatest.cpp -+++ b/autotests/kpluginmetadatatest.cpp -@@ -254,6 +254,17 @@ private Q_SLOTS: - QCOMPARE(mdhidden.isHidden(), true); - } - -+ void twoStepsParseTest() -+ { -+ QStandardPaths::setTestModeEnabled(true); -+ const QString dfile = QFINDTESTDATA("data/twostepsparsetest.desktop"); -+ const QString typesPath = QFINDTESTDATA("data/servicetypes/example-servicetype.desktop"); -+ KPluginMetaData md = KPluginMetaData::fromDesktopFile(dfile, QStringList() << typesPath); -+ QVERIFY(md.isValid()); -+ QStringList list = KPluginMetaData::readStringList(md.rawData(), QStringLiteral("X-Test-List")); -+ QCOMPARE(list, QStringList({QStringLiteral("first"), QStringLiteral("second")})); -+ } -+ - void testServiceTypes_data() - { - const QString kdevServiceTypePath = QFINDTESTDATA("data/servicetypes/fake-kdevelopplugin.desktop"); -diff --git a/src/lib/plugin/desktopfileparser.cpp b/src/lib/plugin/desktopfileparser.cpp -index 1e058bb..df60ad2 100644 ---- a/src/lib/plugin/desktopfileparser.cpp -+++ b/src/lib/plugin/desktopfileparser.cpp -@@ -234,6 +234,51 @@ QByteArray readTypeEntryForCurrentGroup(QFile &df, QByteArray *nextGroup) - return type; - } - -+bool tokenizeKeyValue(QFile &df, const QString &src, QByteArray &key, QString &value, int &lineNr) -+{ -+ const QByteArray line = df.readLine().trimmed(); -+ lineNr++; -+ if (line.isEmpty()) { -+ DESKTOPTOJSON_VERBOSE_DEBUG << "Line " << lineNr << ": empty"; -+ return true; -+ } -+ if (line.startsWith('#')) { -+ DESKTOPTOJSON_VERBOSE_DEBUG << "Line " << lineNr << ": comment"; -+ return true; // skip comments -+ } -+ if (line.startsWith('[')) { -+ // start of new group -> doesn't interest us anymore -+ DESKTOPTOJSON_VERBOSE_DEBUG << "Line " << lineNr << ": start of new group " << line; -+ return false; -+ } -+ // must have form key=value now -+ const int equalsIndex = line.indexOf('='); -+ if (equalsIndex == -1) { -+ qCWarning(DESKTOPPARSER).nospace() << qPrintable(src) << ':' << lineNr << ": Line is neither comment nor group " -+ "and doesn't contain an '=' character: \"" << line.constData() << '\"'; -+ return true; -+ } -+ // trim key and value to remove spaces around the '=' char -+ key = line.mid(0, equalsIndex).trimmed(); -+ if (key.isEmpty()) { -+ qCWarning(DESKTOPPARSER).nospace() << qPrintable(src) << ':' << lineNr << ": Key name is missing: \"" << line.constData() << '\"'; -+ return true; -+ } -+ -+ const QByteArray valueRaw = line.mid(equalsIndex + 1).trimmed(); -+ const QByteArray valueEscaped = escapeValue(valueRaw); -+ value = QString::fromUtf8(valueEscaped); -+ -+#ifdef BUILDING_DESKTOPTOJSON_TOOL -+ DESKTOPTOJSON_VERBOSE_DEBUG.nospace() << "Line " << lineNr << ": key=" << key << ", value=" << value; -+ if (valueEscaped != valueRaw) { -+ DESKTOPTOJSON_VERBOSE_DEBUG << "Line " << lineNr << " contained escape sequences"; -+ } -+#endif -+ -+ return true; -+} -+ - QVector<CustomPropertyDefinition>* parseServiceTypesFile(QString path) - { - int lineNr = 0; -@@ -401,13 +446,8 @@ void DesktopFileParser::convertToJson(const QByteArray &key, ServiceTypeDefiniti - } else if (key == QByteArrayLiteral("X-KDE-PluginInfo-Depends")) { - kplugin[QStringLiteral("Dependencies")] = QJsonArray::fromStringList(deserializeList(value)); - } else if (key == QByteArrayLiteral("X-KDE-ServiceTypes") || key == QByteArrayLiteral("ServiceTypes")) { -+ //NOTE: "X-KDE-ServiceTypes" and "ServiceTypes" were already managed in the first parse step, so this second one is almost a noop - const auto services = deserializeList(value); -- for(const auto &service : services) { -- // some .desktop files still use the legacy ServiceTypes= key -- QString fileName = service.toLower().replace(QLatin1Char('/'), QLatin1Char('-'))+QStringLiteral(".desktop"); -- serviceTypes.addFile(fileName); -- } -- - kplugin[QStringLiteral("ServiceTypes")] = QJsonArray::fromStringList(services); - } else if (key == QByteArrayLiteral("MimeType")) { - // MimeType is a XDG string list and not a KConfig list so we need to use ';' as the separator -@@ -474,46 +514,39 @@ bool DesktopFileParser::convert(const QString &src, const QStringList &serviceTy - ServiceTypeDefinition serviceTypeDef = ServiceTypeDefinition::fromFiles(serviceTypes); - readUntilDesktopEntryGroup(df, src, lineNr); - DESKTOPTOJSON_VERBOSE_DEBUG << "Found [Desktop Entry] group in line" << lineNr; -+ auto startPos = df.pos(); - -- //QJsonObject json; -- QJsonObject kplugin; // the "KPlugin" key of the metadata -+ //parse it a first time to know servicetype - while (!df.atEnd()) { -- const QByteArray line = df.readLine().trimmed(); -- lineNr++; -- if (line.isEmpty()) { -- DESKTOPTOJSON_VERBOSE_DEBUG << "Line " << lineNr << ": empty"; -- continue; -- } -- if (line.startsWith('#')) { -- DESKTOPTOJSON_VERBOSE_DEBUG << "Line " << lineNr << ": comment"; -- continue; // skip comments -- } -- if (line.startsWith('[')) { -- // start of new group -> doesn't interest us anymore -- DESKTOPTOJSON_VERBOSE_DEBUG << "Line " << lineNr << ": start of new group " << line; -+ QByteArray key; -+ QString value; -+ if (!tokenizeKeyValue(df, src, key, value, lineNr)) { - break; - } -- // must have form key=value now -- const int equalsIndex = line.indexOf('='); -- if (equalsIndex == -1) { -- qCWarning(DESKTOPPARSER).nospace() << qPrintable(src) << ':' << lineNr << ": Line is neither comment nor group " -- "and doesn't contain an '=' character: \"" << line.constData() << '\"'; -- continue; -+ if (key == QByteArrayLiteral("X-KDE-ServiceTypes") || key == QByteArrayLiteral("ServiceTypes")) { -+ const auto services = deserializeList(value); -+ for(const auto &service : services) { -+ // some .desktop files still use the legacy ServiceTypes= key -+ QString fileName = service.toLower().replace(QLatin1Char('/'), QLatin1Char('-'))+QStringLiteral(".desktop"); -+ serviceTypeDef.addFile(fileName); -+ } -+ break; - } -- // trim key and value to remove spaces around the '=' char -- const QByteArray key = line.mid(0, equalsIndex).trimmed(); -- if (key.isEmpty()) { -- qCWarning(DESKTOPPARSER).nospace() << qPrintable(src) << ':' << lineNr << ": Key name is missing: \"" << line.constData() << '\"'; -+ } -+ lineNr=0; -+ df.seek(startPos); -+ -+ QJsonObject kplugin; // the "KPlugin" key of the metadata -+ //QJsonObject json; -+ while (!df.atEnd()) { -+ QByteArray key; -+ QString value; -+ if (!tokenizeKeyValue(df, src, key, value, lineNr)) { -+ break; -+ } else if (key.isEmpty()) { - continue; - } -- const QByteArray valueRaw = line.mid(equalsIndex + 1).trimmed(); -- const QByteArray valueEscaped = escapeValue(valueRaw); -- const QString value = QString::fromUtf8(valueEscaped); - #ifdef BUILDING_DESKTOPTOJSON_TOOL -- DESKTOPTOJSON_VERBOSE_DEBUG.nospace() << "Line " << lineNr << ": key=" << key << ", value=" << value; -- if (valueEscaped != valueRaw) { -- DESKTOPTOJSON_VERBOSE_DEBUG << "Line " << lineNr << " contained escape sequences"; -- } - if (s_compatibilityMode) { - convertToCompatibilityJson(QString::fromUtf8(key), value, json, lineNr); - } else { --- -cgit v0.11.2
_______________________________________________ Frugalware-git mailing list [email protected] http://frugalware.org/mailman/listinfo/frugalware-git
