diff --git a/scripts/init/lib.php b/scripts/init/lib.php index 0b756b7c32..659c50802d 100644 --- a/scripts/init/lib.php +++ b/scripts/init/lib.php @@ -28,5 +28,8 @@ function init_phabricator_script(array $options) { phutil_load_library(dirname(__FILE__).'/../../src/'); $config_optional = $options['config.optional']; - PhabricatorEnv::initializeScriptEnvironment($config_optional); + $no_extensions = $options['no-extensions'] ?? false; + PhabricatorEnv::initializeScriptEnvironment( + $config_optional, + $no_extensions); } diff --git a/src/infrastructure/env/PhabricatorEnv.php b/src/infrastructure/env/PhabricatorEnv.php index 15f6efe22c..04f6b632e6 100644 --- a/src/infrastructure/env/PhabricatorEnv.php +++ b/src/infrastructure/env/PhabricatorEnv.php @@ -68,11 +68,13 @@ final class PhabricatorEnv extends Phobject { * @phutil-external-symbol class PhabricatorStartup */ public static function initializeWebEnvironment() { - self::initializeCommonEnvironment(false); + self::initializeCommonEnvironment(false, false); } - public static function initializeScriptEnvironment($config_optional) { - self::initializeCommonEnvironment($config_optional); + public static function initializeScriptEnvironment( + $config_optional, + $no_extensions) { + self::initializeCommonEnvironment($config_optional, $no_extensions); // NOTE: This is dangerous in general, but we know we're in a script context // and are not vulnerable to CSRF. @@ -88,11 +90,13 @@ final class PhabricatorEnv extends Phobject { } - private static function initializeCommonEnvironment($config_optional) { + private static function initializeCommonEnvironment( + $config_optional, + $no_extensions) { PhutilErrorHandler::initialize(); self::resetUmask(); - self::buildConfigurationSourceStack($config_optional); + self::buildConfigurationSourceStack($config_optional, $no_extensions); // Force a valid timezone. If both PHP and Phabricator configuration are // invalid, use UTC. @@ -179,7 +183,8 @@ final class PhabricatorEnv extends Phobject { } } - private static function buildConfigurationSourceStack($config_optional) { + private static function buildConfigurationSourceStack( + $config_optional, $no_extensions) { self::dropConfigCache(); $stack = new PhabricatorConfigStackSource(); @@ -203,8 +208,10 @@ final class PhabricatorEnv extends Phobject { // If the install overrides the database adapter, we might need to load // the database adapter class before we can push on the database config. // This config is locked and can't be edited from the web UI anyway. - foreach (self::getEnvConfig('load-libraries') as $library) { - phutil_load_library($library); + if (!$no_extensions) { + foreach (self::getEnvConfig('load-libraries') as $library) { + phutil_load_library($library); + } } // Drop any class map caches, since they will have generated without diff --git a/src/infrastructure/testing/PhabricatorTestCase.php b/src/infrastructure/testing/PhabricatorTestCase.php index 64dc22d366..10302733c1 100644 --- a/src/infrastructure/testing/PhabricatorTestCase.php +++ b/src/infrastructure/testing/PhabricatorTestCase.php @@ -57,9 +57,18 @@ abstract class PhabricatorTestCase extends PhutilTestCase { return $config; } + /** @phutil-external-symbol function init_phabricator_script */ public function willRunTestCases(array $test_cases) { $root = dirname(phutil_get_library_root('phabricator')); - require_once $root.'/scripts/__init_script__.php'; + if (!function_exists('init_phabricator_script')) { + // Run the initialization routines only if nothing else already did + require_once $root.'/scripts/init/lib.php'; + init_phabricator_script( + array( + 'config.optional' => false, + 'no-extensions' => true, + )); + } $config = $this->getComputedConfiguration();