writeCurrentProjectConfig() 공개 메소드

Configuration is stored as YAML, in the location configured by 'local.project_config'.
public writeCurrentProjectConfig ( array $config, string $projectRoot = null, boolean $merge = false ) : array
$config array The configuration.
$projectRoot string The project root.
$merge boolean Whether to merge with existing configuration.
리턴 array The updated project configuration.
 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;
 }
예제 #2
0
 /**
  * Get the current environment if the user is in a project directory.
  *
  * @param Project $expectedProject The expected project.
  * @param bool|null $refresh Whether to refresh the environments or projects
  *                           cache.
  *
  * @return Environment|false The current environment.
  */
 public function getCurrentEnvironment(Project $expectedProject = null, $refresh = null)
 {
     if (!($projectRoot = $this->getProjectRoot()) || !($project = $this->getCurrentProject()) || $expectedProject !== null && $expectedProject->id !== $project->id) {
         return false;
     }
     $gitHelper = $this->getHelper('git');
     $gitHelper->setDefaultRepositoryDir($this->getProjectRoot());
     $config = $this->localProject->getProjectConfig($projectRoot);
     // Check if there is a manual mapping set for the current branch.
     if (!empty($config['mapping']) && ($currentBranch = $gitHelper->getCurrentBranch()) && !empty($config['mapping'][$currentBranch])) {
         $environment = $this->api()->getEnvironment($config['mapping'][$currentBranch], $project, $refresh);
         if ($environment) {
             $this->debug('Found mapped environment for branch ' . $currentBranch . ': ' . $environment->id);
             return $environment;
         } else {
             unset($config['mapping'][$currentBranch]);
             $this->localProject->writeCurrentProjectConfig($config, $projectRoot);
         }
     }
     // Check whether the user has a Git upstream set to a remote environment
     // ID.
     $upstream = $gitHelper->getUpstream();
     if ($upstream && strpos($upstream, '/') !== false) {
         list(, $potentialEnvironment) = explode('/', $upstream, 2);
         $environment = $this->api()->getEnvironment($potentialEnvironment, $project, $refresh);
         if ($environment) {
             $this->debug('Selected environment ' . $potentialEnvironment . ', based on Git upstream: ' . $upstream);
             return $environment;
         }
     }
     // There is no Git remote set. Fall back to trying the current branch
     // name.
     if (!empty($currentBranch) || ($currentBranch = $gitHelper->getCurrentBranch())) {
         $environment = $this->api()->getEnvironment($currentBranch, $project, $refresh);
         if (!$environment) {
             // Try a sanitized version of the branch name too.
             $currentBranchSanitized = Environment::sanitizeId($currentBranch);
             $environment = $this->api()->getEnvironment($currentBranchSanitized, $project, $refresh);
         }
         if ($environment) {
             $this->debug('Selected environment ' . $environment->id . ' based on branch name: ' . $currentBranch);
             return $environment;
         }
     }
     return false;
 }
 /**
  * @param string $sourceDir
  *
  * @return string
  */
 protected function createDummyProject($sourceDir)
 {
     if (!is_dir($sourceDir)) {
         throw new \InvalidArgumentException("Not a directory: {$sourceDir}");
     }
     $projectRoot = $this->createTempSubDir('project');
     // Set up the project.
     $fsHelper = new FilesystemHelper();
     $fsHelper->copyAll($sourceDir, $projectRoot);
     // @todo perhaps make some of these steps unnecessary
     $local = new LocalProject();
     $cwd = getcwd();
     chdir($projectRoot);
     exec('git init');
     chdir($cwd);
     $local->ensureGitRemote($projectRoot, 'testProjectId');
     $local->writeCurrentProjectConfig(['id' => 'testProjectId'], $projectRoot);
     return $projectRoot;
 }
예제 #4
0
 /**
  * Set a value in the project configuration.
  *
  * @param string $key
  * @param mixed $value
  * @param string $projectRoot
  */
 protected function setProjectConfig($key, $value, $projectRoot)
 {
     unset(self::$projectConfig[$projectRoot]);
     LocalProject::writeCurrentProjectConfig($key, $value, $projectRoot);
 }
 protected function execute(InputInterface $input, OutputInterface $output)
 {
     $project = $this->getCurrentProject();
     if (!$project) {
         throw new \Exception('This can only be run from inside a project directory');
     }
     $projectRoot = $this->getProjectRoot();
     $projectConfig = LocalProject::getProjectConfig($projectRoot);
     $current_group = isset($projectConfig['alias-group']) ? $projectConfig['alias-group'] : $project['id'];
     if ($input->getOption('pipe') || !$this->isTerminal($output)) {
         $output->writeln($current_group);
         return 0;
     }
     $new_group = ltrim($input->getOption('group'), '@');
     $homeDir = $this->getHelper('fs')->getHomeDirectory();
     $drushHelper = new DrushHelper($output);
     $drushHelper->ensureInstalled();
     $drushHelper->setHomeDir($homeDir);
     if ($new_group && $new_group != $current_group) {
         $questionHelper = $this->getHelper('question');
         $existing = $drushHelper->getAliases($new_group);
         if ($existing) {
             if (!$questionHelper->confirm("The alias group <info>@{$new_group}</info> already exists. Overwrite?", $input, $output, false)) {
                 return 1;
             }
         }
         $project['alias-group'] = $new_group;
         LocalProject::writeCurrentProjectConfig('alias-group', $new_group, $projectRoot);
         $output->write("Creating Drush aliases in the group <info>@{$new_group}</info>...");
         $environments = $this->getEnvironments($project, true, false);
         $drushHelper->createAliases($project, $projectRoot, $environments);
         $output->writeln(" done");
         $drushDir = $homeDir . '/.drush';
         $oldFile = $drushDir . '/' . $current_group . '.aliases.drushrc.php';
         if (file_exists($oldFile)) {
             if ($questionHelper->confirm("Delete old alias group <info>@{$current_group}</info>?", $input, $output)) {
                 unlink($oldFile);
             }
         }
         // Clear the Drush cache now that the aliases have been updated.
         $drushHelper->clearCache();
         $current_group = $new_group;
     } elseif ($input->getOption('recreate')) {
         $output->write("Recreating Drush aliases...");
         $environments = $this->getEnvironments($project, true, false);
         $drushHelper->createAliases($project, $projectRoot, $environments);
         $drushHelper->clearCache();
         $output->writeln(' done');
     }
     // Don't run expensive drush calls if they are not needed.
     if ($input->getOption('quiet')) {
         return 0;
     }
     $aliases = $drushHelper->getAliases($current_group);
     if ($aliases) {
         $output->writeln("Aliases for <info>{$project['name']}</info> ({$project['id']}):");
         foreach (explode("\n", $aliases) as $alias) {
             $output->writeln('    @' . $alias);
         }
     }
     return 0;
 }