private function createDeployer($config)
{
if (empty($config['remote']) || !($urlParts = parse_url($config['remote'])) || !isset($urlParts['scheme'], $urlParts['host'])) {
throw new \Exception("Missing or invalid 'remote' URL in config.");
}
if (isset($config['user'])) {
$urlParts['user'] = urlencode($config['user']);
}
if (isset($config['password'])) {
$urlParts['pass'] = urlencode($config['password']);
}
$server = $urlParts['scheme'] === 'sftp' ? new SshServer($urlParts) : new FtpServer($urlParts, (bool) $config['passivemode']);
if (!preg_match('#/|\\\\|[a-z]:#iA', $config['local'])) {
if ($config['local'] && getcwd() !== dirname($this->configFile)) {
$this->logger->log('WARNING: the "local" path is now relative to the directory where ' . basename($this->configFile) . ' is placed', 'red');
}
$config['local'] = dirname($this->configFile) . '/' . $config['local'];
}
$deployment = new Deployer($server, $config['local'], $this->logger);
if ($config['preprocess']) {
$deployment->preprocessMasks = $config['preprocess'] == 1 ? ['*.js', '*.css'] : self::toArray($config['preprocess']);
// intentionally ==
$preprocessor = new Preprocessor($this->logger);
$deployment->addFilter('js', [$preprocessor, 'expandApacheImports']);
$deployment->addFilter('js', [$preprocessor, 'compressJs'], TRUE);
$deployment->addFilter('css', [$preprocessor, 'expandApacheImports']);
$deployment->addFilter('css', [$preprocessor, 'expandCssImports']);
$deployment->addFilter('css', [$preprocessor, 'compressCss'], TRUE);
}
$deployment->ignoreMasks = array_merge($this->ignoreMasks, self::toArray($config['ignore']));
$deployment->deploymentFile = empty($config['deploymentfile']) ? $deployment->deploymentFile : $config['deploymentfile'];
$deployment->allowDelete = $config['allowdelete'];
$deployment->toPurge = self::toArray($config['purge'], TRUE);
$deployment->runBefore = self::toArray($config['before'], TRUE);
$deployment->runAfterUpload = self::toArray($config['afterupload'], TRUE);
$deployment->runAfter = self::toArray($config['after'], TRUE);
$deployment->testMode = !empty($config['test']) || $this->mode === 'test';
return $deployment;
}