directories() ->depth($depth) ->ignoreUnreadableDirs() ->exclude($excludePaths) ->in($path); foreach ($directories as $directory) { $repository = new SourceRepository($directory->getRealPath()); try { $system = $this->getSystem($repository); } catch (InvalidRepositoryException) { continue; } $this->addRepository(new Repository($system, $repository, $directory->getBasename())); } } } public function getSystem(SourceRepository $repository): System { foreach ($this->systems as $system) { if ($system->isValidRepository($repository)) { return $system; } } throw new InvalidRepositoryException($repository->getPath()); } public function addRepository(Repository $repository): void { $this->repositories[$repository->getName()] = $repository; } public function getRepository(string $name): Repository { if (!isset($this->repositories[$name])) { throw new RepositoryNotFoundException($name); } return $this->repositories[$name]; } public function getRepositories(): array { return $this->repositories; } }