]> source.dussan.org Git - nextcloud-server.git/commitdiff
recreate an etag within the scanner if the cache contains an empty etag
authorThomas Müller <thomas.mueller@tmit.eu>
Mon, 16 Sep 2013 10:09:15 +0000 (12:09 +0200)
committerThomas Müller <thomas.mueller@tmit.eu>
Mon, 16 Sep 2013 10:09:15 +0000 (12:09 +0200)
lib/files/cache/scanner.php
tests/lib/files/cache/scanner.php

index 9d180820e9d28f7fd1f501110f145b7a39694663..78cab6ed2da8a46865b36a3adc080d91440574ca 100644 (file)
@@ -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
index f6deb93a49e1a37215878327bd7cd056b1078af4..fa1b3406040a107a469c27f91f42e4f37377d36a 100644 (file)
@@ -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);