[SCM] Akonadi packaging branch, master, updated. debian/1.10.3-1-11-g44b8950

Maximiliano Curia maxy at moszumanska.debian.org
Fri Dec 6 20:12:56 UTC 2013


Gitweb-URL: http://git.debian.org/?p=pkg-kde/kde-req/akonadi.git;a=commitdiff;h=7495335

The following commit has been merged in the master branch:
commit 7495335c9de0056fe55953395e9805b68ba788b6
Author: Maximiliano Curia <maxy at debian.org>
Date:   Fri Dec 6 18:25:55 2013 +0100

    New upstream patch: dont_do_redundant_flag_changes.diff
---
 debian/changelog                                   |   1 +
 debian/patches/dont_do_redundant_flag_changes.diff | 110 +++++++++++++++++++++
 debian/patches/series                              |   1 +
 3 files changed, 112 insertions(+)

diff --git a/debian/changelog b/debian/changelog
index fa5ca4a..4b098b5 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -5,6 +5,7 @@ akonadi (1.11.0-1) UNRELEASED; urgency=low
   * Update subst var for akonadi-backend-mysql.
   * Add libxml2-utils to the build deps, to be used in the tests.
   * Bump Standards-Version to 3.9.5, no changes needed.
+  * New upstream patch: dont_do_redundant_flag_changes.diff
 
  -- Maximiliano Curia <maxy at debian.org>  Fri, 06 Dec 2013 16:24:12 +0100
 
diff --git a/debian/patches/dont_do_redundant_flag_changes.diff b/debian/patches/dont_do_redundant_flag_changes.diff
new file mode 100644
index 0000000..bd55420
--- /dev/null
+++ b/debian/patches/dont_do_redundant_flag_changes.diff
@@ -0,0 +1,110 @@
+commit faabb920d8efe5c35bba070396b8df608c5a910a
+Author: Tomáš Trnka <tomastrnka at gmx.com>
+Date:   Sun Dec 1 18:39:12 2013 +0100
+
+    Don't do redundant flag changes in setItemsFlags
+    
+    Instead of removing all flags and then adding the requested ones
+    back, figure out which flags are actually getting added or removed
+    and only apply those changes.
+    
+    Everything is still carried out in up to two DB queries.
+    
+    Additionally, don't send out the change notification if nothing
+    has actually changed.
+    
+    BUG:328286
+    FIXED-IN:1.11.1
+    REVIEW:114241
+
+diff --git a/server/src/storage/datastore.cpp b/server/src/storage/datastore.cpp
+index 2fb5f80..efc0d57 100644
+--- a/server/src/storage/datastore.cpp
++++ b/server/src/storage/datastore.cpp
+@@ -182,57 +182,57 @@ DataStore * Akonadi::DataStore::self()
+ 
+ bool DataStore::setItemsFlags( const PimItem::List &items, const QVector<Flag> &flags )
+ {
+-  // first delete all old flags of this pim item
+   QSet<QByteArray> removedFlags;
+   QSet<QByteArray> addedFlags;
+-  QVariantList ids;
+   QVariantList insIds;
+   QVariantList insFlags;
++  Query::Condition delConds( Query::Or );
+ 
+   Q_FOREACH ( const PimItem &item, items ) {
+     Q_FOREACH ( const Flag &flag, item.flags() ) {
+-      if ( !removedFlags.contains( flag.name().toLatin1() ) ) {
++      if ( !flags.contains( flag ) ) {
+         removedFlags << flag.name().toLatin1();
++        Query::Condition cond;
++        cond.addValueCondition( PimItemFlagRelation::leftFullColumnName(), Query::Equals, item.id() );
++        cond.addValueCondition( PimItemFlagRelation::rightFullColumnName(), Query::Equals, flag.id() );
++        delConds.addCondition(cond);
+       }
+     }
+ 
+-    // create a bind values for the insert query - every item repeats exactly
+-    // flags.count()-times
+-    for ( int i = 0; i < flags.count(); ++i ) {
+-      insIds << item.id();
++    Q_FOREACH ( const Flag &flag, flags ) {
++      if ( !item.flags().contains( flag ) ) {
++        addedFlags << flag.name().toLatin1();
++        insIds << item.id();
++        insFlags << flag.id();
++      }
+     }
+-
+-    ids << item.id();
+   }
+ 
+-  // Clear all flags of all given items at once
+-  QueryBuilder qb( PimItemFlagRelation::tableName(), QueryBuilder::Delete );
+-  Query::Condition cond;
+-  cond.addValueCondition( PimItemFlagRelation::leftFullColumnName(), Query::In, ids );
+-  qb.addCondition( cond );
+-  if ( !qb.exec() ) {
+-    return false;
++  if ( !removedFlags.empty() ) {
++    QueryBuilder qb( PimItemFlagRelation::tableName(), QueryBuilder::Delete );
++    qb.addCondition( delConds );
++    if ( !qb.exec() ) {
++      return false;
++    }
+   }
+ 
+-  // create bind values for the insert quest - every flags repeats exactly
+-  // items.count()-times
+-  Q_FOREACH ( const Flag &flag, flags ) {
+-    for ( int i = 0; i < items.count(); ++i ) {
+-      insFlags << flag.id();
++  if ( !addedFlags.empty() ) {
++    QueryBuilder qb2( PimItemFlagRelation::tableName(), QueryBuilder::Insert );
++    qb2.setColumnValue( PimItemFlagRelation::leftColumn(), insIds );
++    qb2.setColumnValue( PimItemFlagRelation::rightColumn(), insFlags );
++    qb2.setIdentificationColumn( QString() );
++    if ( !qb2.exec() ) {
++      return false;
+     }
+-
+-    addedFlags << flag.name().toLatin1();
+   }
+ 
+-  QueryBuilder qb2( PimItemFlagRelation::tableName(), QueryBuilder::Insert );
+-  qb2.setColumnValue( PimItemFlagRelation::leftColumn(), insIds );
+-  qb2.setColumnValue( PimItemFlagRelation::rightColumn(), insFlags );
+-  qb2.setIdentificationColumn( QString() );
+-  if ( !qb2.exec() ) {
+-    return false;
++  if ( addedFlags.empty() && removedFlags.empty() ) {
++    // no changes done, notification not needed
++    return true;
+   }
+ 
+   mNotificationCollector->itemsFlagsChanged( items, addedFlags, removedFlags );
++
+   return true;
+ }
+ 
diff --git a/debian/patches/series b/debian/patches/series
index 3190362..ba9f3e3 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -1 +1,2 @@
 # disable_dbus_requiring_tests.diff
+dont_do_redundant_flag_changes.diff

-- 
Akonadi packaging



More information about the pkg-kde-commits mailing list