MDL-47729 repository_filesystem: smarter sync of references
authorMarina Glancy <marina@moodle.com>
Fri, 13 Mar 2015 03:01:02 +0000 (11:01 +0800)
committerMarina Glancy <marina@moodle.com>
Fri, 13 Mar 2015 03:01:02 +0000 (11:01 +0800)
It was noticed that if file content was once imported the following
synchronisations do not discover the changes

repository/filesystem/lib.php

index b40e757..578f36f 100644 (file)
@@ -349,7 +349,7 @@ class repository_filesystem extends repository {
         static $issyncing = false;
         if ($issyncing) {
             // Avoid infinite recursion when calling $file->get_filesize() and get_contenthash().
-            return;
+            return false;
         }
         $filepath = $this->get_rootpath() . ltrim($file->get_reference(), '/');
         if ($this->is_in_repository($file->get_reference()) && file_exists($filepath) && is_readable($filepath)) {
@@ -366,7 +366,12 @@ class repository_filesystem extends repository {
                 }
             } else {
                 // Update only file size so file will NOT be copied into moodle filepool.
-                $contenthash = null;
+                $emptyfile = $contenthash = sha1('');
+                $currentcontenthash = $file->get_contenthash();
+                if ($currentcontenthash !== $emptyfile && $currentcontenthash === sha1_file($filepath)) {
+                    // File content was synchronised and has not changed since then, leave it.
+                    $contenthash = null;
+                }
                 $filesize = filesize($filepath);
             }
             $issyncing = false;