diff options
author | webchick <webchick@24967.no-reply.drupal.org> | 2012-04-26 13:25:47 -0700 |
---|---|---|
committer | webchick <webchick@24967.no-reply.drupal.org> | 2012-04-26 13:25:47 -0700 |
commit | d690e71b08df606e00fe9eb0e799d5aba372e5d1 (patch) | |
tree | 9b46ca7b6333c3409e2b4beb50b2ebc37a7df4b5 /modules/update | |
parent | 768de00260c2380113eefdb238f05ae08bf7295c (diff) | |
download | brdo-d690e71b08df606e00fe9eb0e799d5aba372e5d1.tar.gz brdo-d690e71b08df606e00fe9eb0e799d5aba372e5d1.tar.bz2 |
Issue #1492188 by Berdir, catch: Fixed Update module creates duplicate queue items.
Diffstat (limited to 'modules/update')
-rw-r--r-- | modules/update/update.module | 9 | ||||
-rw-r--r-- | modules/update/update.test | 27 |
2 files changed, 34 insertions, 2 deletions
diff --git a/modules/update/update.module b/modules/update/update.module index 7b5222bb7..bf8b06848 100644 --- a/modules/update/update.module +++ b/modules/update/update.module @@ -809,14 +809,19 @@ function _update_get_cache_multiple($cid_prefix) { * * @param $cid * Optional cache ID of the record to clear from the private update module - * cache. If empty, all records will be cleared from the table. + * cache. If empty, all records will be cleared from the table except + * fetch tasks. * @param $wildcard * If $wildcard is TRUE, cache IDs starting with $cid are deleted in * addition to the exact cache ID specified by $cid. */ function _update_cache_clear($cid = NULL, $wildcard = FALSE) { if (empty($cid)) { - db_truncate('cache_update')->execute(); + db_delete('cache_update') + // Clear everything except fetch task information because these are used + // to ensure that the fetch task queue items are not added multiple times. + ->condition('cid', 'fetch_task::%', 'NOT LIKE') + ->execute(); } else { $query = db_delete('cache_update'); diff --git a/modules/update/update.test b/modules/update/update.test index c0f471a0a..e8051a27d 100644 --- a/modules/update/update.test +++ b/modules/update/update.test @@ -225,6 +225,33 @@ class UpdateCoreTestCase extends UpdateTestHelper { $this->assertUniqueText(t('Failed to get available update data for one project.')); } + /** + * Tests that exactly one fetch task per project is created and not more. + */ + function testFetchTasks() { + $projecta = array( + 'name' => 'aaa_update_test', + ); + $projectb = array( + 'name' => 'bbb_update_test', + ); + $queue = DrupalQueue::get('update_fetch_tasks'); + $this->assertEqual($queue->numberOfItems(), 0, 'Queue is empty'); + update_create_fetch_task($projecta); + $this->assertEqual($queue->numberOfItems(), 1, 'Queue contains one item'); + update_create_fetch_task($projectb); + $this->assertEqual($queue->numberOfItems(), 2, 'Queue contains two items'); + // Try to add project a again. + update_create_fetch_task($projecta); + $this->assertEqual($queue->numberOfItems(), 2, 'Queue still contains two items'); + + // Clear cache and try again. + _update_cache_clear(); + drupal_static_reset('_update_create_fetch_task'); + update_create_fetch_task($projecta); + $this->assertEqual($queue->numberOfItems(), 2, 'Queue contains two items'); + } + protected function setSystemInfo7_0() { $setting = array( '#all' => array( |