Skip to content

Commit 3f0d17b

Browse files
authored
fix(http): remove empty directories when running static:clean (#784)
1 parent f948184 commit 3f0d17b

File tree

2 files changed

+34
-6
lines changed

2 files changed

+34
-6
lines changed

src/Tempest/Http/src/Static/StaticCleanCommand.php

Lines changed: 32 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@
44

55
namespace Tempest\Http\Static;
66

7+
use FilesystemIterator;
78
use RecursiveDirectoryIterator;
89
use RecursiveIteratorIterator;
910
use SplFileInfo;
10-
use Tempest\Console\Console;
1111
use Tempest\Console\ConsoleCommand;
1212
use Tempest\Console\HasConsole;
1313
use Tempest\Console\Middleware\CautionMiddleware;
@@ -19,7 +19,6 @@
1919
use HasConsole;
2020

2121
public function __construct(
22-
private Console $console,
2322
private Kernel $kernel,
2423
) {
2524
}
@@ -29,12 +28,22 @@ public function __construct(
2928
middleware: [ForceMiddleware::class, CautionMiddleware::class]
3029
)]
3130
public function __invoke(): void
31+
{
32+
33+
$directoryIterator = new RecursiveDirectoryIterator($this->kernel->root.'/public');
34+
$directoryIterator->setFlags(FilesystemIterator::SKIP_DOTS);
35+
36+
$this->removeFiles($directoryIterator);
37+
$this->removeEmptyDirectories($directoryIterator);
38+
39+
$this->success('Done');
40+
}
41+
42+
private function removeFiles(RecursiveDirectoryIterator $directoryIterator): void
3243
{
3344
/** @var SplFileInfo[] $files */
3445
$files = [];
3546

36-
$directoryIterator = new RecursiveDirectoryIterator($this->kernel->root . '/public');
37-
3847
/** @var SplFileInfo $file */
3948
foreach (new RecursiveIteratorIterator($directoryIterator) as $file) {
4049
if ($file->getExtension() === 'html') {
@@ -49,7 +58,25 @@ public function __invoke(): void
4958

5059
$this->writeln("- <u>{$pathName}</u> removed");
5160
}
61+
}
5262

53-
$this->success('Done');
63+
private function removeEmptyDirectories(RecursiveDirectoryIterator $directoryIterator): void
64+
{
65+
/** @var SplFileInfo $file */
66+
foreach (new RecursiveIteratorIterator($directoryIterator, RecursiveIteratorIterator::CHILD_FIRST) as $file) {
67+
if (! $file->isDir()) {
68+
continue;
69+
}
70+
71+
if (count(glob($file->getPathname().'/*')) > 0) {
72+
continue;
73+
}
74+
75+
rmdir($file->getPathname());
76+
77+
$pathName = str_replace('\\', '/', $file->getPathname());
78+
79+
$this->writeln("- <u>{$pathName}</u> directory removed");
80+
}
5481
}
5582
}

tests/Integration/Http/Static/StaticCleanCommandTest.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
declare(strict_types=1);
44

5-
namespace Integration\Http\Static;
5+
namespace Tests\Tempest\Integration\Http\Static;
66

77
use Tempest\Core\AppConfig;
88
use function Tempest\path;
@@ -29,5 +29,6 @@ public function test_generate(): void
2929

3030
$this->assertFileDoesNotExist(path($root, '/public/static/a/b/index.html')->toString());
3131
$this->assertFileDoesNotExist(path($root, '/public/static/c/d/index.html')->toString());
32+
$this->assertDirectoryDoesNotExist(path($root, '/public/static')->toString());
3233
}
3334
}

0 commit comments

Comments
 (0)