private function getCommonCommandEnvironment()
 {
     $env = array('LANG' => 'en_US.UTF-8', 'PHABRICATOR_ENV' => PhabricatorEnv::getSelectedEnvironmentName());
     switch ($this->getVersionControlSystem()) {
         case PhabricatorRepositoryType::REPOSITORY_TYPE_SVN:
             break;
         case PhabricatorRepositoryType::REPOSITORY_TYPE_GIT:
             // NOTE: See T2965. Some time after Git 1.7.5.4, Git started fataling if
             // it can not read $HOME. For many users, $HOME points at /root (this
             // seems to be a default result of Apache setup). Instead, explicitly
             // point $HOME at a readable, empty directory so that Git looks for the
             // config file it's after, fails to locate it, and moves on. This is
             // really silly, but seems like the least damaging approach to
             // mitigating the issue.
             $root = dirname(phutil_get_library_root('phabricator'));
             $env['HOME'] = $root . '/support/empty/';
             break;
         case PhabricatorRepositoryType::REPOSITORY_TYPE_MERCURIAL:
             // NOTE: This overrides certain configuration, extensions, and settings
             // which make Mercurial commands do random unusual things.
             $env['HGPLAIN'] = 1;
             break;
         default:
             throw new Exception(pht('Unrecognized version control system.'));
     }
     return $env;
 }
 private function newCommonEnvironment()
 {
     $repository = $this->getRepository();
     $env = array();
     // NOTE: Force the language to "en_US.UTF-8", which overrides locale
     // settings. This makes stuff print in English instead of, e.g., French,
     // so we can parse the output of some commands, error messages, etc.
     $env['LANG'] = 'en_US.UTF-8';
     // Propagate PHABRICATOR_ENV explicitly. For discussion, see T4155.
     $env['PHABRICATOR_ENV'] = PhabricatorEnv::getSelectedEnvironmentName();
     $as_device = $this->getConnectAsDevice();
     $credential_phid = $this->getCredentialPHID();
     if ($as_device) {
         $device = AlmanacKeys::getLiveDevice();
         if (!$device) {
             throw new Exception(pht('Attempting to build a reposiory command (for repository "%s") ' . 'as device, but this host ("%s") is not configured as a cluster ' . 'device.', $repository->getDisplayName(), php_uname('n')));
         }
         if ($credential_phid) {
             throw new Exception(pht('Attempting to build a repository command (for repository "%s"), ' . 'but the CommandEngine is configured to connect as both the ' . 'current cluster device ("%s") and with a specific credential ' . '("%s"). These options are mutually exclusive. Connections must ' . 'authenticate as one or the other, not both.', $repository->getDisplayName(), $device->getName(), $credential_phid));
         }
     }
     if ($this->isAnySSHProtocol()) {
         if ($credential_phid) {
             $env['PHABRICATOR_CREDENTIAL'] = $credential_phid;
         }
         if ($as_device) {
             $env['PHABRICATOR_AS_DEVICE'] = 1;
         }
     }
     return $env;
 }