From c585e770f953f253376105cadddcc07838c84fed Mon Sep 17 00:00:00 2001 From: Louis Chemineau Date: Mon, 6 Feb 2023 10:45:24 +0100 Subject: [PATCH] Handle empty DB while expiring versions 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 --- apps/files_versions/lib/Storage.php | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/apps/files_versions/lib/Storage.php b/apps/files_versions/lib/Storage.php index 2fd208cd3644e..75ca7e4bceef0 100644 --- a/apps/files_versions/lib/Storage.php +++ b/apps/files_versions/lib/Storage.php @@ -52,6 +52,7 @@ 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 @@ public static function expireOlderThanMaxForUser($uid) { // 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