From 0ec6e9e3c6fe8216278ba0ce5fbdfcb8a95df980 Mon Sep 17 00:00:00 2001 From: Rex Dieter Date: Oct 16 2012 18:11:28 +0000 Subject: 1.8.1 --- diff --git a/.gitignore b/.gitignore index 4b4aa88..ab08a95 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ /akonadi-1.7.2.tar.bz2 /akonadi-1.8.0.tar.bz2 +/akonadi-1.8.1.tar.bz2 diff --git a/0001-Fix-losing-the-body-for-some-operations-when-the-res.patch b/0001-Fix-losing-the-body-for-some-operations-when-the-res.patch deleted file mode 100644 index 5849b94..0000000 --- a/0001-Fix-losing-the-body-for-some-operations-when-the-res.patch +++ /dev/null @@ -1,172 +0,0 @@ -From 4c011a8f5d6d9851a45997a9e63d8d3211d9e0d7 Mon Sep 17 00:00:00 2001 -From: Andras Mantia -Date: Sun, 30 Sep 2012 13:42:38 +0300 -Subject: [PATCH 1/2] Fix losing the body for some operations when the resouce - is offline (e.g copy/move items from an offline - resource). REVIEW: 106627 (cherry picked from commit - f40e5d6ffa0249b7bc8d88189822433a0aaeff91) - -Conflicts: - server/src/storage/itemretriever.cpp ---- - server/src/handler/colcopy.cpp | 4 +++- - server/src/handler/colmove.cpp | 4 +++- - server/src/handler/copy.cpp | 4 +++- - server/src/handler/modify.cpp | 4 +++- - server/src/handler/move.cpp | 4 +++- - server/src/storage/itemretriever.cpp | 18 ++++++++++++++---- - server/src/storage/itemretriever.h | 3 +++ - 7 files changed, 32 insertions(+), 9 deletions(-) - -diff --git a/server/src/handler/colcopy.cpp b/server/src/handler/colcopy.cpp -index 417df4c..8f90ad3 100644 ---- a/server/src/handler/colcopy.cpp -+++ b/server/src/handler/colcopy.cpp -@@ -94,7 +94,9 @@ bool ColCopy::parseStream() - ItemRetriever retriever( connection() ); - retriever.setCollection( source, true ); - retriever.setRetrieveFullPayload( true ); -- retriever.exec(); -+ if (!retriever.exec()) { -+ return failureResponse( retriever.lastError() ); -+ } - - DataStore *store = connection()->storageBackend(); - Transaction transaction( store ); -diff --git a/server/src/handler/colmove.cpp b/server/src/handler/colmove.cpp -index 65b8b2f..bca7375 100644 ---- a/server/src/handler/colmove.cpp -+++ b/server/src/handler/colmove.cpp -@@ -62,7 +62,9 @@ bool ColMove::parseStream() - ItemRetriever retriever( connection() ); - retriever.setCollection( source, true ); - retriever.setRetrieveFullPayload( true ); -- retriever.exec(); -+ if (!retriever.exec()) { -+ return failureResponse( retriever.lastError() ); -+ } - - DataStore *store = connection()->storageBackend(); - Transaction transaction( store ); -diff --git a/server/src/handler/copy.cpp b/server/src/handler/copy.cpp -index b67e4d3..fa28179 100644 ---- a/server/src/handler/copy.cpp -+++ b/server/src/handler/copy.cpp -@@ -73,7 +73,9 @@ bool Copy::parseStream() - ItemRetriever retriever( connection() ); - retriever.setItemSet( set ); - retriever.setRetrieveFullPayload( true ); -- retriever.exec(); -+ if (!retriever.exec()) { -+ return failureResponse( retriever.lastError() ); -+ } - - const QByteArray tmp = m_streamParser->readString(); - const Collection targetCollection = HandlerHelper::collectionFromIdOrName( tmp ); -diff --git a/server/src/handler/modify.cpp b/server/src/handler/modify.cpp -index 52a5b86..82d43e5 100644 ---- a/server/src/handler/modify.cpp -+++ b/server/src/handler/modify.cpp -@@ -70,7 +70,9 @@ bool Modify::parseStream() - ItemRetriever retriever( connection() ); - retriever.setCollection( collection, true ); - retriever.setRetrieveFullPayload( true ); -- retriever.exec(); -+ if (!retriever.exec()) { -+ throw HandlerException( retriever.lastError() ); -+ } - } - } - -diff --git a/server/src/handler/move.cpp b/server/src/handler/move.cpp -index 37fc8d6..754b53c 100644 ---- a/server/src/handler/move.cpp -+++ b/server/src/handler/move.cpp -@@ -50,7 +50,9 @@ bool Move::parseStream() - ItemRetriever retriever( connection() ); - retriever.setScope( mScope ); - retriever.setRetrieveFullPayload( true ); -- retriever.exec(); -+ if (!retriever.exec()) { -+ return failureResponse( retriever.lastError() ); -+ } - - DataStore *store = connection()->storageBackend(); - Transaction transaction( store ); -diff --git a/server/src/storage/itemretriever.cpp b/server/src/storage/itemretriever.cpp -index 9f17e66..e7d5c6d 100644 ---- a/server/src/storage/itemretriever.cpp -+++ b/server/src/storage/itemretriever.cpp -@@ -160,8 +160,10 @@ QSqlQuery ItemRetriever::buildQuery() const - - qb.addSortColumn( PimItem::idFullColumnName(), Query::Ascending ); - -- if ( !qb.exec() ) -- throw ItemRetrieverException( "Unable to retrieve items" ); -+ if ( !qb.exec() ) { -+ mLastError = "Unable to retrieve items"; -+ throw ItemRetrieverException( mLastError ); -+ } - - qb.query().next(); - -@@ -233,25 +235,33 @@ bool ItemRetriever::exec() - ItemRetrievalManager::instance()->requestItemDelivery( request ); - } catch ( const ItemRetrieverException &e ) { - akError() << e.type() << ": " << e.what(); -+ mLastError = e.what(); - return false; - } - } - - // retrieve items in child collections if requested -+ bool result = true; - if ( mRecursive && mCollection.isValid() ) { - Q_FOREACH ( const Collection &col, mCollection.children() ) { - ItemRetriever retriever( mConnection ); - retriever.setCollection( col, mRecursive ); - retriever.setRetrieveParts( mParts ); - retriever.setRetrieveFullPayload( mFullPayload ); -- retriever.exec(); -+ result = retriever.exec(); -+ if (!result) break; - } - } - -- return true; -+ return result; - } - - QString ItemRetriever::driverName() - { - return mConnection->storageBackend()->database().driverName(); - } -+ -+QByteArray ItemRetriever::lastError() const -+{ -+ return mLastError; -+} -diff --git a/server/src/storage/itemretriever.h b/server/src/storage/itemretriever.h -index 866d265..8158f60 100644 ---- a/server/src/storage/itemretriever.h -+++ b/server/src/storage/itemretriever.h -@@ -64,6 +64,8 @@ class ItemRetriever - - bool exec(); - -+ QByteArray lastError() const; -+ - private: - /** Convenience method which returns the database driver name */ - QString driverName(); -@@ -77,6 +79,7 @@ class ItemRetriever - QStringList mParts; - bool mFullPayload; - bool mRecursive; -+ mutable QByteArray mLastError; - }; - - } --- -1.7.12.1 - diff --git a/0002-Call-a-newer-version-of-requestItemDelivery-to-get-t.patch b/0002-Call-a-newer-version-of-requestItemDelivery-to-get-t.patch deleted file mode 100644 index b66e2ed..0000000 --- a/0002-Call-a-newer-version-of-requestItemDelivery-to-get-t.patch +++ /dev/null @@ -1,123 +0,0 @@ -From e7eea8d764c79ac4e79fb33f8f3401ffa0617d41 Mon Sep 17 00:00:00 2001 -From: Andras Mantia -Date: Sun, 30 Sep 2012 13:43:54 +0300 -Subject: [PATCH 2/2] Call a newer version of requestItemDelivery to get the - payload for an item, a version that returns the error - message, not just a bool failure/success value. In case - the resource doesn't implement the new method, the old - version is called. REVIEW: 106627 (cherry picked from - commit bb74c09e6c3f89270180918c6dad12585699b0dd) - ---- - interfaces/org.freedesktop.Akonadi.Resource.xml | 7 ++++++ - server/src/storage/itemretrievaljob.cpp | 30 ++++++++++++++++++++++++- - server/src/storage/itemretrievaljob.h | 5 ++++- - 3 files changed, 40 insertions(+), 2 deletions(-) - -diff --git a/interfaces/org.freedesktop.Akonadi.Resource.xml b/interfaces/org.freedesktop.Akonadi.Resource.xml -index a716a1f..528340a 100644 ---- a/interfaces/org.freedesktop.Akonadi.Resource.xml -+++ b/interfaces/org.freedesktop.Akonadi.Resource.xml -@@ -16,6 +16,13 @@ - - - -+ -+ -+ -+ -+ -+ -+ - - - -diff --git a/server/src/storage/itemretrievaljob.cpp b/server/src/storage/itemretrievaljob.cpp -index c6f1ac6..443d20f 100644 ---- a/server/src/storage/itemretrievaljob.cpp -+++ b/server/src/storage/itemretrievaljob.cpp -@@ -36,15 +36,17 @@ void ItemRetrievalJob::start(QDBusAbstractInterface* interface) - Q_ASSERT( m_request ); - akDebug() << "processing retrieval request for item" << m_request->id << " parts:" << m_request->parts << " of resource:" << m_request->resourceId; - -+ m_interface = interface; - // call the resource - if ( interface ) { - m_active = true; -+ m_oldMethodCalled = false; - QList arguments; - arguments << m_request->id - << QString::fromUtf8( m_request->remoteId ) - << QString::fromUtf8( m_request->mimeType ) - << m_request->parts; -- interface->callWithCallback( QLatin1String( "requestItemDelivery" ), arguments, this, SLOT(callFinished(bool)), SLOT(callFailed(QDBusError)) ); -+ interface->callWithCallback( QLatin1String( "requestItemDeliveryV2" ), arguments, this, SLOT(callFinished(QString)), SLOT(callFailed(QDBusError)) ); - } else { - Q_EMIT requestCompleted( m_request, QString::fromLatin1( "Unable to contact resource" ) ); - deleteLater(); -@@ -69,8 +71,34 @@ void ItemRetrievalJob::callFinished(bool returnValue) - deleteLater(); - } - -+void ItemRetrievalJob::callFinished(const QString& errorMsg) -+{ -+ if ( m_active ) { -+ m_active = false; -+ if ( !errorMsg.isEmpty() ) -+ Q_EMIT requestCompleted( m_request, QString::fromLatin1( "Unable to retrieve item from resource: %1" ).arg( errorMsg ) ); -+ else -+ Q_EMIT requestCompleted( m_request, QString() ); -+ } -+ deleteLater(); -+} -+ -+ - void ItemRetrievalJob::callFailed(const QDBusError& error) - { -+ if ( error.type() == QDBusError::UnknownMethod && !m_oldMethodCalled ) { -+ akDebug() << "processing retrieval request (old method) for item" << m_request->id << " parts:" << m_request->parts << " of resource:" << m_request->resourceId; -+ Q_ASSERT(m_interface); -+ //try the old version -+ QList arguments; -+ arguments << m_request->id -+ << QString::fromUtf8( m_request->remoteId ) -+ << QString::fromUtf8( m_request->mimeType ) -+ << m_request->parts; -+ m_oldMethodCalled = true; -+ m_interface->callWithCallback( QLatin1String( "requestItemDelivery" ), arguments, this, SLOT(callFinished(bool)), SLOT(callFailed(QDBusError)) ); -+ return; -+ } - if ( m_active ) { - m_active = false; - Q_EMIT requestCompleted( m_request, QString::fromLatin1( "Unable to retrieve item from resource: %1" ).arg( error.message() ) ); -diff --git a/server/src/storage/itemretrievaljob.h b/server/src/storage/itemretrievaljob.h -index baafbf0..c7f1e5e 100644 ---- a/server/src/storage/itemretrievaljob.h -+++ b/server/src/storage/itemretrievaljob.h -@@ -31,7 +31,7 @@ class ItemRetrievalJob : public QObject - { - Q_OBJECT - public: -- ItemRetrievalJob( ItemRetrievalRequest *req, QObject *parent ) : QObject( parent ), m_request( req ), m_active( false ) {} -+ ItemRetrievalJob( ItemRetrievalRequest *req, QObject *parent ) : QObject( parent ), m_request( req ), m_active( false ), m_interface( 0 ), m_oldMethodCalled( false ) {} - ~ItemRetrievalJob(); - void start( QDBusAbstractInterface* interface ); - void kill(); -@@ -41,11 +41,14 @@ class ItemRetrievalJob : public QObject - - private Q_SLOTS: - void callFinished( bool returnValue ); -+ void callFinished( const QString& errorMsg ); - void callFailed( const QDBusError &error ); - - private: - ItemRetrievalRequest *m_request; - bool m_active; -+ QDBusAbstractInterface *m_interface; -+ bool m_oldMethodCalled; - }; - - #endif --- -1.7.12.1 - diff --git a/akonadi.spec b/akonadi.spec index 1a096e9..fabf8b8 100644 --- a/akonadi.spec +++ b/akonadi.spec @@ -4,8 +4,8 @@ Summary: PIM Storage Service Name: akonadi -Version: 1.8.0 -Release: 3%{?dist} +Version: 1.8.1 +Release: 1%{?dist} License: LGPLv2+ URL: http://community.kde.org/KDE_PIM/Akonadi @@ -22,8 +22,6 @@ Source0: http://download.kde.org/stable/akonadi/src/akonadi-%{version}.tar.bz2 Source10: akonadiserverrc.mysql ## upstream patches -Patch101: 0001-Fix-losing-the-body-for-some-operations-when-the-res.patch -Patch102: 0002-Call-a-newer-version-of-requestItemDelivery-to-get-t.patch %define mysql_conf_timestamp 20110629 @@ -78,9 +76,6 @@ See also: %{_sysconfdir}/akonadi/mysql-global.conf %prep %setup -q -n akonadi-%{version} -%patch101 -p1 -b .0001 -%patch102 -p1 -b .0002 - %build mkdir -p %{_target_platform} @@ -196,6 +191,9 @@ fi %changelog +* Tue Oct 16 2012 Rex Dieter 1.8.1-1 +- 1.8.1 + * Sat Oct 13 2012 Rex Dieter 1.8.0-3 - include a couple upstream patches diff --git a/sources b/sources index 95cc700..d402ceb 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -81156d883b40241cfc0ddb885f55bcfe akonadi-1.8.0.tar.bz2 +39411abc7bec8a485362ea7460e7e3d7 akonadi-1.8.1.tar.bz2