You are here

public function DiskSpaceValidator::checkDiskSpace in Automatic Updates 8.2

Checks that there is enough free space to perform automatic updates.

Parameters

\Drupal\automatic_updates\Event\UpdateEvent $event: The update event object.

File

src/Validator/DiskSpaceValidator.php, line 106

Class

DiskSpaceValidator
Validates that there is enough free disk space to do automatic updates.

Namespace

Drupal\automatic_updates\Validator

Code

public function checkDiskSpace(UpdateEvent $event) : void {
  $root_path = $this->pathLocator
    ->getProjectRoot();
  $vendor_path = $this->pathLocator
    ->getVendorDirectory();
  $messages = [];

  // @todo Make this configurable.
  $minimum_mb = 1024;
  $minimum_bytes = Bytes::toNumber($minimum_mb . 'M');
  if (!$this
    ->areSameLogicalDisk($root_path, $vendor_path)) {
    if ($this
      ->freeSpace($root_path) < $minimum_bytes) {
      $messages[] = $this
        ->t('Drupal root filesystem "@root" has insufficient space. There must be at least @space megabytes free.', [
        '@root' => $root_path,
        '@space' => $minimum_mb,
      ]);
    }
    if (is_dir($vendor_path) && $this
      ->freeSpace($vendor_path) < $minimum_bytes) {
      $messages[] = $this
        ->t('Vendor filesystem "@vendor" has insufficient space. There must be at least @space megabytes free.', [
        '@vendor' => $vendor_path,
        '@space' => $minimum_mb,
      ]);
    }
  }
  elseif ($this
    ->freeSpace($root_path) < $minimum_bytes) {
    $messages[] = $this
      ->t('Drupal root filesystem "@root" has insufficient space. There must be at least @space megabytes free.', [
      '@root' => $root_path,
      '@space' => $minimum_mb,
    ]);
  }
  $temp = $this
    ->temporaryDirectory();
  if ($this
    ->freeSpace($temp) < $minimum_bytes) {
    $messages[] = $this
      ->t('Directory "@temp" has insufficient space. There must be at least @space megabytes free.', [
      '@temp' => $temp,
      '@space' => $minimum_mb,
    ]);
  }
  if ($messages) {
    $summary = count($messages) > 1 ? $this
      ->t("There is not enough disk space to perform an automatic update.") : NULL;
    $error = ValidationResult::createError($messages, $summary);
    $event
      ->addValidationResult($error);
  }
}