diff options
author | Michael Gapczynski <mtgap@owncloud.com> | 2013-05-07 07:52:57 -0700 |
---|---|---|
committer | Michael Gapczynski <mtgap@owncloud.com> | 2013-05-07 07:52:57 -0700 |
commit | 349a533f667bdac2325a797dcee6007117063039 (patch) | |
tree | 479f050e43f9758b004694b56db94234a3f1e841 | |
parent | 398fbb61f8d4f579da3891c4516d5fb71759246a (diff) | |
parent | 10be42f5b7b17ca55c242960885a9b50e217af3f (diff) | |
download | nextcloud-server-349a533f667bdac2325a797dcee6007117063039.tar.gz nextcloud-server-349a533f667bdac2325a797dcee6007117063039.zip |
Merge pull request #3025 from owncloud/move-file
Cache: only look for child entires when doing a move operation when moving a folder
-rw-r--r-- | lib/files/cache/cache.php | 25 | ||||
-rw-r--r-- | tests/lib/files/cache/cache.php | 7 |
2 files changed, 18 insertions, 14 deletions
diff --git a/lib/files/cache/cache.php b/lib/files/cache/cache.php index 47f3c272b13..8f5c9643bef 100644 --- a/lib/files/cache/cache.php +++ b/lib/files/cache/cache.php @@ -318,19 +318,22 @@ class Cache { * @param string $target */ public function move($source, $target) { - $sourceId = $this->getId($source); + $sourceData = $this->get($source); + $sourceId = $sourceData['fileid']; $newParentId = $this->getParentId($target); - //find all child entries - $query = \OC_DB::prepare('SELECT `path`, `fileid` FROM `*PREFIX*filecache` WHERE `path` LIKE ?'); - $result = $query->execute(array($source . '/%')); - $childEntries = $result->fetchAll(); - $sourceLength = strlen($source); - $query = \OC_DB::prepare('UPDATE `*PREFIX*filecache` SET `path` = ?, `path_hash` = ? WHERE `fileid` = ?'); - - foreach ($childEntries as $child) { - $targetPath = $target . substr($child['path'], $sourceLength); - $query->execute(array($targetPath, md5($targetPath), $child['fileid'])); + if ($sourceData['mimetype'] === 'httpd/unix-directory') { + //find all child entries + $query = \OC_DB::prepare('SELECT `path`, `fileid` FROM `*PREFIX*filecache` WHERE `path` LIKE ?'); + $result = $query->execute(array($source . '/%')); + $childEntries = $result->fetchAll(); + $sourceLength = strlen($source); + $query = \OC_DB::prepare('UPDATE `*PREFIX*filecache` SET `path` = ?, `path_hash` = ? WHERE `fileid` = ?'); + + foreach ($childEntries as $child) { + $targetPath = $target . substr($child['path'], $sourceLength); + $query->execute(array($targetPath, md5($targetPath), $child['fileid'])); + } } $query = \OC_DB::prepare('UPDATE `*PREFIX*filecache` SET `path` = ?, `path_hash` = ?, `name` = ?, `parent` =?' diff --git a/tests/lib/files/cache/cache.php b/tests/lib/files/cache/cache.php index 250842805e5..4051a6e234b 100644 --- a/tests/lib/files/cache/cache.php +++ b/tests/lib/files/cache/cache.php @@ -162,10 +162,11 @@ class Cache extends \PHPUnit_Framework_TestCase { $file4 = 'folder/foo/1'; $file5 = 'folder/foo/2'; $data = array('size' => 100, 'mtime' => 50, 'mimetype' => 'foo/bar'); + $folderData = array('size' => 100, 'mtime' => 50, 'mimetype' => 'httpd/unix-directory'); - $this->cache->put($file1, $data); - $this->cache->put($file2, $data); - $this->cache->put($file3, $data); + $this->cache->put($file1, $folderData); + $this->cache->put($file2, $folderData); + $this->cache->put($file3, $folderData); $this->cache->put($file4, $data); $this->cache->put($file5, $data); |