Skip to content

Commit 06588ca

Browse files
Copilotdermatz
andcommitted
Add cleaning of var/page_cache, var/tmp and generated directories
Co-authored-by: dermatz <6103201+dermatz@users.noreply.github.com>
1 parent d9bf58d commit 06588ca

3 files changed

Lines changed: 99 additions & 3 deletions

File tree

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ Please ensure that your Magento installation meets this requirement before insta
3737
| `mageforge:theme:list` | Lists all available themes | `m:t:l` |
3838
| `mageforge:theme:build` | Builds selected themes (CSS/TailwindCSS) | `m:t:b`, `frontend:build` |
3939
| `mageforge:theme:watch` | Starts watch mode for theme development | `m:t:w`, `frontend:watch` |
40-
| `mageforge:static:clean` | Clean var/view_preprocessed and pub/static for a theme | - |
40+
| `mageforge:static:clean` | Clean static files, cache and generated files for a theme | - |
4141

4242
---
4343

docs/commands.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ bin/magento mageforge:theme:watch [--theme=THEME]
8787

8888
### 4. CleanCommand (`mageforge:static:clean`)
8989

90-
**Purpose**: Cleans var/view_preprocessed and pub/static directories for specific theme.
90+
**Purpose**: Cleans var/view_preprocessed, pub/static, var/page_cache, var/tmp and generated directories for specific theme.
9191

9292
**File**: `/src/Console/Command/Static/CleanCommand.php`
9393

@@ -108,6 +108,10 @@ bin/magento mageforge:static:clean [<themename>]
108108
- `var/view_preprocessed/css/frontend/Vendor/theme`
109109
- `var/view_preprocessed/source/frontend/Vendor/theme`
110110
- `pub/static/frontend/Vendor/theme`
111+
- Additionally cleans these global directories:
112+
- `var/page_cache/*`
113+
- `var/tmp/*`
114+
- `generated/*` (preserves .htaccess)
111115
- Displays a summary of cleaned directories
112116
- Returns success status code
113117

src/Console/Command/Static/CleanCommand.php

Lines changed: 93 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ public function __construct(
3838
protected function configure(): void
3939
{
4040
$this->setName($this->getCommandName('static', 'clean'))
41-
->setDescription('Clean var/view_preprocessed and pub/static directories for specific theme')
41+
->setDescription('Clean var/view_preprocessed, pub/static, var/page_cache, var/tmp and generated directories for specific theme')
4242
->addArgument(
4343
'themename',
4444
InputArgument::OPTIONAL,
@@ -91,6 +91,15 @@ protected function executeCommand(InputInterface $input, OutputInterface $output
9191
// Clean pub/static
9292
$cleaned += $this->cleanPubStatic($themeName);
9393

94+
// Clean var/page_cache
95+
$cleaned += $this->cleanPageCache();
96+
97+
// Clean var/tmp
98+
$cleaned += $this->cleanVarTmp();
99+
100+
// Clean generated
101+
$cleaned += $this->cleanGenerated();
102+
94103
if ($cleaned > 0) {
95104
$this->io->success(sprintf(
96105
"Successfully cleaned %d director%s for theme '%s'",
@@ -191,6 +200,89 @@ private function cleanPubStatic(string $themeName): int
191200
return $cleaned;
192201
}
193202

203+
/**
204+
* Clean var/page_cache directory
205+
*
206+
* @return int Number of directories cleaned
207+
*/
208+
private function cleanPageCache(): int
209+
{
210+
$cleaned = 0;
211+
$varDirectory = $this->filesystem->getDirectoryWrite(DirectoryList::VAR_DIR);
212+
213+
if ($varDirectory->isDirectory('page_cache')) {
214+
try {
215+
$varDirectory->delete('page_cache');
216+
$this->io->writeln(' <fg=green>✓</> Cleaned: var/page_cache');
217+
$cleaned++;
218+
} catch (\Exception $e) {
219+
$this->io->writeln(sprintf(' <fg=red>✗</> Failed to clean: var/page_cache - %s', $e->getMessage()));
220+
}
221+
}
222+
223+
return $cleaned;
224+
}
225+
226+
/**
227+
* Clean var/tmp directory
228+
*
229+
* @return int Number of directories cleaned
230+
*/
231+
private function cleanVarTmp(): int
232+
{
233+
$cleaned = 0;
234+
$varDirectory = $this->filesystem->getDirectoryWrite(DirectoryList::VAR_DIR);
235+
236+
if ($varDirectory->isDirectory('tmp')) {
237+
try {
238+
$varDirectory->delete('tmp');
239+
$this->io->writeln(' <fg=green>✓</> Cleaned: var/tmp');
240+
$cleaned++;
241+
} catch (\Exception $e) {
242+
$this->io->writeln(sprintf(' <fg=red>✗</> Failed to clean: var/tmp - %s', $e->getMessage()));
243+
}
244+
}
245+
246+
return $cleaned;
247+
}
248+
249+
/**
250+
* Clean generated directory
251+
*
252+
* @return int Number of directories cleaned
253+
*/
254+
private function cleanGenerated(): int
255+
{
256+
$cleaned = 0;
257+
$generatedDirectory = $this->filesystem->getDirectoryWrite(DirectoryList::GENERATED);
258+
259+
try {
260+
// Get all items in generated directory
261+
$items = $generatedDirectory->read();
262+
foreach ($items as $item) {
263+
// Skip .htaccess file
264+
if ($item === '.htaccess') {
265+
continue;
266+
}
267+
268+
try {
269+
$generatedDirectory->delete($item);
270+
} catch (\Exception $e) {
271+
$this->io->writeln(sprintf(' <fg=red>✗</> Failed to clean: generated/%s - %s', $item, $e->getMessage()));
272+
}
273+
}
274+
275+
if (!empty($items)) {
276+
$this->io->writeln(' <fg=green>✓</> Cleaned: generated/*');
277+
$cleaned++;
278+
}
279+
} catch (\Exception $e) {
280+
$this->io->writeln(sprintf(' <fg=red>✗</> Failed to clean: generated - %s', $e->getMessage()));
281+
}
282+
283+
return $cleaned;
284+
}
285+
194286
/**
195287
* Parse theme name into vendor and theme parts
196288
*

0 commit comments

Comments
 (0)