/** * Creates a directory with the appropriate zone permissions. * Callers are responsible for doing read-only and "writable repo" checks. * * @param string $dir Virtual URL (or storage path) of directory to clean * @return Status */ protected function initDirectory($dir) { $path = $this->resolveToStoragePath($dir); list(, $container, ) = FileBackend::splitStoragePath($path); $params = array('dir' => $path); if ($this->isPrivate || $container === $this->zones['deleted']['container']) { # Take all available measures to prevent web accessibility of new deleted # directories, in case the user has not configured offline storage $params = array('noAccess' => true, 'noListing' => true) + $params; } return $this->backend->prepare($params); }
protected function doPerfTest(FileBackend $backend) { $ops1 = array(); $ops2 = array(); $ops3 = array(); $ops4 = array(); $ops5 = array(); $baseDir = 'mwstore://' . $backend->getName() . '/testing-cont1'; $backend->prepare(array('dir' => $baseDir)); $dirname = $this->getOption('srcdir'); $dir = opendir($dirname); if (!$dir) { return; } while ($dir && ($file = readdir($dir)) !== false) { if ($file[0] != '.') { $this->output("Using '{$dirname}/{$file}' in operations.\n"); $dst = $baseDir . '/' . wfBaseName($file); $ops1[] = array('op' => 'store', 'src' => "{$dirname}/{$file}", 'dst' => $dst, 'overwrite' => 1); $ops2[] = array('op' => 'copy', 'src' => "{$dst}", 'dst' => "{$dst}-1", 'overwrite' => 1); $ops3[] = array('op' => 'move', 'src' => $dst, 'dst' => "{$dst}-2", 'overwrite' => 1); $ops4[] = array('op' => 'delete', 'src' => "{$dst}-1"); $ops5[] = array('op' => 'delete', 'src' => "{$dst}-2"); } if (count($ops1) >= $this->getOption('maxfiles', 20)) { break; // enough } } closedir($dir); $this->output("\n"); $method = $this->hasOption('quick') ? 'doQuickOperations' : 'doOperations'; $opts = array('force' => 1); if ($this->hasOption('parallelize')) { $opts['parallelize'] = $this->getOption('parallelize') === 'true'; } $start = microtime(true); $status = $backend->{$method}($ops1, $opts); $e = (microtime(true) - $start) * 1000; if ($status->getErrorsArray()) { print_r($status->getErrorsArray()); exit(0); } $this->output($backend->getName() . ": Stored " . count($ops1) . " files in {$e} ms.\n"); $start = microtime(true); $backend->{$method}($ops2, $opts); $e = (microtime(true) - $start) * 1000; if ($status->getErrorsArray()) { print_r($status->getErrorsArray()); exit(0); } $this->output($backend->getName() . ": Copied " . count($ops2) . " files in {$e} ms.\n"); $start = microtime(true); $backend->{$method}($ops3, $opts); $e = (microtime(true) - $start) * 1000; if ($status->getErrorsArray()) { print_r($status->getErrorsArray()); exit(0); } $this->output($backend->getName() . ": Moved " . count($ops3) . " files in {$e} ms.\n"); $start = microtime(true); $backend->{$method}($ops4, $opts); $e = (microtime(true) - $start) * 1000; if ($status->getErrorsArray()) { print_r($status->getErrorsArray()); exit(0); } $this->output($backend->getName() . ": Deleted " . count($ops4) . " files in {$e} ms.\n"); $start = microtime(true); $backend->{$method}($ops5, $opts); $e = (microtime(true) - $start) * 1000; if ($status->getErrorsArray()) { print_r($status->getErrorsArray()); exit(0); } $this->output($backend->getName() . ": Deleted " . count($ops5) . " files in {$e} ms.\n"); }
private function prepare(array $params) { return $this->backend->prepare($params); }