protected function execute(InputInterface $input, OutputInterface $output)
{
$projectRoot = $this->getProjectRoot();
if (!$projectRoot) {
throw new RootNotFoundException();
}
$projectConfig = LocalProject::getProjectConfig($projectRoot);
$current_group = isset($projectConfig['alias-group']) ? $projectConfig['alias-group'] : $projectConfig['id'];
if ($input->getOption('pipe')) {
$output->writeln($current_group);
return 0;
}
$project = $this->getCurrentProject();
$new_group = ltrim($input->getOption('group'), '@');
$homeDir = $this->getHomeDir();
$drushHelper = new DrushHelper($output);
$drushHelper->ensureInstalled();
$drushHelper->setHomeDir($homeDir);
$aliases = $drushHelper->getAliases($current_group);
if ($new_group && $new_group != $current_group || !$aliases || $input->getOption('recreate')) {
$new_group = $new_group ?: $current_group;
$this->stdErr->writeln("Creating Drush aliases in the group <info>@{$new_group}</info>");
$questionHelper = $this->getHelper('question');
if ($new_group != $current_group) {
$existing = $drushHelper->getAliases($new_group);
if ($existing && $new_group != $current_group) {
$question = "The Drush alias group <info>@{$new_group}</info> already exists. Overwrite?";
if (!$questionHelper->confirm($question, $input, $output, false)) {
return 1;
}
}
LocalProject::writeCurrentProjectConfig('alias-group', $new_group, $projectRoot);
}
$environments = $this->getEnvironments($project, true, false);
$drushHelper->createAliases($project, $projectRoot, $environments, $current_group);
if ($new_group != $current_group) {
$drushDir = $homeDir . '/.drush';
$oldFile = $drushDir . '/' . $current_group . '.aliases.drushrc.php';
if (file_exists($oldFile)) {
if ($questionHelper->confirm("Delete old Drush alias group <info>@{$current_group}</info>?", $input, $this->stdErr)) {
unlink($oldFile);
}
}
}
// Clear the Drush cache now that the aliases have been updated.
$drushHelper->clearCache();
// Read the new aliases.
$aliases = $drushHelper->getAliases($new_group);
}
if ($aliases) {
$this->stdErr->writeln("Drush aliases for <info>{$project->title}</info> ({$project->id}):");
foreach (explode("\n", $aliases) as $alias) {
$output->writeln(' @' . $alias);
}
}
return 0;
}