コード例 #1
0
ファイル: FileRepo.php プロジェクト: whysasse/kmwiki
 /**
  * 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);
 }
コード例 #2
0
 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");
 }
コード例 #3
0
 private function prepare(array $params)
 {
     return $this->backend->prepare($params);
 }