Dont lower the mtime of a folder when propagating changes

This commit is contained in:
Robin Appelman 2015-02-13 14:30:05 +01:00
parent 1393563965
commit 134243d3e5
2 changed files with 27 additions and 4 deletions

View 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)));
}
}
}

View 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']);
}
}