getRequest(); if ($request->getStr('id')) { $parts = explode(';', $request->getStr('id')); $data['path'] = idx($parts, 0); $data['commit'] = idx($parts, 1); } $this->diffusionRequest = DiffusionRequest::newFromAphrontRequestDictionary( $data); } public function processRequest() { $drequest = $this->getDiffusionRequest(); $request = $this->getRequest(); $diff_query = DiffusionDiffQuery::newFromDiffusionRequest($drequest); $changeset = $diff_query->loadChangeset(); if (!$changeset) { return new Aphront404Response(); } $parser = new DifferentialChangesetParser(); $parser->setChangeset($changeset); $parser->setWhitespaceMode( DifferentialChangesetParser::WHITESPACE_SHOW_ALL); $range_s = null; $range_e = null; $mask = array(); // TODO: This duplicates a block in DifferentialChangesetViewController. $range = $request->getStr('range'); if ($range) { $match = null; if (preg_match('@^(\d+)-(\d+)(?:/(\d+)-(\d+))?$@', $range, $match)) { $range_s = (int)$match[1]; $range_e = (int)$match[2]; if (count($match) > 3) { $start = (int)$match[3]; $len = (int)$match[4]; for ($ii = $start; $ii < $start + $len; $ii++) { $mask[$ii] = true; } } } } $output = $parser->render($range_s, $range_e, $mask); return id(new AphrontAjaxResponse()) ->setContent($output); } }