/** * Purge a batch of files from the repo. * This function can be used to write to otherwise read-only foreign repos. * This does no locking nor journaling and is intended for purging thumbnails. * * @param array $paths List of virtual URLs or storage paths * @return FileRepoStatus */ public function quickPurgeBatch(array $paths) { $status = $this->newGood(); $operations = array(); foreach ($paths as $path) { $operations[] = array('op' => 'delete', 'src' => $this->resolveToStoragePath($path), 'ignoreMissingSource' => true); } $status->merge($this->backend->doQuickOperations($operations)); return $status; }
private function create(array $params) { $params['op'] = 'create'; return $this->backend->doQuickOperations(array($params)); }
/** * @param array $dstPathsRel * @param string $backendRel * @param FileBackend $dst * @return void */ protected function delFileBatch( array $dstPathsRel, $backendRel, FileBackend $dst ) { $ops = array(); $deletedRel = array(); // for output message $wikiId = $dst->getWikiId(); // Determine what files need to be copied over... foreach ( $dstPathsRel as $dstPathRel ) { $dstPath = $dst->getRootStoragePath() . "/$backendRel/$dstPathRel"; $ops[] = array( 'op' => 'delete', 'src' => $dstPath ); $deletedRel[] = $dstPathRel; } // Delete the batch of source files... $t_start = microtime( true ); $status = $dst->doQuickOperations( $ops, array( 'bypassReadOnly' => 1 ) ); if ( !$status->isOK() ) { sleep( 10 ); // wait and retry copy again $status = $dst->doQuickOperations( $ops, array( 'bypassReadOnly' => 1 ) ); } $ellapsed_ms = floor( ( microtime( true ) - $t_start ) * 1000 ); if ( !$status->isOK() ) { $this->error( print_r( $status->getErrorsArray(), true ) ); $this->error( "$wikiId: Could not delete file batch.", 1 ); // die } elseif ( count( $deletedRel ) ) { $this->output( "\n\tDeleted these file(s) [{$ellapsed_ms}ms]:\n\t" . implode( "\n\t", $deletedRel ) . "\n\n" ); } }