Changeset View
Changeset View
Standalone View
Standalone View
src/applications/diffusion/controller/DiffusionServeController.php
| Show First 20 Lines • Show All 199 Lines • ▼ Show 20 Lines | if ($vcs_type != $req_type) { | ||||
| $result = new PhabricatorVCSResponse( | $result = new PhabricatorVCSResponse( | ||||
| 500, | 500, | ||||
| pht('Unknown request type.')); | pht('Unknown request type.')); | ||||
| break; | break; | ||||
| } | } | ||||
| } else { | } else { | ||||
| switch ($vcs_type) { | switch ($vcs_type) { | ||||
| case PhabricatorRepositoryType::REPOSITORY_TYPE_GIT: | case PhabricatorRepositoryType::REPOSITORY_TYPE_GIT: | ||||
| $result = $this->serveGitRequest($repository, $viewer); | |||||
| break; | |||||
| case PhabricatorRepositoryType::REPOSITORY_TYPE_MERCURIAL: | case PhabricatorRepositoryType::REPOSITORY_TYPE_MERCURIAL: | ||||
| $result = $this->serveMercurialRequest($repository, $viewer); | $result = $this->serveVCSRequest($repository, $viewer); | ||||
| break; | break; | ||||
| case PhabricatorRepositoryType::REPOSITORY_TYPE_SVN: | case PhabricatorRepositoryType::REPOSITORY_TYPE_SVN: | ||||
| $result = new PhabricatorVCSResponse( | $result = new PhabricatorVCSResponse( | ||||
| 500, | 500, | ||||
| pht( | pht( | ||||
| 'Phabricator does not support HTTP access to Subversion '. | 'Phabricator does not support HTTP access to Subversion '. | ||||
| 'repositories.')); | 'repositories.')); | ||||
| break; | break; | ||||
| Show All 13 Lines | if ($is_push && ($code == 200)) { | ||||
| PhabricatorRepositoryStatusMessage::TYPE_NEEDS_UPDATE, | PhabricatorRepositoryStatusMessage::TYPE_NEEDS_UPDATE, | ||||
| PhabricatorRepositoryStatusMessage::CODE_OKAY); | PhabricatorRepositoryStatusMessage::CODE_OKAY); | ||||
| unset($unguarded); | unset($unguarded); | ||||
| } | } | ||||
| return $result; | return $result; | ||||
| } | } | ||||
| private function serveVCSRequest( | |||||
| PhabricatorRepository $repository, | |||||
| PhabricatorUser $viewer) { | |||||
| // If this repository is hosted on a service, we need to proxy the request | |||||
| // to a host which can serve it. | |||||
| $is_cluster_request = $this->getRequest()->isProxiedClusterRequest(); | |||||
| $uri = $repository->getAlmanacServiceURI( | |||||
| $viewer, | |||||
| $is_cluster_request, | |||||
| array( | |||||
| 'http', | |||||
| 'https', | |||||
| )); | |||||
| if ($uri) { | |||||
| $future = $this->getRequest()->newClusterProxyFuture($uri); | |||||
| return id(new AphrontHTTPProxyResponse()) | |||||
| ->setHTTPFuture($future); | |||||
| } | |||||
| // Otherwise, we're going to handle the request locally. | |||||
| $vcs_type = $repository->getVersionControlSystem(); | |||||
| switch ($vcs_type) { | |||||
| case PhabricatorRepositoryType::REPOSITORY_TYPE_GIT: | |||||
| $result = $this->serveGitRequest($repository, $viewer); | |||||
| break; | |||||
| case PhabricatorRepositoryType::REPOSITORY_TYPE_MERCURIAL: | |||||
| $result = $this->serveMercurialRequest($repository, $viewer); | |||||
| break; | |||||
| } | |||||
| return $result; | |||||
| } | |||||
| private function isReadOnlyRequest( | private function isReadOnlyRequest( | ||||
| PhabricatorRepository $repository) { | PhabricatorRepository $repository) { | ||||
| $request = $this->getRequest(); | $request = $this->getRequest(); | ||||
| $method = $_SERVER['REQUEST_METHOD']; | $method = $_SERVER['REQUEST_METHOD']; | ||||
| // TODO: This implementation is safe by default, but very incomplete. | // TODO: This implementation is safe by default, but very incomplete. | ||||
| switch ($repository->getVersionControlSystem()) { | switch ($repository->getVersionControlSystem()) { | ||||
| ▲ Show 20 Lines • Show All 358 Lines • Show Last 20 Lines | |||||