From: umherirrender Date: Fri, 16 Nov 2012 20:47:01 +0000 (+0100) Subject: Unset DirectoryIterator in the FileBackend X-Git-Tag: 1.31.0-rc.0~21609 X-Git-Url: http://git.cyclocoop.org/%7B%24www_url%7Dadmin/compta/categories/supprimer.php?a=commitdiff_plain;h=9e504dd8e66d6b7c8ad102602d0f718f209943de;p=lhc%2Fweb%2Fwiklou.git Unset DirectoryIterator in the FileBackend This is necessory to close all handlers on the directory and than it is possible to rmdir the directory without a 'permission denied' on a windows machine. Corresponding unit test failure: 1) FileBackendTest::testRecursiveClean Dir mwstore://localtesting/unittest-cont1/e/a no longer exists (FSFileBackend). Failed asserting that true matches expected false. Change-Id: Ide58c6d0ec101bf0ddcd6b7414c51075fc28825b --- diff --git a/includes/filebackend/FileBackendStore.php b/includes/filebackend/FileBackendStore.php index 43e6cb3ed8..0f435a399d 100644 --- a/includes/filebackend/FileBackendStore.php +++ b/includes/filebackend/FileBackendStore.php @@ -507,6 +507,7 @@ abstract class FileBackendStore extends FileBackend { $subDir = $params['dir'] . "/{$subDirRel}"; // full path $status->merge( $this->doClean( array( 'dir' => $subDir ) + $params ) ); } + unset( $subDirsRel ); // free directory for rmdir() on Windows (for FS backends) } } diff --git a/tests/phpunit/includes/filebackend/FileBackendTest.php b/tests/phpunit/includes/filebackend/FileBackendTest.php index b6d44fd5ed..add7066679 100644 --- a/tests/phpunit/includes/filebackend/FileBackendTest.php +++ b/tests/phpunit/includes/filebackend/FileBackendTest.php @@ -1289,6 +1289,8 @@ class FileBackendTest extends MediaWikiTestCase { $base = self::baseStorePath(); $dirs = array( + "$base/unittest-cont1", + "$base/unittest-cont1/e", "$base/unittest-cont1/e/a", "$base/unittest-cont1/e/a/b", "$base/unittest-cont1/e/a/b/c", @@ -2022,6 +2024,8 @@ class FileBackendTest extends MediaWikiTestCase { foreach ( $iter as $file ) { $this->backend->quickDelete( array( 'src' => "$base/$container/$file" ) ); } + // free the directory, to avoid Permission denied under windows on rmdir + unset( $iter ); } $this->backend->clean( array( 'dir' => "$base/$container", 'recursive' => 1 ) ); }