aboutsummaryrefslogtreecommitdiffstats
path: root/apps
diff options
context:
space:
mode:
authorBenjamin Gaussorgues <benjamin.gaussorgues@nextcloud.com>2024-10-30 09:59:15 +0100
committerGitHub <noreply@github.com>2024-10-30 09:59:15 +0100
commitc0f0d2bad48916464c04bb10aeb016d7f1b9c886 (patch)
treebc80c283ac02408e0040efa21fb2ec0d115df1b7 /apps
parent4ee76302a748684bf457d14e18efd1a86760925d (diff)
parentf8278c13a6136f3a554040276cc1c77bf1bf9e05 (diff)
downloadnextcloud-server-c0f0d2bad48916464c04bb10aeb016d7f1b9c886.tar.gz
nextcloud-server-c0f0d2bad48916464c04bb10aeb016d7f1b9c886.zip
Merge pull request #48245 from nextcloud/backport/48224/stable30
Diffstat (limited to 'apps')
-rw-r--r--apps/files_trashbin/lib/Trashbin.php20
1 files changed, 9 insertions, 11 deletions
diff --git a/apps/files_trashbin/lib/Trashbin.php b/apps/files_trashbin/lib/Trashbin.php
index 99fe35bca5f..a8ecc363e64 100644
--- a/apps/files_trashbin/lib/Trashbin.php
+++ b/apps/files_trashbin/lib/Trashbin.php
@@ -15,7 +15,6 @@ use OC\Files\Node\File;
use OC\Files\Node\Folder;
use OC\Files\Node\NonExistingFile;
use OC\Files\Node\NonExistingFolder;
-use OC\Files\ObjectStore\ObjectStoreStorage;
use OC\Files\View;
use OC_User;
use OCA\Files_Trashbin\AppInfo\Application;
@@ -29,6 +28,8 @@ use OCP\Files\IRootFolder;
use OCP\Files\Node;
use OCP\Files\NotFoundException;
use OCP\Files\NotPermittedException;
+use OCP\Files\Storage\ILockingStorage;
+use OCP\Files\Storage\IStorage;
use OCP\FilesMetadata\IFilesMetadataManager;
use OCP\IConfig;
use OCP\IDBConnection;
@@ -254,11 +255,10 @@ class Trashbin {
$trashPath = '/files_trashbin/files/' . static::getTrashFilename($filename, $timestamp);
$gotLock = false;
- while (!$gotLock) {
+ do {
+ /** @var ILockingStorage & IStorage $trashStorage */
+ [$trashStorage, $trashInternalPath] = $ownerView->resolvePath($trashPath);
try {
- /** @var \OC\Files\Storage\Storage $trashStorage */
- [$trashStorage, $trashInternalPath] = $ownerView->resolvePath($trashPath);
-
$trashStorage->acquireLock($trashInternalPath, ILockingProvider::LOCK_EXCLUSIVE, $lockingProvider);
$gotLock = true;
} catch (LockedException $e) {
@@ -269,7 +269,7 @@ class Trashbin {
$trashPath = '/files_trashbin/files/' . static::getTrashFilename($filename, $timestamp);
}
- }
+ } while (!$gotLock);
$sourceStorage = $sourceInfo->getStorage();
$sourceInternalPath = $sourceInfo->getInternalPath();
@@ -283,14 +283,12 @@ class Trashbin {
return false;
}
- $trashStorage->getUpdater()->renameFromStorage($sourceStorage, $sourceInternalPath, $trashInternalPath);
-
try {
$moveSuccessful = true;
- // when moving within the same object store, the cache update done above is enough to move the file
- if (!($trashStorage->instanceOfStorage(ObjectStoreStorage::class) && $trashStorage->getId() === $sourceStorage->getId())) {
- $trashStorage->moveFromStorage($sourceStorage, $sourceInternalPath, $trashInternalPath);
+ $trashStorage->moveFromStorage($sourceStorage, $sourceInternalPath, $trashInternalPath);
+ if ($sourceStorage->getCache()->inCache($sourceInternalPath)) {
+ $trashStorage->getUpdater()->renameFromStorage($sourceStorage, $sourceInternalPath, $trashInternalPath);
}
} catch (\OCA\Files_Trashbin\Exceptions\CopyRecursiveException $e) {
$moveSuccessful = false;