diff options
author | Vincent Petry <vincent@nextcloud.com> | 2021-10-08 08:01:55 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-10-08 08:01:55 +0200 |
commit | 62947867ce6b7408e565f4cab0c788dfac8fb128 (patch) | |
tree | 2a502b2f4331cdc06e4bb6ff01c50b4ba8ed99c9 /apps/files_versions | |
parent | 0e31e72aec2d0bfa61028d6d6cb6e5a30af389cf (diff) | |
parent | 54cb4ac840b873677e2689b59230c3d3bab6993b (diff) | |
download | nextcloud-server-62947867ce6b7408e565f4cab0c788dfac8fb128.tar.gz nextcloud-server-62947867ce6b7408e565f4cab0c788dfac8fb128.zip |
Merge pull request #27408 from PhrozenByte/enhancement/FilesVersionsCleanUpPath
Add occ versions:cleanup --path option
Diffstat (limited to 'apps/files_versions')
-rw-r--r-- | apps/files_versions/lib/Command/CleanUp.php | 33 |
1 files changed, 28 insertions, 5 deletions
diff --git a/apps/files_versions/lib/Command/CleanUp.php b/apps/files_versions/lib/Command/CleanUp.php index b51959e9532..d7bb4caa483 100644 --- a/apps/files_versions/lib/Command/CleanUp.php +++ b/apps/files_versions/lib/Command/CleanUp.php @@ -5,6 +5,7 @@ * @author Björn Schießle <bjoern@schiessle.org> * @author Christoph Wurst <christoph@winzerhof-wurst.at> * @author Joas Schilling <coding@schilljs.com> + * @author Daniel Rudolf <nextcloud.com@daniel-rudolf.de> * * @license AGPL-3.0 * @@ -29,6 +30,7 @@ use OCP\IUserManager; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; class CleanUp extends Command { @@ -57,17 +59,35 @@ class CleanUp extends Command { 'user_id', InputArgument::OPTIONAL | InputArgument::IS_ARRAY, 'delete versions of the given user(s), if no user is given all versions will be deleted' + ) + ->addOption( + 'path', + 'p', + InputOption::VALUE_REQUIRED, + 'only delete versions of this path, e.g. --path="/alice/files/Music"' ); } protected function execute(InputInterface $input, OutputInterface $output): int { $users = $input->getArgument('user_id'); + + $path = $input->getOption('path'); + if ($path) { + if (!preg_match('#^/([^/]+)/files(/.*)?$#', $path, $pathMatches)) { + $output->writeln("<error>Invalid path given</error>"); + return 1; + } + + $users = [ $pathMatches[1] ]; + $path = trim($pathMatches[2], '/'); + } + if (!empty($users)) { foreach ($users as $user) { if ($this->userManager->userExists($user)) { $output->writeln("Delete versions of <info>$user</info>"); - $this->deleteVersions($user); + $this->deleteVersions($user, $path); } else { $output->writeln("<error>Unknown user $user</error>"); return 1; @@ -103,13 +123,16 @@ class CleanUp extends Command { /** * delete versions for the given user * - * @param string $user + * @param string $user + * @param string|null $path */ - protected function deleteVersions($user) { + protected function deleteVersions(string $user, string $path = null): void { \OC_Util::tearDownFS(); \OC_Util::setupFS($user); - if ($this->rootFolder->nodeExists('/' . $user . '/files_versions')) { - $this->rootFolder->get('/' . $user . '/files_versions')->delete(); + + $fullPath = '/' . $user . '/files_versions' . ($path ? '/' . $path : ''); + if ($this->rootFolder->nodeExists($fullPath)) { + $this->rootFolder->get($fullPath)->delete(); } } } |