Skip to content

Commit

Permalink
Merge pull request #27408 from PhrozenByte/enhancement/FilesVersionsC…
Browse files Browse the repository at this point in the history
…leanUpPath

Add occ versions:cleanup --path option
  • Loading branch information
PVince81 authored Oct 8, 2021
2 parents 0e31e72 + 54cb4ac commit 6294786
Showing 1 changed file with 28 additions and 5 deletions.
33 changes: 28 additions & 5 deletions apps/files_versions/lib/Command/CleanUp.php
Original file line number Diff line number Diff line change
Expand Up @@ -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
*
Expand All @@ -29,6 +30,7 @@
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 {
Expand Down Expand Up @@ -57,17 +59,35 @@ protected function configure() {
'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;
Expand Down Expand Up @@ -103,13 +123,16 @@ protected function execute(InputInterface $input, OutputInterface $output): int
/**
* 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();
}
}
}

0 comments on commit 6294786

Please sign in to comment.