} final public static function newFromDiffusionRequest( DiffusionRequest $request) { $repository = $request->getRepository(); switch ($repository->getVersionControlSystem()) { case PhabricatorRepositoryType::REPOSITORY_TYPE_GIT: // TODO: Verify local-path? $class = 'DiffusionGitBrowseQuery'; break; case PhabricatorRepositoryType::REPOSITORY_TYPE_SVN: $class = 'DiffusionSvnBrowseQuery'; break; default: throw new Exception("Unsupported VCS!"); } PhutilSymbolLoader::loadClass($class); $query = new $class(); $query->request = $request; return $query; } final protected function getRequest() { return $this->request; } final public function getReasonForEmptyResultSet() { return $this->reason; } final public function getExistedAtCommit() { return $this->existedAtCommit; } final public function getDeletedAtCommit() { return $this->deletedAtCommit; } final public function loadPaths() { return $this->executeQuery(); } abstract protected function executeQuery(); }