Skip to content

Commit c9b00d2

Browse files
authored
Merge pull request #464 from mrrobot47/feat/improve-disk-space-error
Improve disk space error message clarity
2 parents de6efed + c77971a commit c9b00d2

File tree

1 file changed

+70
-2
lines changed

1 file changed

+70
-2
lines changed

src/helper/Site_Backup_Restore.php

Lines changed: 70 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -631,11 +631,44 @@ private function pre_backup_check() {
631631
EE::debug( 'Free space: ' . $free_space );
632632

633633
if ( $site_size > $free_space ) {
634-
EE::error( 'Not enough disk space to take backup. Please free up some space and try again.' );
634+
$error_message = $this->build_disk_space_error_message( 'backup', $site_size, $free_space );
635+
635636
$this->fs->remove( EE_BACKUP_DIR . '/' . $this->site_data['site_url'] . '.lock' );
637+
EE::error( $error_message );
636638
}
637639
}
638640

641+
/**
642+
* Build a disk space error message for backup/restore operations.
643+
*
644+
* @param string $operation The operation name ('backup' or 'restore').
645+
* @param int $required_space The required disk space in bytes.
646+
* @param int $free_space The available free space in bytes.
647+
*
648+
* @return string The formatted error message.
649+
*/
650+
private function build_disk_space_error_message( $operation, $required_space, $free_space ) {
651+
$additional_space = $required_space - $free_space;
652+
$required_formatted = $this->format_bytes( $required_space );
653+
$available_formatted = $this->format_bytes( $free_space );
654+
$needed_formatted = $this->format_bytes( $additional_space );
655+
656+
return sprintf(
657+
"Not enough disk space to take %s.\n" .
658+
"Required: %s (%s bytes)\n" .
659+
"Available: %s (%s bytes)\n" .
660+
"Additional space needed: %s (%s bytes)\n" .
661+
"Please free up some space and try again.",
662+
$operation,
663+
$required_formatted,
664+
number_format( $required_space ),
665+
$available_formatted,
666+
number_format( $free_space ),
667+
$needed_formatted,
668+
number_format( $additional_space )
669+
);
670+
}
671+
639672
private function check_and_install( $command, $name ) {
640673
$status = EE::exec( "command -v $command" );
641674
if ( ! $status ) {
@@ -669,9 +702,32 @@ private function pre_restore_check() {
669702
EE::debug( 'Remote backup size: ' . $remote_size );
670703

671704
$free_space = disk_free_space( EE_BACKUP_DIR );
705+
if ( false === $free_space ) {
706+
EE::error( 'Unable to determine free disk space for backup directory.' );
707+
}
672708

673709
if ( $remote_size > $free_space ) {
674-
EE::error( 'Not enough disk space to restore backup. Please free up some space and try again.' );
710+
$required_space = $remote_size;
711+
$additional_space = $required_space - $free_space;
712+
$required_formatted = $this->format_bytes( $required_space );
713+
$available_formatted = $this->format_bytes( $free_space );
714+
$needed_formatted = $this->format_bytes( $additional_space );
715+
716+
$error_message = sprintf(
717+
"Not enough disk space to restore backup.\n" .
718+
"Required: %s (%s bytes)\n" .
719+
"Available: %s (%s bytes)\n" .
720+
"Additional space needed: %s (%s bytes)\n" .
721+
"Please free up some space and try again.",
722+
$required_formatted,
723+
number_format( $required_space ),
724+
$available_formatted,
725+
number_format( $free_space ),
726+
$needed_formatted,
727+
number_format( $additional_space )
728+
);
729+
730+
EE::error( $error_message );
675731
}
676732

677733

@@ -728,6 +784,18 @@ private function pre_restore_check() {
728784
}
729785

730786

787+
private function format_bytes( $bytes, $precision = 2 ) {
788+
$units = [ 'B', 'KB', 'MB', 'GB', 'TB' ];
789+
790+
$bytes = max( $bytes, 0 );
791+
$pow = floor( ( $bytes ? log( $bytes ) : 0 ) / log( 1024 ) );
792+
$pow = min( $pow, count( $units ) - 1 );
793+
794+
$size = $bytes / pow( 1024, $pow );
795+
796+
return round( $size, $precision ) . ' ' . $units[ $pow ];
797+
}
798+
731799
private function dir_size( string $directory ) {
732800
$size = 0;
733801

0 commit comments

Comments
 (0)