Differential D19497 Diff 46790 src/applications/config/check/PhabricatorManualActivitySetupCheck.php
Changeset View
Changeset View
Standalone View
Standalone View
src/applications/config/check/PhabricatorManualActivitySetupCheck.php
| <?php | <?php | ||||
| final class PhabricatorManualActivitySetupCheck | final class PhabricatorManualActivitySetupCheck | ||||
| extends PhabricatorSetupCheck { | extends PhabricatorSetupCheck { | ||||
| public function getDefaultGroup() { | public function getDefaultGroup() { | ||||
| return self::GROUP_OTHER; | return self::GROUP_OTHER; | ||||
| } | } | ||||
| protected function executeChecks() { | protected function executeChecks() { | ||||
| $activities = id(new PhabricatorConfigManualActivity())->loadAll(); | $activities = id(new PhabricatorConfigManualActivity())->loadAll(); | ||||
| foreach ($activities as $activity) { | foreach ($activities as $activity) { | ||||
| $type = $activity->getActivityType(); | $type = $activity->getActivityType(); | ||||
| // For now, there is only one type of manual activity. It's not clear | switch ($type) { | ||||
| // if we're really going to have too much more of this stuff so this | case PhabricatorConfigManualActivity::TYPE_REINDEX: | ||||
| // is a bit under-designed for now. | $this->raiseSearchReindexIssue(); | ||||
| break; | |||||
| case PhabricatorConfigManualActivity::TYPE_IDENTITIES: | |||||
| $this->raiseRebuildIdentitiesIssue(); | |||||
| break; | |||||
| default: | |||||
| } | |||||
| } | |||||
| } | |||||
| private function raiseSearchReindexIssue() { | |||||
| $activity_name = pht('Rebuild Search Index'); | $activity_name = pht('Rebuild Search Index'); | ||||
| $activity_summary = pht( | $activity_summary = pht( | ||||
| 'The search index algorithm has been updated and the index needs '. | 'The search index algorithm has been updated and the index needs '. | ||||
| 'be rebuilt.'); | 'be rebuilt.'); | ||||
| $message = array(); | $message = array(); | ||||
| $message[] = pht( | $message[] = pht( | ||||
| 'The indexing algorithm for the fulltext search index has been '. | 'The indexing algorithm for the fulltext search index has been '. | ||||
| 'updated and the index needs to be rebuilt. Until you rebuild the '. | 'updated and the index needs to be rebuilt. Until you rebuild the '. | ||||
| 'index, global search (and other fulltext search) will not '. | 'index, global search (and other fulltext search) will not '. | ||||
| 'function correctly.'); | 'function correctly.'); | ||||
| $message[] = pht( | $message[] = pht( | ||||
| 'You can rebuild the search index while Phabricator is running.'); | 'You can rebuild the search index while Phabricator is running.'); | ||||
| $message[] = pht( | $message[] = pht( | ||||
| 'To rebuild the index, run this command:'); | 'To rebuild the index, run this command:'); | ||||
| $message[] = phutil_tag( | $message[] = phutil_tag( | ||||
| 'pre', | 'pre', | ||||
| array(), | array(), | ||||
| (string)csprintf( | (string)csprintf( | ||||
| 'phabricator/ $ ./bin/search index --all --force --background')); | 'phabricator/ $ ./bin/search index --all --force --background')); | ||||
| $message[] = pht( | $message[] = pht( | ||||
| 'You can find more information about rebuilding the search '. | 'You can find more information about rebuilding the search '. | ||||
| 'index here: %s', | 'index here: %s', | ||||
| phutil_tag( | phutil_tag( | ||||
| 'a', | 'a', | ||||
| array( | array( | ||||
| 'href' => 'https://phurl.io/u/reindex', | 'href' => 'https://phurl.io/u/reindex', | ||||
| 'target' => '_blank', | 'target' => '_blank', | ||||
| ), | ), | ||||
| 'https://phurl.io/u/reindex')); | 'https://phurl.io/u/reindex')); | ||||
| $message[] = pht( | $message[] = pht( | ||||
| 'After rebuilding the index, run this command to clear this setup '. | 'After rebuilding the index, run this command to clear this setup '. | ||||
| 'warning:'); | 'warning:'); | ||||
| $message[] = phutil_tag( | $message[] = phutil_tag( | ||||
| 'pre', | 'pre', | ||||
| array(), | array(), | ||||
| (string)csprintf('phabricator/ $ ./bin/config done %R', $type)); | 'phabricator/ $ ./bin/config done reindex'); | ||||
| $activity_message = phutil_implode_html("\n\n", $message); | $activity_message = phutil_implode_html("\n\n", $message); | ||||
| $this->newIssue('manual.'.$type) | $this->newIssue('manual.reindex') | ||||
| ->setName($activity_name) | ->setName($activity_name) | ||||
| ->setSummary($activity_summary) | ->setSummary($activity_summary) | ||||
| ->setMessage($activity_message); | ->setMessage($activity_message); | ||||
| } | } | ||||
| private function raiseRebuildIdentitiesIssue() { | |||||
| $activity_name = pht('Rebuild Repository Identities'); | |||||
| $activity_summary = pht( | |||||
| 'The mapping from VCS users to Phabricator users has changed '. | |||||
| 'and must be rebuilt.'); | |||||
| $message = array(); | |||||
| $message[] = pht( | |||||
| 'The way Phabricator attributes VCS activity to Phabricator users '. | |||||
| 'has changed. There is a new indirection layer between the strings '. | |||||
| 'that appear as VCS authors and committers (such as "John Developer '. | |||||
| '<johnd@bigcorp.com>") and the Phabricator user that gets associated '. | |||||
| 'with VCS commits. This is to support situations where users '. | |||||
| 'are incorrectly associated with commits by Phabricator making bad '. | |||||
| 'guesses about the identity of the corresponding Phabricator user. '. | |||||
| 'This also helps with situations where existing repositories are '. | |||||
| 'imported without having created accounts for all the committers to '. | |||||
| 'that repository. Until you rebuild these repository identities, you '. | |||||
| 'are likely to encounter problems with future Phabricator features '. | |||||
| 'which will rely on the existence of these identities.'); | |||||
| $message[] = pht( | |||||
| 'You can rebuild repository identities while Phabricator is running.'); | |||||
| $message[] = pht( | |||||
| 'To rebuild identities, run this command:'); | |||||
| $message[] = phutil_tag( | |||||
| 'pre', | |||||
| array(), | |||||
| (string)csprintf( | |||||
| 'phabricator/ $ ./bin/repository rebuild-identities --all')); | |||||
| $message[] = pht( | |||||
| 'You can find more information about this new identity mapping '. | |||||
| 'here: %s', | |||||
| phutil_tag( | |||||
| 'a', | |||||
| array( | |||||
| 'href' => 'https://phurl.io/u/repoIdentities', | |||||
| 'target' => '_blank', | |||||
| ), | |||||
| 'https://phurl.io/u/repoIdentities')); | |||||
| $message[] = pht( | |||||
| 'After rebuilding repository identities, run this command to clear '. | |||||
| 'this setup warning:'); | |||||
| $message[] = phutil_tag( | |||||
| 'pre', | |||||
| array(), | |||||
| 'phabricator/ $ ./bin/config done identities'); | |||||
| $activity_message = phutil_implode_html("\n\n", $message); | |||||
| $this->newIssue('manual.identities') | |||||
| ->setName($activity_name) | |||||
| ->setSummary($activity_summary) | |||||
| ->setMessage($activity_message); | |||||
| } | } | ||||
| } | } | ||||