diff --git a/src/applications/diffusion/protocol/DiffusionCommandEngine.php b/src/applications/diffusion/protocol/DiffusionCommandEngine.php index 5a18595049..033f1517ce 100644 --- a/src/applications/diffusion/protocol/DiffusionCommandEngine.php +++ b/src/applications/diffusion/protocol/DiffusionCommandEngine.php @@ -9,6 +9,7 @@ abstract class DiffusionCommandEngine extends Phobject { private $passthru; private $connectAsDevice; private $sudoAsDaemon; + private $uri; public static function newCommandEngine(PhabricatorRepository $repository) { $engines = self::newCommandEngines(); @@ -48,6 +49,16 @@ abstract class DiffusionCommandEngine extends Phobject { return $this->repository; } + public function setURI(PhutilURI $uri) { + $this->uri = $uri; + $this->setProtocol($uri->getProtocol()); + return $this; + } + + public function getURI() { + return $this->uri; + } + public function setProtocol($protocol) { $this->protocol = $protocol; return $this; diff --git a/src/applications/diffusion/protocol/DiffusionGitCommandEngine.php b/src/applications/diffusion/protocol/DiffusionGitCommandEngine.php index 5eae19e030..a16416ae1d 100644 --- a/src/applications/diffusion/protocol/DiffusionGitCommandEngine.php +++ b/src/applications/diffusion/protocol/DiffusionGitCommandEngine.php @@ -30,6 +30,21 @@ final class DiffusionGitCommandEngine $env['GIT_SSH'] = $this->getSSHWrapper(); } + if ($this->isAnyHTTPProtocol()) { + $uri = $this->getURI(); + if ($uri) { + $proxy = PhutilHTTPEngineExtension::buildHTTPProxyURI($uri); + if ($proxy) { + if ($this->isHTTPSProtocol()) { + $env_key = 'https_proxy'; + } else { + $env_key = 'http_proxy'; + } + $env[$env_key] = (string)$proxy; + } + } + } + return $env; } diff --git a/src/applications/diffusion/protocol/DiffusionRepositoryClusterEngine.php b/src/applications/diffusion/protocol/DiffusionRepositoryClusterEngine.php index fad8d4019e..026558f1b8 100644 --- a/src/applications/diffusion/protocol/DiffusionRepositoryClusterEngine.php +++ b/src/applications/diffusion/protocol/DiffusionRepositoryClusterEngine.php @@ -598,7 +598,7 @@ final class DiffusionRepositoryClusterEngine extends Phobject { ->setArgv($argv) ->setSudoAsDaemon(true) ->setCredentialPHID($repository->getCredentialPHID()) - ->setProtocol($repository->getRemoteProtocol()) + ->setURI($repository->getRemoteURI()) ->newFuture(); $future->setCWD($local_path); @@ -704,7 +704,7 @@ final class DiffusionRepositoryClusterEngine extends Phobject { ->setArgv($argv) ->setConnectAsDevice(true) ->setSudoAsDaemon(true) - ->setProtocol($fetch_uri->getProtocol()) + ->setURI($fetch_uri) ->newFuture(); $future->setCWD($local_path); diff --git a/src/applications/repository/storage/PhabricatorRepository.php b/src/applications/repository/storage/PhabricatorRepository.php index 321c1ff7af..84c7cfd055 100644 --- a/src/applications/repository/storage/PhabricatorRepository.php +++ b/src/applications/repository/storage/PhabricatorRepository.php @@ -508,7 +508,7 @@ final class PhabricatorRepository extends PhabricatorRepositoryDAO return DiffusionCommandEngine::newCommandEngine($this) ->setArgv($argv) ->setCredentialPHID($this->getCredentialPHID()) - ->setProtocol($this->getRemoteProtocol()); + ->setURI($this->getRemoteURIObject()); } /* -( Local Command Execution )-------------------------------------------- */ diff --git a/src/applications/repository/storage/PhabricatorRepositoryURI.php b/src/applications/repository/storage/PhabricatorRepositoryURI.php index d9dcea0a2d..853dcfa1b3 100644 --- a/src/applications/repository/storage/PhabricatorRepositoryURI.php +++ b/src/applications/repository/storage/PhabricatorRepositoryURI.php @@ -587,11 +587,10 @@ final class PhabricatorRepositoryURI public function newCommandEngine() { $repository = $this->getRepository(); - $protocol = $this->getEffectiveURI()->getProtocol(); return DiffusionCommandEngine::newCommandEngine($repository) ->setCredentialPHID($this->getCredentialPHID()) - ->setProtocol($protocol); + ->setURI($this->getEffectiveURI()); } public function getURIScore() {