From cd92d0dff9c5949a3e515e56c82e888ee814a125 Mon Sep 17 00:00:00 2001 From: Jon Erickson Date: Sun, 29 Sep 2024 14:51:28 -0700 Subject: [PATCH] Allow overriding default implementation of TemporaryDirectory.php --- src/Adapters/TemporaryDirectoryAdapter.php | 21 +++++++++++++++++++++ src/BackupServiceProvider.php | 4 ++++ src/Commands/BackupCommand.php | 5 +++-- src/Contracts/TemporaryDirectory.php | 13 +++++++++++++ src/Tasks/Backup/BackupJob.php | 10 +++------- src/Tasks/Backup/BackupJobFactory.php | 5 +++-- 6 files changed, 47 insertions(+), 11 deletions(-) create mode 100644 src/Adapters/TemporaryDirectoryAdapter.php create mode 100644 src/Contracts/TemporaryDirectory.php diff --git a/src/Adapters/TemporaryDirectoryAdapter.php b/src/Adapters/TemporaryDirectoryAdapter.php new file mode 100644 index 00000000..27be19e7 --- /dev/null +++ b/src/Adapters/TemporaryDirectoryAdapter.php @@ -0,0 +1,21 @@ +temporaryDirectory = new BaseTemporaryDirectory($location); + } + + public function __call(string $name, array $arguments): mixed + { + return $this->temporaryDirectory->{$name}(...$arguments); + } +} diff --git a/src/BackupServiceProvider.php b/src/BackupServiceProvider.php index ef13d2ce..9237d62d 100644 --- a/src/BackupServiceProvider.php +++ b/src/BackupServiceProvider.php @@ -5,11 +5,13 @@ use Illuminate\Notifications\ChannelManager; use Illuminate\Support\Facades\Event; use Illuminate\Support\Facades\Notification; +use Spatie\Backup\Adapters\TemporaryDirectoryAdapter; use Spatie\Backup\Commands\BackupCommand; use Spatie\Backup\Commands\CleanupCommand; use Spatie\Backup\Commands\ListCommand; use Spatie\Backup\Commands\MonitorCommand; use Spatie\Backup\Config\Config; +use Spatie\Backup\Contracts\TemporaryDirectory as TemporaryDirectoryContract; use Spatie\Backup\Events\BackupZipWasCreated; use Spatie\Backup\Helpers\ConsoleOutput; use Spatie\Backup\Listeners\EncryptBackupArchive; @@ -18,6 +20,7 @@ use Spatie\Backup\Tasks\Cleanup\CleanupStrategy; use Spatie\LaravelPackageTools\Package; use Spatie\LaravelPackageTools\PackageServiceProvider; +use Spatie\TemporaryDirectory\TemporaryDirectory; class BackupServiceProvider extends PackageServiceProvider { @@ -49,6 +52,7 @@ public function packageRegistered(): void $this->app->singleton(ConsoleOutput::class); $this->app->bind(CleanupStrategy::class, config('backup.cleanup.strategy')); + $this->app->bind(TemporaryDirectoryContract::class, fn() => new TemporaryDirectoryAdapter(config('backup.temporary_directory') ?? storage_path('app/backup-temp'))); $this->registerDiscordChannel(); diff --git a/src/Commands/BackupCommand.php b/src/Commands/BackupCommand.php index 3ddeb225..11adb344 100644 --- a/src/Commands/BackupCommand.php +++ b/src/Commands/BackupCommand.php @@ -5,6 +5,7 @@ use Exception; use Illuminate\Contracts\Console\Isolatable; use Spatie\Backup\Config\Config; +use Spatie\Backup\Contracts\TemporaryDirectory; use Spatie\Backup\Events\BackupHasFailed; use Spatie\Backup\Exceptions\BackupFailed; use Spatie\Backup\Exceptions\InvalidCommand; @@ -19,7 +20,7 @@ class BackupCommand extends BaseCommand implements Isolatable protected $description = 'Run the backup.'; - public function __construct(protected Config $config) + public function __construct(protected Config $config, protected TemporaryDirectory $temporaryDirectory) { parent::__construct(); } @@ -37,7 +38,7 @@ public function handle(): int try { $this->guardAgainstInvalidOptions(); - $backupJob = BackupJobFactory::createFromConfig($this->config); + $backupJob = BackupJobFactory::createFromConfig($this->config, $this->temporaryDirectory); if ($this->option('only-db')) { $backupJob->dontBackupFilesystem(); diff --git a/src/Contracts/TemporaryDirectory.php b/src/Contracts/TemporaryDirectory.php new file mode 100644 index 00000000..1f9021f8 --- /dev/null +++ b/src/Contracts/TemporaryDirectory.php @@ -0,0 +1,13 @@ +dontBackupFilesystem() @@ -146,9 +144,7 @@ public function setBackupDestinations(Collection $backupDestinations): self /** @throws Exception */ public function run(): void { - $temporaryDirectoryPath = $this->config->backup->temporaryDirectory ?? storage_path('app/backup-temp'); - - $this->temporaryDirectory = (new TemporaryDirectory($temporaryDirectoryPath)) + $this->temporaryDirectory ->name('temp') ->force() ->create() diff --git a/src/Tasks/Backup/BackupJobFactory.php b/src/Tasks/Backup/BackupJobFactory.php index a047f6e0..a2e3a470 100644 --- a/src/Tasks/Backup/BackupJobFactory.php +++ b/src/Tasks/Backup/BackupJobFactory.php @@ -6,13 +6,14 @@ use Spatie\Backup\BackupDestination\BackupDestinationFactory; use Spatie\Backup\Config\Config; use Spatie\Backup\Config\SourceFilesConfig; +use Spatie\Backup\Contracts\TemporaryDirectory; use Spatie\DbDumper\DbDumper; class BackupJobFactory { - public static function createFromConfig(Config $config): BackupJob + public static function createFromConfig(Config $config, TemporaryDirectory $temporaryDirectory): BackupJob { - return (new BackupJob($config)) + return (new BackupJob($config, $temporaryDirectory)) ->setFileSelection(static::createFileSelection($config->backup->source->files)) ->setDbDumpers(static::createDbDumpers($config->backup->source->databases)) ->setBackupDestinations(BackupDestinationFactory::createFromArray($config));