From 9e504dd8e66d6b7c8ad102602d0f718f209943de Mon Sep 17 00:00:00 2001 From: umherirrender Date: Fri, 16 Nov 2012 21:47:01 +0100 Subject: [PATCH] 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 --- includes/filebackend/FileBackendStore.php | 1 + tests/phpunit/includes/filebackend/FileBackendTest.php | 4 ++++ 2 files changed, 5 insertions(+) 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 ) ); } -- 2.20.1