@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<?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}