Compare commits

..

7 commits

Author SHA1 Message Date
Rex Dieter
946dc68fe0 Merge branch 'master' into f20 2015-04-11 18:38:17 -05:00
Rex Dieter
e0ada37c38 Merge commit 'adf30afcb0' into f20 2015-02-06 10:06:27 -06:00
Rex Dieter
8c751f18f1 Merge branch 'f21' into f20 2014-10-03 14:17:56 -05:00
Rex Dieter
f2649a3bbc Merge commit '338a460da5' into f20 2014-09-16 13:19:29 -05:00
Rex Dieter
a455be496d Merge branch 'master' into f20 2014-05-01 13:12:04 -05:00
Rex Dieter
412777560a Revert "Backport 1.12 commit to fix upgrade from Akonadi<1.12 for users with invalid DB entries"
This reverts commit 47a2edf9c2.
2014-05-01 13:11:59 -05:00
Dan Vrátil
47a2edf9c2 Backport 1.12 commit to fix upgrade from Akonadi<1.12 for users with invalid DB entries 2014-04-22 11:53:53 +02:00
6 changed files with 142 additions and 452 deletions

View file

@ -1,52 +0,0 @@
From c23607679fa1451f0c6890bd4a5656c07d519853 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Dan=20Vr=C3=A1til?= <dvratil@redhat.com>
Date: Fri, 6 Feb 2015 13:33:50 +0100
Subject: [PATCH 31/34] Less C++11, fixes build with clang
---
server/tests/unittest/searchtest.cpp | 28 ++++++++++++++--------------
1 file changed, 14 insertions(+), 14 deletions(-)
diff --git a/server/tests/unittest/searchtest.cpp b/server/tests/unittest/searchtest.cpp
index f523b09..969d296 100644
--- a/server/tests/unittest/searchtest.cpp
+++ b/server/tests/unittest/searchtest.cpp
@@ -119,21 +119,21 @@ private Q_SLOTS:
QTest::addColumn<QStringList>("mimetypes");
QTest::addColumn<QVector<qint64>>("expectedResults");
- QTest::newRow("") << QVector<qint64>({ 0 })
- << QStringList({ QLatin1String("text/plain") })
- << QVector<qint64>({ col4.id(), col5.id(), col7.id() });
- QTest::newRow("") << QVector<qint64>({ 0 })
- << QStringList({ QLatin1String("application/octet-stream") })
- << QVector<qint64>({ col2.id(), col3.id(), col6.id(), col8.id() });
- QTest::newRow("") << QVector<qint64>({ col1.id() })
- << QStringList({ QLatin1String("text/plain") })
- << QVector<qint64>({ col4.id() });
- QTest::newRow("") << QVector<qint64>({ col1.id() })
- << QStringList({ QLatin1String("unique/mime-type") })
+ QTest::newRow("") << (QVector<qint64>() << 0)
+ << (QStringList() << QLatin1String("text/plain"))
+ << (QVector<qint64>() << col4.id() << col5.id() << col7.id());
+ QTest::newRow("") << (QVector<qint64>() << 0)
+ << (QStringList() << QLatin1String("application/octet-stream"))
+ << (QVector<qint64>() << col2.id() << col3.id() << col6.id() << col8.id());
+ QTest::newRow("") << (QVector<qint64>() << col1.id())
+ << (QStringList() << QLatin1String("text/plain"))
+ << (QVector<qint64>() << col4.id());
+ QTest::newRow("") << (QVector<qint64>() << col1.id())
+ << (QStringList() << QLatin1String("unique/mime-type"))
<< QVector<qint64>();
- QTest::newRow("") << QVector<qint64>({ col2.id(), col7.id() })
- << QStringList({ QLatin1String("application/octet-stream") })
- << QVector<qint64>({ col3.id(), col8.id() });
+ QTest::newRow("") << (QVector<qint64>() << col2.id() << col7.id())
+ << (QStringList() << QLatin1String("application/octet-stream"))
+ << (QVector<qint64>() << col3.id() << col8.id());
}
void testSearchHelperCollectionListing()
--
2.4.3

View file

@ -1,60 +0,0 @@
From abe71f46c3b2e657db25ac16c43a4c76b2212a9f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Dan=20Vr=C3=A1til?= <dvratil@redhat.com>
Date: Wed, 17 Jun 2015 13:04:13 +0200
Subject: [PATCH 32/34] Don't throw exception when MOVE handler finds no items
to move
Instead return "OK MOVE complete" right away. The reason for this is that
when client tries to move an Item from a folder into the same folder (it's
possible in KMail, also mailfilter agent might trigger this situation) the
subsequent command gets eaten by ImapStreamParser and the client's Job gets
stuck waiting for response forever. According to Laurent this could also fix
the Mail Filter Agent getting stuck occasionally.
The problem is in ImapStreamParser::atCommandEnd() method, which is called
by the Move handler at some point. atCommandEnd() checks whether we reached
command end in the stream by looking if the next characters in the stream
are "\r\n" and if so it will consume the command end ("\r\n"), effectively
moving the streaming position BEYOND the command. In case of MOVE the
command has already been completely parsed so we are actually at the end of
the command and so ImapStreamParser will consume the "\r\n" and position the
stream beyond the command end.
After that the Move handler tries to get the items from DB and throws the
exception (the second part of the condition in the SQL query causes that
the query yields no results in this situation) which gets us back to
Connection where we then call ImapStreamParser::skipCommand(). At this point
however there are no more data in the stream (because atCommandEnd() moved
us beyond the end of the MOVE command) and so ImapStreamParser will block
and wait for more data (with 30 seconds timeout). If client sends another
command within this time the ImapStreamParser will think that this is the
command to be skipped and will consume it. This means that the command never
really reaches the Connection as it's consumed as soon as it's captured by
ImapStreamParser. And because Akonadi never receives the command it cannot
send a response and thus the Job in client will wait forever and ever...
Proper fix would be to make ImapStreamParser::atCommandEnd() to only peek
instead of actually altering the position in the stream however I'm really
afraid that it could break some other stuff that relies on this (broken?)
behaviour and our test coverage is not sufficient at this point to be
reliable enough.
---
server/src/handler/move.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/server/src/handler/move.cpp b/server/src/handler/move.cpp
index 0a6c3bf..4cf9d4e 100644
--- a/server/src/handler/move.cpp
+++ b/server/src/handler/move.cpp
@@ -85,7 +85,7 @@ bool Move::parseStream()
if ( qb.exec() ) {
const QVector<PimItem> items = qb.result();
if ( items.isEmpty() ) {
- throw HandlerException( "No items found" );
+ return successResponse( "MOVE complete" );
}
// Split the list by source collection
--
2.4.3

View file

@ -1,140 +0,0 @@
From 9c0dc6b3f0826d32eac310b2e7ecd858ca3df681 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Dan=20Vr=C3=A1til?= <dvratil@redhat.com>
Date: Mon, 29 Jun 2015 22:45:11 +0200
Subject: [PATCH 33/34] Don't leak old external payload files
Actually delete old payload files after we increase the payload revision or
switch from external to internal payload. This caused ~/.local/share/akonadi/file_db_data
to grow insanely for all users, leaving them with many duplicated files (just with
different revisions).
It is recommended that users run akonadictl fsck to clean up the leaked payload
files.
Note that there won't be any more releases of Akonadi 1.13 (and this has been
fixed in master already), so I strongly recommend distributions to pick this
patch into their packaging.
BUG: 341884
CCBUG: 338402
---
server/src/storage/partstreamer.cpp | 14 ++++++++++++++
server/tests/unittest/partstreamertest.cpp | 24 +++++++++++++-----------
2 files changed, 27 insertions(+), 11 deletions(-)
diff --git a/server/src/storage/partstreamer.cpp b/server/src/storage/partstreamer.cpp
index 2ec41fa..71bdca8 100644
--- a/server/src/storage/partstreamer.cpp
+++ b/server/src/storage/partstreamer.cpp
@@ -290,6 +290,12 @@ bool PartStreamer::stream(const QByteArray &command, bool checkExists,
mDataChanged = true;
}
+ // If the part is external, remember it's current file name
+ QString originalFile;
+ if (part.isValid() && part.external()) {
+ originalFile = PartHelper::resolveAbsolutePath(part.data());
+ }
+
part.setPartType(partType);
part.setVersion(partVersion);
part.setPimItemId(mItem.id());
@@ -306,6 +312,14 @@ bool PartStreamer::stream(const QByteArray &command, bool checkExists,
*changed = mDataChanged;
}
+ if (!originalFile.isEmpty()) {
+ // If the part was external but is not anymore, or if it's still external
+ // but the filename has changed (revision update), remove the original file
+ if (!part.external() || (part.external() && originalFile != PartHelper::resolveAbsolutePath(part.data()))) {
+ PartHelper::removeFile(originalFile);
+ }
+ }
+
return ok;
}
diff --git a/server/tests/unittest/partstreamertest.cpp b/server/tests/unittest/partstreamertest.cpp
index 05e3a8a..669bbbc 100644
--- a/server/tests/unittest/partstreamertest.cpp
+++ b/server/tests/unittest/partstreamertest.cpp
@@ -91,6 +91,7 @@ private Q_SLOTS:
QTest::addColumn<qint64>("expectedPartSize");
QTest::addColumn<bool>("expectedChanged");
QTest::addColumn<bool>("isExternal");
+ QTest::addColumn<int>("version");
QTest::addColumn<PimItem>("pimItem");
PimItem item;
@@ -101,22 +102,22 @@ private Q_SLOTS:
QVERIFY(item.insert());
// Order of these tests matters!
- QTest::newRow("item 1, internal") << QByteArray("PLD:DATA") << QByteArray("123") << 3ll << true << false << item;
- QTest::newRow("item 1, change to external") << QByteArray("PLD:DATA") << QByteArray("123456789") << 9ll << true << true << item;
- QTest::newRow("item 1, update external") << QByteArray("PLD:DATA") << QByteArray("987654321") << 9ll << true << true << item;
- QTest::newRow("item 1, external, no change") << QByteArray("PLD:DATA") << QByteArray("987654321") << 9ll << false << true << item;
- QTest::newRow("item 1, change to internal") << QByteArray("PLD:DATA") << QByteArray("1234") << 4ll << true << false << item;
- QTest::newRow("item 1, internal, no change") << QByteArray("PLD:DATA") << QByteArray("1234") << 4ll << false << false << item;
+ QTest::newRow("item 1, internal") << QByteArray("PLD:DATA") << QByteArray("123") << 3ll << true << false << -1 << item;
+ QTest::newRow("item 1, change to external") << QByteArray("PLD:DATA") << QByteArray("123456789") << 9ll << true << true << 0 << item;
+ QTest::newRow("item 1, update external") << QByteArray("PLD:DATA") << QByteArray("987654321") << 9ll << true << true << 1 << item;
+ QTest::newRow("item 1, external, no change") << QByteArray("PLD:DATA") << QByteArray("987654321") << 9ll << false << true << 2 << item;
+ QTest::newRow("item 1, change to internal") << QByteArray("PLD:DATA") << QByteArray("1234") << 4ll << true << false << 2 << item;
+ QTest::newRow("item 1, internal, no change") << QByteArray("PLD:DATA") << QByteArray("1234") << 4ll << false << false << 2 << item;
}
void testStreamer()
{
- return;
QFETCH(QByteArray, expectedPartName);
QFETCH(QByteArray, expectedData);
QFETCH(qint64, expectedPartSize);
QFETCH(bool, expectedChanged);
QFETCH(bool, isExternal);
+ QFETCH(int, version);
QFETCH(PimItem, pimItem);
FakeConnection connection;
@@ -160,17 +161,18 @@ private Q_SLOTS:
PimItem item = PimItem::retrieveById(pimItem.id());
const QVector<Part> parts = item.parts();
- QVERIFY(parts.count() == 1);
+ QCOMPARE(parts.count(), 1);
const Part part = parts[0];
QCOMPARE(part.datasize(), expectedPartSize);
QCOMPARE(part.external(), isExternal);
+ qDebug() << part.version() << part.data();
const QByteArray data = part.data();
if (isExternal) {
QVERIFY(streamerSpy.count() == 1);
QVERIFY(streamerSpy.first().count() == 1);
const Response response = streamerSpy.first().first().value<Akonadi::Server::Response>();
const QByteArray str = response.asString();
- const QByteArray expectedResponse = "+ STREAM [FILE " + QByteArray::number(part.id()) + "_r" + QByteArray::number(part.version()) + "]";
+ const QByteArray expectedResponse = "+ STREAM [FILE " + QByteArray::number(part.id()) + "_r" + QByteArray::number(version) + "]";
QCOMPARE(QString::fromUtf8(str), QString::fromUtf8(expectedResponse));
QFile file(PartHelper::resolveAbsolutePath(data));
@@ -182,7 +184,7 @@ private Q_SLOTS:
QCOMPARE(fileData, expectedData);
// Make sure no previous versions are left behind in file_db_data
- for (int i = 0; i < part.version(); ++i) {
+ for (int i = 0; i < version; ++i) {
const QByteArray fileName = QByteArray::number(part.id()) + "_r" + QByteArray::number(part.version());
const QString filePath = PartHelper::resolveAbsolutePath(fileName);
QVERIFY(!QFile::exists(filePath));
@@ -194,7 +196,7 @@ private Q_SLOTS:
QCOMPARE(data, expectedData);
// Make sure nothing is left behind in file_db_data
- for (int i = 0; i <= part.version(); ++i) {
+ for (int i = 0; i <= version; ++i) {
const QByteArray fileName = QByteArray::number(part.id()) + "_r" + QByteArray::number(part.version());
const QString filePath = PartHelper::resolveAbsolutePath(fileName);
QVERIFY(!QFile::exists(filePath));
--
2.4.3

View file

@ -1,25 +0,0 @@
From 18ed37d89b8185ac15a8bfe245de8a88d17f2c64 Mon Sep 17 00:00:00 2001
From: David Faure <faure@kde.org>
Date: Tue, 28 Jul 2015 12:47:44 +0200
Subject: [PATCH 34/34] set cmake_min_req to match kdelibs4 and enable newer
policies
---
CMakeLists.txt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 2d790c9..a64e724 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,6 +1,6 @@
+cmake_minimum_required(VERSION 2.8.9)
project(Akonadi)
-cmake_minimum_required(VERSION 2.8.8 FATAL_ERROR)
# where to look first for cmake modules, before ${CMAKE_ROOT}/Modules/ is checked
set(CMAKE_MODULE_PATH "${Akonadi_SOURCE_DIR}/cmake/modules")
--
2.4.3

View file

@ -1,33 +0,0 @@
diff -up akonadi-1.13.0/CMakeLists.txt.opt akonadi-1.13.0/CMakeLists.txt
--- akonadi-1.13.0/CMakeLists.txt.opt 2015-12-11 07:44:57.653216984 -0600
+++ akonadi-1.13.0/CMakeLists.txt 2015-12-11 07:52:14.749205933 -0600
@@ -339,22 +339,22 @@ endif()
include_directories(${Akonadi_SOURCE_DIR} ${Akonadi_BINARY_DIR} ${QT_INCLUDES} ${Boost_INCLUDE_DIR})
-add_subdirectory(interfaces)
+add_subdirectory(interfaces)
add_subdirectory(libs)
set(AKONADI_PROTOCOLINTERNALS_LIBS ${akonadiprotocolinternals_LIB_DEPENDS} akonadiprotocolinternals)
-add_subdirectory(shared)
-add_subdirectory(agentserver)
-add_subdirectory(server)
+#add_subdirectory(shared)
+#add_subdirectory(agentserver)
+#add_subdirectory(server)
-add_subdirectory(rds)
+#add_subdirectory(rds)
if(NOT WIN32)
- add_subdirectory(asapcat)
+ #add_subdirectory(asapcat)
endif()
if (NOT QT5_BUILD)
if(SQLITE_FOUND)
option(SQLITE_LINK_STATIC "link libsqlite3 statically" FALSE)
- add_subdirectory(qsqlite)
+ #add_subdirectory(qsqlite)
endif()
endif()

View file

@ -1,5 +1,3 @@
# Force out of source build
%undefine __cmake_in_source_build
# base pkg default to SQLITE now, install -mysql if you want that instead
%global database_backend SQLITE
@ -7,21 +5,39 @@
# trim changelog included in binary rpms
%global _changelog_trimtime %(date +%s -d "1 year ago")
Summary: PIM Storage Service Libraries
# legacy nepomuk/soprano support (ie, kde < 4.13)
%if 0%{?fedora} < 20
%define soprano 1
%endif
%global mysql mysql
%if 0%{?rhel} > 6
# el7 mariadb pkgs don't have compat Provides: mysql (apparently?)
%global mysql mariadb
%endif
Summary: PIM Storage Service
Name: akonadi
Version: 1.13.0
Release: 130%{?dist}
Release: 12%{?dist}
License: LGPL-2.0-or-later
License: LGPLv2+
URL: http://community.kde.org/KDE_PIM/Akonadi
%if 0%{?snap}
# git clone git://git.kde.org/akonadi
# git archive --prefix=akonadi-%{version}/ master | bzip2 > akonadi-%{version}-%{snap}.tar.bz2
Source0: akonadi-%{version}-%{snap}.tar.bz2
%else
# Official release
Source0: http://download.kde.org/stable/akonadi/src/akonadi-%{version}.tar.bz2
%endif
## downstream patches
Patch100: akonadi-1.13.0-libs_only.patch
## mysql config
Source10: akonadiserverrc.mysql
## upstreamable patches
## upstream patches (1.13 branch)
## upstream patches
Patch1: 0001-FindSqlite-Use-CMAKE_FLAGS-the-right-way-in-try_comp.patch
Patch2: 0002-Do-not-enter-the-test-directories-if-AKONADI_BUILD_T.patch
Patch3: 0003-STORE-Allow-modifying-items-tags-via-Tag-RID-or-GID.patch
@ -53,187 +69,171 @@ Patch28: 0028-Extend-imapparser-benchmark-and-keep-static-data-aro.patch
Patch29: 0029-Reduce-the-amount-of-allocations-by-preallocating-a-.patch
Patch30: 0030-Preallocate-a-capacity-of-16-for-the-returned-list.patch
%define mysql_conf_timestamp 20140709
BuildRequires: automoc4
BuildRequires: boost-devel
BuildRequires: cmake >= 2.8.8
BuildRequires: gcc-c++
# for xsltproc
BuildRequires: libxslt
BuildRequires: pkgconfig(QtDBus) pkgconfig(QtSql) pkgconfig(QtXml)
BuildRequires: pkgconfig(shared-mime-info)
%if 0%{?soprano}
BuildRequires: pkgconfig(soprano)
%endif
BuildRequires: pkgconfig(sqlite3) >= 3.6.23
# %%check
BuildRequires: dbus-x11 xorg-x11-server-Xvfb
# backends, used at buildtime to query known locations of server binaries
# FIXME/TODO: set these via cmake directives, avoids needless buildroot items
BuildRequires: mariadb-server
BuildRequires: postgresql-server
%{?_qt4_version:Requires: qt4%{?_isa} >= %{_qt4_version}}
Requires(postun): /sbin/ldconfig
%description
%{summary}.
%package devel
Summary: Developer files for %{name}
Conflicts: kf5-akonadi-server-devel
Requires: %{name}%{?_isa} = %{version}-%{release}
%description devel
%{summary}.
%package mysql
Summary: Akonadi MySQL backend support
# upgrade path
Obsoletes: akonadi < 1.7.90-2
Requires: %{name}%{?_isa} = %{version}-%{release}
Requires: %{mysql}-server
%if "%{?mysql}" != "mariadb" && 0%{?fedora} > 20
Recommends: mariadb-server
%endif
Requires: qt4-mysql%{?_isa}
Requires(post): %{_sbindir}/update-alternatives
Requires(postun): %{_sbindir}/update-alternatives
%description mysql
Configures akonadi to use mysql backend by default.
Requires an available instance of mysql server at runtime.
Akonadi can spawn a per-user one automatically if the mysql-server
package is installed on the machine.
See also: %{_sysconfdir}/akonadi/mysql-global.conf
%prep
%autosetup -p1 -n akonadi-%{version}
%build
%cmake -DCMAKE_BUILD_TYPE:STRING="Release"
%cmake_build
mkdir -p %{_target_platform}
pushd %{_target_platform}
%{cmake} \
-DCONFIG_INSTALL_DIR=%{_sysconfdir} \
%{?database_backend:-DDATABASE_BACKEND=%{database_backend}} \
-DINSTALL_QSQLITE_IN_QT_PREFIX:BOOL=ON \
-DWITH_SOPRANO:BOOL=%{?soprano:ON}%{!?soprano:OFF} \
..
popd
make %{?_smp_mflags} -C %{_target_platform}
%install
%cmake_install
make install/fast DESTDIR=$RPM_BUILD_ROOT -C %{_target_platform}
install -p -m644 -D %{SOURCE10} %{buildroot}%{_sysconfdir}/xdg/akonadi/akonadiserverrc.mysql
mkdir -p %{buildroot}%{_datadir}/akonadi/agents
touch -d %{mysql_conf_timestamp} \
%{buildroot}%{_sysconfdir}/akonadi/mysql-global*.conf \
%{buildroot}%{_sysconfdir}/akonadi/mysql-local.conf
# create/own %{_libdir}/akondi
mkdir -p %{buildroot}%{_libdir}/akonadi
# %%ghost'd global akonadiserverrc
touch akonadiserverrc
install -p -m644 -D akonadiserverrc %{buildroot}%{_sysconfdir}/xdg/akonadi/akonadiserverrc
## unpackaged files
rm -fv %{buildroot}%{_datadir}/mime/packages/akonadi-mime.xml
# omit mysql-global-mobile.conf
rm -fv %{buildroot}%{_sysconfdir}/akonadi/mysql-global-mobile.conf
%check
export PKG_CONFIG_PATH=%{buildroot}%{_datadir}/pkgconfig:%{buildroot}%{_libdir}/pkgconfig
test "$(pkg-config --modversion akonadi)" = "%{version}"
# this one (still) fails in mock (local build ok):
# 14/14 Test #14: akonadi-dbconfigtest
xvfb-run -a dbus-launch --exit-with-session make test -C %{_target_platform} ||:
%ldconfig_scriptlets
%post
/sbin/ldconfig
touch --no-create %{_datadir}/mime/packages &> /dev/null || :
%posttrans
update-mime-database %{?fedora:-n} %{_datadir}/mime &> /dev/null || :
%postun
/sbin/ldconfig ||:
if [ $1 -eq 0 ] ; then
touch --no-create %{_datadir}/mime/packages &> /dev/null || :
update-mime-database %{?fedora:-n} %{_datadir}/mime &> /dev/null ||:
fi
%files
%doc AUTHORS
%license lgpl-license
%doc AUTHORS lgpl-license
%dir %{_sysconfdir}/xdg/akonadi/
%ghost %config(missingok,noreplace) %{_sysconfdir}/xdg/akonadi/akonadiserverrc
%dir %{_sysconfdir}/akonadi/
%{_bindir}/akonadi_agent_launcher
%{_bindir}/akonadi_agent_server
%{_bindir}/akonadi_control
%{_bindir}/akonadi_rds
%{_bindir}/akonadictl
%{_bindir}/akonadiserver
%{_libdir}/akonadi/
%{_libdir}/libakonadiprotocolinternals.so.1*
%{_datadir}/dbus-1/interfaces/org.freedesktop.Akonadi.*.xml
%{_datadir}/dbus-1/services/org.freedesktop.Akonadi.*.service
%{_datadir}/mime/packages/akonadi-mime.xml
%{_datadir}/akonadi/
%{_qt4_plugindir}/sqldrivers/libqsqlite3.so
%files devel
%{_bindir}/asapcat
%{_includedir}/akonadi/
%{_libdir}/pkgconfig/akonadi.pc
%{_libdir}/libakonadiprotocolinternals.so
%{_libdir}/cmake/Akonadi/
%{_datadir}/dbus-1/interfaces/org.freedesktop.Akonadi.*.xml
%post mysql
%{_sbindir}/update-alternatives \
--install %{_sysconfdir}/xdg/akonadi/akonadiserverrc \
akonadiserverrc \
%{_sysconfdir}/xdg/akonadi/akonadiserverrc.mysql \
10
%postun mysql
if [ $1 -eq 0 ]; then
%{_sbindir}/update-alternatives \
--remove akonadiserverrc \
%{_sysconfdir}/xdg/akonadi/akonadiserverrc.mysql
fi
%files mysql
%config(noreplace) %{_sysconfdir}/xdg/akonadi/akonadiserverrc.mysql
%config(noreplace) %{_sysconfdir}/akonadi/mysql-global.conf
%config(noreplace) %{_sysconfdir}/akonadi/mysql-local.conf
%changelog
* Fri Jan 16 2026 Fedora Release Engineering <releng@fedoraproject.org> - 1.13.0-130
- Rebuilt for https://fedoraproject.org/wiki/Fedora_44_Mass_Rebuild
* Wed Jul 23 2025 Fedora Release Engineering <releng@fedoraproject.org> - 1.13.0-129
- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild
* Thu Jan 16 2025 Fedora Release Engineering <releng@fedoraproject.org> - 1.13.0-128
- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild
* Wed Jul 17 2024 Fedora Release Engineering <releng@fedoraproject.org> - 1.13.0-127
- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild
* Mon Jan 22 2024 Fedora Release Engineering <releng@fedoraproject.org> - 1.13.0-126
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
* Fri Jan 19 2024 Fedora Release Engineering <releng@fedoraproject.org> - 1.13.0-125
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
* Wed Jul 19 2023 Fedora Release Engineering <releng@fedoraproject.org> - 1.13.0-124
- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild
* Mon Jun 12 2023 Than Ngo <than@redhat.com> - 1.13.0-123
- migrated to SPDX license
* Wed Jan 18 2023 Fedora Release Engineering <releng@fedoraproject.org> - 1.13.0-122
- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild
* Wed Jul 20 2022 Fedora Release Engineering <releng@fedoraproject.org> - 1.13.0-121
- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild
* Wed Jan 19 2022 Fedora Release Engineering <releng@fedoraproject.org> - 1.13.0-120
- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
* Wed Jul 21 2021 Fedora Release Engineering <releng@fedoraproject.org> - 1.13.0-119
- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
* Mon Jan 25 2021 Fedora Release Engineering <releng@fedoraproject.org> - 1.13.0-118
- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
* Fri Jul 31 2020 Fedora Release Engineering <releng@fedoraproject.org> - 1.13.0-117
- Second attempt - Rebuilt for
https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
* Mon Jul 27 2020 Fedora Release Engineering <releng@fedoraproject.org> - 1.13.0-116
- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
* Tue Jan 28 2020 Fedora Release Engineering <releng@fedoraproject.org> - 1.13.0-115
- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
* Wed Jul 24 2019 Fedora Release Engineering <releng@fedoraproject.org> - 1.13.0-114
- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
* Thu Jan 31 2019 Fedora Release Engineering <releng@fedoraproject.org> - 1.13.0-113
- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
* Fri Jan 25 2019 Jonathan Wakely <jwakely@redhat.com> - 1.13.0-112
- Rebuilt for Boost 1.69
* Thu Jul 12 2018 Fedora Release Engineering <releng@fedoraproject.org> - 1.13.0-111
- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
* Tue Feb 20 2018 Rex Dieter <rdieter@fedoraproject.org> - 1.13.0-110
- BR: gcc-c++, use %%ldconfig_scriptlets
* Wed Feb 07 2018 Fedora Release Engineering <releng@fedoraproject.org> - 1.13.0-109
- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
* Tue Jan 23 2018 Jonathan Wakely <jwakely@redhat.com> - 1.13.0-108
- Rebuilt for Boost 1.66
* Sun Aug 06 2017 Björn Esser <besser82@fedoraproject.org> - 1.13.0-107
- Rebuilt for AutoReq cmake-filesystem
* Wed Aug 02 2017 Fedora Release Engineering <releng@fedoraproject.org> - 1.13.0-106
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild
* Wed Jul 26 2017 Fedora Release Engineering <releng@fedoraproject.org> - 1.13.0-105
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild
* Tue Jul 18 2017 Jonathan Wakely <jwakely@redhat.com> - 1.13.0-104
- Rebuilt for Boost 1.64
* Fri Feb 10 2017 Fedora Release Engineering <releng@fedoraproject.org> - 1.13.0-103
- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild
* Wed Feb 03 2016 Fedora Release Engineering <releng@fedoraproject.org> - 1.13.0-102
- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild
* Thu Dec 17 2015 Rex Dieter <rdieter@fedoraproject.org> 1.13.0-101
- -devel: re-enable dbus-1/interfaces, Conflicts: kf5-akonadi-server-devel
* Fri Dec 11 2015 Rex Dieter <rdieter@fedoraproject.org> 1.13.0-100
- for kf5 kdepim world, build libakonadi bits only (omit server and related files)
* Thu Nov 12 2015 Rex Dieter <rdieter@fedoraproject.org> 1.13.0-22
- Recommends: akonadi-mysql
* Sun Aug 30 2015 Jonathan Wakely <jwakely@redhat.com> 1.13.0-21
- Rebuilt for Boost 1.59
* Wed Aug 05 2015 Jonathan Wakely <jwakely@redhat.com> 1.13.0-20
- Rebuilt for Boost 1.58
* Fri Jul 31 2015 Rex Dieter <rdieter@fedoraproject.org> 1.13.0-19
- pull in latest 1.13 branch fixes
* Wed Jul 29 2015 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.13.0-18
- Rebuilt for https://fedoraproject.org/wiki/Changes/F23Boost159
* Wed Jul 22 2015 David Tardon <dtardon@redhat.com> - 1.13.0-17
- rebuild for Boost 1.58
* Mon Jun 29 2015 Daniel Vrátil <dvratil@redhat.com> - 1.13.0-16
- pull upstream fix for KDE#341884
* Tue Jun 16 2015 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.13.0-15
- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild
* Thu May 07 2015 Rex Dieter <rdieter@fedoraproject.org> 1.13.0-14
- %%build: explicitly set -DCMAKE_BUILD_TYPE="Release" (-DQT_NO_DEBUG was used already)
* Mon Apr 27 2015 Daniel Vrátil <dvratil@redhat.com> - 1.13.0-13
- Rebuild for boost
* Sun Mar 08 2015 Rex Dieter <rdieter@fedoraproject.org> - 1.13.0-12
- explicit BuildRequires: mariadb-server
- -mysql: Recommends: mariadb-server (f21+, #1199797)