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;
}
}