diff --git a/src/Composer/Util/HttpDownloader.php b/src/Composer/Util/HttpDownloader.php index 6b3e7d61d085..79d06d164d2d 100644 --- a/src/Composer/Util/HttpDownloader.php +++ b/src/Composer/Util/HttpDownloader.php @@ -454,6 +454,14 @@ private function getResponse($index) */ public static function outputWarnings(IOInterface $io, $url, $data) { + $cleanMessage = function ($msg) use ($io) { + if (!$io->isDecorated()) { + $msg = Preg::replace('{'.chr(27).'\\[[;\d]*m}u', '', $msg); + } + + return $msg; + }; + // legacy warning/info keys foreach (array('warning', 'info') as $type) { if (empty($data[$type])) { @@ -469,7 +477,7 @@ public static function outputWarnings(IOInterface $io, $url, $data) } } - $io->writeError('<'.$type.'>'.ucfirst($type).' from '.Url::sanitize($url).': '.$data[$type].''); + $io->writeError('<'.$type.'>'.ucfirst($type).' from '.Url::sanitize($url).': '.$cleanMessage($data[$type]).''); } // modern Composer 2.2+ format with support for multiple warning/info messages @@ -487,7 +495,7 @@ public static function outputWarnings(IOInterface $io, $url, $data) continue; } - $io->writeError('<'.$type.'>'.ucfirst($type).' from '.Url::sanitize($url).': '.$spec['message'].''); + $io->writeError('<'.$type.'>'.ucfirst($type).' from '.Url::sanitize($url).': '.$cleanMessage($spec['message']).''); } } }