From 134243d3e5a78b51f20ac0816d462c1de8e121c8 Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Fri, 13 Feb 2015 14:30:05 +0100 Subject: [PATCH] Dont lower the mtime of a folder when propagating changes --- lib/private/files/cache/changepropagator.php | 4 +-- tests/lib/files/cache/changepropagator.php | 27 ++++++++++++++++++-- 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/lib/private/files/cache/changepropagator.php b/lib/private/files/cache/changepropagator.php index 2967c8f625..36fc6e8014 100644 --- a/lib/private/files/cache/changepropagator.php +++ b/lib/private/files/cache/changepropagator.php @@ -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))); } } } diff --git a/tests/lib/files/cache/changepropagator.php b/tests/lib/files/cache/changepropagator.php index 89bd9dfe80..1b56da5e97 100644 --- a/tests/lib/files/cache/changepropagator.php +++ b/tests/lib/files/cache/changepropagator.php @@ -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']); + } }