diff options
author | Morris Jobke <hey@morrisjobke.de> | 2017-03-23 15:20:53 -0600 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-03-23 15:20:53 -0600 |
commit | d2654c8aea3fbfa69169043674894448b23d8be6 (patch) | |
tree | a75470644ea707bbaa93b54a25bd45f79aefc982 /apps | |
parent | 6e6cbae37c6a9e36b8f91333a260ed6025bb3555 (diff) | |
parent | fbf3bfa3ea63342411fb9a82c54ab1019200f034 (diff) | |
download | nextcloud-server-d2654c8aea3fbfa69169043674894448b23d8be6.tar.gz nextcloud-server-d2654c8aea3fbfa69169043674894448b23d8be6.zip |
Merge pull request #3965 from nextcloud/downstream-27343
Providing --path option to transfer-ownership
Diffstat (limited to 'apps')
-rw-r--r-- | apps/files/lib/Command/TransferOwnership.php | 37 |
1 files changed, 33 insertions, 4 deletions
diff --git a/apps/files/lib/Command/TransferOwnership.php b/apps/files/lib/Command/TransferOwnership.php index 96281b5226c..aa07cf9de91 100644 --- a/apps/files/lib/Command/TransferOwnership.php +++ b/apps/files/lib/Command/TransferOwnership.php @@ -34,6 +34,7 @@ use OCP\IUserManager; use OCP\Share\IManager; use OCP\Share\IShare; use Symfony\Component\Console\Command\Command; +use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Helper\ProgressBar; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; @@ -66,6 +67,9 @@ class TransferOwnership extends Command { private $destinationUser; /** @var string */ + private $sourcePath; + + /** @var string */ private $finalTarget; public function __construct(IUserManager $userManager, IManager $shareManager, IMountManager $mountManager) { @@ -88,6 +92,13 @@ class TransferOwnership extends Command { 'destination-user', InputArgument::REQUIRED, 'user who will be the new owner of the files' + ) + ->addOption( + 'path', + null, + InputOption::VALUE_REQUIRED, + 'selectively provide the path to transfer. For example --path="folder_name"', + '' ); } @@ -107,6 +118,8 @@ class TransferOwnership extends Command { $this->sourceUser = $sourceUserObject->getUID(); $this->destinationUser = $destinationUserObject->getUID(); + $sourcePathOption = ltrim($input->getOption('path'), '/'); + $this->sourcePath = rtrim($this->sourceUser . '/files/' . $sourcePathOption, '/'); // target user has to be ready if (!\OC::$server->getEncryptionManager()->isReadyForUser($this->destinationUser)) { @@ -121,6 +134,12 @@ class TransferOwnership extends Command { Filesystem::initMountPoints($this->sourceUser); Filesystem::initMountPoints($this->destinationUser); + $view = new View(); + if (!$view->is_dir($this->sourcePath)) { + $output->writeln("<error>Unknown path provided: $sourcePathOption</error>"); + return 1; + } + // analyse source folder $this->analyse($output); @@ -155,7 +174,8 @@ class TransferOwnership extends Command { $progress = new ProgressBar($output); $progress->start(); $self = $this; - $this->walkFiles($view, "$this->sourceUser/files", + + $this->walkFiles($view, $this->sourcePath, function (FileInfo $fileInfo) use ($progress, $self) { if ($fileInfo->getType() === FileInfo::TYPE_FOLDER) { // only analyze into folders from main storage, @@ -216,9 +236,18 @@ class TransferOwnership extends Command { protected function transfer(OutputInterface $output) { $view = new View(); $output->writeln("Transferring files to $this->finalTarget ..."); - $view->rename("$this->sourceUser/files", $this->finalTarget); - // because the files folder is moved away we need to recreate it - $view->mkdir("$this->sourceUser/files"); + + // This change will help user to transfer the folder specified using --path option. + // Else only the content inside folder is transferred which is not correct. + if($this->sourcePath !== "$this->sourceUser/files") { + $view->mkdir($this->finalTarget); + $this->finalTarget = $this->finalTarget . '/' . basename($this->sourcePath); + } + $view->rename($this->sourcePath, $this->finalTarget); + if (!is_dir("$this->sourceUser/files")) { + // because the files folder is moved away we need to recreate it + $view->mkdir("$this->sourceUser/files"); + } } /** |