Hello community, here is the log from the commit of package akonadi-runtime for openSUSE:Factory checked in at 2013-05-07 07:21:10 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/akonadi-runtime (Old) and /work/SRC/openSUSE:Factory/.akonadi-runtime.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Package is "akonadi-runtime" Changes: -------- --- /work/SRC/openSUSE:Factory/akonadi-runtime/akonadi-runtime.changes 2012-12-28 14:56:22.000000000 +0100 +++ /work/SRC/openSUSE:Factory/.akonadi-runtime.new/akonadi-runtime.changes 2013-05-07 07:21:12.000000000 +0200 @@ -1,0 +2,12 @@ +Mon May 6 09:42:28 UTC 2013 - hrvoje.senjan@gmail.com + +- Update to 1.9.2 + * Add option to FETCH to ignore external retrieval failures. + * Properly restrict external payload removal. + * Add buildsystem option to choose between Qt4 and Qt5. + * Changes from version 1.9.1: + * Disable query cache for Sqlite. + * Handle missing mysqld better. + * Ignore my.cnf settings when using the internal MySQL server. + +------------------------------------------------------------------- Old: ---- akonadi-1.9.0.tar.bz2 New: ---- akonadi-1.9.2.tar.bz2 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ akonadi-runtime.spec ++++++ --- /var/tmp/diff_new_pack.QTXTci/_old 2013-05-07 07:21:14.000000000 +0200 +++ /var/tmp/diff_new_pack.QTXTci/_new 2013-05-07 07:21:14.000000000 +0200 @@ -1,7 +1,7 @@ # # spec file for package akonadi-runtime # -# Copyright (c) 2012 SUSE LINUX Products GmbH, Nuernberg, Germany. +# Copyright (c) 2013 SUSE LINUX Products GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -17,7 +17,7 @@ Name: akonadi-runtime -Version: 1.9.0 +Version: 1.9.2 Release: 0 %define rversion %{version} Summary: PIM Storage Service ++++++ akonadi-1.9.0.tar.bz2 -> akonadi-1.9.2.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/akonadi-1.9.0/CMakeLists.txt new/akonadi-1.9.2/CMakeLists.txt --- old/akonadi-1.9.0/CMakeLists.txt 2012-12-23 11:11:44.000000000 +0100 +++ new/akonadi-1.9.2/CMakeLists.txt 2013-05-05 10:40:58.000000000 +0200 @@ -21,6 +21,7 @@ option(AKONADI_USE_STRIGI_SEARCH "Build Akonadi with strigi as search engine." FALSE) option(INSTALL_QSQLITE_IN_QT_PREFIX "Install the QSQLite plugin in QT_PLUGIN_DIR" FALSE) option(STATIC_LIBRARY "Build Akonadi as a static library." FALSE) +option(QT5_BUILD "Build Akonadi using the Qt5 framework" FALSE) if(NOT DEFINED DATABASE_BACKEND) set(DATABASE_BACKEND "MYSQL" CACHE STRING "The default database backend to use for Akonadi. Can be either MYSQL, POSTGRES or SQLITE") @@ -72,7 +73,7 @@ set(AKONADI_VERSION_MAJOR "1") set(AKONADI_VERSION_MINOR "9") -set(AKONADI_VERSION_PATCH "0") +set(AKONADI_VERSION_PATCH "2") set(AKONADI_VERSION "${AKONADI_VERSION_MAJOR}.${AKONADI_VERSION_MINOR}.${AKONADI_VERSION_PATCH}") set(AKONADI_VERSION_STRING "${AKONADI_VERSION}") @@ -125,11 +126,8 @@ ############### Find what we need ############### #### Qt 4 and 5 #### -set(QT_USE_IMPORTED_TARGETS TRUE) # Qt 4 only -set(QT_MIN_VERSION 4.6.0) # Qt 4 only - -find_package(Qt5Core QUIET) -if (Qt5Core_FOUND) +if(QT5_BUILD) + find_package(Qt5Core REQUIRED) find_package(Qt5Gui REQUIRED) find_package(Qt5Widgets REQUIRED) find_package(Qt5Sql REQUIRED) @@ -137,7 +135,6 @@ find_package(Qt5Xml REQUIRED) find_package(Qt5DBus REQUIRED) find_package(Qt5Test REQUIRED) - set(QT5_BUILD TRUE) include("cmake/modules/ECMQt4To5Porting.cmake") include_directories(${QT_INCLUDES}) # TODO: Port away from this. @@ -146,16 +143,19 @@ message(FATAL_ERROR "Akonadi Qt 5 build requires at least CMake version 2.8.9") endif() + if (Qt5_POSITION_INDEPENDENT_CODE) + set(CMAKE_POSITION_INDEPENDENT_CODE ON) + endif() + set(QT_QTTEST_LIBRARIES Qt5::Test) else() + set(QT_USE_IMPORTED_TARGETS TRUE) # Qt 4 only + set(QT_MIN_VERSION 4.6.0) # Qt 4 only + find_package(Qt4 REQUIRED) include(${QT_USE_FILE}) endif() -if (Qt5_POSITION_INDEPENDENT_CODE) - set(CMAKE_POSITION_INDEPENDENT_CODE ON) -endif() - # Missing in FindQt4.cmake until Dec 2011: setting QT_NO_DEBUG_OUTPUT if(CMAKE_BUILD_TYPE) string(TOLOWER ${CMAKE_BUILD_TYPE} CMAKE_BUILD_TYPE_TOLOWER) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/akonadi-1.9.0/INSTALL new/akonadi-1.9.2/INSTALL --- old/akonadi-1.9.0/INSTALL 2012-12-23 11:11:44.000000000 +0100 +++ new/akonadi-1.9.2/INSTALL 2013-05-05 10:40:58.000000000 +0200 @@ -25,6 +25,19 @@ That's all :) +=== Build Options === + +The following options are available when running CMake: + +* AKONADI_BUILD_TESTS (Default: TRUE): Build the Akonadi unit tests +* AKONADI_BUILD_QSQLITE (Default: TRUE): Build the SQLite backend +* AKONADI_USE_STRIGI_SEARCH (Default: FALSE): Only useful for certain cases (eg: WINCE builds), don't use it +* INSTALL_QSQLITE_IN_QT_PREFIX (Default: FALSE): Useful for distributions. + Once enabled, the qsqlite3 backend will be installed in ${QT_PLUGINS_DIR}/sqldrivers +* STATIC_LIBRARY (Default: FALSE): Build the Akonadi server libraries statically. Only useful for certain cases (eg: WINCE builds). +* DATABASE_BACKEND (Default: MYSQL, available: MYSQL, POSTGRES, SQLITE): Define which database driver to use by default. + MYSQL is preferred, SQLITE should be avoided. + === Build Requirements === Required: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/akonadi-1.9.0/Mainpage.dox new/akonadi-1.9.2/Mainpage.dox --- old/akonadi-1.9.0/Mainpage.dox 2012-12-23 11:11:44.000000000 +0100 +++ new/akonadi-1.9.2/Mainpage.dox 2013-05-05 10:40:58.000000000 +0200 @@ -315,6 +315,6 @@ // DOXYGEN_EXCLUDE = sqlplugin server/control server/akonadictl server/tests // DOXYGEN_PROJECTNAME=Akonadi -// DOXYGEN_PROJECTVERSION=1.9.0 +// DOXYGEN_PROJECTVERSION=1.9.2 // vim:ts=4:sw=4:expandtab:filetype=doxygen diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/akonadi-1.9.0/NEWS new/akonadi-1.9.2/NEWS --- old/akonadi-1.9.0/NEWS 2012-12-23 11:11:44.000000000 +0100 +++ new/akonadi-1.9.2/NEWS 2013-05-05 10:40:58.000000000 +0200 @@ -1,3 +1,15 @@ +1.9.2 05-May-2013 +--------------------------------------------- +- Add option to FETCH to ignore external retrieval failures. +- Properly restrict external payload removal. +- Add buildsystem option to choose between Qt4 and Qt5. + +1.9.1 02-March-2013 +--------------------------------------------- +- Disable query cache for Sqlite. +- Handle missing mysqld better. +- Ignore my.cnf settings when using the internal MySQL server. + 1.9.0 23-December-2012 --------------------------------------------- - Respect collection cache policy refresh interval for collection tree sync. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/akonadi-1.9.0/README.sqlite new/akonadi-1.9.2/README.sqlite --- old/akonadi-1.9.0/README.sqlite 2012-12-23 11:11:44.000000000 +0100 +++ new/akonadi-1.9.2/README.sqlite 2013-05-05 10:40:58.000000000 +0200 @@ -5,9 +5,10 @@ these changes should be pushed upstream eventually. == INSTALL == -When Sqlite is found the custom driver will be build and installed at: +When Sqlite is found, the custom driver will be build and installed in: -${CMAKE_INSTALL_PREFIX}/lib/kde4/plugins/sqldrivers +${CMAKE_INSTALL_PREFIX}/lib/plugins/sqldrivers or ${QT_PLUGINS_DIR}/sqldrivers +if you enable the INSTALL_QSQLITE_IN_QT_PREFIX option when running CMake. The next thing you have to do is add that path (if it isn't already) to your QT_PLUGIN_PATH environment variable. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/akonadi-1.9.0/libs/protocol_p.h new/akonadi-1.9.2/libs/protocol_p.h --- old/akonadi-1.9.0/libs/protocol_p.h 2012-12-23 11:11:44.000000000 +0100 +++ new/akonadi-1.9.2/libs/protocol_p.h 2013-05-05 10:40:58.000000000 +0200 @@ -78,6 +78,7 @@ #define AKONADI_PARAM_NAME "NAME" #define AKONADI_PARAM_RESOURCE "RESOURCE" #define AKONADI_PARAM_ANCESTORS "ANCESTORS" +#define AKONADI_PARAM_IGNOREERRORS "IGNOREERRORS" #define AKONADI_PARAM_PERSISTENTSEARCH "PERSISTENTSEARCH" #define AKONADI_PARAM_PERSISTENTSEARCH_QUERYLANG "QUERYLANGUAGE" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/akonadi-1.9.0/server/src/akonadiconnection.cpp new/akonadi-1.9.2/server/src/akonadiconnection.cpp --- old/akonadi-1.9.0/server/src/akonadiconnection.cpp 2012-12-23 11:11:44.000000000 +0100 +++ new/akonadi-1.9.2/server/src/akonadiconnection.cpp 2013-05-05 10:40:58.000000000 +0200 @@ -97,7 +97,7 @@ connect( m_socket, SIGNAL(disconnected()), this, SLOT(slotDisconnected()), Qt::DirectConnection ); - writeOut( "* OK Akonadi Almost IMAP Server [PROTOCOL 29]"); + writeOut( "* OK Akonadi Almost IMAP Server [PROTOCOL 30]"); m_streamParser = new ImapStreamParser( m_socket ); m_streamParser->setTracerIdentifier( m_identifier ); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/akonadi-1.9.0/server/src/handler/fetchhelper.cpp new/akonadi-1.9.2/server/src/handler/fetchhelper.cpp --- old/akonadi-1.9.0/server/src/handler/fetchhelper.cpp 2012-12-23 11:11:44.000000000 +0100 +++ new/akonadi-1.9.2/server/src/handler/fetchhelper.cpp 2013-05-05 10:40:58.000000000 +0200 @@ -64,6 +64,7 @@ mMTimeRequested = false; mExternalPayloadSupported = false; mRemoteRevisionRequested = false; + mIgnoreErrors = false; } void FetchHelper::setStreamParser( ImapStreamParser *parser ) @@ -224,7 +225,7 @@ retriever.setScope( mScope ); retriever.setRetrieveParts( payloadList ); retriever.setRetrieveFullPayload( mFullPayload ); - if ( !retriever.exec() ) { // There we go, retrieve the missing parts from the resource. + if ( !retriever.exec() && !mIgnoreErrors ) { // There we go, retrieve the missing parts from the resource. if (mConnection->resourceContext().isValid()) throw HandlerException( QString::fromLatin1("Unable to fetch item from backend (collection %1, resource %2) : %3") .arg(mConnection->selectedCollectionId()) @@ -314,6 +315,8 @@ if ( mAncestorDepth > 0 ) attributes.append( HandlerHelper::ancestorsToByteArray( mAncestorDepth, ancestorsForItem( parentCollectionId ) ) ); + bool skipItem = false; + while ( partQuery.isValid() ) { const qint64 id = partQuery.value( PartQueryPimIdColumn ).toLongLong(); if ( id > pimItemId ) { @@ -325,6 +328,12 @@ QByteArray partName = Utils::variantToByteArray( partQuery.value( PartQueryNameColumn ) ); QByteArray part = Utils::variantToByteArray( partQuery.value( PartQueryNameColumn ) ); QByteArray data = Utils::variantToByteArray( partQuery.value( PartQueryDataColumn ) ); + if ( mIgnoreErrors && data.isEmpty() ) { + //We wanted the payload, couldn't get it, and are ignoring errors. Skip the item. + akDebug() << id << " no payload"; + skipItem = true; + break; + } bool partIsExternal = partQuery.value( PartQueryExternalColumn ).toBool(); if ( !mExternalPayloadSupported && partIsExternal ) //external payload not supported by the client, translate the data data = PartHelper::translateData( data, partIsExternal ); @@ -350,6 +359,11 @@ partQuery.next(); } + if (skipItem) { + itemQuery.next(); + continue; + } + // IMAP protocol violation: should actually be the sequence number QByteArray attr = QByteArray::number( pimItemId ) + ' ' + responseIdentifier + " ("; attr += ImapParser::join( attributes, " " ) + ')'; @@ -422,6 +436,8 @@ mFullPayload = true; } else if ( buffer == AKONADI_PARAM_ANCESTORS ) { mAncestorDepth = HandlerHelper::parseDepth( mStreamParser->readString() ); + } else if ( buffer == AKONADI_PARAM_IGNOREERRORS ) { + mIgnoreErrors = true; } else { throw HandlerException( "Invalid command argument" ); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/akonadi-1.9.0/server/src/handler/fetchhelper.h new/akonadi-1.9.2/server/src/handler/fetchhelper.h --- old/akonadi-1.9.0/server/src/handler/fetchhelper.h 2012-12-23 11:11:44.000000000 +0100 +++ new/akonadi-1.9.2/server/src/handler/fetchhelper.h 2013-05-05 10:40:58.000000000 +0200 @@ -74,6 +74,7 @@ bool mMTimeRequested; bool mExternalPayloadSupported; bool mRemoteRevisionRequested; + bool mIgnoreErrors; }; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/akonadi-1.9.0/server/src/storage/datastore.cpp new/akonadi-1.9.2/server/src/storage/datastore.cpp --- old/akonadi-1.9.0/server/src/storage/datastore.cpp 2012-12-23 11:11:44.000000000 +0100 +++ new/akonadi-1.9.2/server/src/storage/datastore.cpp 2013-05-05 10:40:58.000000000 +0200 @@ -284,10 +284,11 @@ // remove all external payload parts QueryBuilder qb( Part::tableName(), QueryBuilder::Select ); qb.addColumn( Part::dataFullColumnName() ); - qb.addValueCondition( Part::externalFullColumnName(), Query::Equals, true ); - qb.addValueCondition( Part::dataFullColumnName(), Query::IsNot, QVariant() ); qb.addJoin( QueryBuilder::InnerJoin, PimItem::tableName(), Part::pimItemIdFullColumnName(), PimItem::idFullColumnName() ); qb.addJoin( QueryBuilder::InnerJoin, Collection::tableName(), PimItem::collectionIdFullColumnName(), Collection::idFullColumnName() ); + qb.addValueCondition( Collection::idFullColumnName(), Query::Equals, collection.id() ); + qb.addValueCondition( Part::externalFullColumnName(), Query::Equals, true ); + qb.addValueCondition( Part::dataFullColumnName(), Query::IsNot, QVariant() ); if ( !qb.exec() ) return false; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/akonadi-1.9.0/server/src/storage/dbconfigmysql.cpp new/akonadi-1.9.2/server/src/storage/dbconfigmysql.cpp --- old/akonadi-1.9.0/server/src/storage/dbconfigmysql.cpp 2012-12-23 11:11:44.000000000 +0100 +++ new/akonadi-1.9.2/server/src/storage/dbconfigmysql.cpp 2013-05-05 10:40:58.000000000 +0200 @@ -78,7 +78,8 @@ const QString mysqladminPath = XdgBaseDirs::findExecutableFile( QLatin1String( "mysqladmin" ), mysqldSearchPath ); if ( !mysqladminPath.isEmpty() ) { #ifndef Q_OS_WIN - defaultCleanShutdownCommand = QString::fromLatin1( "%1 shutdown --socket=%2/mysql.socket" ) + defaultCleanShutdownCommand = QString::fromLatin1( "--defaults-file=%1/mysql.conf %2 shutdown --socket=%3/mysql.socket" ) + .arg( AkStandardDirs::saveDir( "data" ) ) .arg( mysqladminPath ) .arg( socketDirectory ); #else @@ -262,6 +263,10 @@ arguments << QString::fromLatin1( "--shared-memory" ); #endif + if (mysqldPath.isEmpty()) { + akError() << "mysqld not found. Please verify your installation"; + return; + } mDatabaseProcess = new QProcess; mDatabaseProcess->start( mysqldPath, arguments ); if ( !mDatabaseProcess->waitForStarted() ) { @@ -299,7 +304,8 @@ if ( opened ) { if ( !mMysqlCheckPath.isEmpty() ) { - const QStringList arguments = QStringList() << QLatin1String( "--check-upgrade" ) + const QStringList arguments = QStringList() << QString::fromLatin1( "--defaults-file=%1/mysql.conf" ).arg( akDir ) + << QLatin1String( "--check-upgrade" ) << QLatin1String( "--all-databases" ) << QLatin1String( "--auto-repair" ) << QString::fromLatin1( "--socket=%1/mysql.socket" ).arg( socketDirectory ); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/akonadi-1.9.0/server/src/storage/querycache.cpp new/akonadi-1.9.2/server/src/storage/querycache.cpp --- old/akonadi-1.9.0/server/src/storage/querycache.cpp 2012-12-23 11:11:44.000000000 +0100 +++ new/akonadi-1.9.2/server/src/storage/querycache.cpp 2013-05-05 10:40:58.000000000 +0200 @@ -18,6 +18,8 @@ */ #include "querycache.h" +#include "dbtype.h" +#include "datastore.h" #include <QSqlQuery> #include <QThreadStorage> @@ -36,7 +38,11 @@ bool QueryCache::contains(const QString& queryStatement) { - return cache()->contains( queryStatement ); + if ( DbType::type( DataStore::self()->database() ) == DbType::Sqlite ) { + return false; + } else { + return cache()->contains( queryStatement ); + } } QSqlQuery QueryCache::query(const QString& queryStatement) @@ -46,5 +52,7 @@ void QueryCache::insert(const QString& queryStatement, const QSqlQuery& query) { - cache()->insert( queryStatement, query ); + if ( DbType::type( DataStore::self()->database() ) != DbType::Sqlite ) { + cache()->insert( queryStatement, query ); + } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/akonadi-1.9.0/shared/akdebug.cpp new/akonadi-1.9.2/shared/akdebug.cpp --- old/akonadi-1.9.0/shared/akdebug.cpp 2012-12-23 11:11:44.000000000 +0100 +++ new/akonadi-1.9.2/shared/akdebug.cpp 2013-05-05 10:40:58.000000000 +0200 @@ -156,7 +156,7 @@ QFile fileOld( infoOld.absoluteFilePath() ); const bool success = fileOld.remove(); if ( !success ) - qFatal( "Cannot remove old log file - running on a readlony filesystem maybe?" ); + qFatal( "Cannot remove old log file - running on a readonly filesystem maybe?" ); } QFileInfo info( sInstance()->errorLogFileName() ); if ( info.exists() ) { -- To unsubscribe, e-mail: opensuse-commit+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-commit+help@opensuse.org