diff --git a/scripts/arcanist.php b/scripts/arcanist.php --- a/scripts/arcanist.php +++ b/scripts/arcanist.php @@ -80,6 +80,9 @@ } $configuration_manager = new ArcanistConfigurationManager(); + if ($custom_arcrc) { + $configuration_manager->setUserConfigurationFileLocation($custom_arcrc); + } $global_config = $configuration_manager->readUserArcConfig(); $system_config = $configuration_manager->readSystemArcConfig(); @@ -141,9 +144,6 @@ $working_copy); } - if ($custom_arcrc) { - $configuration_manager->setUserConfigurationFileLocation($custom_arcrc); - } $user_config = $configuration_manager->readUserConfigurationFile(); $config_class = $working_copy->getProjectConfig('arcanist_configuration'); diff --git a/src/configuration/ArcanistConfigurationManager.php b/src/configuration/ArcanistConfigurationManager.php --- a/src/configuration/ArcanistConfigurationManager.php +++ b/src/configuration/ArcanistConfigurationManager.php @@ -10,6 +10,7 @@ private $runtimeConfig = array(); private $workingCopy = null; private $customArcrcFilename = null; + private $userConfigCache = null; public function setWorkingCopyIdentity( ArcanistWorkingCopyIdentity $working_copy) { @@ -159,13 +160,11 @@ * @{method:readUserArcConfig}. */ public function readUserConfigurationFile() { - static $user_config; - if ($user_config === null) { + if ($this->userConfigCache === null) { $user_config = array(); - $user_config_path = self::getUserConfigurationFileLocation(); + $user_config_path = $this->getUserConfigurationFileLocation(); $console = PhutilConsole::getConsole(); - if (Filesystem::pathExists($user_config_path)) { $console->writeLog( "%s\n", @@ -212,8 +211,10 @@ $user_config_path)); } + $this->userConfigCache = $user_config; } - return $user_config; + + return $this->userConfigCache; } /** @@ -224,7 +225,7 @@ $json_encoder = new PhutilJSON(); $json = $json_encoder->encodeFormatted($config); - $path = self::getUserConfigurationFileLocation(); + $path = $this->getUserConfigurationFileLocation(); Filesystem::writeFile($path, $json); if (!phutil_is_windows()) { @@ -239,6 +240,7 @@ } $this->customArcrcFilename = $custom_arcrc; + $this->userConfigCache = null; } public function getUserConfigurationFileLocation() { @@ -254,16 +256,15 @@ } public function readUserArcConfig() { - return idx(self::readUserConfigurationFile(), 'config', array()); + return idx($this->readUserConfigurationFile(), 'config', array()); } public function writeUserArcConfig(array $options) { - $config = self::readUserConfigurationFile(); + $config = $this->readUserConfigurationFile(); $config['config'] = $options; - self::writeUserConfigurationFile($config); + $this->writeUserConfigurationFile($config); } - public function getSystemArcConfigLocation() { if (phutil_is_windows()) { return Filesystem::resolvePath( @@ -278,7 +279,7 @@ static $system_config; if ($system_config === null) { $system_config = array(); - $system_config_path = self::getSystemArcConfigLocation(); + $system_config_path = $this->getSystemArcConfigLocation(); $console = PhutilConsole::getConsole();