cvs diff: Diffing modules/update
Index: modules/update/update.compare.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/update/update.compare.inc,v
retrieving revision 1.40
diff -u -p -r1.40 update.compare.inc
--- modules/update/update.compare.inc	30 Jan 2010 07:59:26 -0000	1.40
+++ modules/update/update.compare.inc	3 Oct 2010 02:24:56 -0000
@@ -738,10 +738,20 @@ function update_calculate_project_update
 function update_project_cache($cid) {
   $projects = array();
 
-  // On certain paths, we should clear the cache and recompute the projects or
+  // On certain paths, we should clear the cache and recompute the projects for
   // update status of the site to avoid presenting stale information.
   $q = $_GET['q'];
-  $paths = array('admin/modules', 'admin/appearance', 'admin/reports', 'admin/reports/updates', 'admin/reports/status', 'admin/reports/updates/check');
+  $paths = array(
+    'admin/modules',
+    'admin/modules/update',
+    'admin/appearance',
+    'admin/appearance/update',
+    'admin/reports',
+    'admin/reports/updates',
+    'admin/reports/updates/update',
+    'admin/reports/status',
+    'admin/reports/updates/check',
+  );
   if (in_array($q, $paths)) {
     _update_cache_clear($cid);
   }
Index: modules/update/update.test
===================================================================
RCS file: /cvs/drupal/drupal/modules/update/update.test,v
retrieving revision 1.16
diff -u -p -r1.16 update.test
--- modules/update/update.test	5 Aug 2010 23:53:39 -0000	1.16
+++ modules/update/update.test	3 Oct 2010 02:24:56 -0000
@@ -491,6 +491,67 @@ class UpdateTestContribCase extends Upda
     $this->assertRaw(l(t('CCC Update test'), 'http://example.com/project/ccc_update_test'), t('Link to bbb_update_test project appears.'));
   }
 
+  /**
+   * Check that hook_update_status_alter() works to change a status.
+   *
+   * We provide the same external data as if aaa_update_test 7.x-1.0 were
+   * installed and that was the latest release. Then we use
+   * hook_update_status_alter() to try to mark this as missing a security
+   * update, then assert if we see the appropriate warnings on the right
+   * pages.
+   */
+  function testHookUpdateStatusAlter() {
+    variable_set('allow_authorize_operations', TRUE);
+    $update_admin_user = $this->drupalCreateUser(array('administer site configuration', 'administer software updates'));
+    $this->drupalLogin($update_admin_user);
+
+    $system_info = array(
+      '#all' => array(
+        'version' => '7.0',
+      ),
+      'aaa_update_test' => array(
+        'project' => 'aaa_update_test',
+        'version' => '7.x-1.0',
+        'hidden' => FALSE,
+      ),
+    );
+    variable_set('update_test_system_info', $system_info);
+    $update_status = array(
+      'aaa_update_test' => array(
+        'status' => UPDATE_NOT_SECURE,
+      ),
+    );
+    variable_set('update_test_update_status', $update_status);
+    $this->refreshUpdateStatus(
+      array(
+        'drupal' => '0',
+        'aaa_update_test' => '1_0',
+      )
+    );
+    $this->drupalGet('admin/reports/updates');
+    $this->assertRaw('<h3>' . t('Modules') . '</h3>');
+    $this->assertText(t('Security update required!'));
+    $this->assertRaw(l(t('AAA Update test'), 'http://example.com/project/aaa_update_test'), t('Link to aaa_update_test project appears.'));
+
+    // Visit the reports page again without the altering and make sure the
+    // status is back to normal.
+    variable_set('update_test_update_status', array());
+    $this->drupalGet('admin/reports/updates');
+    $this->assertRaw('<h3>' . t('Modules') . '</h3>');
+    $this->assertNoText(t('Security update required!'));
+    $this->assertRaw(l(t('AAA Update test'), 'http://example.com/project/aaa_update_test'), t('Link to aaa_update_test project appears.'));
+
+    // Turn the altering back on and visit the Update manager UI.
+    variable_set('update_test_update_status', $update_status);
+    $this->drupalGet('admin/modules/update');
+    $this->assertText(t('Security update'));
+
+    // Turn the altering back off and visit the Update manager UI.
+    variable_set('update_test_update_status', array());
+    $this->drupalGet('admin/modules/update');
+    $this->assertNoText(t('Security update'));
+  }
+
 }
 
 class UpdateTestUploadCase extends UpdateTestHelper {
cvs diff: Diffing modules/update/tests
Index: modules/update/tests/update_test.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/update/tests/update_test.module,v
retrieving revision 1.4
diff -u -p -r1.4 update_test.module
--- modules/update/tests/update_test.module	4 Dec 2009 16:49:47 -0000	1.4
+++ modules/update/tests/update_test.module	3 Oct 2010 02:24:56 -0000
@@ -40,6 +40,32 @@ function update_test_system_info_alter(&
 }
 
 /**
+ * Implements hook_update_status_alter().
+ *
+ * This checks the 'update_test_update_status' variable and sees if we need to
+ * alter the update status for the given project based on the setting. The
+ * setting is expected to be a nested associative array. If the key '#all' is
+ * defined, its subarray will include .info keys and values for all modules
+ * and themes on the system. Otherwise, the settings array is keyed by the
+ * module or theme short name and the subarrays contain settings just for that
+ * module or theme.
+ */
+function update_test_update_status_alter(&$projects) {
+  $setting = variable_get('update_test_update_status', array());
+  if (!empty($setting)) {
+    foreach ($projects as $project_name => &$project) {
+      foreach (array('#all', $project_name) as $id) {
+        if (!empty($setting[$id])) {
+          foreach ($setting[$id] as $key => $value) {
+            $project[$key] = $value;
+          }
+        }
+      }
+    }
+  }
+}
+
+/**
  * Page callback, prints mock XML for the update module.
  *
  * The specific XML file to print depends on two things: the project we're
