/** * Remove a temporary file or mark it for garbage collection * * @param $virtualUrl String: the virtual URL returned by FileRepo::storeTemp() * @return Boolean: true on success, false on failure */ public function freeTemp($virtualUrl) { $temp = "mwrepo://{$this->name}/temp"; if (substr($virtualUrl, 0, strlen($temp)) != $temp) { wfDebug(__METHOD__ . ": Invalid temp virtual URL\n"); return false; } $path = $this->resolveVirtualUrl($virtualUrl); $op = array('op' => 'delete', 'src' => $path); $status = $this->backend->doOperation($op); return $status->isOK(); }
private function doTestGetDirectoryList() { $backendName = $this->backendClass(); $base = self::baseStorePath(); $files = array("{$base}/unittest-cont1/e/test1.txt", "{$base}/unittest-cont1/e/test2.txt", "{$base}/unittest-cont1/e/test3.txt", "{$base}/unittest-cont1/e/subdir1/test1.txt", "{$base}/unittest-cont1/e/subdir1/test2.txt", "{$base}/unittest-cont1/e/subdir2/test3.txt", "{$base}/unittest-cont1/e/subdir2/test4.txt", "{$base}/unittest-cont1/e/subdir2/subdir/test1.txt", "{$base}/unittest-cont1/e/subdir3/subdir/test2.txt", "{$base}/unittest-cont1/e/subdir4/subdir/test3.txt", "{$base}/unittest-cont1/e/subdir4/subdir/test4.txt", "{$base}/unittest-cont1/e/subdir4/subdir/test5.txt", "{$base}/unittest-cont1/e/subdir4/subdir/sub/test0.txt", "{$base}/unittest-cont1/e/subdir4/subdir/sub/120-px-file.txt"); // Add the files $ops = array(); foreach ($files as $file) { $this->prepare(array('dir' => dirname($file))); $ops[] = array('op' => 'create', 'content' => 'xxy', 'dst' => $file); } $status = $this->backend->doQuickOperations($ops); $this->assertGoodStatus($status, "Creation of files succeeded ({$backendName})."); $this->assertEquals(true, $status->isOK(), "Creation of files succeeded with OK status ({$backendName})."); $this->assertEquals(true, $this->backend->directoryExists(array('dir' => "{$base}/unittest-cont1/e/subdir1")), "Directory exists in ({$backendName})."); $this->assertEquals(true, $this->backend->directoryExists(array('dir' => "{$base}/unittest-cont1/e/subdir2/subdir")), "Directory exists in ({$backendName})."); $this->assertEquals(false, $this->backend->directoryExists(array('dir' => "{$base}/unittest-cont1/e/subdir2/test1.txt")), "Directory does not exists in ({$backendName})."); // Expected listing $expected = array("e"); sort($expected); // Actual listing (no trailing slash) $list = array(); $iter = $this->backend->getTopDirectoryList(array('dir' => "{$base}/unittest-cont1")); foreach ($iter as $file) { $list[] = $file; } sort($list); $this->assertEquals($expected, $list, "Correct top dir listing ({$backendName})."); // Expected listing $expected = array("subdir1", "subdir2", "subdir3", "subdir4"); sort($expected); // Actual listing (no trailing slash) $list = array(); $iter = $this->backend->getTopDirectoryList(array('dir' => "{$base}/unittest-cont1/e")); foreach ($iter as $file) { $list[] = $file; } sort($list); $this->assertEquals($expected, $list, "Correct top dir listing ({$backendName})."); // Actual listing (with trailing slash) $list = array(); $iter = $this->backend->getTopDirectoryList(array('dir' => "{$base}/unittest-cont1/e/")); foreach ($iter as $file) { $list[] = $file; } sort($list); $this->assertEquals($expected, $list, "Correct top dir listing ({$backendName})."); // Expected listing $expected = array("subdir"); sort($expected); // Actual listing (no trailing slash) $list = array(); $iter = $this->backend->getTopDirectoryList(array('dir' => "{$base}/unittest-cont1/e/subdir2")); foreach ($iter as $file) { $list[] = $file; } sort($list); $this->assertEquals($expected, $list, "Correct top dir listing ({$backendName})."); // Actual listing (with trailing slash) $list = array(); $iter = $this->backend->getTopDirectoryList(array('dir' => "{$base}/unittest-cont1/e/subdir2/")); foreach ($iter as $file) { $list[] = $file; } sort($list); $this->assertEquals($expected, $list, "Correct top dir listing ({$backendName})."); // Actual listing (using iterator second time) $list = array(); foreach ($iter as $file) { $list[] = $file; } sort($list); $this->assertEquals($expected, $list, "Correct top dir listing ({$backendName}), second iteration."); // Expected listing (recursive) $expected = array("e", "e/subdir1", "e/subdir2", "e/subdir3", "e/subdir4", "e/subdir2/subdir", "e/subdir3/subdir", "e/subdir4/subdir", "e/subdir4/subdir/sub"); sort($expected); // Actual listing (recursive) $list = array(); $iter = $this->backend->getDirectoryList(array('dir' => "{$base}/unittest-cont1/")); foreach ($iter as $file) { $list[] = $file; } sort($list); $this->assertEquals($expected, $list, "Correct dir listing ({$backendName})."); // Expected listing (recursive) $expected = array("subdir", "subdir/sub"); sort($expected); // Actual listing (recursive) $list = array(); $iter = $this->backend->getDirectoryList(array('dir' => "{$base}/unittest-cont1/e/subdir4")); foreach ($iter as $file) { $list[] = $file; } sort($list); $this->assertEquals($expected, $list, "Correct dir listing ({$backendName})."); // Actual listing (recursive, second time) $list = array(); foreach ($iter as $file) { $list[] = $file; } sort($list); $this->assertEquals($expected, $list, "Correct dir listing ({$backendName})."); $iter = $this->backend->getDirectoryList(array('dir' => "{$base}/unittest-cont1/e/subdir1")); $items = $this->listToArray($iter); $this->assertEquals(array(), $items, "Directory listing is empty."); foreach ($files as $file) { // clean up $this->backend->doOperation(array('op' => 'delete', 'src' => $file)); } $iter = $this->backend->getDirectoryList(array('dir' => "{$base}/unittest-cont1/not/exists")); foreach ($iter as $file) { // no errors } $items = $this->listToArray($iter); $this->assertEquals(array(), $items, "Directory listing is empty."); $iter = $this->backend->getDirectoryList(array('dir' => "{$base}/unittest-cont1/e/not/exists")); $items = $this->listToArray($iter); $this->assertEquals(array(), $items, "Directory listing is empty."); }