@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
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Make sure READMEs can hit the markup cache in Diffusion

Summary: Ref T2683. Normally not a big deal, but if a readme has some codeblocks missing the cache can slow things down.

Test Plan:
- Verified we hit the cache.
- Verified TOC still works.

Reviewers: btrahan

Reviewed By: btrahan

Subscribers: epriestley

Maniphest Tasks: T5028, T2683

Differential Revision: https://secure.phabricator.com/D9049

+47 -12
+21 -10
src/applications/diffusion/conduit/ConduitAPI_diffusion_readmequery_Method.php
··· 85 85 require_celerity_resource('syntax-highlighting-css'); 86 86 $class = 'remarkup-code'; 87 87 } else { 88 - // Markup extensionless files as remarkup so we get links and such. 89 - $engine = PhabricatorMarkupEngine::newDiffusionMarkupEngine(); 90 - $engine->setConfig('viewer', $request->getUser()); 91 - $readme_content = $engine->markupText($readme_content); 88 + // TODO: This is sketchy, but make sure we hit the markup cache. 89 + $markup_object = id(new PhabricatorMarkupOneOff()) 90 + ->setEngineRuleset('diffusion-readme') 91 + ->setContent($readme_content); 92 + $markup_field = 'default'; 93 + 94 + $readme_content = id(new PhabricatorMarkupEngine()) 95 + ->setViewer($request->getUser()) 96 + ->addObject($markup_object, $markup_field) 97 + ->process() 98 + ->getOutput($markup_object, $markup_field); 99 + 100 + $engine = $markup_object->newMarkupEngine($markup_field); 92 101 $toc = PhutilRemarkupEngineRemarkupHeaderBlockRule::renderTableOfContents( 93 102 $engine); 94 103 if ($toc) { 95 - $toc = phutil_tag_div('phabricator-remarkup-toc', array( 96 - phutil_tag_div( 97 - 'phabricator-remarkup-toc-header', 98 - pht('Table of Contents')), 99 - $toc, 100 - )); 104 + $toc = phutil_tag_div( 105 + 'phabricator-remarkup-toc', 106 + array( 107 + phutil_tag_div( 108 + 'phabricator-remarkup-toc-header', 109 + pht('Table of Contents')), 110 + $toc, 111 + )); 101 112 $readme_content = array($toc, $readme_content); 102 113 } 103 114
+8 -1
src/applications/repository/graphcache/PhabricatorRepositoryGraphCache.php
··· 355 355 // Build the actual data for the cache. 356 356 foreach ($commit_ids as $commit_id) { 357 357 $parent_ids = array(); 358 - if (isset($parents[$commit_id])) { 358 + if (!empty($parents[$commit_id])) { 359 359 foreach ($parents[$commit_id] as $row) { 360 360 $parent_ids[] = (int)$row['parentCommitID']; 361 361 } 362 + } else { 363 + // We expect all rows to have parents (commits with no parents get 364 + // an explicit "0" placeholder). If we're in an older repository, the 365 + // parent information might not have been populated yet. Decline to fill 366 + // the cache if we don't have the parent information, since the fill 367 + // will be incorrect. 368 + continue; 362 369 } 363 370 364 371 if (isset($path_changes[$commit_id])) {
+5
src/infrastructure/markup/PhabricatorMarkupEngine.php
··· 374 374 $engine = self::newMarkupEngine(array()); 375 375 $engine->setConfig('preserve-linebreaks', false); 376 376 break; 377 + case 'diffusion-readme': 378 + $engine = self::newMarkupEngine(array()); 379 + $engine->setConfig('preserve-linebreaks', false); 380 + $engine->setConfig('header.generate-toc', true); 381 + break; 377 382 case 'diviner': 378 383 $engine = self::newMarkupEngine(array()); 379 384 $engine->setConfig('preserve-linebreaks', false);
+13 -1
src/infrastructure/markup/PhabricatorMarkupOneOff.php
··· 16 16 17 17 private $content; 18 18 private $preserveLinebreaks; 19 + private $engineRuleset; 20 + 21 + public function setEngineRuleset($engine_ruleset) { 22 + $this->engineRuleset = $engine_ruleset; 23 + return $this; 24 + } 25 + 26 + public function getEngineRuleset() { 27 + return $this->engineRuleset; 28 + } 19 29 20 30 public function setPreserveLinebreaks($preserve_linebreaks) { 21 31 $this->preserveLinebreaks = $preserve_linebreaks; ··· 36 46 } 37 47 38 48 public function newMarkupEngine($field) { 39 - if ($this->preserveLinebreaks) { 49 + if ($this->engineRuleset) { 50 + return PhabricatorMarkupEngine::getEngine($this->engineRuleset); 51 + } else if ($this->preserveLinebreaks) { 40 52 return PhabricatorMarkupEngine::getEngine(); 41 53 } else { 42 54 return PhabricatorMarkupEngine::getEngine('nolinebreaks');