Something went wrong. Try again.
@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.) hq.recaptime.dev/wiki/Phorge
phorge phabricator
Something went wrong. Try again.
4.0 kB · 142 lines
PHP
at commit e0faa667
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143<?php
final class DiffusionDiffController extends DiffusionController {
public function shouldAllowPublic() { return true; }
protected function shouldLoadDiffusionRequest() { return false; }
protected function processDiffusionRequest(AphrontRequest $request) { $data = $request->getURIMap(); $data = $data + array( 'dblob' => $this->getRequest()->getStr('ref'), ); try { $drequest = DiffusionRequest::newFromAphrontRequestDictionary( $data, $request); } catch (Exception $ex) { return id(new Aphront404Response()) ->setRequest($request); } $this->setDiffusionRequest($drequest);
$drequest = $this->getDiffusionRequest(); $viewer = $this->getViewer();
if (!$request->isAjax()) {
// This request came out of the dropdown menu, either "View Standalone" // or "View Raw File".
$view = $request->getStr('view'); if ($view == 'r') { $uri = $drequest->generateURI( array( 'action' => 'browse', 'params' => array( 'view' => 'raw', ), )); } else { $uri = $drequest->generateURI( array( 'action' => 'change', )); }
return id(new AphrontRedirectResponse())->setURI($uri); }
$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) { return new Aphront404Response(); }
$parser = new DifferentialChangesetParser(); $parser->setUser($viewer); $parser->setChangeset($changeset); $parser->setRenderingReference($drequest->generateURI( array( 'action' => 'rendering-ref', )));
$parser->readParametersFromRequest($request);
$coverage = $drequest->loadCoverage(); if ($coverage) { $parser->setCoverage($coverage); }
$commit = $drequest->loadCommit();
$pquery = new DiffusionPathIDQuery(array($changeset->getFilename())); $ids = $pquery->loadPathIDs(); $path_id = $ids[$changeset->getFilename()];
$parser->setLeftSideCommentMapping($path_id, false); $parser->setRightSideCommentMapping($path_id, true); $parser->setCanMarkDone( ($commit->getAuthorPHID()) && ($viewer->getPHID() == $commit->getAuthorPHID())); $parser->setObjectOwnerPHID($commit->getAuthorPHID());
$parser->setWhitespaceMode( DifferentialChangesetParser::WHITESPACE_SHOW_ALL);
$inlines = PhabricatorAuditInlineComment::loadDraftAndPublishedComments( $viewer, $commit->getPHID(), $path_id);
if ($inlines) { foreach ($inlines as $inline) { $parser->parseInlineComment($inline); }
$phids = mpull($inlines, 'getAuthorPHID'); $handles = $this->loadViewerHandles($phids); $parser->setHandles($handles); }
$engine = new PhabricatorMarkupEngine(); $engine->setViewer($viewer);
foreach ($inlines as $inline) { $engine->addObject( $inline, PhabricatorInlineCommentInterface::MARKUP_FIELD_BODY); }
$engine->process();
$parser->setMarkupEngine($engine);
$spec = $request->getStr('range'); list($range_s, $range_e, $mask) = DifferentialChangesetParser::parseRangeSpecification($spec);
$parser->setRange($range_s, $range_e); $parser->setMask($mask);
return id(new PhabricatorChangesetResponse()) ->setRenderedChangeset($parser->renderChangeset()) ->setUndoTemplates($parser->getRenderer()->renderUndoTemplates()); }}