@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

Add a cache purger for builtin files

Summary: Fixes T12859.

Test Plan:
- Loaded Diffusion builtin icons before recent updates, saw cached builtins.
- Ran `bin/cache purge --caches builtin-file`.
- Reloaded, saw new files.

Reviewers: chad

Reviewed By: chad

Maniphest Tasks: T12859

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

+46
+2
src/__phutil_library_map__.php
··· 2162 2162 'PhabricatorBoolEditField' => 'applications/transactions/editfield/PhabricatorBoolEditField.php', 2163 2163 'PhabricatorBritishEnglishTranslation' => 'infrastructure/internationalization/translation/PhabricatorBritishEnglishTranslation.php', 2164 2164 'PhabricatorBuiltinDraftEngine' => 'applications/transactions/draft/PhabricatorBuiltinDraftEngine.php', 2165 + 'PhabricatorBuiltinFileCachePurger' => 'applications/cache/purger/PhabricatorBuiltinFileCachePurger.php', 2165 2166 'PhabricatorBuiltinPatchList' => 'infrastructure/storage/patch/PhabricatorBuiltinPatchList.php', 2166 2167 'PhabricatorBulkContentSource' => 'infrastructure/daemon/contentsource/PhabricatorBulkContentSource.php', 2167 2168 'PhabricatorCacheDAO' => 'applications/cache/storage/PhabricatorCacheDAO.php', ··· 7362 7363 'PhabricatorBoolEditField' => 'PhabricatorEditField', 7363 7364 'PhabricatorBritishEnglishTranslation' => 'PhutilTranslation', 7364 7365 'PhabricatorBuiltinDraftEngine' => 'PhabricatorDraftEngine', 7366 + 'PhabricatorBuiltinFileCachePurger' => 'PhabricatorCachePurger', 7365 7367 'PhabricatorBuiltinPatchList' => 'PhabricatorSQLPatchList', 7366 7368 'PhabricatorBulkContentSource' => 'PhabricatorContentSource', 7367 7369 'PhabricatorCacheDAO' => 'PhabricatorLiskDAO',
+4
src/applications/cache/management/PhabricatorCacheManagementPurgeWorkflow.php
··· 64 64 } 65 65 } 66 66 67 + $viewer = $this->getViewer(); 68 + 67 69 foreach ($purgers as $key => $purger) { 70 + $purger->setViewer($viewer); 71 + 68 72 echo tsprintf( 69 73 "%s\n", 70 74 pht(
+22
src/applications/cache/purger/PhabricatorBuiltinFileCachePurger.php
··· 1 + <?php 2 + 3 + final class PhabricatorBuiltinFileCachePurger 4 + extends PhabricatorCachePurger { 5 + 6 + const PURGERKEY = 'builtin-file'; 7 + 8 + public function purgeCache() { 9 + $viewer = $this->getViewer(); 10 + 11 + $files = id(new PhabricatorFileQuery()) 12 + ->setViewer($viewer) 13 + ->withIsBuiltin(true) 14 + ->execute(); 15 + 16 + $engine = new PhabricatorDestructionEngine(); 17 + foreach ($files as $file) { 18 + $engine->destroyObject($file); 19 + } 20 + } 21 + 22 + }
+18
src/applications/files/query/PhabricatorFileQuery.php
··· 18 18 private $isDeleted; 19 19 private $needTransforms; 20 20 private $builtinKeys; 21 + private $isBuiltin; 21 22 22 23 public function withIDs(array $ids) { 23 24 $this->ids = $ids; ··· 51 52 52 53 public function withBuiltinKeys(array $keys) { 53 54 $this->builtinKeys = $keys; 55 + return $this; 56 + } 57 + 58 + public function withIsBuiltin($is_builtin) { 59 + $this->isBuiltin = $is_builtin; 54 60 return $this; 55 61 } 56 62 ··· 414 420 $conn, 415 421 'builtinKey IN (%Ls)', 416 422 $this->builtinKeys); 423 + } 424 + 425 + if ($this->isBuiltin !== null) { 426 + if ($this->isBuiltin) { 427 + $where[] = qsprintf( 428 + $conn, 429 + 'builtinKey IS NOT NULL'); 430 + } else { 431 + $where[] = qsprintf( 432 + $conn, 433 + 'builtinKey IS NULL'); 434 + } 417 435 } 418 436 419 437 return $where;