]> source.dussan.org Git - nextcloud-server.git/commitdiff
Cache: better rename hook for cache updater
authorRobin Appelman <icewind@owncloud.com>
Fri, 8 Mar 2013 18:08:07 +0000 (19:08 +0100)
committerRobin Appelman <icewind@owncloud.com>
Fri, 8 Mar 2013 18:08:07 +0000 (19:08 +0100)
lib/files/cache/updater.php
tests/lib/files/cache/updater.php

index d04541c219fd87157076e8bd4333b329e699b499..e760ba71bc6625e521fca200ed5a071d5b4f173f 100644 (file)
@@ -53,12 +53,36 @@ class Updater {
                }
        }
 
+       static public function renameUpdate($from, $to) {
+               /**
+                * @var \OC\Files\Storage\Storage $storageFrom
+                * @var \OC\Files\Storage\Storage $storageTo
+                * @var string $internalFrom
+                * @var string $internalTo
+                */
+               list($storageFrom, $internalFrom) = self::resolvePath($from);
+               list($storageTo, $internalTo) = self::resolvePath($to);
+               if ($storageFrom && $storageTo) {
+                       if ($storageFrom === $storageTo) {
+                               $cache = $storageFrom->getCache($internalFrom);
+                               $cache->move($internalFrom, $internalTo);
+                               $cache->correctFolderSize($internalFrom);
+                               $cache->correctFolderSize($internalTo);
+                               self::correctFolder($from, time());
+                               self::correctFolder($to, time());
+                       } else {
+                               self::deleteUpdate($from);
+                               self::writeUpdate($to);
+                       }
+               }
+       }
+
        /**
-       * Update the mtime and ETag of all parent folders
-       *
-       * @param string $path
-       * @param string $time
-       */
+        * Update the mtime and ETag of all parent folders
+        *
+        * @param string $path
+        * @param string $time
+        */
        static public function correctFolder($path, $time) {
                if ($path !== '' && $path !== '/') {
                        $parent = dirname($path);
@@ -66,9 +90,9 @@ class Updater {
                                $parent = '';
                        }
                        /**
-                       * @var \OC\Files\Storage\Storage $storage
-                       * @var string $internalPath
-                       */
+                        * @var \OC\Files\Storage\Storage $storage
+                        * @var string $internalPath
+                        */
                        list($storage, $internalPath) = self::resolvePath($parent);
                        if ($storage) {
                                $cache = $storage->getCache();
@@ -92,8 +116,7 @@ class Updater {
         * @param array $params
         */
        static public function renameHook($params) {
-               self::deleteUpdate($params['oldpath']);
-               self::writeUpdate($params['newpath']);
+               self::renameUpdate($params['oldpath'], $params['newpath']);
        }
 
        /**
index 7a79f45a20344e2038120442a310e1e8299cb132..aaf932c97feb88a086d4545e7c7b4bd44d348c70 100644 (file)
@@ -54,6 +54,8 @@ class Updater extends \PHPUnit_Framework_TestCase {
                Filesystem::clearMounts();
                Filesystem::mount($this->storage, array(), '/' . self::$user . '/files');
 
+               \OC_Hook::clear('OC_Filesystem');
+
                \OC_Hook::connect('OC_Filesystem', 'post_write', '\OC\Files\Cache\Updater', 'writeHook');
                \OC_Hook::connect('OC_Filesystem', 'post_delete', '\OC\Files\Cache\Updater', 'deleteHook');
                \OC_Hook::connect('OC_Filesystem', 'post_rename', '\OC\Files\Cache\Updater', 'renameHook');
@@ -137,11 +139,10 @@ class Updater extends \PHPUnit_Framework_TestCase {
                $this->assertFalse($this->cache->inCache('foo.txt'));
                $this->assertTrue($this->cache->inCache('bar.txt'));
                $cachedData = $this->cache->get('bar.txt');
-               $this->assertNotEquals($fooCachedData['etag'], $cachedData['etag']);
+               $this->assertEquals($fooCachedData['fileid'], $cachedData['fileid']);
                $mtime = $cachedData['mtime'];
                $cachedData = $this->cache->get('');
                $this->assertEquals(3 * $textSize + $imageSize, $cachedData['size']);
                $this->assertNotEquals($rootCachedData['etag'], $cachedData['etag']);
-               $this->assertEquals($mtime, $cachedData['mtime']);
        }
 }