Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/phabricator
Path: blob/master/src/applications/diffusion/protocol/DiffusionGitCommandEngine.php
12242 views
1
<?php
2
3
final class DiffusionGitCommandEngine
4
extends DiffusionCommandEngine {
5
6
protected function canBuildForRepository(
7
PhabricatorRepository $repository) {
8
return $repository->isGit();
9
}
10
11
protected function newFormattedCommand($pattern, array $argv) {
12
$pattern = "git {$pattern}";
13
return array($pattern, $argv);
14
}
15
16
protected function shouldAlwaysSudo() {
17
18
// See T13673. In Git, always try to use "sudo" to execute commands as the
19
// daemon user (if such a user is configured), because Git 2.35.2 and newer
20
// (and some older versions of Git with backported security patches) refuse
21
// to execute if the top level repository directory is not owned by the
22
// current user.
23
24
// Previously, we used "sudo" only when performing writes to the
25
// repository directory.
26
27
return true;
28
}
29
30
protected function newCustomEnvironment() {
31
$env = array();
32
33
// NOTE: See T2965. Some time after Git 1.7.5.4, Git started fataling if
34
// it can not read $HOME. For many users, $HOME points at /root (this
35
// seems to be a default result of Apache setup). Instead, explicitly
36
// point $HOME at a readable, empty directory so that Git looks for the
37
// config file it's after, fails to locate it, and moves on. This is
38
// really silly, but seems like the least damaging approach to
39
// mitigating the issue.
40
41
$env['HOME'] = PhabricatorEnv::getEmptyCWD();
42
43
$env['GIT_SSH'] = $this->getSSHWrapper();
44
$env['GIT_SSH_VARIANT'] = 'ssh';
45
46
if ($this->isAnyHTTPProtocol()) {
47
$uri = $this->getURI();
48
if ($uri) {
49
$proxy = PhutilHTTPEngineExtension::buildHTTPProxyURI($uri);
50
if ($proxy) {
51
if ($this->isHTTPSProtocol()) {
52
$env_key = 'https_proxy';
53
} else {
54
$env_key = 'http_proxy';
55
}
56
$env[$env_key] = (string)$proxy;
57
}
58
}
59
}
60
61
return $env;
62
}
63
64
}
65
66