Mercurial > hg > cmmr2012-drupal-site
diff vendor/consolidation/site-process/src/Transport/SshTransport.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/SshTransport.php Thu May 09 15:34:47 2019 +0100 @@ -0,0 +1,92 @@ +<?php + +namespace Consolidation\SiteProcess\Transport; + +use Consolidation\SiteProcess\SiteProcess; +use Consolidation\SiteProcess\Util\Escape; +use Consolidation\SiteAlias\SiteAliasInterface; +use Consolidation\SiteProcess\Util\Shell; +use Consolidation\Config\ConfigInterface; + +/** + * SshTransport knows how to wrap a command such that it runs on a remote + * system via the ssh cli. + */ +class SshTransport implements TransportInterface +{ + protected $tty; + protected $siteAlias; + + public function __construct(SiteAliasInterface $siteAlias) + { + $this->siteAlias = $siteAlias; + } + + /** + * @inheritdoc + */ + public function configure(SiteProcess $process) + { + $this->tty = $process->isTty(); + } + + /** + * inheritdoc + */ + public function wrap($args) + { + $transport = ['ssh']; + $transportOptions = $this->getTransportOptions(); + $commandToExecute = $this->getCommandToExecute($args); + + return array_merge( + $transport, + $transportOptions, + $commandToExecute + ); + } + + /** + * @inheritdoc + */ + public function addChdir($cd_remote, $args) + { + return array_merge( + [ + 'cd', + $cd_remote, + Shell::op('&&'), + ], + $args + ); + } + + /** + * getTransportOptions returns the transport options for the tranport + * mechanism itself + */ + protected function getTransportOptions() + { + $transportOptions = [ + Shell::preEscaped($this->siteAlias->get('ssh.options', '-o PasswordAuthentication=no')), + $this->siteAlias->remoteHostWithUser(), + ]; + if ($this->tty) { + array_unshift($transportOptions, '-t'); + } + return $transportOptions; + } + + /** + * getCommandToExecute processes the arguments for the command to + * be executed such that they are appropriate for the transport mechanism. + */ + protected function getCommandToExecute($args) + { + // Escape each argument for the target system and then join + $args = Escape::argsForSite($this->siteAlias, $args); + $commandToExecute = implode(' ', $args); + + return [$commandToExecute]; + } +}