Page MenuHomePhabricator

D14949.id36124.diff
No OneTemporary

D14949.id36124.diff

diff --git a/src/applications/diffusion/application/PhabricatorDiffusionApplication.php b/src/applications/diffusion/application/PhabricatorDiffusionApplication.php
--- a/src/applications/diffusion/application/PhabricatorDiffusionApplication.php
+++ b/src/applications/diffusion/application/PhabricatorDiffusionApplication.php
@@ -64,7 +64,7 @@
'(?:query/(?P<queryKey>[^/]+)/)?' => 'DiffusionPushLogListController',
'view/(?P<id>\d+)/' => 'DiffusionPushEventViewController',
),
- '(?P<repositoryCallsign>(?P<callsign>[A-Z]+))/' => array(
+ '(?P<repositoryCallsign>[A-Z]+)/' => array(
'' => 'DiffusionRepositoryController',
'repository/(?P<dblob>.*)' => 'DiffusionRepositoryController',
@@ -115,7 +115,8 @@
// catch-all for serving repositories over HTTP. We must accept
// requests without the trailing "/" because SVN commands don't
// necessarily include it.
- '(?P<callsign>[A-Z]+)(/|$).*' => 'DiffusionRepositoryDefaultController',
+ '(?P<repositoryCallsign>[A-Z]+)(?:/.*)?' =>
+ 'DiffusionRepositoryDefaultController',
'inline/' => array(
'edit/(?P<phid>[^/]+)/' => 'DiffusionInlineCommentController',
diff --git a/src/applications/diffusion/controller/DiffusionController.php b/src/applications/diffusion/controller/DiffusionController.php
--- a/src/applications/diffusion/controller/DiffusionController.php
+++ b/src/applications/diffusion/controller/DiffusionController.php
@@ -2,56 +2,34 @@
abstract class DiffusionController extends PhabricatorController {
- protected $diffusionRequest;
-
- public function setDiffusionRequest(DiffusionRequest $request) {
- $this->diffusionRequest = $request;
- return $this;
- }
+ private $diffusionRequest;
protected function getDiffusionRequest() {
if (!$this->diffusionRequest) {
- throw new Exception(pht('No Diffusion request object!'));
+ throw new PhutilInvalidStateException('loadDiffusionContext');
}
return $this->diffusionRequest;
}
+ protected function hasDiffusionRequest() {
+ return (bool)$this->diffusionRequest;
+ }
+
public function willBeginExecution() {
$request = $this->getRequest();
// Check if this is a VCS request, e.g. from "git clone", "hg clone", or
// "svn checkout". If it is, we jump off into repository serving code to
// process the request.
- if (DiffusionServeController::isVCSRequest($request)) {
- $serve_controller = id(new DiffusionServeController())
- ->setCurrentApplication($this->getCurrentApplication());
+
+ $serve_controller = new DiffusionServeController();
+ if ($serve_controller->isVCSRequest($request)) {
return $this->delegateToController($serve_controller);
}
return parent::willBeginExecution();
}
- protected function shouldLoadDiffusionRequest() {
- return true;
- }
-
- public function handleRequest(AphrontRequest $request) {
- if ($request->getURIData('callsign') &&
- $this->shouldLoadDiffusionRequest()) {
- try {
- $drequest = DiffusionRequest::newFromAphrontRequestDictionary(
- $request->getURIMap(),
- $request);
- } catch (Exception $ex) {
- return id(new Aphront404Response())
- ->setRequest($request);
- }
- $this->setDiffusionRequest($drequest);
- }
-
- return $this->processDiffusionRequest($request);
- }
-
protected function loadDiffusionContextForEdit() {
return $this->loadContext(
array(
@@ -103,11 +81,12 @@
return $identifier;
}
- return (int)$request->getURIData('repositoryID');
- }
+ $id = $request->getURIData('repositoryID');
+ if (strlen($id)) {
+ return (int)$id;
+ }
- protected function processDiffusionRequest(AphrontRequest $request) {
- throw new PhutilMethodNotImplementedException();
+ return null;
}
public function buildCrumbs(array $spec = array()) {
diff --git a/src/applications/diffusion/controller/DiffusionRepositoryEditController.php b/src/applications/diffusion/controller/DiffusionRepositoryEditController.php
--- a/src/applications/diffusion/controller/DiffusionRepositoryEditController.php
+++ b/src/applications/diffusion/controller/DiffusionRepositoryEditController.php
@@ -6,8 +6,9 @@
protected function buildApplicationCrumbs($is_main = false) {
$crumbs = parent::buildApplicationCrumbs();
- if ($this->diffusionRequest) {
- $repository = $this->getDiffusionRequest()->getRepository();
+ if ($this->hasDiffusionRequest()) {
+ $drequest = $this->getDiffusionRequest();
+ $repository = $drequest->getRepository();
$repo_uri = $repository->getURI();
$edit_uri = $this->getRepositoryControllerURI($repository, 'edit/');
diff --git a/src/applications/diffusion/controller/DiffusionServeController.php b/src/applications/diffusion/controller/DiffusionServeController.php
--- a/src/applications/diffusion/controller/DiffusionServeController.php
+++ b/src/applications/diffusion/controller/DiffusionServeController.php
@@ -2,12 +2,9 @@
final class DiffusionServeController extends DiffusionController {
- protected function shouldLoadDiffusionRequest() {
- return false;
- }
-
- public static function isVCSRequest(AphrontRequest $request) {
- if (!self::getCallsign($request)) {
+ public function isVCSRequest(AphrontRequest $request) {
+ $identifier = $this->getRepositoryIdentifierFromRequest($request);
+ if ($identifier === null) {
return null;
}
@@ -47,20 +44,8 @@
return $vcs;
}
- private static function getCallsign(AphrontRequest $request) {
- $uri = $request->getRequestURI();
-
- $regex = '@^/diffusion/(?P<callsign>[A-Z]+)(/|$)@';
- $matches = null;
- if (!preg_match($regex, (string)$uri, $matches)) {
- return null;
- }
-
- return $matches['callsign'];
- }
-
- protected function processDiffusionRequest(AphrontRequest $request) {
- $callsign = self::getCallsign($request);
+ public function handleRequest(AphrontRequest $request) {
+ $identifier = $this->getRepositoryIdentifierFromRequest($request);
// If authentication credentials have been provided, try to find a user
// that actually matches those credentials.
@@ -99,7 +84,7 @@
try {
$repository = id(new PhabricatorRepositoryQuery())
->setViewer($viewer)
- ->withCallsigns(array($callsign))
+ ->withIdentifiers(array($identifier))
->executeOne();
if (!$repository) {
return new PhabricatorVCSResponse(
diff --git a/src/applications/diffusion/request/DiffusionRequest.php b/src/applications/diffusion/request/DiffusionRequest.php
--- a/src/applications/diffusion/request/DiffusionRequest.php
+++ b/src/applications/diffusion/request/DiffusionRequest.php
@@ -117,43 +117,6 @@
return $object;
}
-
- /**
- * Create a new request from an Aphront request dictionary. This is an
- * internal method that you generally should not call directly; instead,
- * call @{method:newFromDictionary}.
- *
- * @param map Map of Aphront request data.
- * @return DiffusionRequest New request object.
- * @task new
- */
- final public static function newFromAphrontRequestDictionary(
- array $data,
- AphrontRequest $request) {
-
- $identifier = phutil_unescape_uri_path_component(idx($data, 'callsign'));
- $object = self::newFromIdentifier($identifier, $request->getUser());
-
- $use_branches = $object->supportsBranches();
-
- if (isset($data['dblob'])) {
- $parsed = self::parseRequestBlob(idx($data, 'dblob'), $use_branches);
- } else {
- $parsed = array(
- 'commit' => idx($data, 'commit'),
- 'path' => idx($data, 'path'),
- 'line' => idx($data, 'line'),
- 'branch' => idx($data, 'branch'),
- );
- }
-
- $object->setUser($request->getUser());
- $object->initializeFromDictionary($parsed);
- $object->lint = $request->getStr('lint');
- return $object;
- }
-
-
/**
* Internal.
*

File Metadata

Mime Type
text/plain
Expires
Wed, Apr 9, 7:55 PM (4 d, 3 h ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7475853
Default Alt Text
D14949.id36124.diff (7 KB)

Event Timeline