Redirect unlink to rmdir (#27101)
Many API callers will call unlink even for directories and it can mess up with some wrappers like the encryption wrapper Signed-off-by: Morris Jobke <hey@morrisjobke.de>
This commit is contained in:
parent
5683365a2c
commit
7256940524
|
@ -692,7 +692,11 @@ class View {
|
|||
if ($mount and $mount->getInternalPath($absolutePath) === '') {
|
||||
return $this->removeMount($mount, $absolutePath);
|
||||
}
|
||||
$result = $this->basicOperation('unlink', $path, array('delete'));
|
||||
if ($this->is_dir($path)) {
|
||||
$result = $this->basicOperation('rmdir', $path, ['delete']);
|
||||
} else {
|
||||
$result = $this->basicOperation('unlink', $path, ['delete']);
|
||||
}
|
||||
if (!$result && !$this->file_exists($path)) { //clear ghost files from the cache on delete
|
||||
$storage = $mount->getStorage();
|
||||
$internalPath = $mount->getInternalPath($absolutePath);
|
||||
|
|
|
@ -515,6 +515,30 @@ class ViewTest extends \Test\TestCase {
|
|||
$this->assertFalse($rootView->file_exists('substorage/bar.txt'));
|
||||
}
|
||||
|
||||
public function rmdirOrUnlinkDataProvider() {
|
||||
return [['rmdir'], ['unlink']];
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider rmdirOrUnlinkDataProvider
|
||||
*/
|
||||
public function testRmdir($method) {
|
||||
$storage1 = $this->getTestStorage();
|
||||
$storage2 = $this->getTestStorage();
|
||||
Filesystem::mount($storage1, [], '/');
|
||||
|
||||
$rootView = new View('');
|
||||
$rootView->mkdir('sub');
|
||||
$rootView->mkdir('sub/deep');
|
||||
$rootView->file_put_contents('/sub/deep/foo.txt', 'asd');
|
||||
|
||||
$this->assertTrue($rootView->file_exists('sub/deep/foo.txt'));
|
||||
|
||||
$this->assertTrue($rootView->$method('sub'));
|
||||
|
||||
$this->assertFalse($rootView->file_exists('sub'));
|
||||
}
|
||||
|
||||
/**
|
||||
* @medium
|
||||
*/
|
||||
|
|
Loading…
Reference in New Issue