MDL-42882 upgrade: Improvements to upgrade code
authorDan Poltawski <dan@moodle.com>
Wed, 5 Feb 2014 06:38:39 +0000 (14:38 +0800)
committerDan Poltawski <dan@moodle.com>
Wed, 5 Feb 2014 06:38:39 +0000 (14:38 +0800)
Suggested by Petr:
* Don't rely on single user for upgrade
* Make the pathnamehash generation a bit clearer (and add
  a test to verify its correctly formed).

lib/tests/upgradelib_test.php
lib/upgradelib.php

index ddad643..e6a7a3c 100644 (file)
@@ -178,6 +178,9 @@ class core_upgradelib_testcase extends advanced_testcase {
         $folderrecord = $selectargs;
         $folderrecord['filepath'] = '/';
         $folderrecord['filename'] = '.';
+
+        // Get previous folder record.
+        $oldrecord = $DB->get_record('files', $folderrecord);
         $DB->delete_records('files', $folderrecord);
 
         // Verify the folder record has been removed.
@@ -193,6 +196,8 @@ class core_upgradelib_testcase extends advanced_testcase {
         $newareafilecount = $DB->count_records('files', $selectargs);
         $this->assertSame($newareafilecount, $areafilecount);
 
-        $this->assertTrue($DB->record_exists('files', $folderrecord));
+        $newrecord = $DB->get_record('files', $folderrecord, '*', MUST_EXIST);
+        // Verify the hash is correctly created.
+        $this->assertSame($oldrecord->pathnamehash, $newrecord->pathnamehash);
     }
 }
index 40483ad..2289dff 100644 (file)
@@ -2107,13 +2107,13 @@ function upgrade_fix_missing_root_folders() {
     $rs = $DB->get_recordset_sql($sql);
     $defaults = array('filepath' => '/',
         'filename' => '.',
-        'userid' => $USER->id,
+        'userid' => 0, // Don't rely on any particular user for these system records.
         'filesize' => 0,
         'timecreated' => time(),
         'timemodified' => time(),
         'contenthash' => sha1(''));
     foreach ($rs as $r) {
-        $pathhash = sha1("/$r->contextid/$r->component/$r->filearea/$r->itemid".'/.');
+        $pathhash = sha1("/$r->contextid/$r->component/$r->filearea/$r->itemid/.");
         $DB->insert_record('files', (array)$r + $defaults +
             array('pathnamehash' => $pathhash));
     }