summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJulius Härtl <jus@bitgrid.net>2023-06-13 22:10:13 +0200
committerLouis <6653109+artonge@users.noreply.github.com>2023-06-26 17:57:38 +0200
commitea30d1165be3542070a3130b09c6cc8b657386e7 (patch)
tree9c13c99ac6f09694f263a132048a96db5bf102e8
parent3190dfb5ae3a0f2966ba1229a54a5cad79226e4e (diff)
downloadnextcloud-server-ea30d1165be3542070a3130b09c6cc8b657386e7.tar.gz
nextcloud-server-ea30d1165be3542070a3130b09c6cc8b657386e7.zip
fix: Avoid failing to update the current version entry if there is none
Signed-off-by: Julius Härtl <jus@bitgrid.net>
-rw-r--r--apps/files_versions/lib/Listener/FileEventsListener.php17
1 files changed, 12 insertions, 5 deletions
diff --git a/apps/files_versions/lib/Listener/FileEventsListener.php b/apps/files_versions/lib/Listener/FileEventsListener.php
index 76590733e26..082c88295cb 100644
--- a/apps/files_versions/lib/Listener/FileEventsListener.php
+++ b/apps/files_versions/lib/Listener/FileEventsListener.php
@@ -239,11 +239,18 @@ class FileEventsListener implements IEventListener {
} else {
// If no new version was stored in the FS, no new version should be added in the DB.
// So we simply update the associated version.
- $currentVersionEntity = $this->versionsMapper->findVersionForFileId($node->getId(), $writeHookInfo['previousNode']->getMtime());
- $currentVersionEntity->setTimestamp($node->getMTime());
- $currentVersionEntity->setSize($node->getSize());
- $currentVersionEntity->setMimetype($this->mimeTypeLoader->getId($node->getMimetype()));
- $this->versionsMapper->update($currentVersionEntity);
+ try {
+ $currentVersionEntity = $this->versionsMapper->findVersionForFileId($node->getId(), $writeHookInfo['previousNode']->getMtime());
+ $currentVersionEntity->setTimestamp($node->getMTime());
+ $currentVersionEntity->setSize($node->getSize());
+ $currentVersionEntity->setMimetype($this->mimeTypeLoader->getId($node->getMimetype()));
+ $this->versionsMapper->update($currentVersionEntity);
+ } catch (DoesNotExistException) {
+ // There might be cases where the current version entry doesn't exist,
+ // e.g. if none was written due to an empty file or from before the versions table was introduced
+ // We just create the initial version entry then for the current entity
+ $this->created($node);
+ }
}
unset($this->writeHookInfo[$node->getId()]);