summaryrefslogtreecommitdiffstats
path: root/apps
diff options
context:
space:
mode:
authorLouis Chemineau <louis@chmn.me>2023-05-25 17:32:35 +0200
committerLouis Chemineau <louis@chmn.me>2023-05-30 16:41:03 +0200
commite54bfc00bd9aca2191a13761242d7ce314bc24af (patch)
tree5ba2fb7fbd572cebfafe4fa2b1ca042578f9479c /apps
parent297ba1cd3a5c77b0f5e6458e6b30764fbc9f6a80 (diff)
downloadnextcloud-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.php4
-rw-r--r--apps/files_versions/lib/Versions/LegacyVersionsBackend.php31
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']));