]> source.dussan.org Git - nextcloud-server.git/commitdiff
Also propagate etag changes when the watcher finds a changed file
authorRobin Appelman <icewind@owncloud.com>
Tue, 14 Oct 2014 15:15:46 +0000 (17:15 +0200)
committerRobin Appelman <icewind@owncloud.com>
Fri, 7 Nov 2014 11:56:09 +0000 (12:56 +0100)
lib/private/files/cache/updater.php
lib/private/files/view.php
tests/lib/files/view.php

index c303ff24b1f76c668fb81dd47657bc137cdc48e3..31a4a7c21e7ceaf4291ff0544d755a48f0ad40c2 100644 (file)
@@ -30,6 +30,11 @@ class Updater {
                $this->propagator = new ChangePropagator($view);
        }
 
+       public function propagate($path, $time = null) {
+               $this->propagator->addChange($path);
+               $this->propagator->propagateChanges($time);
+       }
+
        /**
         * Update the cache for $path
         *
index 5f5f29ded4f6d60c11d1458f0011a5c119d63ded..e15a3063e94a0e74d776b91a04192896a9f519cd 100644 (file)
@@ -903,6 +903,7 @@ class View {
                                $scanner->scan($internalPath, Cache\Scanner::SCAN_SHALLOW);
                                $data = $cache->get($internalPath);
                        } else if ($watcher->checkUpdate($internalPath, $data)) {
+                               $this->updater->propagate($path);
                                $data = $cache->get($internalPath);
                        }
 
@@ -974,6 +975,7 @@ class View {
                                $scanner->scan($internalPath, Cache\Scanner::SCAN_SHALLOW);
                                $data = $cache->get($internalPath);
                        } else if ($watcher->checkUpdate($internalPath, $data)) {
+                               $this->updater->propagate($path);
                                $data = $cache->get($internalPath);
                        }
 
index 5f030f29fa7520f1a0c080e7e32da243c89a05f5..086ac873bfba600cc362c741530e6a7fc55e39dd 100644 (file)
@@ -8,6 +8,7 @@
 namespace Test\Files;
 
 use OC\Files\Cache\Watcher;
+use OC\Files\Storage\Temporary;
 
 class TemporaryNoTouch extends \OC\Files\Storage\Temporary {
        public function touch($path, $mtime = null) {
@@ -652,6 +653,36 @@ class View extends \PHPUnit_Framework_TestCase {
                $this->assertSame($info['etag'], $info2['etag']);
        }
 
+       public function testWatcherEtagCrossStorage() {
+               $storage1 = new Temporary(array());
+               $storage2 = new Temporary(array());
+               $scanner1 = $storage1->getScanner();
+               $scanner2 = $storage2->getScanner();
+               $storage1->mkdir('sub');
+               \OC\Files\Filesystem::mount($storage1, array(), '/test/');
+               \OC\Files\Filesystem::mount($storage2, array(), '/test/sub/storage');
+
+               $past = time() - 100;
+               $storage2->file_put_contents('test.txt', 'foobar');
+               $scanner1->scan('');
+               $scanner2->scan('');
+               $view = new \OC\Files\View('');
+
+               $storage2->getWatcher('')->setPolicy(Watcher::CHECK_ALWAYS);
+
+               $oldFileInfo = $view->getFileInfo('/test/sub/storage/test.txt');
+               $oldFolderInfo = $view->getFileInfo('/test');
+
+               $storage2->getCache()->update($oldFileInfo->getId(), array(
+                       'storage_mtime' => $past
+               ));
+
+               $view->getFileInfo('/test/sub/storage/test.txt');
+               $newFolderInfo = $view->getFileInfo('/test');
+
+               $this->assertNotEquals($newFolderInfo->getEtag(), $oldFolderInfo->getEtag());
+       }
+
        /**
         * @dataProvider absolutePathProvider
         */