From b29be2f56bfffca89e4e61ee66b6995b25628ad9 Mon Sep 17 00:00:00 2001 From: Tom Klingenberg <352517+ktomk@users.noreply.github.com> Date: Wed, 30 Aug 2023 21:35:59 +0200 Subject: [PATCH] COMPOSER_DISABLE_NETWORK aware `diagnose` checks; SKIP output (#11597) Make `diagnose` checks aware of COMPOSER_DISABLE_NETWORK (true) and skip Composer network operations that would otherwise spill stack traces into diagnostic messages and taint the result as error while the check itself is not applicable/useful within the environment. `COMPOSER_DISABLE_NETWORK` was released with [2.0.0-alpha1] and intro- duced in fc03ab9bb (Add COMPOSER_DISABLE_NETWORK env var for debugging, 2019-01-14). The previous behaviour was to exit with a status of two (2), denoting an error. The new behaviour is to exit with a status of zero (0), showing the successful skipping of diagnostics that can only be run when Composer network is enabled - not disabled. SKIP output is updated and streamlined. NOTE: The "prime" Value It is irrelevant for diagnose checks, as all diagnostic checks that spilled were with the HTTP Downloader and the check is aligned (both "1" or "prime" values disable): (bool) Platform::getEnv('COMPOSER_DISABLE_NETWORK') NOTE: Not Affected * The `allow_url_fopen` diagnostic check, platform related * The `disable-tls` setting related HTTP Downloader creation warning [2.0.0-alpha1]: "released 2020-06-03" --- src/Composer/Command/DiagnoseCommand.php | 44 ++++++++++++++++++++---- 1 file changed, 38 insertions(+), 6 deletions(-) diff --git a/src/Composer/Command/DiagnoseCommand.php b/src/Composer/Command/DiagnoseCommand.php index 6e56f3a4f..3f7aca0c8 100644 --- a/src/Composer/Command/DiagnoseCommand.php +++ b/src/Composer/Command/DiagnoseCommand.php @@ -250,7 +250,7 @@ EOT */ private function checkHttp($proto, Config $config) { - $result = $this->checkConnectivity(); + $result = $this->checkConnectivityAndComposerNetworkHttpEnablement(); if ($result !== true) { return $result; } @@ -288,7 +288,7 @@ EOT */ private function checkHttpProxy() { - $result = $this->checkConnectivity(); + $result = $this->checkConnectivityAndComposerNetworkHttpEnablement(); if ($result !== true) { return $result; } @@ -319,7 +319,7 @@ EOT */ private function checkGithubOauth($domain, $token) { - $result = $this->checkConnectivity(); + $result = $this->checkConnectivityAndComposerNetworkHttpEnablement(); if ($result !== true) { return $result; } @@ -350,7 +350,7 @@ EOT */ private function getGithubRateLimit($domain, $token = null) { - $result = $this->checkConnectivity(); + $result = $this->checkConnectivityAndComposerNetworkHttpEnablement(); if ($result !== true) { return $result; } @@ -421,7 +421,7 @@ EOT */ private function checkVersion(Config $config) { - $result = $this->checkConnectivity(); + $result = $this->checkConnectivityAndComposerNetworkHttpEnablement(); if ($result !== true) { return $result; } @@ -749,7 +749,39 @@ EOT private function checkConnectivity() { if (!ini_get('allow_url_fopen')) { - return 'Skipped because allow_url_fopen is missing.'; + return 'SKIP Because allow_url_fopen is missing.'; + } + + return true; + } + + /** + * @return string|true + */ + private function checkConnectivityAndComposerNetworkHttpEnablement() + { + $result = $this->checkConnectivity(); + if ($result !== true) { + return $result; + } + + $result = $this->checkComposerNetworkHttpEnablement(); + if ($result !== true) { + return $result; + } + + return true; + } + + /** + * Check if Composer network is enabled for HTTP/S + * + * @return string|true + */ + private function checkComposerNetworkHttpEnablement() + { + if ((bool) Platform::getEnv('COMPOSER_DISABLE_NETWORK')) { + return 'SKIP Network is disabled by COMPOSER_DISABLE_NETWORK.'; } return true;