Mercurial > hg > cmmr2012-drupal-site
diff vendor/consolidation/site-process/src/Transport/DockerComposeTransport.php @ 5:12f9dff5fda9 tip
Update to Drupal core 8.7.1
author | Chris Cannam |
---|---|
date | Thu, 09 May 2019 15:34:47 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/consolidation/site-process/src/Transport/DockerComposeTransport.php Thu May 09 15:34:47 2019 +0100 @@ -0,0 +1,107 @@ +<?php + +namespace Consolidation\SiteProcess\Transport; + +use Consolidation\SiteProcess\SiteProcess; +use Consolidation\SiteAlias\SiteAliasInterface; +use Consolidation\SiteProcess\Util\Shell; +use Consolidation\Config\ConfigInterface; + +/** + * DockerComposeTransport knows how to wrap a command such that it executes + * on a Docker Compose service. + */ +class DockerComposeTransport implements TransportInterface +{ + protected $tty; + protected $siteAlias; + protected $cd_remote; + + public function __construct(SiteAliasInterface $siteAlias) + { + $this->siteAlias = $siteAlias; + } + + /** + * @inheritdoc + */ + public function configure(SiteProcess $process) + { + $this->tty = $process->isTty(); + } + + /** + * @inheritdoc + */ + public function wrap($args) + { + $transport = $this->getTransport(); + $transportOptions = $this->getTransportOptions(); + $commandToExecute = $this->getCommandToExecute($args); + + return array_merge( + $transport, + $transportOptions, + $commandToExecute + ); + } + + /** + * @inheritdoc + */ + public function addChdir($cd, $args) + { + $this->cd_remote = $cd; + return $args; + } + + /** + * getTransport returns the transport along with the docker-compose + * project in case it is defined. + */ + protected function getTransport() + { + $transport = ['docker-compose']; + $project = $this->siteAlias->get('docker.project', ''); + $options = $this->siteAlias->get('docker.compose.options', ''); + if ($project && (strpos($options, '-p') === false || strpos($options, '--project') === false)) { + $transport = array_merge($transport, ['-p', $project]); + } + if ($options) { + $transport[] = Shell::preEscaped($options); + } + return array_merge($transport, ['exec']); + } + + /** + * getTransportOptions returns the transport options for the tranport + * mechanism itself + */ + protected function getTransportOptions() + { + $transportOptions = [ + $this->siteAlias->get('docker.service', ''), + ]; + if ($options = $this->siteAlias->get('docker.exec.options', '')) { + array_unshift($transportOptions, Shell::preEscaped($options)); + } + if (!$this->tty) { + array_unshift($transportOptions, '-T'); + } + if ($this->cd_remote) { + $transportOptions = array_merge(['--workdir', $this->cd_remote], $transportOptions); + } + return array_filter($transportOptions); + } + + /** + * getCommandToExecute processes the arguments for the command to + * be executed such that they are appropriate for the transport mechanism. + * + * Nothing to do for this transport. + */ + protected function getCommandToExecute($args) + { + return $args; + } +}