Merge pull request #24628 from owncloud/decryptall-checkifneedsprocessing

[decrypt_all] Check if file needs to decrypted or not for speed up large oc setups.
This commit is contained in:
Vincent Petry 2016-05-31 10:12:03 +02:00
commit a441220f24
2 changed files with 13 additions and 6 deletions

View File

@ -133,6 +133,7 @@ class DecryptAll {
/**
* iterate over all user and encrypt their files
*
* @param string $user which users files should be decrypted, default = all users
*/
protected function decryptAllUsersFiles($user = '') {
@ -200,9 +201,9 @@ class DecryptAll {
$this->setupUserFS($uid);
$directories = array();
$directories[] = '/' . $uid . '/files';
$directories[] = '/' . $uid . '/files';
while($root = array_pop($directories)) {
while ($root = array_pop($directories)) {
$content = $this->rootView->getDirectoryContent($root);
foreach ($content as $file) {
$path = $root . '/' . $file['name'];
@ -213,9 +214,14 @@ class DecryptAll {
try {
$progress->setMessage("decrypt files for user $userCount: $path");
$progress->advance();
if ($this->decryptFile($path) === false) {
if ($file->isEncrypted() === false) {
$progress->setMessage("decrypt files for user $userCount: $path (already decrypted)");
$progress->advance();
} else {
if ($this->decryptFile($path) === false) {
$progress->setMessage("decrypt files for user $userCount: $path (already decrypted)");
$progress->advance();
}
}
} catch (\Exception $e) {
if (isset($this->failed[$uid])) {

View File

@ -26,6 +26,7 @@ namespace Test\Encryption;
use OC\Encryption\DecryptAll;
use OC\Encryption\Exceptions\DecryptionFailedException;
use OC\Encryption\Manager;
use OC\Files\FileInfo;
use OC\Files\View;
use OCP\IUserManager;
use Test\TestCase;
@ -242,15 +243,15 @@ class DecryptAllTest extends TestCase {
$this->view->expects($this->at(0))->method('getDirectoryContent')
->with('/user1/files')->willReturn(
[
['name' => 'foo', 'type'=>'dir'],
['name' => 'bar', 'type'=>'file'],
new FileInfo('path', null, 'intPath', ['name' => 'foo', 'type'=>'dir'], null),
new FileInfo('path', null, 'intPath', ['name' => 'bar', 'type'=>'file', 'encrypted'=>true], null)
]
);
$this->view->expects($this->at(3))->method('getDirectoryContent')
->with('/user1/files/foo')->willReturn(
[
['name' => 'subfile', 'type'=>'file']
new FileInfo('path', null, 'intPath', ['name' => 'subfile', 'type'=>'file', 'encrypted'=>true], null)
]
);