]> source.dussan.org Git - nextcloud-server.git/commitdiff
Handle empty DB while expiring versions 36556/head
authorLouis Chemineau <louis@chmn.me>
Mon, 6 Feb 2023 09:45:24 +0000 (10:45 +0100)
committerLouis (Rebase PR Action) <artonge@users.noreply.github.com>
Wed, 8 Feb 2023 13:56:49 +0000 (13:56 +0000)
Version on the FS can have no equivalent in the DB if they were created before the version naming feature. This makes sure that we catch the resulting exception and proceed as usual.

Fix https://github.com/nextcloud/server/issues/36541

Signed-off-by: Louis Chemineau <louis@chmn.me>
apps/files_versions/lib/Storage.php

index 2fd208cd3644ef5fdb274f73d3efdbb0d89249a6..75ca7e4bceef01c8321b7b422e53866f27c4ef8e 100644 (file)
@@ -52,6 +52,7 @@ use OCA\Files_Versions\Command\Expire;
 use OCA\Files_Versions\Db\VersionsMapper;
 use OCA\Files_Versions\Events\CreateVersionEvent;
 use OCA\Files_Versions\Versions\IVersionManager;
+use OCP\AppFramework\Db\DoesNotExistException;
 use OCP\Files\FileInfo;
 use OCP\Files\Folder;
 use OCP\Files\IRootFolder;
@@ -592,11 +593,16 @@ class Storage {
                        // Check that the version does not have a label.
                        $path = $versionsRoot->getRelativePath($info->getPath());
                        $node = $userFolder->get(substr($path, 0, -strlen('.v'.$version)));
-                       $versionEntity = $versionsMapper->findVersionForFileId($node->getId(), $version);
-                       $versionEntities[$info->getId()] = $versionEntity;
+                       try {
+                               $versionEntity = $versionsMapper->findVersionForFileId($node->getId(), $version);
+                               $versionEntities[$info->getId()] = $versionEntity;
 
-                       if ($versionEntity->getLabel() !== '') {
-                               return false;
+                               if ($versionEntity->getLabel() !== '') {
+                                       return false;
+                               }
+                       } catch (DoesNotExistException $ex) {
+                               // Version on FS can have no equivalent in the DB if they were created before the version naming feature.
+                               // So we ignore DoesNotExistException.
                        }
 
                        // Check that the version's timestamp is lower than $threshold