Skip to content

Commit 19e0f92

Browse files
Schnoopfreekmurze
authored andcommitted
Iterate all sub directories instead of collecting all files at once. (spatie#34)
* Iterate all sub directories instead of collecting all files at once. * Styleguide fix. * Cleaner code. * Styleguide.
1 parent 120b9d7 commit 19e0f92

File tree

2 files changed

+30
-9
lines changed

2 files changed

+30
-9
lines changed

src/DirectoryCleaner.php

Lines changed: 28 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
namespace Spatie\DirectoryCleanup;
44

55
use Carbon\Carbon;
6-
use Illuminate\Support\Collection;
76
use Illuminate\Filesystem\Filesystem;
7+
use Illuminate\Support\Collection;
88
use Spatie\DirectoryCleanup\Policies\CleanupPolicy;
99

1010
class DirectoryCleaner
@@ -15,6 +15,9 @@ class DirectoryCleaner
1515
/** @var string */
1616
protected $directory;
1717

18+
/** @var Carbon */
19+
protected $timeInPast;
20+
1821
public function __construct(Filesystem $filesystem)
1922
{
2023
$this->filesystem = $filesystem;
@@ -27,24 +30,41 @@ public function setDirectory(string $directory)
2730
return $this;
2831
}
2932

30-
public function deleteFilesOlderThanMinutes(int $minutes) : Collection
33+
public function setMinutes($minutes)
3134
{
32-
$timeInPast = Carbon::now()->subMinutes($minutes);
35+
$this->timeInPast = Carbon::now()->subMinutes($minutes);
36+
37+
return $this;
38+
}
3339

34-
return collect($this->filesystem->allFiles($this->directory, true))
35-
->filter(function ($file) use ($timeInPast) {
40+
public function deleteFilesOlderThanMinutes($amountOfFilesDeleted = 0, $directory = null): int
41+
{
42+
$workingDir = $directory ?: realpath($this->directory);
43+
$directories = collect($this->filesystem->directories($workingDir));
44+
if ($directory === null) {
45+
$directories = $directories->add($workingDir);
46+
}
47+
48+
foreach ($directories as $subDirectory) {
49+
$amountOfFilesDeleted = $this->deleteFilesOlderThanMinutes($amountOfFilesDeleted, $subDirectory);
50+
}
51+
52+
$files = collect($this->filesystem->files($workingDir, true))
53+
->filter(function ($file) {
3654
return Carbon::createFromTimestamp(filemtime($file))
37-
->lt($timeInPast);
55+
->lt($this->timeInPast);
3856
})
3957
->filter(function ($file) {
4058
return $this->policy()->shouldDelete($file);
4159
})
4260
->each(function ($file) {
4361
$this->filesystem->delete($file);
4462
});
63+
64+
return $amountOfFilesDeleted + $files->count();
4565
}
4666

47-
public function deleteEmptySubdirectories() : Collection
67+
public function deleteEmptySubdirectories(): Collection
4868
{
4969
return collect($this->filesystem->directories($this->directory))
5070
->filter(function ($directory) {
@@ -55,7 +75,7 @@ public function deleteEmptySubdirectories() : Collection
5575
});
5676
}
5777

58-
protected function policy() : CleanupPolicy
78+
protected function policy(): CleanupPolicy
5979
{
6080
return resolve(config(
6181
'laravel-directory-cleanup.cleanup_policy',

src/DirectoryCleanupCommand.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,10 @@ protected function deleteFilesIfOlderThanMinutes(string $directory, int $minutes
3131
{
3232
$deletedFiles = app(DirectoryCleaner::class)
3333
->setDirectory($directory)
34+
->setMinutes($minutes)
3435
->deleteFilesOlderThanMinutes($minutes);
3536

36-
$this->info("Deleted {$deletedFiles->count()} file(s) from {$directory}.");
37+
$this->info("Deleted {$deletedFiles} file(s) from {$directory}.");
3738
}
3839

3940
protected function deleteEmptySubdirectories(string $directory)

0 commit comments

Comments
 (0)