diff options
author | Daniel Rudolf <github.com@daniel-rudolf.de> | 2021-06-07 00:32:27 +0200 |
---|---|---|
committer | Daniel Rudolf <github.com@daniel-rudolf.de> | 2021-06-07 00:32:27 +0200 |
commit | c8870d0756c10b75ec52b29329bdd9170892bd10 (patch) | |
tree | 82a2aad03d696686b6c39e04ad33eeb3dc0a3098 /apps/files_versions/lib/Command | |
parent | fdb2b07803b54dc65a7db693c3c04e6e6a02b36c (diff) | |
download | nextcloud-server-c8870d0756c10b75ec52b29329bdd9170892bd10.tar.gz nextcloud-server-c8870d0756c10b75ec52b29329bdd9170892bd10.zip |
Add occ versions:cleanup --path option
Signed-off-by: Daniel Rudolf <github.com@daniel-rudolf.de>
Diffstat (limited to 'apps/files_versions/lib/Command')
-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..1f171fea7ab 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_versions/Music"' ); } protected function execute(InputInterface $input, OutputInterface $output): int { $users = $input->getArgument('user_id'); + + $path = $input->getOption('path'); + if ($path) { + if (!preg_match('#^/([^/]+)/files_versions(/.*)?$#', $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(); } } } |