/** * Creates the environment. * * @param string|null $homeDir The path to the home * directory or `null` if * none exists. * @param string $rootDir The path to the project's * root directory. * @param Config $config The configuration. * @param RootPackageFile $rootPackageFile The root package file. * @param ConfigFile $configFile The configuration file or * `null` if none exists. * @param EventDispatcherInterface $dispatcher The event dispatcher. */ public function __construct($homeDir, $rootDir, Config $config, RootPackageFile $rootPackageFile, ConfigFile $configFile = null, EventDispatcherInterface $dispatcher = null) { Assert::directory($rootDir, 'The root directory %s is not a directory.'); parent::__construct($homeDir, $config, $configFile, $dispatcher); $this->rootDir = Path::canonicalize($rootDir); $this->rootPackageFile = $rootPackageFile; }
/** * Creates the context. * * @param string|null $homeDir The path to the * home directory or * `null` if none * exists. * @param string $rootDir The path to the * project's root * directory. * @param Config $config The configuration. * @param RootModuleFile $rootModuleFile The root module * file. * @param ConfigFile|null $configFile The configuration * file or `null` if * none exists. * @param EventDispatcherInterface|null $dispatcher The event * dispatcher. * @param string $env The environment * that Puli is * running in. */ public function __construct($homeDir, $rootDir, Config $config, RootModuleFile $rootModuleFile, ConfigFile $configFile = null, EventDispatcherInterface $dispatcher = null, $env = Environment::DEV) { Assert::directory($rootDir, 'The root directory %s is not a directory.'); Assert::oneOf($env, Environment::all(), 'The environment must be one of: %2$s. Got: %s'); parent::__construct($homeDir, $config, $configFile, $dispatcher); $this->rootDir = Path::canonicalize($rootDir); $this->rootModuleFile = $rootModuleFile; $this->env = $env; }
private function loadConfigFile($homeDir, Config $baseConfig) { if (null === $homeDir) { return null; } Assert::fileExists($homeDir, 'Could not load Puli context: The home directory %s does not exist.'); Assert::directory($homeDir, 'Could not load Puli context: The home directory %s is a file. Expected a directory.'); // Create a storage without the factory manager $configStorage = new ConfigFileStorage($this->getStorage(), $this->getConfigFileSerializer()); $configPath = Path::canonicalize($homeDir) . '/config.json'; try { return $configStorage->loadConfigFile($configPath, $baseConfig); } catch (FileNotFoundException $e) { // It's ok if no config.json exists. We'll work with // DefaultConfig instead return null; } }
/** * Creates the context of a Puli project. * * The home directory is read from the context variable "PULI_HOME". * If this variable is not set, the home directory defaults to: * * * `$HOME/.puli` on Linux, where `$HOME` is the context variable * "HOME". * * `$APPDATA/Puli` on Windows, where `$APPDATA` is the context * variable "APPDATA". * * If none of these variables can be found, an exception is thrown. * * A .htaccess file is put into the home directory to protect it from web * access. * * @param string $rootDir The path to the project. * * @return ProjectContext The project context. */ private function createProjectContext($rootDir, $env) { Assert::fileExists($rootDir, 'Could not load Puli context: The root %s does not exist.'); Assert::directory($rootDir, 'Could not load Puli context: The root %s is a file. Expected a directory.'); $homeDir = self::parseHomeDirectory(); if (null !== $homeDir) { Assert::fileExists($homeDir, 'Could not load Puli context: The home directory %s does not exist.'); Assert::directory($homeDir, 'Could not load Puli context: The home directory %s is a file. Expected a directory.'); // Create a storage without the factory manager $configStorage = new ConfigFileStorage($this->getStorage(), $this->getConfigFileSerializer()); $configPath = Path::canonicalize($homeDir) . '/config.json'; $configFile = $configStorage->loadConfigFile($configPath, new DefaultConfig()); $baseConfig = $configFile->getConfig(); } else { $configFile = null; $baseConfig = new DefaultConfig(); } // Create a storage without the factory manager $packageFileStorage = new PackageFileStorage($this->getStorage(), $this->getPackageFileSerializer()); $rootDir = Path::canonicalize($rootDir); $rootFilePath = $this->rootDir . '/puli.json'; $rootPackageFile = $packageFileStorage->loadRootPackageFile($rootFilePath, $baseConfig); $config = new EnvConfig($rootPackageFile->getConfig()); return new ProjectContext($homeDir, $rootDir, $config, $rootPackageFile, $configFile, $this->dispatcher, $env); }