Make rmdir recursive for local storage

This commit is contained in:
Robin Appelman 2013-06-06 20:47:20 +02:00
parent 6156d71832
commit 63c898c064
2 changed files with 34 additions and 2 deletions

View file

@ -39,7 +39,27 @@ if (\OC_Util::runningOnWindows()) {
}
public function rmdir($path) {
return @rmdir($this->datadir . $path);
try {
$it = new \RecursiveIteratorIterator(
new \RecursiveDirectoryIterator($this->datadir . $path),
\RecursiveIteratorIterator::CHILD_FIRST
);
foreach ($it as $file) {
/**
* @var \SplFileInfo $file
*/
if (in_array($file->getBasename(), array('.', '..'))) {
continue;
} elseif ($file->isDir()) {
rmdir($file->getPathname());
} elseif ($file->isFile() || $file->isLink()) {
unlink($file->getPathname());
}
}
return rmdir($this->datadir . $path);
} catch (\UnexpectedValueException $e) {
return false;
}
}
public function opendir($path) {

View file

@ -258,9 +258,21 @@ abstract class Storage extends \PHPUnit_Framework_TestCase {
$this->assertEquals(file_get_contents($textFile), $content);
}
public function testTouchCreateFile(){
public function testTouchCreateFile() {
$this->assertFalse($this->instance->file_exists('foo'));
$this->instance->touch('foo');
$this->assertTrue($this->instance->file_exists('foo'));
}
public function testRecursiveRmdir() {
$this->instance->mkdir('folder');
$this->instance->mkdir('folder/bar');
$this->instance->file_put_contents('folder/asd.txt', 'foobar');
$this->instance->file_put_contents('folder/bar/foo.txt', 'asd');
$this->instance->rmdir('folder');
$this->assertFalse($this->instance->file_exists('folder/asd.txt'));
$this->assertFalse($this->instance->file_exists('folder/bar/foo.txt'));
$this->assertFalse($this->instance->file_exists('folder/bar'));
$this->assertFalse($this->instance->file_exists('folder'));
}
}