Skip to content

Commit ce45507

Browse files
committed
Fix initialisation of versions in the DB
Broken after #36690 Signed-off-by: Louis Chemineau <[email protected]>
1 parent 2f09dc5 commit ce45507

File tree

2 files changed

+31
-4
lines changed

2 files changed

+31
-4
lines changed

apps/files_versions/lib/Storage.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -588,6 +588,10 @@ public static function expireOlderThanMaxForUser($uid) {
588588

589589
// Check that the version does not have a label.
590590
$path = $versionsRoot->getRelativePath($info->getPath());
591+
if ($path === null) {
592+
throw new DoesNotExistException('Could not find relative path of (' . $info->getPath() . ')');
593+
}
594+
591595
$node = $userFolder->get(substr($path, 0, -strlen('.v'.$version)));
592596
try {
593597
$versionEntity = $versionsMapper->findVersionForFileId($node->getId(), $version);

apps/files_versions/lib/Versions/LegacyVersionsBackend.php

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -66,17 +66,35 @@ public function useBackendForStorage(IStorage $storage): bool {
6666

6767
public function getVersionsForFile(IUser $user, FileInfo $file): array {
6868
$storage = $file->getStorage();
69+
6970
if ($storage->instanceOfStorage(SharedStorage::class)) {
7071
$owner = $storage->getOwner('');
7172
$user = $this->userManager->get($owner);
7273

74+
$fileId = $file->getId();
75+
if ($fileId === null) {
76+
throw new NotFoundException("File not found ($fileId)");
77+
}
78+
79+
if ($user === null) {
80+
throw new NotFoundException("User $owner not found for $fileId");
81+
}
82+
7383
$userFolder = $this->rootFolder->getUserFolder($user->getUID());
74-
$nodes = $userFolder->getById($file->getId());
84+
85+
$nodes = $userFolder->getById($fileId);
7586
$file = array_pop($nodes);
7687

7788
if (!$file) {
7889
throw new NotFoundException("version file not found for share owner");
7990
}
91+
} else {
92+
$userFolder = $this->rootFolder->getUserFolder($user->getUID());
93+
}
94+
95+
$fileId = $file->getId();
96+
if ($fileId === null) {
97+
throw new NotFoundException("File not found ($fileId)");
8098
}
8199

82100
$versions = $this->getVersionsForFileFromDB($file, $user);
@@ -87,18 +105,23 @@ public function getVersionsForFile(IUser $user, FileInfo $file): array {
87105

88106
// Insert the entry in the DB for the current version.
89107
$versionEntity = new VersionEntity();
90-
$versionEntity->setFileId($file->getId());
108+
$versionEntity->setFileId($fileId);
91109
$versionEntity->setTimestamp($file->getMTime());
92110
$versionEntity->setSize($file->getSize());
93111
$versionEntity->setMimetype($this->mimeTypeLoader->getId($file->getMimetype()));
94112
$versionEntity->setMetadata([]);
95113
$this->versionsMapper->insert($versionEntity);
96114

97115
// Insert entries in the DB for existing versions.
98-
$versionsOnFS = Storage::getVersions($user->getUID(), $userFolder->getRelativePath($file->getPath()));
116+
$relativePath = $userFolder->getRelativePath($file->getPath());
117+
if ($relativePath === null) {
118+
throw new NotFoundException("Relative path not found for file $fileId (" . $file->getPath() . ')');
119+
}
120+
121+
$versionsOnFS = Storage::getVersions($user->getUID(), $relativePath);
99122
foreach ($versionsOnFS as $version) {
100123
$versionEntity = new VersionEntity();
101-
$versionEntity->setFileId($file->getId());
124+
$versionEntity->setFileId($fileId);
102125
$versionEntity->setTimestamp((int)$version['version']);
103126
$versionEntity->setSize((int)$version['size']);
104127
$versionEntity->setMimetype($this->mimeTypeLoader->getId($version['mimetype']));

0 commit comments

Comments
 (0)