@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
at recaptime-dev/main 144 lines 4.0 kB view raw
1<?php 2 3final class DiffusionDiffController extends DiffusionController { 4 5 public function shouldAllowPublic() { 6 return true; 7 } 8 9 protected function getDiffusionBlobFromRequest(AphrontRequest $request) { 10 return $request->getStr('ref'); 11 } 12 13 public function handleRequest(AphrontRequest $request) { 14 $response = $this->loadDiffusionContext(); 15 if ($response) { 16 return $response; 17 } 18 19 $viewer = $this->getViewer(); 20 $drequest = $this->getDiffusionRequest(); 21 22 if (!$request->isAjax()) { 23 24 // This request came out of the dropdown menu, either "View Standalone" 25 // or "View Raw File". 26 27 $view = $request->getStr('view'); 28 if ($view == 'r') { 29 $uri = $drequest->generateURI( 30 array( 31 'action' => 'browse', 32 'params' => array( 33 'view' => 'raw', 34 ), 35 )); 36 } else { 37 $uri = $drequest->generateURI( 38 array( 39 'action' => 'change', 40 )); 41 } 42 43 return id(new AphrontRedirectResponse())->setURI($uri); 44 } 45 46 $data = $this->callConduitWithDiffusionRequest( 47 'diffusion.diffquery', 48 array( 49 'commit' => $drequest->getCommit(), 50 'path' => $drequest->getPath(), 51 'encoding' => $request->getStr('encoding'), 52 )); 53 $drequest->updateSymbolicCommit($data['effectiveCommit']); 54 $raw_changes = ArcanistDiffChange::newFromConduit($data['changes']); 55 $diff = DifferentialDiff::newEphemeralFromRawChanges( 56 $raw_changes); 57 $changesets = $diff->getChangesets(); 58 $changeset = reset($changesets); 59 60 if (!$changeset) { 61 return new Aphront404Response(); 62 } 63 64 $commit = $drequest->loadCommit(); 65 66 $viewstate_engine = id(new PhabricatorChangesetViewStateEngine()) 67 ->setViewer($viewer) 68 ->setObjectPHID($commit->getPHID()) 69 ->setChangeset($changeset); 70 71 $viewstate = $viewstate_engine->newViewStateFromRequest($request); 72 73 if ($viewstate->getDiscardResponse()) { 74 return new AphrontAjaxResponse(); 75 } 76 77 $parser = id(new DifferentialChangesetParser()) 78 ->setViewer($viewer) 79 ->setChangeset($changeset) 80 ->setViewState($viewstate); 81 82 $parser->setRenderingReference($drequest->generateURI( 83 array( 84 'action' => 'rendering-ref', 85 ))); 86 87 $coverage = $drequest->loadCoverage(); 88 if ($coverage) { 89 $parser->setCoverage($coverage); 90 } 91 92 $pquery = new DiffusionPathIDQuery(array($changeset->getFilename())); 93 $ids = $pquery->loadPathIDs(); 94 $path_id = $ids[$changeset->getFilename()]; 95 96 $parser->setLeftSideCommentMapping($path_id, false); 97 $parser->setRightSideCommentMapping($path_id, true); 98 $parser->setCanMarkDone( 99 ($commit->getAuthorPHID()) && 100 ($viewer->getPHID() == $commit->getAuthorPHID())); 101 $parser->setObjectOwnerPHID($commit->getAuthorPHID()); 102 103 $inlines = id(new DiffusionDiffInlineCommentQuery()) 104 ->setViewer($viewer) 105 ->withCommitPHIDs(array($commit->getPHID())) 106 ->withPathIDs(array($path_id)) 107 ->withPublishedComments(true) 108 ->withPublishableComments(true) 109 ->execute(); 110 $inlines = mpull($inlines, 'newInlineCommentObject'); 111 112 if ($inlines) { 113 foreach ($inlines as $inline) { 114 $parser->parseInlineComment($inline); 115 } 116 117 $phids = mpull($inlines, 'getAuthorPHID'); 118 $handles = $this->loadViewerHandles($phids); 119 $parser->setHandles($handles); 120 } 121 122 $engine = new PhabricatorMarkupEngine(); 123 $engine->setViewer($viewer); 124 125 foreach ($inlines as $inline) { 126 $engine->addObject( 127 $inline, 128 PhabricatorInlineComment::MARKUP_FIELD_BODY); 129 } 130 131 $engine->process(); 132 133 $parser->setMarkupEngine($engine); 134 135 $spec = $request->getStr('range'); 136 list($range_s, $range_e, $mask) = 137 DifferentialChangesetParser::parseRangeSpecification($spec); 138 139 $parser->setRange($range_s, $range_e); 140 $parser->setMask($mask); 141 142 return $parser->newChangesetResponse(); 143 } 144}