protected function getMergedEnvironments($base)
{
$projectRoot = $this->getProjectRoot();
if (!$projectRoot) {
throw new RootNotFoundException();
}
/** @var \Platformsh\Cli\Helper\GitHelper $gitHelper */
$gitHelper = $this->getHelper('git');
$gitHelper->setDefaultRepositoryDir($projectRoot);
$this->localProject->ensureGitRemote($projectRoot, $this->getSelectedProject()->getGitUrl());
$remoteName = self::$config->get('detection.git_remote_name');
// Find a list of branches merged on the remote.
$gitHelper->fetch($remoteName);
$mergedBranches = $gitHelper->getMergedBranches($remoteName . '/' . $base, true);
$mergedBranches = array_filter($mergedBranches, function ($mergedBranch) use($remoteName, $base) {
return strpos($mergedBranch, $remoteName) === 0;
});
$stripLength = strlen($remoteName . '/');
$mergedBranches = array_map(function ($mergedBranch) use($stripLength) {
return substr($mergedBranch, $stripLength);
}, $mergedBranches);
if (empty($mergedBranches)) {
return [];
}
// Reconcile this with the list of environments from the API.
$environments = $this->api()->getEnvironments($this->getSelectedProject(), true);
$mergedEnvironments = array_intersect_key($environments, array_flip($mergedBranches));
unset($mergedEnvironments[$base], $mergedEnvironments['master']);
$parent = $environments[$base]['parent'];
if ($parent) {
unset($mergedEnvironments[$parent]);
}
return $mergedEnvironments;
}