diff --git a/src/applications/config/controller/PhabricatorConfigConsoleController.php b/src/applications/config/controller/PhabricatorConfigConsoleController.php --- a/src/applications/config/controller/PhabricatorConfigConsoleController.php +++ b/src/applications/config/controller/PhabricatorConfigConsoleController.php @@ -150,6 +150,16 @@ $log_futures = array(); $remote_futures = array(); + // Git commands needs the HOME environment variable + // to read their .gitconfig - otherwise you cannot fix + // errors like "detected dubious ownership" at global level + // https://we.phorge.it/T15282 + $commands_env = array(); + $webserver_home = self::webserverHomePath(); + if ($webserver_home) { + $commands_env['HOME'] = $webserver_home; + } + foreach ($specs as $lib) { $root = dirname(phutil_get_library_root($lib)); @@ -161,9 +171,11 @@ 'git remote -v'); $log_futures[$lib] = id(new ExecFuture('%C', $log_command)) + ->setEnv($commands_env) ->setCWD($root); $remote_futures[$lib] = id(new ExecFuture('%C', $remote_command)) + ->setEnv($commands_env) ->setCWD($root); } @@ -248,6 +260,7 @@ $root = dirname(phutil_get_library_root($lib)); $upstream_futures[$lib] = id(new ExecFuture('%C', $merge_base_command)) + ->setEnv($commands_env) ->setCWD($root); } @@ -340,5 +353,33 @@ ->appendChild($table_view); } + /** + * Get the HOME of the current webserver user + * + * Example: In mod_php it returns something like "/var/www/html" + * Example: In PHP-FPM it returns the home of the configured pool user + * + * @return string|null + */ + private static function webserverHomePath() { + + // Almost surely Microsoft Windows does not have these functions + if (function_exists('posix_geteuid') && function_exists('posix_getpwuid')) { + + // This is almost surely Unix/Linux + + // Let's read the "effective" user UID (not the "real" one) + // Example: in PHP-FPM we want the effective pool user, not root daemon + // https://we.phorge.it/T15298 + $webserver_user = posix_getpwuid(posix_geteuid()); + if ($webserver_user !== false) { + return $webserver_user['dir']; + } + } + + // If you are used by Microsoft Windows or other esoteric things, + // you probably don't have any real home. Ouch! We're sorry to hear that. + return null; + } }