]> source.dussan.org Git - nextcloud-server.git/commitdiff
Dont lower the mtime of a folder when propagating changes
authorRobin Appelman <icewind@owncloud.com>
Fri, 13 Feb 2015 13:30:05 +0000 (14:30 +0100)
committerRobin Appelman <icewind@owncloud.com>
Fri, 13 Feb 2015 13:30:05 +0000 (14:30 +0100)
lib/private/files/cache/changepropagator.php
tests/lib/files/cache/changepropagator.php

index 2967c8f62597c8dc046504e026b8e62915f14fb0..36fc6e80144c04f43cfc2fe12856a50c349f9a89 100644 (file)
@@ -59,8 +59,8 @@ class ChangePropagator {
                        list($storage, $internalPath) = $this->view->resolvePath($parent);
                        if ($storage) {
                                $cache = $storage->getCache();
-                               $id = $cache->getId($internalPath);
-                               $cache->update($id, array('mtime' => $time, 'etag' => $storage->getETag($internalPath)));
+                               $entry = $cache->get($internalPath);
+                               $cache->update($entry['fileid'], array('mtime' => max($time, $entry['mtime']), 'etag' => $storage->getETag($internalPath)));
                        }
                }
        }
index 89bd9dfe80a7fd69dd20ee52401891134967d6fd..1b56da5e97c27a2f600058be0a0aa995bd5ac3c7 100644 (file)
@@ -23,12 +23,17 @@ class ChangePropagator extends \Test\TestCase {
         */
        private $view;
 
+       /**
+        * @var \OC\Files\Storage\Storage
+        */
+       private $storage;
+
        protected function setUp() {
                parent::setUp();
 
-               $storage = new Temporary(array());
+               $this->storage = new Temporary(array());
                $root = $this->getUniqueID('/');
-               Filesystem::mount($storage, array(), $root);
+               Filesystem::mount($this->storage, array(), $root);
                $this->view = new View($root);
                $this->propagator = new \OC\Files\Cache\ChangePropagator($this->view);
        }
@@ -71,4 +76,22 @@ class ChangePropagator extends \Test\TestCase {
                $this->assertNotSame($oldInfo2->getEtag(), $newInfo2->getEtag());
                $this->assertNotSame($oldInfo3->getEtag(), $newInfo3->getEtag());
        }
+
+       public function testDontLowerMtime() {
+               $time = time();
+               $this->view->mkdir('/foo');
+               $this->view->mkdir('/foo/bar');
+
+               $cache = $this->storage->getCache();
+               $cache->put('', ['mtime' => $time - 50]);
+               $cache->put('foo', ['mtime' => $time - 150]);
+               $cache->put('foo/bar', ['mtime' => $time - 250]);
+
+               $this->propagator->addChange('/foo/bar/foo');
+               $this->propagator->propagateChanges($time - 100);
+
+               $this->assertEquals(50, $time - $cache->get('')['mtime']);
+               $this->assertEquals(100, $time - $cache->get('foo')['mtime']);
+               $this->assertEquals(100, $time - $cache->get('foo/bar')['mtime']);
+       }
 }