mirror of
https://github.com/nextcloud/server.git
synced 2026-05-28 04:32:30 -04:00
fix: write object to the correct urn when moving from another storage to object store
Signed-off-by: Robin Appelman <robin@icewind.nl>
This commit is contained in:
parent
125e18d78b
commit
05f79f23cd
1 changed files with 25 additions and 0 deletions
|
|
@ -594,6 +594,31 @@ class ObjectStoreStorage extends \OC\Files\Storage\Common implements IChunkedFil
|
|||
return parent::copyFromStorage($sourceStorage, $sourceInternalPath, $targetInternalPath);
|
||||
}
|
||||
|
||||
public function moveFromStorage(IStorage $sourceStorage, $sourceInternalPath, $targetInternalPath, ?ICacheEntry $sourceCacheEntry = null): bool {
|
||||
$sourceCache = $sourceStorage->getCache();
|
||||
if (!$sourceCacheEntry) {
|
||||
$sourceCacheEntry = $sourceCache->get($sourceInternalPath);
|
||||
}
|
||||
if ($sourceCacheEntry->getMimeType() === FileInfo::MIMETYPE_FOLDER) {
|
||||
foreach ($sourceCache->getFolderContents($sourceInternalPath) as $child) {
|
||||
$this->moveFromStorage($sourceStorage, $child->getPath(), $targetInternalPath . '/' . $child->getName());
|
||||
}
|
||||
$sourceStorage->rmdir($sourceInternalPath);
|
||||
} else {
|
||||
// move the cache entry before the contents so that we have the correct fileid/urn for the target
|
||||
$this->getCache()->moveFromCache($sourceCache, $sourceInternalPath, $targetInternalPath);
|
||||
try {
|
||||
$this->writeStream($targetInternalPath, $sourceStorage->fopen($sourceInternalPath, 'r'), $sourceCacheEntry->getSize());
|
||||
} catch (\Exception $e) {
|
||||
// restore the cache entry
|
||||
$sourceCache->moveFromCache($this->getCache(), $targetInternalPath, $sourceInternalPath);
|
||||
throw $e;
|
||||
}
|
||||
$sourceStorage->unlink($sourceInternalPath);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public function copy($source, $target) {
|
||||
$source = $this->normalizePath($source);
|
||||
$target = $this->normalizePath($target);
|
||||
|
|
|
|||
Loading…
Reference in a new issue