@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 52 lines 1.3 kB view raw
1<?php 2 3final class DiffusionCacheEngineExtension 4 extends PhabricatorCacheEngineExtension { 5 6 const EXTENSIONKEY = 'diffusion'; 7 8 public function getExtensionName() { 9 return pht('Diffusion Repositories'); 10 } 11 12 public function discoverLinkedObjects( 13 PhabricatorCacheEngine $engine, 14 array $objects) { 15 $viewer = $engine->getViewer(); 16 $results = array(); 17 18 // When an Almanac Service changes, update linked repositories. 19 20 $services = $this->selectObjects($objects, 'AlmanacService'); 21 if ($services) { 22 $repositories = id(new PhabricatorRepositoryQuery()) 23 ->setViewer($viewer) 24 ->withAlmanacServicePHIDs(mpull($services, 'getPHID')) 25 ->execute(); 26 foreach ($repositories as $repository) { 27 $results[] = $repository; 28 } 29 } 30 31 return $results; 32 } 33 34 public function deleteCaches( 35 PhabricatorCacheEngine $engine, 36 array $objects) { 37 38 $keys = array(); 39 $repositories = $this->selectObjects($objects, 'PhabricatorRepository'); 40 foreach ($repositories as $repository) { 41 $keys[] = $repository->getAlmanacServiceCacheKey(); 42 } 43 44 $keys = array_filter($keys); 45 46 if ($keys) { 47 $cache = PhabricatorCaches::getMutableStructureCache(); 48 $cache->deleteKeys($keys); 49 } 50 } 51 52}