Skip to content

Commit c665c64

Browse files
committed
Exclude filename patterns from both the trigger and the output
1 parent 5f25896 commit c665c64

File tree

6 files changed

+100
-9
lines changed

6 files changed

+100
-9
lines changed

config/airdrop.php

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,14 @@
9898
'exclude' => [
9999
//
100100
],
101+
102+
/*
103+
* Filename strings or patterns that should be excluded,
104+
* regardless of what directory they are found in.
105+
*/
106+
'exclude_names' => [
107+
'.DS_Store'
108+
]
101109
]
102110
],
103111

@@ -128,5 +136,13 @@
128136
'exclude' => [
129137
//
130138
],
139+
140+
/*
141+
* Filename strings or patterns that should be excluded,
142+
* regardless of what directory they are found in.
143+
*/
144+
'exclude_names' => [
145+
'.DS_Store'
146+
]
131147
],
132148
];

src/Drivers/FilesystemDriver.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,8 +122,11 @@ public function files()
122122
{
123123
$include = config('airdrop.outputs.include') ?? [];
124124
$exclude = config('airdrop.outputs.exclude') ?? [];
125+
$excludeNames = config('airdrop.outputs.exclude_names') ?? [];
125126

126-
return FileSelection::create($include, $exclude)->selected();
127+
return FileSelection::create($include, $exclude)
128+
->excludeNames($excludeNames)
129+
->selected();
127130
}
128131

129132
/**

src/FileSelection.php

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
<?php
22

33
/**
4+
* @author Aaron Francis
45
* @author Spatie bvba info@spatie.be
56
* @license MIT
67
* @see https://github.com/spatie/laravel-backup/blob/master/src/Tasks/Backup/FileSelection.php
@@ -13,13 +14,24 @@
1314

1415
class FileSelection
1516
{
16-
/** @var \Illuminate\Support\Collection */
17+
/**
18+
* @var \Illuminate\Support\Collection
19+
*/
1720
protected $includeFilesAndDirectories;
1821

19-
/** @var \Illuminate\Support\Collection */
22+
/**
23+
* @var \Illuminate\Support\Collection
24+
*/
2025
protected $excludeFilesAndDirectories;
2126

22-
/** @var bool */
27+
/**
28+
* @var array
29+
*/
30+
protected $excludeNames = [];
31+
32+
/**
33+
* @var bool
34+
*/
2335
protected $shouldFollowLinks = false;
2436

2537
/**
@@ -42,6 +54,17 @@ public function __construct($include = [], $exclude = [])
4254
$this->excludeFilesAndDirectories = collect($exclude);
4355
}
4456

57+
/**
58+
* @param array $patterns
59+
* @return FileSelection
60+
*/
61+
public function excludeNames($patterns)
62+
{
63+
$this->excludeNames = $patterns;
64+
65+
return $this;
66+
}
67+
4568
/**
4669
* Do not included the given files and directories.
4770
*
@@ -77,10 +100,11 @@ protected function yieldSelectedFiles()
77100
return [];
78101
}
79102

80-
$finder = (new Finder())
103+
$finder = (new Finder)
81104
->ignoreDotFiles(false)
82105
->ignoreVCS(false)
83-
->files();
106+
->files()
107+
->notName($this->excludeNames);
84108

85109
if ($this->shouldFollowLinks) {
86110
$finder->followLinks();

src/Triggers/FileTrigger.php

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,11 @@ public function triggerBuildWhenChanged($config = [])
2424
{
2525
$include = Arr::get($config, 'include', []);
2626
$exclude = Arr::get($config, 'exclude', []);
27+
$excludeNames = Arr::get($config, 'exclude_names', []);
2728

28-
return collect($this->files($include, $exclude))
29+
$files = $this->files($include, $exclude, $excludeNames);
30+
31+
return collect($files)
2932
->diff($exclude)
3033
->unique()
3134
->values()
@@ -44,8 +47,10 @@ public function triggerBuildWhenChanged($config = [])
4447
* @param $exclude
4548
* @return Generator
4649
*/
47-
protected function files($include, $exclude)
50+
protected function files($include, $exclude, $excludeNames)
4851
{
49-
return FileSelection::create($include, $exclude)->selected();
52+
return FileSelection::create($include, $exclude)
53+
->excludeNames($excludeNames)
54+
->selected();
5055
}
5156
}

tests/Drivers/FileSystemDriverTest.php

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,16 @@
55

66
namespace Hammerstone\Airdrop\Tests\Drivers;
77

8+
use Hammerstone\Airdrop\Concerns\MakesDrivers;
89
use Hammerstone\Airdrop\Tests\BaseTest;
910
use Hammerstone\Airdrop\Triggers\FileTrigger;
1011
use Illuminate\Support\Facades\File;
1112
use Illuminate\Support\Facades\Storage;
1213

1314
class FileSystemDriverTest extends BaseTest
1415
{
16+
use MakesDrivers;
17+
1518
public function getEnvironmentSetUp($app)
1619
{
1720
Storage::fake('s3');
@@ -40,6 +43,26 @@ public function it_creates_and_uploads_a_zip()
4043
Storage::disk('s3')->assertExists('airdrop/airdrop-36eda7109ca99a5fb55cffefeca3c554.zip');
4144
}
4245

46+
/** @test */
47+
public function names_get_excluded()
48+
{
49+
Storage::fake('s3');
50+
51+
config()->set('airdrop.outputs.include', [
52+
base_path('tests/Support/public')
53+
]);
54+
55+
config()->set('airdrop.outputs.exclude_names', [
56+
'app.js'
57+
]);
58+
59+
$files = $this->makeDriver()->files();
60+
61+
$this->assertCount(1, $files);
62+
$this->assertStringEndsWith('css/app.css', $files[0]);
63+
64+
}
65+
4366
/** @test */
4467
public function it_downloads_and_restores()
4568
{

tests/Triggers/InputFilesTriggerTest.php

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,4 +72,24 @@ public function files_get_excluded()
7272
$this->assertCount(1, $hashes);
7373
$this->assertEquals('62f6d1bfc836a1536c4869fe8f78249b', array_values($hashes)[0]);
7474
}
75+
76+
/** @test */
77+
public function globs_get_excluded()
78+
{
79+
$config = [
80+
'include' => [
81+
base_path('tests/Support'),
82+
],
83+
'exclude_names' => [
84+
'secondary-webpack.mix.example'
85+
]
86+
];
87+
88+
$hashes = (new FileTrigger)->triggerBuildWhenChanged($config);
89+
90+
$this->assertCount(3, $hashes);
91+
$this->assertEquals('d06dee8236430e6964e23ac1277ca231', array_values($hashes)[0]);
92+
$this->assertEquals('01fdb3785b52fc70114089f31b1e9eff', array_values($hashes)[1]);
93+
$this->assertEquals('62f6d1bfc836a1536c4869fe8f78249b', array_values($hashes)[2]);
94+
}
7595
}

0 commit comments

Comments
 (0)