diff options
author | Louis Chemineau <louis@chmn.me> | 2023-05-25 17:32:35 +0200 |
---|---|---|
committer | Louis Chemineau <louis@chmn.me> | 2023-05-30 16:41:03 +0200 |
commit | e54bfc00bd9aca2191a13761242d7ce314bc24af (patch) | |
tree | 5ba2fb7fbd572cebfafe4fa2b1ca042578f9479c /apps | |
parent | 297ba1cd3a5c77b0f5e6458e6b30764fbc9f6a80 (diff) | |
download | nextcloud-server-e54bfc00bd9aca2191a13761242d7ce314bc24af.tar.gz nextcloud-server-e54bfc00bd9aca2191a13761242d7ce314bc24af.zip |
Fix initialisation of versions in the DB
Broken after https://github.com/nextcloud/server/pull/36690
Signed-off-by: Louis Chemineau <louis@chmn.me>
Diffstat (limited to 'apps')
-rw-r--r-- | apps/files_versions/lib/Storage.php | 4 | ||||
-rw-r--r-- | apps/files_versions/lib/Versions/LegacyVersionsBackend.php | 31 |
2 files changed, 31 insertions, 4 deletions
diff --git a/apps/files_versions/lib/Storage.php b/apps/files_versions/lib/Storage.php index 0b7debc126a..676d94d2fb7 100644 --- a/apps/files_versions/lib/Storage.php +++ b/apps/files_versions/lib/Storage.php @@ -588,6 +588,10 @@ class Storage { // Check that the version does not have a label. $path = $versionsRoot->getRelativePath($info->getPath()); + if ($path === null) { + throw new DoesNotExistException('Could not find relative path of (' . $info->getPath() . ')'); + } + $node = $userFolder->get(substr($path, 0, -strlen('.v'.$version))); try { $versionEntity = $versionsMapper->findVersionForFileId($node->getId(), $version); diff --git a/apps/files_versions/lib/Versions/LegacyVersionsBackend.php b/apps/files_versions/lib/Versions/LegacyVersionsBackend.php index 0ad0eb8a439..a9ea09247c2 100644 --- a/apps/files_versions/lib/Versions/LegacyVersionsBackend.php +++ b/apps/files_versions/lib/Versions/LegacyVersionsBackend.php @@ -66,17 +66,35 @@ class LegacyVersionsBackend implements IVersionBackend, INameableVersionBackend, public function getVersionsForFile(IUser $user, FileInfo $file): array { $storage = $file->getStorage(); + if ($storage->instanceOfStorage(SharedStorage::class)) { $owner = $storage->getOwner(''); $user = $this->userManager->get($owner); + $fileId = $file->getId(); + if ($fileId === null) { + throw new NotFoundException("File not found ($fileId)"); + } + + if ($user === null) { + throw new NotFoundException("User $owner not found for $fileId"); + } + $userFolder = $this->rootFolder->getUserFolder($user->getUID()); - $nodes = $userFolder->getById($file->getId()); + + $nodes = $userFolder->getById($fileId); $file = array_pop($nodes); if (!$file) { throw new NotFoundException("version file not found for share owner"); } + } else { + $userFolder = $this->rootFolder->getUserFolder($user->getUID()); + } + + $fileId = $file->getId(); + if ($fileId === null) { + throw new NotFoundException("File not found ($fileId)"); } $versions = $this->getVersionsForFileFromDB($file, $user); @@ -87,7 +105,7 @@ class LegacyVersionsBackend implements IVersionBackend, INameableVersionBackend, // Insert the entry in the DB for the current version. $versionEntity = new VersionEntity(); - $versionEntity->setFileId($file->getId()); + $versionEntity->setFileId($fileId); $versionEntity->setTimestamp($file->getMTime()); $versionEntity->setSize($file->getSize()); $versionEntity->setMimetype($this->mimeTypeLoader->getId($file->getMimetype())); @@ -95,10 +113,15 @@ class LegacyVersionsBackend implements IVersionBackend, INameableVersionBackend, $this->versionsMapper->insert($versionEntity); // Insert entries in the DB for existing versions. - $versionsOnFS = Storage::getVersions($user->getUID(), $userFolder->getRelativePath($file->getPath())); + $relativePath = $userFolder->getRelativePath($file->getPath()); + if ($relativePath === null) { + throw new NotFoundException("Relative path not found for file $fileId (" . $file->getPath() . ')'); + } + + $versionsOnFS = Storage::getVersions($user->getUID(), $relativePath); foreach ($versionsOnFS as $version) { $versionEntity = new VersionEntity(); - $versionEntity->setFileId($file->getId()); + $versionEntity->setFileId($fileId); $versionEntity->setTimestamp((int)$version['version']); $versionEntity->setSize((int)$version['size']); $versionEntity->setMimetype($this->mimeTypeLoader->getId($version['mimetype'])); |