aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/files/cache/cache.php12
-rw-r--r--lib/files/cache/scanner.php16
-rw-r--r--tests/lib/files/cache/cache.php6
-rw-r--r--tests/lib/files/cache/scanner.php9
4 files changed, 37 insertions, 6 deletions
diff --git a/lib/files/cache/cache.php b/lib/files/cache/cache.php
index 734890329ae..cba48e4dbea 100644
--- a/lib/files/cache/cache.php
+++ b/lib/files/cache/cache.php
@@ -231,9 +231,15 @@ class Cache {
* @param string $file
*/
public function remove($file) {
- $pathHash = md5($file);
- $query = \OC_DB::prepare('DELETE FROM `*PREFIX*filecache` WHERE `storage` = ? AND `path_hash` = ?');
- $query->execute(array($this->storageId, $pathHash));
+ $entry = $this->get($file);
+ if ($entry['mimetype'] === 'httpd/unix-directory') {
+ $children = $this->getFolderContents($file);
+ foreach($children as $child){
+ $this->remove($child['path']);
+ }
+ }
+ $query = \OC_DB::prepare('DELETE FROM `*PREFIX*filecache` WHERE `fileid` = ?');
+ $query->execute(array($entry['fileid']));
}
/**
diff --git a/lib/files/cache/scanner.php b/lib/files/cache/scanner.php
index 0adde1d354d..7062888d74a 100644
--- a/lib/files/cache/scanner.php
+++ b/lib/files/cache/scanner.php
@@ -107,4 +107,20 @@ class Scanner {
}
return $size;
}
+
+ /**
+ * update the folder size and the size of all parent folders
+ *
+ * @param $path
+ */
+ public function correctFolderSize($path) {
+ $this->cache->calculateFolderSize($path);
+ if ($path !== '') {
+ $parent = dirname($path);
+ if ($parent === '.') {
+ $parent = '';
+ }
+ $this->correctFolderSize($parent);
+ }
+ }
}
diff --git a/tests/lib/files/cache/cache.php b/tests/lib/files/cache/cache.php
index 57a154d295c..4f22e9bd1d9 100644
--- a/tests/lib/files/cache/cache.php
+++ b/tests/lib/files/cache/cache.php
@@ -82,7 +82,7 @@ class Cache extends \UnitTestCase {
$file1 = 'folder';
$file2 = 'folder/bar';
$file3 = 'folder/foo';
- $data1 = array('size' => 100, 'mtime' => 50, 'mimetype' => 'foo/folder');
+ $data1 = array('size' => 100, 'mtime' => 50, 'mimetype' => 'httpd/unix-directory');
$fileData = array();
$fileData['bar'] = array('size' => 1000, 'mtime' => 20, 'mimetype' => 'foo/file');
$fileData['foo'] = array('size' => 20, 'mtime' => 25, 'mimetype' => 'foo/file');
@@ -110,6 +110,10 @@ class Cache extends \UnitTestCase {
$this->cache->put($file4, $fileData['unkownSize']);
$this->assertEquals(1025, $this->cache->calculateFolderSize($file1));
+
+ $this->cache->remove('folder');
+ $this->assertFalse($this->cache->inCache('folder/foo'));
+ $this->assertFalse($this->cache->inCache('folder/bar'));
}
function testStatus() {
diff --git a/tests/lib/files/cache/scanner.php b/tests/lib/files/cache/scanner.php
index 34fefc784d4..34d38c42736 100644
--- a/tests/lib/files/cache/scanner.php
+++ b/tests/lib/files/cache/scanner.php
@@ -89,14 +89,19 @@ class Scanner extends \UnitTestCase {
$cachedDataFolder = $this->cache->get('');
$cachedDataFolder2 = $this->cache->get('folder');
- $this->assertEqual($cachedDataFolder['size'], -1);
- $this->assertEqual($cachedDataFolder2['size'], -1);
+ $this->assertEqual(-1, $cachedDataFolder['size']);
+ $this->assertEqual(-1, $cachedDataFolder2['size']);
$this->scanner->scan('folder', \OC\Files\Cache\Scanner::SCAN_SHALLOW);
$cachedDataFolder2 = $this->cache->get('folder');
$this->assertNotEqual($cachedDataFolder2['size'], -1);
+
+ $this->scanner->correctFolderSize('folder');
+
+ $cachedDataFolder = $this->cache->get('');
+ $this->assertNotEqual($cachedDataFolder['size'], -1);
}
function setUp() {