fileUtils->getNode($source); $targetNode = $this->fileUtils->getNode($target); if (!$node) { $output->writeln("file $source not found"); return ExitCode::Failure; } $targetParentPath = dirname(rtrim($target, '/')); $targetParent = $this->fileUtils->getNode($targetParentPath); if (!$targetParent) { $output->writeln("Target parent path $targetParentPath doesn't exist"); return ExitCode::Failure; } $wouldRequireDelete = false; if ($targetNode) { if (!$targetNode->isUpdateable()) { $output->writeln("$target isn't writable"); return ExitCode::Failure; } if ($targetNode instanceof Folder) { if ($noTargetDirectory) { if (!$force) { $output->writeln("Warning: $source is a file, but $target is a folder"); } $wouldRequireDelete = true; } else { $target = $targetNode->getFullPath($node->getName()); $targetNode = $this->fileUtils->getNode($target); } } else { if ($node instanceof Folder) { if (!$force) { $output->writeln("Warning: $source is a folder, but $target is a file"); } $wouldRequireDelete = true; } } if ($wouldRequireDelete && $targetNode->getInternalPath() === '') { $output->writeln("Mount root can't be overwritten with a different type"); return ExitCode::Failure; } if ($wouldRequireDelete && !$targetNode->isDeletable()) { $output->writeln("$target can't be deleted to be replaced with $source"); return ExitCode::Failure; } if (!$force && $targetNode) { if (!$input->confirm('' . $target . ' already exists, overwrite? [y/N] ', false)) { return ExitCode::Failure; } } } if ($wouldRequireDelete && $targetNode) { $targetNode->delete(); } $node->copy($target); return ExitCode::Success; } }