Make serving repositories work with alternate URIs
Summary: Ref T4245. Consolidates the URI parsing/rewriting logic so that repositories can be served from either `/diffusion/XYZ/` or `/diffusion/123/`, over both HTTP and SSH. Test Plan: - Pulled a Git repository by ID and callsign over HTTP and SSH. - Pulled a Mercurial repository by ID and callsign over HTTP and SSH. - Pulled a Subversion repository by ID and callsign over SSH (no HTTP support for SVN). Reviewers: chad Reviewed By: chad Maniphest Tasks: T4245 Differential Revision: https://secure.phabricator.com/D15302
This commit is contained in:
@@ -262,17 +262,23 @@ final class DiffusionServeController extends DiffusionController {
|
||||
case PhabricatorRepositoryType::REPOSITORY_TYPE_GIT:
|
||||
$result = new PhabricatorVCSResponse(
|
||||
500,
|
||||
pht('This is not a Git repository.'));
|
||||
pht(
|
||||
'This repository ("%s") is not a Git repository.',
|
||||
$repository->getDisplayName()));
|
||||
break;
|
||||
case PhabricatorRepositoryType::REPOSITORY_TYPE_MERCURIAL:
|
||||
$result = new PhabricatorVCSResponse(
|
||||
500,
|
||||
pht('This is not a Mercurial repository.'));
|
||||
pht(
|
||||
'This repository ("%s") is not a Mercurial repository.',
|
||||
$repository->getDisplayName()));
|
||||
break;
|
||||
case PhabricatorRepositoryType::REPOSITORY_TYPE_SVN:
|
||||
$result = new PhabricatorVCSResponse(
|
||||
500,
|
||||
pht('This is not a Subversion repository.'));
|
||||
pht(
|
||||
'This repository ("%s") is not a Subversion repository.',
|
||||
$repository->getDisplayName()));
|
||||
break;
|
||||
default:
|
||||
$result = new PhabricatorVCSResponse(
|
||||
@@ -480,7 +486,9 @@ final class DiffusionServeController extends DiffusionController {
|
||||
private function getRequestDirectoryPath(PhabricatorRepository $repository) {
|
||||
$request = $this->getRequest();
|
||||
$request_path = $request->getRequestURI()->getPath();
|
||||
$base_path = preg_replace('@^/diffusion/[A-Z]+@', '', $request_path);
|
||||
|
||||
$info = PhabricatorRepository::parseRepositoryServicePath($request_path);
|
||||
$base_path = $info['path'];
|
||||
|
||||
// For Git repositories, strip an optional directory component if it
|
||||
// isn't the name of a known Git resource. This allows users to clone
|
||||
|
||||
Reference in New Issue
Block a user