public function handleRequest(AphrontRequest $request) { $response = $this->loadDiffusionContext(); if ($response) { return $response; } $viewer = $this->getViewer(); $drequest = $this->getDiffusionRequest(); $data = $this->callConduitWithDiffusionRequest('diffusion.diffquery', array('commit' => $drequest->getCommit(), 'path' => $drequest->getPath())); $drequest->updateSymbolicCommit($data['effectiveCommit']); $raw_changes = ArcanistDiffChange::newFromConduit($data['changes']); $diff = DifferentialDiff::newEphemeralFromRawChanges($raw_changes); $changesets = $diff->getChangesets(); $changeset = reset($changesets); if (!$changeset) { // TODO: Refine this. return new Aphront404Response(); } $repository = $drequest->getRepository(); $changesets = array(0 => $changeset); $changeset_header = $this->buildChangesetHeader($drequest); $changeset_view = new DifferentialChangesetListView(); $changeset_view->setChangesets($changesets); $changeset_view->setBackground(PHUIObjectBoxView::BLUE_PROPERTY); $changeset_view->setVisibleChangesets($changesets); $changeset_view->setRenderingReferences(array(0 => $drequest->generateURI(array('action' => 'rendering-ref')))); $raw_params = array('action' => 'browse', 'params' => array('view' => 'raw')); $right_uri = $drequest->generateURI($raw_params); $raw_params['params']['before'] = $drequest->getStableCommit(); $left_uri = $drequest->generateURI($raw_params); $changeset_view->setRawFileURIs($left_uri, $right_uri); $changeset_view->setRenderURI($repository->getPathURI('diff/')); $changeset_view->setWhitespace(DifferentialChangesetParser::WHITESPACE_SHOW_ALL); $changeset_view->setUser($viewer); $changeset_view->setHeader($changeset_header); // TODO: This is pretty awkward, unify the CSS between Diffusion and // Differential better. require_celerity_resource('differential-core-view-css'); $crumbs = $this->buildCrumbs(array('branch' => true, 'path' => true, 'view' => 'change')); $crumbs->setBorder(true); $links = $this->renderPathLinks($drequest, $mode = 'browse'); $header = $this->buildHeader($drequest, $links); $view = id(new PHUITwoColumnView())->setHeader($header)->setMainColumn(array())->setFooter(array($changeset_view)); return $this->newPage()->setTitle(array(basename($drequest->getPath()), $repository->getDisplayName()))->setCrumbs($crumbs)->appendChild(array($view)); }