Hello community,
here is the log from the commit of package akonadi-runtime for openSUSE:Factory
checked in at Sat Oct 8 11:40:50 CEST 2011.
--------
--- openSUSE:Factory/akonadi-runtime/akonadi-runtime.changes 2011-09-23 01:51:34.000000000 +0200
+++ akonadi-runtime/akonadi-runtime.changes 2011-10-08 00:30:32.000000000 +0200
@@ -1,0 +2,15 @@
+Fri Oct 7 22:07:50 UTC 2011 - wstephenson@suse.com
+
+- Update to 1.6.2
+ - Do not update item revision if only the RID or RREV changed.
+ - Fix usage of wrong ids for part filenames.
+ - Only set item dirty flag if the payload changed.
+ - Only drop content mimetype for unsubscribed collections in LIST/LSUB.
+- 1.6.1 changes:
+ - Fix crash on agent launcher exit.
+ - Fix valgrind-ing agents running in the agent launcher.
+ - Fix restarting of agents in broken state.
+ - Fix pipe naming on multi-user Windows systems.
+ - Raise MySQL timeout.
+
+-------------------------------------------------------------------
calling whatdependson for head-i586
Old:
----
akonadi-1.6.0.tar.bz2
New:
----
akonadi-1.6.2.tar.bz2
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ akonadi-runtime.spec ++++++
--- /var/tmp/diff_new_pack.erzFEH/_old 2011-10-08 11:40:31.000000000 +0200
+++ /var/tmp/diff_new_pack.erzFEH/_new 2011-10-08 11:40:31.000000000 +0200
@@ -18,8 +18,8 @@
Name: akonadi-runtime
-Version: 1.6.0
-Release: 5
+Version: 1.6.2
+Release: 1
%define rversion %{version}
License: LGPLv2.1+
Summary: PIM Storage Service
++++++ akonadi-1.6.0.tar.bz2 -> akonadi-1.6.2.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/akonadi-1.6.0/CMakeLists.txt new/akonadi-1.6.2/CMakeLists.txt
--- old/akonadi-1.6.0/CMakeLists.txt 2011-07-10 14:19:34.000000000 +0200
+++ new/akonadi-1.6.2/CMakeLists.txt 2011-10-03 12:02:01.000000000 +0200
@@ -10,9 +10,10 @@
include(CTest)
include(CTestConfig.cmake)
option(AKONADI_BUILD_TESTS "Build the Akonadi unit tests." TRUE)
+option(AKONADI_BUILD_QSQLITE "Build the Sqlite backend." TRUE)
+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(AKONADI_USE_STRIGI_SEARCH "Build Akonadi with strigi as search engine." 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")
@@ -55,7 +56,7 @@
set(AKONADI_VERSION_MAJOR "1")
set(AKONADI_VERSION_MINOR "6")
-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}")
@@ -88,6 +89,7 @@
set ( _backend ${ARGV0} )
if ( "${_backend}" STREQUAL "SQLITE" )
set(AKONADI_DATABASE_BACKEND QSQLITE3)
+ set(AKONADI_BUILD_QSQLITE TRUE)
else()
if ( "${_backend}" STREQUAL "POSTGRES" )
set(AKONADI_DATABASE_BACKEND QPSQL)
@@ -184,9 +186,11 @@
set (SQLITE_REQUIRED "FALSE")
endif()
-set(SQLITE_MIN_VERSION 3.6.23)
-find_package(Sqlite)
-macro_log_feature(SQLITE_FOUND "Sqlite" "Sqlite database library" "http://www.sqlite.org" ${SQLITE_REQUIRED} "${SQLITE_MIN_VERSION}" "")
+if(AKONADI_BUILD_QSQLITE)
+ set(SQLITE_MIN_VERSION 3.6.23)
+ find_package(Sqlite)
+ macro_log_feature(SQLITE_FOUND "Sqlite" "Sqlite database library" "http://www.sqlite.org" ${SQLITE_REQUIRED} "${SQLITE_MIN_VERSION}" "")
+endif()
############### Compilers flags ###############
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/akonadi-1.6.0/Mainpage.dox new/akonadi-1.6.2/Mainpage.dox
--- old/akonadi-1.6.0/Mainpage.dox 2011-07-10 14:19:34.000000000 +0200
+++ new/akonadi-1.6.2/Mainpage.dox 2011-10-03 12:02:01.000000000 +0200
@@ -315,6 +315,6 @@
// DOXYGEN_EXCLUDE = sqlplugin server/control server/akonadictl server/tests
// DOXYGEN_PROJECTNAME=Akonadi
-// DOXYGEN_PROJECTVERSION=1.6.0
+// DOXYGEN_PROJECTVERSION=1.6.2
// vim:ts=4:sw=4:expandtab:filetype=doxygen
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/akonadi-1.6.0/NEWS new/akonadi-1.6.2/NEWS
--- old/akonadi-1.6.0/NEWS 2011-07-10 14:19:34.000000000 +0200
+++ new/akonadi-1.6.2/NEWS 2011-10-03 12:02:01.000000000 +0200
@@ -1,3 +1,18 @@
+1.6.2 03-October-2011
+---------------------------------------------
+- Do not update item revision if only the RID or RREV changed.
+- Fix usage of wrong ids for part filenames.
+- Only set item dirty flag if the payload changed.
+- Only drop content mimetype for unsubscribed collections in LIST/LSUB.
+
+1.6.1 15-September-2011
+---------------------------------------------
+- Fix crash on agent launcher exit.
+- Fix valgrind-ing agents running in the agent launcher.
+- Fix restarting of agents in broken state.
+- Fix pipe naming on multi-user Windows systems.
+- Raise MySQL timeout.
+
1.6.0 10-July-2011
---------------------------------------------
- Enable external payload storage unconditionally.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/akonadi-1.6.0/agentserver/agentpluginloader.cpp new/akonadi-1.6.2/agentserver/agentpluginloader.cpp
--- old/akonadi-1.6.0/agentserver/agentpluginloader.cpp 2011-07-10 14:19:34.000000000 +0200
+++ new/akonadi-1.6.2/agentserver/agentpluginloader.cpp 2011-10-03 12:02:01.000000000 +0200
@@ -25,13 +25,8 @@
AgentPluginLoader::~AgentPluginLoader()
{
- QHash::iterator it = m_pluginLoaders.begin();
- while ( it != m_pluginLoaders.end() ) {
- it.value()->unload();
- ++it;
- }
-
qDeleteAll( m_pluginLoaders );
+ m_pluginLoaders.clear();
}
QPluginLoader *AgentPluginLoader::load( const QString &pluginName )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/akonadi-1.6.0/agentserver/agentpluginloader.h new/akonadi-1.6.2/agentserver/agentpluginloader.h
--- old/akonadi-1.6.0/agentserver/agentpluginloader.h 2011-07-10 14:19:34.000000000 +0200
+++ new/akonadi-1.6.2/agentserver/agentpluginloader.h 2011-10-03 12:02:01.000000000 +0200
@@ -26,7 +26,7 @@
{
public:
/**
- Unloads and deletes all instantiated QPluginLoaders.
+ Deletes all instantiated QPluginLoaders.
*/
~AgentPluginLoader();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/akonadi-1.6.0/server/control/agentprocessinstance.cpp new/akonadi-1.6.2/server/control/agentprocessinstance.cpp
--- old/akonadi-1.6.0/server/control/agentprocessinstance.cpp 2011-07-10 14:19:34.000000000 +0200
+++ new/akonadi-1.6.2/server/control/agentprocessinstance.cpp 2011-10-03 12:02:01.000000000 +0200
@@ -82,7 +82,7 @@
void AgentProcessInstance::restartWhenIdle()
{
if ( mController->isRunning() ) {
- if ( status() == 0 ) {
+ if ( status() != 1 ) {
mController->restartOnceWhenFinished();
quit();
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/akonadi-1.6.0/server/control/agentthreadinstance.cpp new/akonadi-1.6.2/server/control/agentthreadinstance.cpp
--- old/akonadi-1.6.0/server/control/agentthreadinstance.cpp 2011-07-10 14:19:34.000000000 +0200
+++ new/akonadi-1.6.2/server/control/agentthreadinstance.cpp 2011-10-03 12:02:01.000000000 +0200
@@ -68,7 +68,7 @@
void AgentThreadInstance::restartWhenIdle()
{
- if ( status() == 0 && !identifier().isEmpty() ) {
+ if ( status() != 1 && !identifier().isEmpty() ) {
org::freedesktop::Akonadi::AgentServer agentServer( QLatin1String("org.freedesktop.Akonadi.AgentServer"),
QLatin1String("/AgentServer"), QDBusConnection::sessionBus() );
agentServer.stopAgent( identifier() );
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/akonadi-1.6.0/server/control/processcontrol.cpp new/akonadi-1.6.2/server/control/processcontrol.cpp
--- old/akonadi-1.6.0/server/control/processcontrol.cpp 2011-07-10 14:19:34.000000000 +0200
+++ new/akonadi-1.6.2/server/control/processcontrol.cpp 2011-10-03 12:02:01.000000000 +0200
@@ -165,11 +165,20 @@
}
}
+static bool listContains( const QStringList &list, const QString &pattern )
+{
+ foreach ( const QString &s, list ) {
+ if ( s.contains( pattern ) )
+ return true;
+ }
+ return false;
+}
+
void ProcessControl::start()
{
#ifdef Q_OS_UNIX
QString agentValgrind = getEnv( "AKONADI_VALGRIND" );
- if ( !agentValgrind.isEmpty() && mApplication.contains( agentValgrind ) ) {
+ if ( !agentValgrind.isEmpty() && (mApplication.contains( agentValgrind ) || listContains( mArguments, agentValgrind )) ) {
mArguments.prepend( mApplication );
const QString originalArguments = mArguments.join( QString::fromLocal8Bit( " " ) );
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/akonadi-1.6.0/server/src/akonadi.cpp new/akonadi-1.6.2/server/src/akonadi.cpp
--- old/akonadi-1.6.0/server/src/akonadi.cpp 2011-07-10 14:19:34.000000000 +0200
+++ new/akonadi-1.6.2/server/src/akonadi.cpp 2011-10-03 12:02:01.000000000 +0200
@@ -54,6 +54,11 @@
#endif
#include
+#ifdef Q_WS_WIN
+#include
+#include
+#endif
+
using namespace Akonadi;
static AkonadiServer *s_instance = 0;
@@ -88,7 +93,42 @@
QSettings connectionSettings( connectionSettingsFile, QSettings::IniFormat );
#ifdef Q_OS_WIN
- QString namedPipe = settings.value( QLatin1String( "Connection/NamedPipe" ), QLatin1String( "Akonadi" ) ).toString();
+ HANDLE hToken = NULL;
+ PSID sid;
+ QString userID;
+
+ OpenProcessToken(GetCurrentProcess(), TOKEN_READ, &hToken);
+ if(hToken)
+ {
+ DWORD size;
+ PTOKEN_USER userStruct;
+
+ GetTokenInformation(hToken, TokenUser, NULL, 0, &size);
+ if( ERROR_INSUFFICIENT_BUFFER == GetLastError() )
+ {
+ userStruct = reinterpret_cast( new BYTE[size] );
+ GetTokenInformation(hToken, TokenUser, userStruct, size, &size);
+
+ int sidLength = GetLengthSid(userStruct->User.Sid);
+ sid = (PSID) malloc(sidLength);
+ CopySid(sidLength, sid, userStruct->User.Sid);
+ CloseHandle(hToken);
+ delete [] userStruct;
+ }
+
+ LPWSTR s;
+ if (!ConvertSidToStringSidW(sid, &s)) {
+ akError() << "Could not determine user id for current process.";
+ userID = QString();
+ } else {
+ userID = QString::fromUtf16(reinterpret_cast(s));
+ LocalFree(s);
+ }
+ free(sid);
+ }
+ QString defaultPipe = QLatin1String( "Akonadi-" ) + userID;
+
+ QString namedPipe = settings.value( QLatin1String( "Connection/NamedPipe" ), defaultPipe ).toString();
#ifdef Q_OS_WINCE
if ( !listen( QHostAddress::LocalHost, 31414 ) )
#else
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/akonadi-1.6.0/server/src/handler/list.cpp new/akonadi-1.6.2/server/src/handler/list.cpp
--- old/akonadi-1.6.0/server/src/handler/list.cpp 2011-07-10 14:19:34.000000000 +0200
+++ new/akonadi-1.6.2/server/src/handler/list.cpp 2011-10-03 12:02:01.000000000 +0200
@@ -82,9 +82,11 @@
}
}
+ const bool isUnsubscribed = mOnlySubscribed && !root.subscribed();
+
// filter if this node isn't needed by it's children
- bool hidden = (mResource.isValid() && root.resourceId() != mResource.id())
- || (mOnlySubscribed && !root.subscribed())
+ const bool hidden = (mResource.isValid() && root.resourceId() != mResource.id())
+ || isUnsubscribed
|| (!mMimeTypes.isEmpty() && !intersect( mMimeTypes, root.mimeTypes()) );
if ( !childrenFound && hidden )
@@ -94,7 +96,7 @@
Collection dummy = root;
DataStore *db = connection()->storageBackend();
db->activeCachePolicy( dummy );
- const QByteArray b = HandlerHelper::collectionToByteArray( dummy, hidden, mIncludeStatistics, mAncestorDepth, ancestors );
+ const QByteArray b = HandlerHelper::collectionToByteArray( dummy, isUnsubscribed, mIncludeStatistics, mAncestorDepth, ancestors );
Response response;
response.setUntagged();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/akonadi-1.6.0/server/src/handler/store.cpp new/akonadi-1.6.2/server/src/handler/store.cpp
--- old/akonadi-1.6.0/server/src/handler/store.cpp 2011-07-10 14:19:34.000000000 +0200
+++ new/akonadi-1.6.2/server/src/handler/store.cpp 2011-10-03 12:02:01.000000000 +0200
@@ -45,6 +45,15 @@
using namespace Akonadi;
+static bool payloadChanged( const QSet<QByteArray> &changes )
+{
+ foreach ( const QByteArray &change, changes ) {
+ if ( change.startsWith( "PLD:" ) )
+ return true;
+ }
+ return false;
+}
+
Store::Store( Scope::SelectionScope scope )
: Handler()
, mScope( scope )
@@ -135,12 +144,12 @@
if ( pimItems.at( i ).rev() != (int)mPreviousRevision )
throw HandlerException( "[LLCONFLICT] Item was modified elsewhere, aborting STORE." );
}
- pimItems[ i ].setRev( pimItems[ i ].rev() + 1 );
}
QSet<QByteArray> changes;
qint64 partSizes = 0;
bool invalidateCache = false;
+ bool undirty = false;
bool silent = false;
// apply modifications
@@ -218,6 +227,7 @@
else if ( command == AKONADI_PARAM_UNDIRTY ) {
m_streamParser->readString(); // read the 'false' string
item.setDirty( false );
+ undirty = true;
}
else if ( command == AKONADI_PARAM_INVALIDATECACHE ) {
@@ -334,17 +344,31 @@
}
QString datetime;
- if ( !changes.isEmpty() ) {
+ if ( !changes.isEmpty() || invalidateCache || undirty ) {
+
// update item size
if ( pimItems.size() == 1 && (mSize > 0 || partSizes > 0) )
pimItems.first().setSize( qMax( mSize, partSizes ) );
+ const bool onlyRemoteIdChanged = (changes.size() == 1 && changes.contains( AKONADI_PARAM_REMOTEID ));
+ const bool onlyRemoteRevisionChanged = (changes.size() == 1 && changes.contains( AKONADI_PARAM_REMOTEREVISION ));
+ const bool onlyRemoteIdAndRevisionChanged = (changes.size() == 2 && changes.contains( AKONADI_PARAM_REMOTEID )
+ && changes.contains( AKONADI_PARAM_REMOTEREVISION ));
+
+ // If only the remote id and/or the remote revision changed, we don't have to increase the REV,
+ // because these updates do not change the payload and can only be done by the owning resource -> no conflicts possible
+ const bool revisionNeedsUpdate = (!changes.isEmpty() && !onlyRemoteIdChanged && !onlyRemoteRevisionChanged && !onlyRemoteIdAndRevisionChanged);
+
// run update query and prepare change notifications
for ( int i = 0; i < pimItems.count(); ++i ) {
+
+ if ( revisionNeedsUpdate )
+ pimItems[ i ].setRev( pimItems[ i ].rev() + 1 );
+
PimItem &item = pimItems[ i ];
item.setDatetime( modificationtime );
item.setAtime( modificationtime );
- if ( !connection()->isOwnerResource( item ) )
+ if ( !connection()->isOwnerResource( item ) && payloadChanged( changes ) )
item.setDirty( true );
if ( !item.update() )
throw HandlerException( "Unable to write item changes into the database" );
@@ -355,7 +379,8 @@
}
}
- store->notificationCollector()->itemChanged( item, changes );
+ if ( !changes.isEmpty() )
+ store->notificationCollector()->itemChanged( item, changes );
if ( !silent )
sendPimItemResponse( item );
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/akonadi-1.6.0/server/src/storage/mysql-global-mobile.conf new/akonadi-1.6.2/server/src/storage/mysql-global-mobile.conf
--- old/akonadi-1.6.0/server/src/storage/mysql-global-mobile.conf 2011-07-10 14:19:34.000000000 +0200
+++ new/akonadi-1.6.2/server/src/storage/mysql-global-mobile.conf 2011-10-03 12:02:01.000000000 +0200
@@ -53,7 +53,7 @@
innodb_flush_log_at_trx_commit=2
# Do not drop the connection to the DB after 8 hours of inactivity
-wait_timeout=1296000
+wait_timeout=31536000
[client]
default-character-set=utf8
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/akonadi-1.6.0/server/src/storage/mysql-global.conf new/akonadi-1.6.2/server/src/storage/mysql-global.conf
--- old/akonadi-1.6.0/server/src/storage/mysql-global.conf 2011-07-10 14:19:34.000000000 +0200
+++ new/akonadi-1.6.2/server/src/storage/mysql-global.conf 2011-10-03 12:02:01.000000000 +0200
@@ -53,7 +53,7 @@
innodb_flush_log_at_trx_commit=2
# Do not drop the connection to the DB after 8 hours of inactivity
-wait_timeout=1296000
+wait_timeout=31536000
[client]
default-character-set=utf8
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/akonadi-1.6.0/server/src/storage/parthelper.cpp new/akonadi-1.6.2/server/src/storage/parthelper.cpp
--- old/akonadi-1.6.0/server/src/storage/parthelper.cpp 2011-07-10 14:19:34.000000000 +0200
+++ new/akonadi-1.6.2/server/src/storage/parthelper.cpp 2011-10-03 12:02:01.000000000 +0200
@@ -32,6 +32,14 @@
using namespace Akonadi;
+static QString fileNameForPart( Part *part )
+{
+ Q_ASSERT( part->id() >= 0 );
+ const QString dataDir = XdgBaseDirs::saveDir( "data", QLatin1String( "akonadi/file_db_data" ) ) + QDir::separator();
+ Q_ASSERT( dataDir != QDir::separator() );
+ return dataDir + QString::number( part->id() );
+}
+
void PartHelper::update( Part *part, const QByteArray &data, qint64 dataSize )
{
if (!part)
@@ -47,7 +55,7 @@
if ( storeExternal ) {
QString fileName = origFileName;
if ( fileName.isEmpty() )
- fileName = fileNameForId( part->pimItemId() );
+ fileName = fileNameForPart( part );
QString rev = QString::fromAscii("_r0");
if ( fileName.contains( QString::fromAscii("_r") ) ) {
int revIndex = fileName.indexOf(QString::fromAscii("_r"));
@@ -110,7 +118,7 @@
if ( storeInFile && result )
{
- QString fileName = PartHelper::fileNameForId( part->id() );
+ QString fileName = fileNameForPart( part );
fileName += QString::fromUtf8("_r0");
QFile file( fileName );
@@ -193,14 +201,6 @@
return translateData( part.data(), part.external() );
}
-QString PartHelper::fileNameForId( qint64 id )
-{
- Q_ASSERT( id >= 0 );
- const QString dataDir = XdgBaseDirs::saveDir( "data", QLatin1String( "akonadi/file_db_data" ) ) + QDir::separator();
- Q_ASSERT( dataDir != QDir::separator() );
- return dataDir + QString::number(id);
-}
-
bool Akonadi::PartHelper::truncate(Part& part)
{
if ( part.external() ) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/akonadi-1.6.0/server/src/storage/parthelper.h new/akonadi-1.6.2/server/src/storage/parthelper.h
--- old/akonadi-1.6.0/server/src/storage/parthelper.h 2011-07-10 14:19:34.000000000 +0200
+++ new/akonadi-1.6.2/server/src/storage/parthelper.h 2011-10-03 12:02:01.000000000 +0200
@@ -69,8 +69,6 @@
* This is more efficient than using update since it does not require the data to be loaded.
*/
bool truncate( Part &part );
-
- QString fileNameForId( qint64 id );
}
}
continue with "q"...
Remember to have fun...
--
To unsubscribe, e-mail: opensuse-commit+unsubscribe@opensuse.org
For additional commands, e-mail: opensuse-commit+help@opensuse.org