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 @@ -69,10 +69,11 @@ 'branches/(?P.*)' => 'DiffusionBranchTableController', 'refs/(?P.*)' => 'DiffusionRefTableController', 'lint/(?P.*)' => 'DiffusionLintController', - 'commit/(?P[a-z0-9]+)/branches/' - => 'DiffusionCommitBranchesController', - 'commit/(?P[a-z0-9]+)/tags/' - => 'DiffusionCommitTagsController', + 'commit/(?P[a-z0-9]+)' => array( + '/?' => 'DiffusionCommitController', + '/branches/' => 'DiffusionCommitBranchesController', + '/tags/' => 'DiffusionCommitTagsController', + ), 'compare/' => 'DiffusionCompareController', 'manage/(?:(?P[^/]+)/)?' => 'DiffusionRepositoryManagePanelsController', diff --git a/src/applications/diffusion/controller/DiffusionCommitController.php b/src/applications/diffusion/controller/DiffusionCommitController.php --- a/src/applications/diffusion/controller/DiffusionCommitController.php +++ b/src/applications/diffusion/controller/DiffusionCommitController.php @@ -22,17 +22,27 @@ $drequest = $this->getDiffusionRequest(); $viewer = $request->getUser(); + $repository = $drequest->getRepository(); + $commit_identifier = $drequest->getCommit(); + + // If this page is being accessed via "/source/xyz/commit/...", redirect + // to the canonical URI. + $has_callsign = strlen($request->getURIData('repositoryCallsign')); + $has_id = strlen($request->getURIData('repositoryID')); + if (!$has_callsign && !$has_id) { + $canonical_uri = $repository->getCommitURI($commit_identifier); + return id(new AphrontRedirectResponse()) + ->setURI($canonical_uri); + } if ($request->getStr('diff')) { return $this->buildRawDiffResponse($drequest); } - $repository = $drequest->getRepository(); - $commit = id(new DiffusionCommitQuery()) ->setViewer($viewer) ->withRepository($repository) - ->withIdentifiers(array($drequest->getCommit())) + ->withIdentifiers(array($commit_identifier)) ->needCommitData(true) ->needAuditRequests(true) ->executeOne();