FileProcessOutputCallback.php

Namespace

Drupal\package_manager

File

core/modules/package_manager/src/FileProcessOutputCallback.php

View source
<?php

declare (strict_types=1);
namespace Drupal\package_manager;

use PhpTuf\ComposerStager\API\Process\Service\OutputCallbackInterface;
use PhpTuf\ComposerStager\API\Process\Value\OutputTypeEnum;

/**
 * Logs process output to a file.
 *
 * @internal
 *   This is an internal part of Package Manager and may be changed or removed
 *   at any time without warning. External code should not interact with this
 *   class.
 */
final class FileProcessOutputCallback implements OutputCallbackInterface {
    
    /**
     * The file to write to.
     *
     * @var resource
     */
    private readonly mixed $handle;
    public function __construct(string $path, ?OutputCallbackInterface $decorated = NULL) {
        $this->handle = fopen($path, 'a');
        if (empty($this->handle)) {
            throw new \RuntimeException("Could not open or create '{$path}' for writing.");
        }
    }
    
    /**
     * {@inheritdoc}
     */
    public function clearErrorOutput() : void {
        $this->decorated?->clearErrorOutput();
    }
    
    /**
     * {@inheritdoc}
     */
    public function clearOutput() : void {
        $this->decorated?->clearOutput();
    }
    
    /**
     * {@inheritdoc}
     */
    public function getErrorOutput() : array {
        return $this->decorated?->getErrorOutput() ?? [];
    }
    
    /**
     * {@inheritdoc}
     */
    public function getOutput() : array {
        return $this->decorated?->getOutput() ?? [];
    }
    
    /**
     * {@inheritdoc}
     */
    public function __invoke(OutputTypeEnum $type, string $buffer) : void {
        fwrite($this->handle, $buffer);
        if ($this->decorated) {
            ($this->decorated)($type, $buffer);
        }
    }

}

Classes

Title Deprecated Summary
FileProcessOutputCallback Logs process output to a file.

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.