@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 PhabricatorSearchManagementInitWorkflow
4 extends PhabricatorSearchManagementWorkflow {
5
6 protected function didConstruct() {
7 $this
8 ->setName('init')
9 ->setSynopsis(pht('Initialize or repair a search service.'))
10 ->setExamples('**init**');
11 }
12
13 public function execute(PhutilArgumentParser $args) {
14 $this->validateClusterSearchConfig();
15
16 $work_done = false;
17 foreach (PhabricatorSearchService::getAllServices() as $service) {
18 echo tsprintf(
19 "%s\n",
20 pht(
21 'Initializing search service "%s".',
22 $service->getDisplayName()));
23
24 if (!$service->isWritable()) {
25 echo tsprintf(
26 "%s\n",
27 pht(
28 'Skipping service "%s" because it is not writable.',
29 $service->getDisplayName()));
30 continue;
31 }
32
33 $engine = $service->getEngine();
34
35 if (!$engine->indexExists()) {
36 echo tsprintf(
37 "%s\n",
38 pht('Service index does not exist, creating...'));
39
40 $engine->initIndex();
41 $work_done = true;
42 } else if (!$engine->indexIsSane()) {
43 echo tsprintf(
44 "%s\n",
45 pht('Service index is out of date, repairing...'));
46
47 $engine->initIndex();
48 $work_done = true;
49 } else {
50 echo tsprintf(
51 "%s\n",
52 pht('Service index is already up to date.'));
53 }
54
55 echo tsprintf(
56 "%s\n",
57 pht('Done.'));
58 }
59
60 if (!$work_done) {
61 echo tsprintf(
62 "%s\n",
63 pht('No services need initialization.'));
64 return 0;
65 }
66
67 echo tsprintf(
68 "%s\n",
69 pht('Service initialization complete.'));
70 }
71}