diff options
Diffstat (limited to 'kde-apps')
-rw-r--r-- | kde-apps/Manifest.gz | bin | 39255 -> 39257 bytes | |||
-rw-r--r-- | kde-apps/akonadi/Manifest | 2 | ||||
-rw-r--r-- | kde-apps/akonadi/akonadi-18.12.3-r2.ebuild | 118 | ||||
-rw-r--r-- | kde-apps/akonadi/files/akonadi-18.12.3-akonadi_control-start-race-condition.patch | 187 |
4 files changed, 307 insertions, 0 deletions
diff --git a/kde-apps/Manifest.gz b/kde-apps/Manifest.gz Binary files differindex 79726b71dce7..d2b8956e9082 100644 --- a/kde-apps/Manifest.gz +++ b/kde-apps/Manifest.gz diff --git a/kde-apps/akonadi/Manifest b/kde-apps/akonadi/Manifest index a2e775c2a917..04ac8f32e7df 100644 --- a/kde-apps/akonadi/Manifest +++ b/kde-apps/akonadi/Manifest @@ -1,8 +1,10 @@ AUX akonadi-18.12.2-mysql56-crash.patch 2196 BLAKE2B d12643c870da557f540f199f78462f97fc569ffe160415f56f166d89b7e94e0f6682fa68ed84c9629e66639ddac61b5c54376c309a8921d84a1d52ba351a9aab SHA512 093a0b4243668344db59b0419809500e411f7399137ba3d9c439b4d5300a2f867fb231f7d5a8bc5d95ad2d1ccb6921804caff8200ddddba74a62ddcdfa9ac623 +AUX akonadi-18.12.3-akonadi_control-start-race-condition.patch 7349 BLAKE2B 66b4313af759b5d9a42c49fb6cadd7abd3bf990ecc04dc14300d684f5edc57ce61fffdfe08dc3480cf9a62ed73d726975d1047bf663d87d8de8081256625a0b8 SHA512 df8d6ad4c43ddf80c0b90188bcd9b74cb176d0553ca886e7b5a4f41109770415f67e49e00525aeea885dab3058c7076d05aafa5b5fa5c191e95a0d1f7c0c1bd9 AUX akonadi-18.12.3-collection-detach-at-wrong-time-in-attribute.patch 3459 BLAKE2B cbaa0fd210f21b0bdb917fb46fca7096a145df38b394d8542f7c1898287ba6cbc9293bb65ab01be7a7619325d8653391902b1a7c4d52a9a2376e57161af13cde SHA512 5a515f41c0a2343eaa562129e1e844c380db4f88288641af240983420cdf4144857a64f1f01f8ec0a60e65fdbff0752efaec4c1c0bed373d6aad77f54905731e AUX akonadi-18.12.3-major-regression-updating-attributes.patch 2415 BLAKE2B 028bfbe36774d9eeea4c2d9028c65e3953fcf68fc085e6fe21f89c2528a3ad270b19c1e8d8c04aa1935a77336853f9722a81d7cb99302d99f91072829e051adc SHA512 33271a433a1009e5943210ed6fc54c6a26ab8c994a4a9a89502a1b648ce5f9ee696dfb839ad6e77e1b73148dbc5c75faaebda2f3b26731b86425d63353a59244 DIST akonadi-18.12.3.tar.xz 1555044 BLAKE2B 20eb8cf2027c1589e65ef4d907f6252faaedc7ab48c45be79bf66b5f9ae9652cbf654d00261f4a09765edaa0b0c03c798ee079796d902de4f522e5d0cfce5491 SHA512 f97e716be612001a8176f20afbe80a1cf4c78c6d348d92e542307ea951e1ff74189d2f0847675ed44ad65845b52a5180346b3866f5a8d82b55ed613d107ac346 DIST akonadi-19.04.2.tar.xz 1576724 BLAKE2B bb0a4877f3e221f693f1875c2979b3211a198e613caba2d9e4521ed80e74326531281a2be760ec1f28e1b11422d2790ba8a9e229dead3892c49e226fb4fea532 SHA512 ce9e8a82d1b7421750e7692979a6de07ae48f99b7223b29fb610c529f13464effae4f8bdce4655f08b51638a5c79837be593d78f9dc8b46bd254442416f23bc6 EBUILD akonadi-18.12.3-r1.ebuild 3087 BLAKE2B b6f5ed477270ec77b9acba5f44019a4342d0800a34b9e33e79905d93608c44b0ac79185e74cc62b4092f953139de9b821309caa1717047b91997f432678732a1 SHA512 b38662342ea2f6ed513dcf88e3a3a861f5fe85ccf73e08c4a3310ce2a0efacbed2f846b355873ab55496b6f7ac2e8f9697b179682df8ae80172c55c7089e11d0 +EBUILD akonadi-18.12.3-r2.ebuild 3152 BLAKE2B 4ca74390ebb6a5e541b39199e3d46104c2107bf7b74ca6a26b2666adf46e3c01d2ac6f7fac67fbe5c823e1dcdf1b11ba763d5efa9df3c496433255f10847ce63 SHA512 40706ed784b40330aee6fd59c6863e5a5a26cdf87ae3fdf3a3f1e8304775ba1311123d44817af8f9dea0537fc5df6d5c2a25045071e08c95d025c067e153c2d6 EBUILD akonadi-19.04.2.ebuild 2933 BLAKE2B 07eede75c77ea79c66d3c133022bf4dd4a2185ad7014907d8d897724ae94d3e67954b8f4cd03ea24331a8241312eb108e67b2b996340bb5b0d37cd98fc9e7483 SHA512 0eaa88a0763755471faf820db978d8ccc19e0a72e6251770bb58b6cdfb815dbc59cea21193fdf64f058e0d8fc6915b9f149c1b4f706c5ff4a8e2e200ad8fa300 MISC metadata.xml 410 BLAKE2B 259694dd8c348fbd80f1ef1dd2b2c6e5aa876cfcd2d4b781dd51f3882b22f8899bea347c6c993be3912c5acc3d996bdf88b63f8455bb822490f3d33cc45ce8bd SHA512 28d1be9310a2e9b91f2b93089bd2588da14b0aded9a057f9885782153df3222cd62c885d03374dd59216e408c1e0717074c03445e38b3dfdc7b3ed0b3dd739fa diff --git a/kde-apps/akonadi/akonadi-18.12.3-r2.ebuild b/kde-apps/akonadi/akonadi-18.12.3-r2.ebuild new file mode 100644 index 000000000000..cc219d1c8d4a --- /dev/null +++ b/kde-apps/akonadi/akonadi-18.12.3-r2.ebuild @@ -0,0 +1,118 @@ +# Copyright 1999-2019 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=7 + +KDE_DESIGNERPLUGIN="true" +KDE_TEST="forceoptional" +VIRTUALDBUS_TEST="true" +VIRTUALX_REQUIRED="test" +inherit kde5 + +DESCRIPTION="Storage service for PIM data and libraries for PIM apps" +HOMEPAGE="https://community.kde.org/KDE_PIM/akonadi" + +KEYWORDS="~amd64 ~arm ~arm64 ~x86" +LICENSE="LGPL-2.1+" +IUSE="+mysql postgres sqlite tools xml" + +REQUIRED_USE="|| ( mysql postgres sqlite ) test? ( tools )" + +COMMON_DEPEND=" + $(add_frameworks_dep kcompletion) + $(add_frameworks_dep kconfig) + $(add_frameworks_dep kconfigwidgets) + $(add_frameworks_dep kcoreaddons) + $(add_frameworks_dep kcrash) + $(add_frameworks_dep kdbusaddons) + $(add_frameworks_dep ki18n) + $(add_frameworks_dep kiconthemes) + $(add_frameworks_dep kio) + $(add_frameworks_dep kitemmodels) + $(add_frameworks_dep kitemviews) + $(add_frameworks_dep kwidgetsaddons) + $(add_frameworks_dep kwindowsystem) + $(add_frameworks_dep kxmlgui) + $(add_qt_dep qtdbus) + $(add_qt_dep qtgui) + $(add_qt_dep qtnetwork) + $(add_qt_dep qtsql 'mysql?,postgres?') + $(add_qt_dep qtwidgets) + $(add_qt_dep qtxml) + sqlite? ( + $(add_qt_dep qtsql 'sqlite' '' '5=') + dev-db/sqlite:3 + ) + xml? ( dev-libs/libxml2 ) +" +DEPEND="${COMMON_DEPEND} + dev-libs/boost + dev-libs/libxslt + test? ( sys-apps/dbus ) +" +RDEPEND="${COMMON_DEPEND} + !kde-apps/akonadi:4 + !<kde-apps/kapptemplate-17.11.80 + !kde-apps/kdepim-l10n + !kde-apps/kdepimlibs + mysql? ( virtual/mysql ) + postgres? ( dev-db/postgresql ) +" + +# some akonadi tests time out, that probably needs more work as it's ~700 tests +RESTRICT+=" test" + +PATCHES=( + "${FILESDIR}/${PN}-18.12.2-mysql56-crash.patch" + "${FILESDIR}/${P}-major-regression-updating-attributes.patch" + "${FILESDIR}/${P}-collection-detach-at-wrong-time-in-attribute.patch" + "${FILESDIR}/${P}-akonadi_control-start-race-condition.patch" +) + +pkg_setup() { + # Set default storage backend in order: MySQL, PostgreSQL, SQLite + # reverse driver check to keep the order + use sqlite && DRIVER="QSQLITE3" + use postgres && DRIVER="QPSQL" + use mysql && DRIVER="QMYSQL" + + if use sqlite || has_version "<${CATEGORY}/${P}[sqlite]"; then + ewarn "We strongly recommend you change your Akonadi database backend to either MySQL" + ewarn "or PostgreSQL in your user configuration." + ewarn "In particular, kde-apps/kmail does not work properly with the sqlite backend." + fi + + kde5_pkg_setup +} + +src_configure() { + local mycmakeargs=( + -DAKONADI_BUILD_QSQLITE=$(usex sqlite) + -DBUILD_TOOLS=$(usex tools) + $(cmake-utils_use_find_package xml LibXml2) + ) + + kde5_src_configure +} + +src_install() { + # Who knows, maybe it accidentally fixes our permission issues + cat <<-EOF > "${T}"/akonadiserverrc +[%General] +Driver=${DRIVER} +EOF + insinto /usr/share/config/akonadi + doins "${T}"/akonadiserverrc + + kde5_src_install +} + +pkg_postinst() { + kde5_pkg_postinst + elog "You can select the storage backend in ~/.config/akonadi/akonadiserverrc." + elog "Available drivers are:" + use mysql && elog " QMYSQL" + use postgres && elog " QPSQL" + use sqlite && elog " QSQLITE3" + elog "${DRIVER} has been set as your default akonadi storage backend." +} diff --git a/kde-apps/akonadi/files/akonadi-18.12.3-akonadi_control-start-race-condition.patch b/kde-apps/akonadi/files/akonadi-18.12.3-akonadi_control-start-race-condition.patch new file mode 100644 index 000000000000..dd3aac5f58c3 --- /dev/null +++ b/kde-apps/akonadi/files/akonadi-18.12.3-akonadi_control-start-race-condition.patch @@ -0,0 +1,187 @@ +From c21bb5220a3ae835a5183afd58c186ba21f6c93d Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Daniel=20Vr=C3=A1til?= <dvratil@kde.org> +Date: Fri, 28 Jun 2019 17:10:04 +0200 +Subject: Fix race-condition on akonadi_control start + +Summary: +Check that there are no other akonadi_control instances running as the +very first thing on startup. Previously this check would happen after +AkApplication initialization, which contains some potential race- +conditions, like rotating log files. + +The situation when akonadi_control is launched multiple times can occur +on session startup, when multiple different components will attempt to +launch Akonadi if its not yet running. + +BUG: 392092 +FIXED-IN: 19.04.3 + +Reviewers: #kde_pim, vkrause + +Reviewed By: #kde_pim, vkrause + +Subscribers: kde-pim + +Tags: #kde_pim + +Differential Revision: https://phabricator.kde.org/D22092 +--- + src/akonadicontrol/main.cpp | 16 ++------------- + src/shared/akapplication.cpp | 7 +++---- + src/shared/akapplication.h | 49 ++++++++++++++++++++++++++++++++++++++------ + 3 files changed, 48 insertions(+), 24 deletions(-) + +diff --git a/src/akonadicontrol/main.cpp b/src/akonadicontrol/main.cpp +index 19bebb8..7dba85b 100644 +--- a/src/akonadicontrol/main.cpp ++++ b/src/akonadicontrol/main.cpp +@@ -52,7 +52,7 @@ void crashHandler(int) + + int main(int argc, char **argv) + { +- AkGuiApplication app(argc, argv, AKONADICONTROL_LOG()); ++ AkUniqueGuiApplication app(argc, argv, Akonadi::DBus::serviceName(Akonadi::DBus::ControlLock), AKONADICONTROL_LOG()); + app.setDescription(QStringLiteral("Akonadi Control Process\nDo not run this manually, use 'akonadictl' instead to start/stop Akonadi.")); + + KAboutData aboutData(QStringLiteral("akonadi_control"), +@@ -64,20 +64,8 @@ int main(int argc, char **argv) + + app.parseCommandLine(); + +- // try to acquire the lock first, that means there is no second instance trying to start up at the same time +- // registering the real service name happens in AgentManager::continueStartup(), when everything is in fact up and running +- if (!QDBusConnection::sessionBus().registerService(Akonadi::DBus::serviceName(Akonadi::DBus::ControlLock))) { +- // We couldn't register. Most likely, it's already running. +- const QString lastError = QDBusConnection::sessionBus().lastError().message(); +- if (lastError.isEmpty()) { +- qCWarning(AKONADICONTROL_LOG) << "Unable to register service as" << Akonadi::DBus::serviceName(Akonadi::DBus::ControlLock) << "Maybe it's already running?"; +- } else { +- qCWarning(AKONADICONTROL_LOG) << "Unable to register service as" << Akonadi::DBus::serviceName(Akonadi::DBus::ControlLock) << "Error was:" << lastError; +- } +- return -1; +- } +- + // older Akonadi server versions don't use the lock service yet, so check if one is already running before we try to start another one ++ // TODO: Remove this legacy check? + if (QDBusConnection::sessionBus().interface()->isServiceRegistered(Akonadi::DBus::serviceName(Akonadi::DBus::Control))) { + qCWarning(AKONADICONTROL_LOG) << "Another Akonadi control process is already running."; + return -1; +diff --git a/src/shared/akapplication.cpp b/src/shared/akapplication.cpp +index af860e5..b790b8d 100644 +--- a/src/shared/akapplication.cpp ++++ b/src/shared/akapplication.cpp +@@ -32,10 +32,9 @@ + + AkApplicationBase *AkApplicationBase::sInstance = nullptr; + +-AkApplicationBase::AkApplicationBase(int &argc, char **argv, const QLoggingCategory &loggingCategory) ++AkApplicationBase::AkApplicationBase(std::unique_ptr<QCoreApplication> app, const QLoggingCategory &loggingCategory) + : QObject(nullptr) +- , mArgc(argc) +- , mArgv(argv) ++ , mApp(std::move(app)) + , mLoggingCategory(loggingCategory) + { + Q_ASSERT(!sInstance); +@@ -59,7 +58,7 @@ AkApplicationBase *AkApplicationBase::instance() + + void AkApplicationBase::init() + { +- akInit(QString::fromLatin1(mArgv[0])); ++ akInit(mApp->applicationName()); + akInitRemoteLog(); + + if (!QDBusConnection::sessionBus().isConnected()) { +diff --git a/src/shared/akapplication.h b/src/shared/akapplication.h +index aae7a99..433b725 100644 +--- a/src/shared/akapplication.h ++++ b/src/shared/akapplication.h +@@ -23,6 +23,10 @@ + #include <QObject> + #include <QCommandLineParser> + #include <QLoggingCategory> ++#include <QDBusConnection> ++#include <QDBusError> ++ ++#include <memory> + + class QCoreApplication; + class QApplication; +@@ -55,16 +59,15 @@ public: + int exec(); + + protected: +- AkApplicationBase(int &argc, char **argv, const QLoggingCategory &loggingCategory); ++ AkApplicationBase(std::unique_ptr<QCoreApplication> app, const QLoggingCategory &loggingCategory); + void init(); +- QScopedPointer<QCoreApplication> mApp; ++ ++ std::unique_ptr<QCoreApplication> mApp; + + private Q_SLOTS: + void pollSessionBus() const; + + private: +- int mArgc; +- char **mArgv; + QString mInstanceId; + const QLoggingCategory &mLoggingCategory; + static AkApplicationBase *sInstance; +@@ -77,13 +80,46 @@ class AkApplicationImpl : public AkApplicationBase + { + public: + AkApplicationImpl(int &argc, char **argv, const QLoggingCategory &loggingCategory = *QLoggingCategory::defaultCategory()) +- : AkApplicationBase(argc, argv, loggingCategory) ++ : AkApplicationBase(std::make_unique<T>(argc, argv), loggingCategory) + { +- mApp.reset(new T(argc, argv)); + init(); + } + }; + ++template<typename T> ++class AkUniqueApplicationImpl : public AkApplicationBase ++{ ++public: ++ AkUniqueApplicationImpl(int &argc, char **argv, const QString &serviceName, const QLoggingCategory &loggingCategory = *QLoggingCategory::defaultCategory()) ++ : AkApplicationBase(std::make_unique<T>(argc, argv), loggingCategory) ++ { ++ registerUniqueServiceOrTerminate(serviceName, loggingCategory); ++ init(); ++ } ++ ++private: ++ void registerUniqueServiceOrTerminate(const QString &serviceName, const QLoggingCategory &log) ++ { ++ auto bus = QDBusConnection::sessionBus(); ++ if (!bus.isConnected()) { ++ qCCritical(log, "Session bus not found. Is DBus running?"); ++ exit(1); ++ } ++ ++ if (!bus.registerService(serviceName)) { ++ // We couldn't register. Most likely, it's already running. ++ const QString lastError = bus.lastError().message(); ++ if (lastError.isEmpty()) { ++ qCInfo(log, "Service %s already registered, terminating now.", qUtf8Printable(serviceName)); ++ exit(0); // already running, so it's OK. Terminate now. ++ } else { ++ qCCritical(log, "Unable to register service as %s due to an error: %s", qUtf8Printable(serviceName), qUtf8Printable(lastError)); ++ exit(1); // :( ++ } ++ } ++ } ++}; ++ + /** + * Returns the contents of @p name environment variable if it is defined, + * or @p defaultValue otherwise. +@@ -93,5 +129,6 @@ QString akGetEnv(const char *name, const QString &defaultValue = QString()); + typedef AkApplicationImpl<QCoreApplication> AkCoreApplication; + typedef AkApplicationImpl<QApplication> AkApplication; + typedef AkApplicationImpl<QGuiApplication> AkGuiApplication; ++typedef AkUniqueApplicationImpl<QGuiApplication> AkUniqueGuiApplication; + + #endif +-- +cgit v1.1 |