@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
fork

Configure Feed

Select the types of activity you want to include in your feed.

at recaptime-dev/main 136 lines 4.4 kB view raw
1<?php 2 3final class PhabricatorPathSetupCheck extends PhabricatorSetupCheck { 4 5 public function getDefaultGroup() { 6 return self::GROUP_OTHER; 7 } 8 9 protected function executeChecks() { 10 // NOTE: We've already appended `environment.append-paths`, so we don't 11 // need to explicitly check for it. 12 $path = getenv('PATH'); 13 14 if (!$path) { 15 $summary = pht( 16 'The environmental variable %s is empty. This server will not '. 17 'be able to execute some commands.', 18 '$PATH'); 19 20 $message = pht( 21 "The environmental variable %s is empty. This server needs to execute ". 22 "some system commands, like `%s`, `%s`, `%s`, and `%s`. To execute ". 23 "these commands, the binaries must be available in the webserver's ". 24 "%s. You can set additional paths in configuration.", 25 '$PATH', 26 'svn', 27 'git', 28 'hg', 29 'diff', 30 '$PATH'); 31 32 $this 33 ->newIssue('config.environment.append-paths') 34 ->setName(pht('%s Not Set', '$PATH')) 35 ->setSummary($summary) 36 ->setMessage($message) 37 ->addPhabricatorConfig('environment.append-paths'); 38 39 // Bail on checks below. 40 return; 41 } 42 43 // Users are remarkably industrious at misconfiguring software. Try to 44 // catch mistaken configuration of PATH. 45 46 $path_parts = explode(PATH_SEPARATOR, $path); 47 $bad_paths = array(); 48 foreach ($path_parts as $path_part) { 49 if (!strlen($path_part)) { 50 continue; 51 } 52 53 $message = null; 54 $not_exists = false; 55 foreach (Filesystem::walkToRoot($path_part) as $part) { 56 if (!Filesystem::pathExists($part)) { 57 $not_exists = $part; 58 // Walk up so we can tell if this is a readability issue or not. 59 continue; 60 } else if (!is_dir(Filesystem::resolvePath($part))) { 61 $message = pht( 62 "The PATH component '%s' (which resolves as the absolute path ". 63 "'%s') is not usable because '%s' is not a directory.", 64 $path_part, 65 Filesystem::resolvePath($path_part), 66 $part); 67 } else if (!is_readable($part)) { 68 $message = pht( 69 "The PATH component '%s' (which resolves as the absolute path ". 70 "'%s') is not usable because '%s' is not readable.", 71 $path_part, 72 Filesystem::resolvePath($path_part), 73 $part); 74 } else if ($not_exists) { 75 $message = pht( 76 "The PATH component '%s' (which resolves as the absolute path ". 77 "'%s') is not usable because '%s' does not exist.", 78 $path_part, 79 Filesystem::resolvePath($path_part), 80 $not_exists); 81 } else { 82 // Everything seems good. 83 break; 84 } 85 86 if ($message !== null) { 87 break; 88 } 89 } 90 91 if ($message === null) { 92 if (!phutil_is_windows() && !@file_exists($path_part.'/.')) { 93 $message = pht( 94 "The PATH component '%s' (which resolves as the absolute path ". 95 "'%s') is not usable because it is not traversable (its '%s' ". 96 "permission bit is not set).", 97 $path_part, 98 Filesystem::resolvePath($path_part), 99 '+x'); 100 } 101 } 102 103 if ($message !== null) { 104 $bad_paths[$path_part] = $message; 105 } 106 } 107 108 if ($bad_paths) { 109 foreach ($bad_paths as $path_part => $message) { 110 $digest = substr(PhabricatorHash::weakDigest($path_part), 0, 8); 111 112 $this 113 ->newIssue('config.PATH.'.$digest) 114 ->setName(pht('%s Component Unusable', '$PATH')) 115 ->setSummary( 116 pht( 117 'A component of the configured PATH can not be used by '. 118 'the webserver: %s', 119 $path_part)) 120 ->setMessage( 121 pht( 122 "The configured PATH includes a component which is not usable. ". 123 "This server will be unable to find or execute binaries located ". 124 "here:". 125 "\n\n". 126 "%s". 127 "\n\n". 128 "The user that the webserver runs as must be able to read all ". 129 "the directories in PATH in order to make use of them.", 130 $message)) 131 ->addPhabricatorConfig('environment.append-paths'); 132 } 133 } 134 135 } 136}