From: Thomas Müller Date: Mon, 16 Sep 2013 10:09:15 +0000 (+0200) Subject: recreate an etag within the scanner if the cache contains an empty etag X-Git-Tag: v6.0.0alpha2~146^2~9 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=3c026b7cf601c0b83dd02436f17714fcf48cb9a8;p=nextcloud-server.git recreate an etag within the scanner if the cache contains an empty etag --- diff --git a/lib/files/cache/scanner.php b/lib/files/cache/scanner.php index 9d180820e9d..78cab6ed2da 100644 --- a/lib/files/cache/scanner.php +++ b/lib/files/cache/scanner.php @@ -97,13 +97,19 @@ class Scanner extends BasicEmitter { } $newData = $data; if ($reuseExisting and $cacheData = $this->cache->get($file)) { + // prevent empty etag + $etag = $cacheData['etag']; + if (empty($etag)) { + $etag = $data['etag']; + } + // only reuse data if the file hasn't explicitly changed if (isset($data['mtime']) && isset($cacheData['mtime']) && $data['mtime'] === $cacheData['mtime']) { if (($reuseExisting & self::REUSE_SIZE) && ($data['size'] === -1)) { $data['size'] = $cacheData['size']; } if ($reuseExisting & self::REUSE_ETAG) { - $data['etag'] = $cacheData['etag']; + $data['etag'] = $etag; } } // Only update metadata that has changed diff --git a/tests/lib/files/cache/scanner.php b/tests/lib/files/cache/scanner.php index f6deb93a49e..fa1b3406040 100644 --- a/tests/lib/files/cache/scanner.php +++ b/tests/lib/files/cache/scanner.php @@ -184,6 +184,23 @@ class Scanner extends \PHPUnit_Framework_TestCase { $this->assertFalse($this->cache->inCache('folder/bar.txt')); } + public function testETagRecreation() { + $this->fillTestFolders(); + + $this->scanner->scan(''); + + // manipulate etag to simulate an empty etag + $this->scanner->scan('', \OC\Files\Cache\Scanner::SCAN_SHALLOW, \OC\Files\Cache\Scanner::REUSE_ETAG); + $data['etag'] = ''; + $this->cache->put('', $data); + + // rescan + $this->scanner->scan('', \OC\Files\Cache\Scanner::SCAN_SHALLOW, \OC\Files\Cache\Scanner::REUSE_ETAG); + $newData = $this->cache->get(''); + $this->assertNotEmpty($newData['etag']); + + } + function setUp() { $this->storage = new \OC\Files\Storage\Temporary(array()); $this->scanner = new \OC\Files\Cache\Scanner($this->storage);