public function getCurrentEnvironment(Project $expectedProject = null, $refresh = null)
    {
        if (!($projectRoot = $this->getProjectRoot())
            || !($project = $this->getCurrentProject())
            || ($expectedProject !== null && $expectedProject->id !== $project->id)) {
            return false;
        }

        /** @var \Platformsh\Cli\Service\Git $git */
        $git = $this->getService('git');
        $git->setDefaultRepositoryDir($this->getProjectRoot());
        /** @var \Platformsh\Cli\Local\LocalProject $localProject */
        $localProject = $this->getService('local.project');
        $config = $localProject->getProjectConfig($projectRoot);

        // Check if there is a manual mapping set for the current branch.
        if (!empty($config['mapping'])
            && ($currentBranch = $git->getCurrentBranch())
            && !empty($config['mapping'][$currentBranch])) {
            $environment = $this->api()->getEnvironment($config['mapping'][$currentBranch], $project, $refresh);
            if ($environment) {
                $this->debug('Found mapped environment for branch ' . $currentBranch . ': ' . $this->api()->getEnvironmentLabel($environment));
                return $environment;
            } else {
                unset($config['mapping'][$currentBranch]);
                $localProject->writeCurrentProjectConfig($config, $projectRoot);
            }
        }

        // Check whether the user has a Git upstream set to a remote environment
        // ID.
        $upstream = $git->getUpstream();
        if ($upstream && strpos($upstream, '/') !== false) {
            list(, $potentialEnvironment) = explode('/', $upstream, 2);
            $environment = $this->api()->getEnvironment($potentialEnvironment, $project, $refresh);
            if ($environment) {
                $this->debug('Selected environment ' . $this->api()->getEnvironmentLabel($environment) . ', 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 = $git->getCurrentBranch())) {
            $environment = $this->api()->getEnvironment($currentBranch, $project, $refresh);
            if (!$environment) {
                // Try a sanitized version of the branch name too.
                $currentBranchSanitized = Environment::sanitizeId($currentBranch);
                if ($currentBranchSanitized !== $currentBranch) {
                    $environment = $this->api()->getEnvironment($currentBranchSanitized, $project, $refresh);
                }
            }
            if ($environment) {
                $this->debug('Selected environment ' . $this->api()->getEnvironmentLabel($environment) . ' based on branch name: ' . $currentBranch);
                return $environment;
            }
        }

        return false;
    }
public function getCurrentEnvironment(Project $expectedProject = null, $refresh = null)
    {
        if (!($projectRoot = $this->getProjectRoot())
            || !($project = $this->getCurrentProject())
            || ($expectedProject !== null && $expectedProject->id !== $project->id)) {
            return false;
        }

        /** @var \Platformsh\Cli\Service\Git $git */
        $git = $this->getService('git');
        $git->setDefaultRepositoryDir($this->getProjectRoot());
        /** @var \Platformsh\Cli\Local\LocalProject $localProject */
        $localProject = $this->getService('local.project');
        $config = $localProject->getProjectConfig($projectRoot);

        // Check if there is a manual mapping set for the current branch.
        if (!empty($config['mapping'])
            && ($currentBranch = $git->getCurrentBranch())
            && !empty($config['mapping'][$currentBranch])) {
            $environment = $this->api()->getEnvironment($config['mapping'][$currentBranch], $project, $refresh);
            if ($environment) {
                $this->debug('Found mapped environment for branch ' . $currentBranch . ': ' . $this->api()->getEnvironmentLabel($environment));
                return $environment;
            } else {
                unset($config['mapping'][$currentBranch]);
                $localProject->writeCurrentProjectConfig($config, $projectRoot);
            }
        }

        // Check whether the user has a Git upstream set to a remote environment
        // ID.
        $upstream = $git->getUpstream();
        if ($upstream && strpos($upstream, '/') !== false) {
            list(, $potentialEnvironment) = explode('/', $upstream, 2);
            $environment = $this->api()->getEnvironment($potentialEnvironment, $project, $refresh);
            if ($environment) {
                $this->debug('Selected environment ' . $this->api()->getEnvironmentLabel($environment) . ', 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 = $git->getCurrentBranch())) {
            $environment = $this->api()->getEnvironment($currentBranch, $project, $refresh);
            if (!$environment) {
                // Try a sanitized version of the branch name too.
                $currentBranchSanitized = Environment::sanitizeId($currentBranch);
                if ($currentBranchSanitized !== $currentBranch) {
                    $environment = $this->api()->getEnvironment($currentBranchSanitized, $project, $refresh);
                }
            }
            if ($environment) {
                $this->debug('Selected environment ' . $this->api()->getEnvironmentLabel($environment) . ' based on branch name: ' . $currentBranch);
                return $environment;
            }
        }

        return false;
    }
public function getCurrentEnvironment ( Project $ expectedProject = null , $ refresh = null ) { if ( ! ( $ projectRoot = $ this -> getProjectRoot ( ) ) || ! ( $ project = $ this -> getCurrentProject ( ) ) || ( $ expectedProject !== null && $ expectedProject -> id !== $ project -> id ) ) { return false ; } /** @var \Platformsh\Cli\Service\Git $git */ $ git = $ this -> getService ( 'git' ) ; $ git -> setDefaultRepositoryDir ( $ this -> getProjectRoot ( ) ) ; /** @var \Platformsh\Cli\Local\LocalProject $localProject */ $ localProject = $ this -> getService ( 'local.project' ) ; $ config = $ localProject -> getProjectConfig ( $ projectRoot ) ; // Check if there is a manual mapping set for the current branch. if ( ! empty ( $ config [ 'mapping' ] ) && ( $ currentBranch = $ git -> getCurrentBranch ( ) ) && ! empty ( $ config [ 'mapping' ] [ $ currentBranch ] ) ) { $ environment = $ this -> api ( ) -> getEnvironment ( $ config [ 'mapping' ] [ $ currentBranch ] , $ project , $ refresh ) ; if ( $ environment ) { $ this -> debug ( 'Found mapped environment for branch ' . $ currentBranch . ': ' . $ this -> api ( ) -> getEnvironmentLabel ( $ environment ) ) ; return $ environment ; } else { unset ( $ config [ 'mapping' ] [ $ currentBranch ] ) ; $ localProject -> writeCurrentProjectConfig ( $ config , $ projectRoot ) ; } } // Check whether the user has a Git upstream set to a remote environment // ID. $ upstream = $ git -> getUpstream ( ) ; if ( $ upstream && strpos ( $ upstream , '/' ) !== false ) { list ( , $ potentialEnvironment ) = explode ( '/' , $ upstream , 2 ) ; $ environment = $ this -> api ( ) -> getEnvironment ( $ potentialEnvironment , $ project , $ refresh ) ; if ( $ environment ) { $ this -> debug ( 'Selected environment ' . $ this -> api ( ) -> getEnvironmentLabel ( $ environment ) . ', 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 = $ git -> getCurrentBranch ( ) ) ) { $ environment = $ this -> api ( ) -> getEnvironment ( $ currentBranch , $ project , $ refresh ) ; if ( ! $ environment ) { // Try a sanitized version of the branch name too. $ currentBranchSanitized = Environment :: sanitizeId ( $ currentBranch ) ; if ( $ currentBranchSanitized !== $ currentBranch ) { $ environment = $ this -> api ( ) -> getEnvironment ( $ currentBranchSanitized , $ project , $ refresh ) ; } } if ( $ environment ) { $ this -> debug ( 'Selected environment ' . $ this -> api ( ) -> getEnvironmentLabel ( $ environment ) . ' based on branch name: ' . $ currentBranch ) ; return $ environment ; } } return false ; }
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.
Get the current environment if the user is in a project directory .