Skip to content

Commit 40c3b4a

Browse files
bluecfreekmurze
authored andcommitted
Don't delete non-empty subdirectories that contain hidden files (spatie#26) and delete hidden files (spatie#27) (spatie#28)
1 parent cb27ea0 commit 40c3b4a

File tree

2 files changed

+14
-2
lines changed

2 files changed

+14
-2
lines changed

src/DirectoryCleaner.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ public function deleteFilesOlderThanMinutes(int $minutes) : Collection
3131
{
3232
$timeInPast = Carbon::now()->subMinutes($minutes);
3333

34-
return collect($this->filesystem->allFiles($this->directory))
34+
return collect($this->filesystem->allFiles($this->directory, true))
3535
->filter(function ($file) use ($timeInPast) {
3636
return Carbon::createFromTimestamp(filemtime($file))
3737
->lt($timeInPast);
@@ -48,7 +48,7 @@ public function deleteEmptySubdirectories() : Collection
4848
{
4949
return collect($this->filesystem->directories($this->directory))
5050
->filter(function ($directory) {
51-
return ! $this->filesystem->allFiles($directory);
51+
return ! $this->filesystem->allFiles($directory, true);
5252
})
5353
->each(function ($directory) {
5454
$this->filesystem->deleteDirectory($directory);

tests/DirectoryCleanupTest.php

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ public function it_can_cleanup_the_directories_specified_in_the_config_file()
2727
foreach ($directories as $directory => $config) {
2828
foreach (range(1, $numberOfDirectories) as $ageInMinutes) {
2929
$this->createFile("{$directory}/{$ageInMinutes}MinutesOld.txt", $ageInMinutes);
30+
$this->createFile("{$directory}/.{$ageInMinutes}MinutesOld.txt", $ageInMinutes);
3031
}
3132
}
3233

@@ -36,8 +37,10 @@ public function it_can_cleanup_the_directories_specified_in_the_config_file()
3637
foreach (range(1, $numberOfDirectories) as $ageInMinutes) {
3738
if ($ageInMinutes < $config['deleteAllOlderThanMinutes']) {
3839
$this->assertFileExists("{$directory}/{$ageInMinutes}MinutesOld.txt");
40+
$this->assertFileExists("{$directory}/.{$ageInMinutes}MinutesOld.txt");
3941
} else {
4042
$this->assertFileNotExists("{$directory}/{$ageInMinutes}MinutesOld.txt");
43+
$this->assertFileNotExists("{$directory}/.{$ageInMinutes}MinutesOld.txt");
4144
}
4245
}
4346
}
@@ -59,6 +62,7 @@ public function it_can_cleanup_the_directories_specified_in_the_config_file_recu
5962
foreach (range(1, $numberSubOfDirectories + 1) as $level) {
6063
foreach (range(1, $numberSubOfDirectories) as $ageInMinutes) {
6164
$this->createFile("{$path}/{$ageInMinutes}MinutesOld.txt", $ageInMinutes);
65+
$this->createFile("{$path}/.{$ageInMinutes}MinutesOld.txt", $ageInMinutes);
6266
}
6367
$path .= "{$level}/";
6468
}
@@ -72,8 +76,10 @@ public function it_can_cleanup_the_directories_specified_in_the_config_file_recu
7276
foreach (range(1, $numberSubOfDirectories) as $ageInMinutes) {
7377
if ($ageInMinutes < $config['deleteAllOlderThanMinutes']) {
7478
$this->assertFileExists("{$path}/{$ageInMinutes}MinutesOld.txt");
79+
$this->assertFileExists("{$path}/.{$ageInMinutes}MinutesOld.txt");
7580
} else {
7681
$this->assertFileNotExists("{$path}/{$ageInMinutes}MinutesOld.txt");
82+
$this->assertFileNotExists("{$path}/.{$ageInMinutes}MinutesOld.txt");
7783
}
7884
}
7985
$path .= "{$level}/";
@@ -141,13 +147,19 @@ public function it_can_delete_empty_subdirectories()
141147
$this->createFile("{$directory}/emptyDir/5MinutesOld.txt", 5);
142148
$this->createDirectory("{$directory}/notEmptyDir");
143149
$this->createFile("{$directory}/notEmptyDir/1MinutesOld.txt", 1);
150+
$this->createDirectory("{$directory}/emptyDirWithHiddenFile");
151+
$this->createFile("{$directory}/emptyDirWithHiddenFile/.5MinutesOld.txt", 5);
152+
$this->createDirectory("{$directory}/notEmptyDirWithHiddenFile");
153+
$this->createFile("{$directory}/notEmptyDirWithHiddenFile/.1MinutesOld.txt", 1);
144154
}
145155

146156
$this->artisan('clean:directories');
147157

148158
foreach ($directories as $directory => $config) {
149159
$this->assertDirectoryExists("{$directory}/notEmptyDir");
150160
$this->assertDirectoryNotExists("{$directory}/emptyDir");
161+
$this->assertDirectoryExists("{$directory}/notEmptyDirWithHiddenFile");
162+
$this->assertDirectoryNotExists("{$directory}/emptyDirWithHiddenFile");
151163
}
152164
}
153165

0 commit comments

Comments
 (0)