resolveFileExistence( $this->params['src'], $opPredicates ); if ( $srcExists === false ) { if ( $this->getParam( 'ignoreMissingSource' ) ) { $this->noOp = true; // no-op // Update file existence predicates (cache 404s) $batchPredicates->assumeFileDoesNotExist( $this->params['src'] ); return $status; // nothing to do } else { $status->fatal( 'backend-fail-notexists', $this->params['src'] ); return $status; } } elseif ( $srcExists === FileBackend::EXISTENCE_ERROR ) { $status->fatal( 'backend-fail-stat', $this->params['src'] ); return $status; } // Check if an incompatible destination file exists $srcSize = function () use ( $opPredicates ) { static $size = null; $size ??= $this->resolveFileSize( $this->params['src'], $opPredicates ); return $size; }; $srcSha1 = function () use ( $opPredicates ) { static $sha1 = null; $sha1 ??= $this->resolveFileSha1Base36( $this->params['src'], $opPredicates ); return $sha1; }; $status->merge( $this->precheckDestExistence( $opPredicates, $srcSize, $srcSha1 ) ); $this->params['dstExists'] = $this->destExists; // see FileBackendStore::setFileCache() // Update file existence predicates if the operation is expected to be allowed to run if ( $status->isOK() ) { $batchPredicates->assumeFileExists( $this->params['dst'], $srcSize, $srcSha1 ); } return $status; // safe to call attempt() } protected function doAttempt() { if ( $this->overwriteSameCase ) { $status = StatusValue::newGood(); // nothing to do } elseif ( $this->params['src'] === $this->params['dst'] ) { // Just update the destination file headers $headers = $this->getParam( 'headers' ) ?: []; $status = $this->backend->describeInternal( $this->setFlags( [ 'src' => $this->params['dst'], 'headers' => $headers ] ) ); } else { // Copy the file to the destination $status = $this->backend->copyInternal( $this->setFlags( $this->params ) ); } return $status; } public function storagePathsRead() { return [ $this->params['src'] ]; } public function storagePathsChanged() { return [ $this->params['dst'] ]; } } /** @deprecated class alias since 1.43 */ class_alias( CopyFileOp::class, 'CopyFileOp' );