From 899f6eebd42eab21cccf15754444b8dc804c2bc0 Mon Sep 17 00:00:00 2001 From: Carlo Dapor Date: Sat, 12 Aug 2017 17:20:58 +0200 Subject: [PATCH] fix(@angular/cli): `ng completion` inside of ng app folders warns but does not produce output If an ng app was created with an older version of ng CLI, while the global ng CLI is more recent, one cannot perform ng completion INSIDE that app folder. This is due to the warning being written to stdout, which if appended to ~/.bashrc causes the shell to fail to process the English text as commands. The solution is to display the warning to stderr without producing the completion output. In good Unix style, a non-zero status code must returned. This PR fixes #6343. The PR introduces a breaking change: - the warning is written to stderr - - no output is produced - different status code returned --- packages/@angular/cli/bin/ng | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/packages/@angular/cli/bin/ng b/packages/@angular/cli/bin/ng index 85d52dfbc60e..dfd042cb0872 100755 --- a/packages/@angular/cli/bin/ng +++ b/packages/@angular/cli/bin/ng @@ -155,13 +155,21 @@ resolve('@angular/cli', { basedir: process.cwd() }, } if (shouldWarn && CliConfig.fromGlobal().get('warnings.versionMismatch')) { - // eslint-disable no-console - console.log(yellow(stripIndents` - Your global Angular CLI version (${globalVersion}) is greater than your local - version (${localVersion}). The local Angular CLI version is used. - - To disable this warning use "ng set --global warnings.versionMismatch=false". - `)); + let warning = yellow(stripIndents` + Your global Angular CLI version (${globalVersion}) is greater than your local + version (${localVersion}). The local Angular CLI version is used. + + To disable this warning use "ng set --global warnings.versionMismatch=false". + `); + // Don't show warning colorised on `ng completion` + if (process.argv[2] !== 'completion') { + // eslint-disable no-console + console.log(warning); + } else { + // eslint-disable no-console + console.error(warning); + process.exit(1); + } } // No error implies a projectLocalCli, which will load whatever