From 40c3b4a62b137c89e14de635bc2f91eeb9de6003 Mon Sep 17 00:00:00 2001 From: Chris N Date: Fri, 18 Jan 2019 16:30:09 +0000 Subject: [PATCH] Don't delete non-empty subdirectories that contain hidden files (#26) and delete hidden files (#27) (#28) --- src/DirectoryCleaner.php | 4 ++-- tests/DirectoryCleanupTest.php | 12 ++++++++++++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/DirectoryCleaner.php b/src/DirectoryCleaner.php index 8e71b09..8eed3a0 100644 --- a/src/DirectoryCleaner.php +++ b/src/DirectoryCleaner.php @@ -31,7 +31,7 @@ public function deleteFilesOlderThanMinutes(int $minutes) : Collection { $timeInPast = Carbon::now()->subMinutes($minutes); - return collect($this->filesystem->allFiles($this->directory)) + return collect($this->filesystem->allFiles($this->directory, true)) ->filter(function ($file) use ($timeInPast) { return Carbon::createFromTimestamp(filemtime($file)) ->lt($timeInPast); @@ -48,7 +48,7 @@ public function deleteEmptySubdirectories() : Collection { return collect($this->filesystem->directories($this->directory)) ->filter(function ($directory) { - return ! $this->filesystem->allFiles($directory); + return ! $this->filesystem->allFiles($directory, true); }) ->each(function ($directory) { $this->filesystem->deleteDirectory($directory); diff --git a/tests/DirectoryCleanupTest.php b/tests/DirectoryCleanupTest.php index ad97e83..613d02e 100644 --- a/tests/DirectoryCleanupTest.php +++ b/tests/DirectoryCleanupTest.php @@ -27,6 +27,7 @@ public function it_can_cleanup_the_directories_specified_in_the_config_file() foreach ($directories as $directory => $config) { foreach (range(1, $numberOfDirectories) as $ageInMinutes) { $this->createFile("{$directory}/{$ageInMinutes}MinutesOld.txt", $ageInMinutes); + $this->createFile("{$directory}/.{$ageInMinutes}MinutesOld.txt", $ageInMinutes); } } @@ -36,8 +37,10 @@ public function it_can_cleanup_the_directories_specified_in_the_config_file() foreach (range(1, $numberOfDirectories) as $ageInMinutes) { if ($ageInMinutes < $config['deleteAllOlderThanMinutes']) { $this->assertFileExists("{$directory}/{$ageInMinutes}MinutesOld.txt"); + $this->assertFileExists("{$directory}/.{$ageInMinutes}MinutesOld.txt"); } else { $this->assertFileNotExists("{$directory}/{$ageInMinutes}MinutesOld.txt"); + $this->assertFileNotExists("{$directory}/.{$ageInMinutes}MinutesOld.txt"); } } } @@ -59,6 +62,7 @@ public function it_can_cleanup_the_directories_specified_in_the_config_file_recu foreach (range(1, $numberSubOfDirectories + 1) as $level) { foreach (range(1, $numberSubOfDirectories) as $ageInMinutes) { $this->createFile("{$path}/{$ageInMinutes}MinutesOld.txt", $ageInMinutes); + $this->createFile("{$path}/.{$ageInMinutes}MinutesOld.txt", $ageInMinutes); } $path .= "{$level}/"; } @@ -72,8 +76,10 @@ public function it_can_cleanup_the_directories_specified_in_the_config_file_recu foreach (range(1, $numberSubOfDirectories) as $ageInMinutes) { if ($ageInMinutes < $config['deleteAllOlderThanMinutes']) { $this->assertFileExists("{$path}/{$ageInMinutes}MinutesOld.txt"); + $this->assertFileExists("{$path}/.{$ageInMinutes}MinutesOld.txt"); } else { $this->assertFileNotExists("{$path}/{$ageInMinutes}MinutesOld.txt"); + $this->assertFileNotExists("{$path}/.{$ageInMinutes}MinutesOld.txt"); } } $path .= "{$level}/"; @@ -141,6 +147,10 @@ public function it_can_delete_empty_subdirectories() $this->createFile("{$directory}/emptyDir/5MinutesOld.txt", 5); $this->createDirectory("{$directory}/notEmptyDir"); $this->createFile("{$directory}/notEmptyDir/1MinutesOld.txt", 1); + $this->createDirectory("{$directory}/emptyDirWithHiddenFile"); + $this->createFile("{$directory}/emptyDirWithHiddenFile/.5MinutesOld.txt", 5); + $this->createDirectory("{$directory}/notEmptyDirWithHiddenFile"); + $this->createFile("{$directory}/notEmptyDirWithHiddenFile/.1MinutesOld.txt", 1); } $this->artisan('clean:directories'); @@ -148,6 +158,8 @@ public function it_can_delete_empty_subdirectories() foreach ($directories as $directory => $config) { $this->assertDirectoryExists("{$directory}/notEmptyDir"); $this->assertDirectoryNotExists("{$directory}/emptyDir"); + $this->assertDirectoryExists("{$directory}/notEmptyDirWithHiddenFile"); + $this->assertDirectoryNotExists("{$directory}/emptyDirWithHiddenFile"); } }