summaryrefslogtreecommitdiff
path: root/modules/update
diff options
context:
space:
mode:
authorwebchick <webchick@24967.no-reply.drupal.org>2012-04-26 13:25:47 -0700
committerwebchick <webchick@24967.no-reply.drupal.org>2012-04-26 13:25:47 -0700
commitd690e71b08df606e00fe9eb0e799d5aba372e5d1 (patch)
tree9b46ca7b6333c3409e2b4beb50b2ebc37a7df4b5 /modules/update
parent768de00260c2380113eefdb238f05ae08bf7295c (diff)
downloadbrdo-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.module9
-rw-r--r--modules/update/update.test27
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(