/** @return Deployer */ private function createDeployer($config) { $config = array_change_key_case($config, CASE_LOWER) + ['local' => '', 'passivemode' => TRUE, 'ignore' => '', 'allowdelete' => TRUE, 'purge' => '', 'before' => '', 'after' => '', 'preprocess' => TRUE]; if (empty($config['remote']) || !parse_url($config['remote'])) { throw new \Exception("Missing or invalid 'remote' URL in config."); } $server = parse_url($config['remote'], PHP_URL_SCHEME) === 'sftp' ? new SshServer($config['remote']) : new FtpServer($config['remote'], (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(['*.bak', '.svn', '.git*', 'Thumbs.db', '.DS_Store'], 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->runAfter = self::toArray($config['after'], TRUE); $deployment->testMode = !empty($config['test']) || $this->mode === 'test'; return $deployment; }
/** @return Deployer */ 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; }