aboutsummaryrefslogtreecommitdiffstats
path: root/apps/files_versions
diff options
context:
space:
mode:
authorVincent Petry <vincent@nextcloud.com>2021-10-08 08:01:55 +0200
committerGitHub <noreply@github.com>2021-10-08 08:01:55 +0200
commit62947867ce6b7408e565f4cab0c788dfac8fb128 (patch)
tree2a502b2f4331cdc06e4bb6ff01c50b4ba8ed99c9 /apps/files_versions
parent0e31e72aec2d0bfa61028d6d6cb6e5a30af389cf (diff)
parent54cb4ac840b873677e2689b59230c3d3bab6993b (diff)
downloadnextcloud-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.php33
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();
}
}
}