From d2a0621f93b245aa2a3de3755c07a4679507ab9d Mon Sep 17 00:00:00 2001 From: ayntk-ai <122374094+ayntk-ai@users.noreply.github.com> Date: Sat, 31 Aug 2024 18:38:57 +0200 Subject: [PATCH] delete backup folder if empty --- app/Livewire/Project/Database/BackupEdit.php | 35 +++++++++++++++++--- 1 file changed, 31 insertions(+), 4 deletions(-) diff --git a/app/Livewire/Project/Database/BackupEdit.php b/app/Livewire/Project/Database/BackupEdit.php index 35ca2c7ec..9ef6cb9ed 100644 --- a/app/Livewire/Project/Database/BackupEdit.php +++ b/app/Livewire/Project/Database/BackupEdit.php @@ -59,7 +59,7 @@ class BackupEdit extends Component try { if ($this->delete_associated_backups) { - $this->deleteAllBackups(); + $this->deleteAssociatedBackups(); } $this->backup->delete(); @@ -119,18 +119,45 @@ class BackupEdit extends Component } } - public function deleteAllBackups() + public function deleteAssociatedBackups() { $executions = $this->backup->executions; + $backupFolder = null; foreach ($executions as $execution) { if ($this->backup->database->getMorphClass() === 'App\Models\ServiceDatabase') { - delete_backup_locally($execution->filename, $this->backup->database->service->destination->server); + $server = $this->backup->database->service->destination->server; } else { - delete_backup_locally($execution->filename, $this->backup->database->destination->server); + $server = $this->backup->database->destination->server; } + + if (!$backupFolder) { + $backupFolder = dirname($execution->filename); + } + + delete_backup_locally($execution->filename, $server); $execution->delete(); } + + if ($backupFolder) { + $this->deleteEmptyBackupFolder($backupFolder, $server); + } + } + + private function deleteEmptyBackupFolder($folderPath, $server) + { + $checkEmpty = instant_remote_process(["[ -z \"$(ls -A '$folderPath')\" ] && echo 'empty' || echo 'not empty'"], $server); + + if (trim($checkEmpty) === 'empty') { + instant_remote_process(["rmdir '$folderPath'"], $server); + + $parentFolder = dirname($folderPath); + $checkParentEmpty = instant_remote_process(["[ -z \"$(ls -A '$parentFolder')\" ] && echo 'empty' || echo 'not empty'"], $server); + + if (trim($checkParentEmpty) === 'empty') { + instant_remote_process(["rmdir '$parentFolder'"], $server); + } + } } public function render()