fix: Flag folder objects that got deleted to recreate them if needed

AppData caches folder objects, and several places get them to delete
 them, so afterwards if the folder gets reused in the same session an
 error happens. This is the case in unit tests with user avatars.

Signed-off-by: Côme Chilliet <come.chilliet@nextcloud.com>
pull/55314/head
Côme Chilliet 1 week ago
parent 2c0f22ea4c
commit 9277a17a3c
No known key found for this signature in database
GPG Key ID: A3E2F658B28C760A
  1. 11
      lib/private/Files/Node/Folder.php

@ -31,6 +31,8 @@ class Folder extends Node implements \OCP\Files\Folder {
private ?IUserManager $userManager = null;
private bool $wasDeleted = false;
/**
* Creates a Folder that represents a non-existing path
*
@ -162,6 +164,7 @@ class Folder extends Node implements \OCP\Files\Folder {
if ($path === '') {
throw new NotPermittedException('Could not create as provided path is empty');
}
$this->recreateIfNeeded();
if ($this->checkPermissions(\OCP\Constants::PERMISSION_CREATE)) {
$fullPath = $this->getFullPath($path);
$nonExisting = new NonExistingFile($this->root, $this->view, $fullPath);
@ -377,6 +380,7 @@ class Folder extends Node implements \OCP\Files\Folder {
$this->view->rmdir($this->path);
$nonExisting = new NonExistingFolder($this->root, $this->view, $this->path, $fileInfo);
$this->sendHooks(['postDelete'], [$nonExisting]);
$this->wasDeleted = true;
} else {
throw new NotPermittedException('No delete permission for path "' . $this->path . '"');
}
@ -469,4 +473,11 @@ class Folder extends Node implements \OCP\Files\Folder {
$readonly,
);
}
private function recreateIfNeeded(): void {
if ($this->wasDeleted) {
$this->newFolder('');
$this->wasDeleted = false;
}
}
}

Loading…
Cancel
Save