-
Notifications
You must be signed in to change notification settings - Fork 3.4k
/
CacheClearGroupCommand.php
107 lines (95 loc) · 3.47 KB
/
CacheClearGroupCommand.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
<?php
declare(strict_types=1);
/**
* CakePHP(tm) : Rapid Development Framework (https://cakephp.org)
* Copyright (c) Cake Software Foundation, Inc. (https://cakefoundation.org)
*
* Licensed under The MIT License
* For full copyright and license information, please see the LICENSE.txt
* Redistributions of files must retain the above copyright notice.
*
* @copyright Copyright (c) Cake Software Foundation, Inc. (https://cakefoundation.org)
* @link https://cakephp.org CakePHP(tm) Project
* @since 4.5.0
* @license https://opensource.org/licenses/mit-license.php MIT License
*/
namespace Cake\Command;
use Cake\Cache\Cache;
use Cake\Cache\Exception\InvalidArgumentException;
use Cake\Console\Arguments;
use Cake\Console\ConsoleIo;
use Cake\Console\ConsoleOptionParser;
/**
* Cache Clear Group command.
*/
class CacheClearGroupCommand extends Command
{
/**
* Get the command name.
*
* @return string
*/
public static function defaultName(): string
{
return 'cache clear_group';
}
/**
* Hook method for defining this command's option parser.
*
* @see https://book.cakephp.org/5/en/console-commands/option-parsers.html
* @param \Cake\Console\ConsoleOptionParser $parser The parser to be defined
* @return \Cake\Console\ConsoleOptionParser The built parser.
*/
public function buildOptionParser(ConsoleOptionParser $parser): ConsoleOptionParser
{
$parser = parent::buildOptionParser($parser);
$parser->setDescription('Clear all data in a single cache group.');
$parser->addArgument('group', [
'help' => 'The cache group to clear. For example, `cake cache clear_group mygroup` will clear ' .
'all cache items belonging to group "mygroup".',
'required' => true,
]);
$parser->addArgument('config', [
'help' => 'Name of the configuration to use. Defaults to no value which clears all cache configurations.',
]);
return $parser;
}
/**
* Clears the cache group
*
* @param \Cake\Console\Arguments $args The command arguments.
* @param \Cake\Console\ConsoleIo $io The console io
* @return int|null The exit code or null for success
*/
public function execute(Arguments $args, ConsoleIo $io): ?int
{
$group = (string)$args->getArgument('group');
try {
$groupConfigs = Cache::groupConfigs($group);
} catch (InvalidArgumentException $e) {
$io->error(sprintf('Cache group "%s" not found', $group));
return static::CODE_ERROR;
}
$config = $args->getArgument('config');
if ($config !== null && Cache::getConfig($config) === null) {
$io->error(sprintf('Cache config "%s" not found', $config));
return static::CODE_ERROR;
}
foreach ($groupConfigs[$group] as $groupConfig) {
if ($config !== null && $config !== $groupConfig) {
continue;
}
if (!Cache::clearGroup($group, $groupConfig)) {
$io->error(sprintf(
'Error encountered clearing group "%s". Was unable to clear entries for "%s".',
$group,
$groupConfig
));
$this->abort();
} else {
$io->success(sprintf('Cache "%s" was cleared.', $groupConfig));
}
}
return static::CODE_SUCCESS;
}
}