Merge pull request #53252 from nextcloud/backport/52242/stable30

pull/53265/head
Louis 2025-06-02 15:12:13 +07:00 committed by GitHub
commit 44dd42870e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 16 additions and 3 deletions

@ -65,7 +65,7 @@ class ObjectStoreStorage extends \OC\Files\Storage\Common implements IChunkedFil
$this->logger = \OCP\Server::get(LoggerInterface::class); $this->logger = \OCP\Server::get(LoggerInterface::class);
} }
public function mkdir($path, bool $force = false) { public function mkdir($path, bool $force = false, array $metadata = []) {
$path = $this->normalizePath($path); $path = $this->normalizePath($path);
if (!$force && $this->file_exists($path)) { if (!$force && $this->file_exists($path)) {
$this->logger->warning("Tried to create an object store folder that already exists: $path"); $this->logger->warning("Tried to create an object store folder that already exists: $path");
@ -75,7 +75,7 @@ class ObjectStoreStorage extends \OC\Files\Storage\Common implements IChunkedFil
$mTime = time(); $mTime = time();
$data = [ $data = [
'mimetype' => 'httpd/unix-directory', 'mimetype' => 'httpd/unix-directory',
'size' => 0, 'size' => $metadata['size'] ?? 0,
'mtime' => $mTime, 'mtime' => $mTime,
'storage_mtime' => $mTime, 'storage_mtime' => $mTime,
'permissions' => \OCP\Constants::PERMISSION_ALL, 'permissions' => \OCP\Constants::PERMISSION_ALL,
@ -712,7 +712,7 @@ class ObjectStoreStorage extends \OC\Files\Storage\Common implements IChunkedFil
if ($cache->inCache($to)) { if ($cache->inCache($to)) {
$cache->remove($to); $cache->remove($to);
} }
$this->mkdir($to); $this->mkdir($to, false, ['size' => $sourceEntry->getSize()]);
foreach ($sourceCache->getFolderContentsById($sourceEntry->getId()) as $child) { foreach ($sourceCache->getFolderContentsById($sourceEntry->getId()) as $child) {
$this->copyInner($sourceCache, $child, $to . '/' . $child->getName()); $this->copyInner($sourceCache, $child, $to . '/' . $child->getName());

@ -263,4 +263,17 @@ class ObjectStoreStorageTest extends Storage {
$this->assertTrue($cache->inCache('new.txt')); $this->assertTrue($cache->inCache('new.txt'));
$this->assertEquals(\OCP\Constants::PERMISSION_ALL, $instance->getPermissions('new.txt')); $this->assertEquals(\OCP\Constants::PERMISSION_ALL, $instance->getPermissions('new.txt'));
} }
public function testCopyFolderSize(): void {
$cache = $this->instance->getCache();
$this->instance->mkdir('source');
$this->instance->file_put_contents('source/test.txt', 'foo');
$this->instance->getUpdater()->update('source/test.txt');
$this->assertEquals(3, $cache->get('source')->getSize());
$this->assertTrue($this->instance->copy('source', 'target'));
$this->assertEquals(3, $cache->get('target')->getSize());
}
} }