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 @@ -159,10 +159,15 @@ * @{method:readUserArcConfig}. */ public function readUserConfigurationFile() { - static $user_config; - if ($user_config === null) { + + // NOTE: This cache is per-path because `--arcrc-file` can adjust the + // file which is read. + + static $user_configs = array(); + $user_config_path = self::getUserConfigurationFileLocation(); + + if (!isset($user_configs[$user_config_path])) { $user_config = array(); - $user_config_path = self::getUserConfigurationFileLocation(); $console = PhutilConsole::getConsole(); @@ -212,8 +217,10 @@ $user_config_path)); } + $user_configs[$user_config_path] = $user_config; } - return $user_config; + + return $user_configs[$user_config_path]; } /**