Browse Source

Fix preserving file ids when restoring a file with object storage

tags/v9.0beta1
Robin Appelman 8 years ago
parent
commit
54cea05271
1 changed files with 14 additions and 1 deletions
  1. 14
    1
      apps/files_versions/lib/storage.php

+ 14
- 1
apps/files_versions/lib/storage.php View File

@@ -347,7 +347,20 @@ class Storage {
$view->lockFile($path1, ILockingProvider::LOCK_EXCLUSIVE);
$view->lockFile($path2, ILockingProvider::LOCK_EXCLUSIVE);

$result = $storage2->moveFromStorage($storage1, $internalPath1, $internalPath2);
// TODO add a proper way of overwriting a file while maintaining file ids
if ($storage1->instanceOfStorage('\OC\Files\ObjectStore\ObjectStoreStorage') || $storage2->instanceOfStorage('\OC\Files\ObjectStore\ObjectStoreStorage')) {
$source = $storage1->fopen($internalPath1, 'r');
$target = $storage2->fopen($internalPath2, 'w');
list(, $result) = \OC_Helper::streamCopy($source, $target);
fclose($source);
fclose($target);

if ($result !== false) {
$storage1->unlink($internalPath1);
}
} else {
$result = $storage2->moveFromStorage($storage1, $internalPath1, $internalPath2);
}

$view->unlockFile($path1, ILockingProvider::LOCK_EXCLUSIVE);
$view->unlockFile($path2, ILockingProvider::LOCK_EXCLUSIVE);

Loading…
Cancel
Save