ProcessFactory.php

Same filename in this branch
  1. 11.x core/modules/package_manager/src/ProcessFactory.php

Namespace

Drupal\fixture_manipulator

File

core/modules/package_manager/tests/modules/fixture_manipulator/src/ProcessFactory.php

View source
<?php

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

use PhpTuf\ComposerStager\API\Path\Value\PathInterface;
use PhpTuf\ComposerStager\API\Process\Factory\ProcessFactoryInterface;
use PhpTuf\ComposerStager\API\Process\Service\ProcessInterface;

/**
 * Process factory that always sets the COMPOSER_MIRROR_PATH_REPOS env variable.
 *
 * This is necessary because the fake_site fixture is built from a Composer-type
 * repository, which will normally try to symlink packages which are installed
 * from local directories, which in turn will break Package Manager because it
 * does not support symlinks pointing outside the main code base. The
 * COMPOSER_MIRROR_PATH_REPOS environment variable forces Composer to mirror,
 * rather than symlink, local directories when installing packages.
 *
 * @see \Drupal\fixture_manipulator\FixtureManipulator::setUpRepos()
 */
final class ProcessFactory implements ProcessFactoryInterface {
    
    /**
     * Constructs a ProcessFactory object.
     *
     * @param \PhpTuf\ComposerStager\API\Process\Factory\ProcessFactoryInterface $decorated
     *   The decorated process factory service.
     */
    public function __construct(ProcessFactoryInterface $decorated) {
    }
    
    /**
     * {@inheritdoc}
     */
    public function create(array $command, ?PathInterface $cwd = NULL, array $env = []) : ProcessInterface {
        $process = $this->decorated
            ->create($command, $cwd, $env);
        $env = $process->getEnv();
        $env['COMPOSER_MIRROR_PATH_REPOS'] = '1';
        $process->setEnv($env);
        return $process;
    }

}

Classes

Title Deprecated Summary
ProcessFactory Process factory that always sets the COMPOSER_MIRROR_PATH_REPOS env variable.

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