From a9bbe2a61e1ab848a7cf21b1df621dc6623667da Mon Sep 17 00:00:00 2001 From: Hans Larsen Date: Thu, 8 Mar 2018 16:25:32 -0800 Subject: [PATCH] fix(@angular/cli): when a schematic fails on commit errors fail the command Before the only way it could fail was to have the schematic throw, but that does not happen when the schematic creates files that already exist (e.g.). This fixes that. --- packages/@angular/cli/tasks/schematic-run.ts | 5 ++++- .../tests/generate/component/component-duplicate.ts | 11 ++--------- 2 files changed, 6 insertions(+), 10 deletions(-) diff --git a/packages/@angular/cli/tasks/schematic-run.ts b/packages/@angular/cli/tasks/schematic-run.ts index 9759ef427b..f9c67bb065 100644 --- a/packages/@angular/cli/tasks/schematic-run.ts +++ b/packages/@angular/cli/tasks/schematic-run.ts @@ -17,6 +17,7 @@ import { concat, concatMap, ignoreElements, map } from 'rxjs/operators'; import { getCollection, getSchematic, getEngineHost, getEngine } from '../utilities/schematics'; const { green, red, yellow } = chalk; +const SilentError = require('silent-error'); const Task = require('../ember-cli/lib/models/task'); export interface SchematicRunOptions { @@ -135,9 +136,11 @@ export default Task.extend({ if (!error) { // Output the logging queue. loggingQueue.forEach(log => ui.writeLine(` ${log.color(log.keyword)} ${log.message}`)); + } else { + throw new SilentError(); } - if (opts.dryRun || error) { + if (opts.dryRun) { return observableOf(tree); } return fsSink.commit(tree).pipe( diff --git a/tests/e2e/tests/generate/component/component-duplicate.ts b/tests/e2e/tests/generate/component/component-duplicate.ts index 9099d487b0..03f2837c47 100644 --- a/tests/e2e/tests/generate/component/component-duplicate.ts +++ b/tests/e2e/tests/generate/component/component-duplicate.ts @@ -1,4 +1,5 @@ import { ng } from '../../../utils/process'; +import { expectToFail } from "../../../utils/utils"; import { oneLine } from 'common-tags'; export default function () { @@ -11,13 +12,5 @@ export default function () { in ${output.stdout}.`); } }) - .then(() => ng('generate', 'component', 'test-component')) - .then((output) => { - if (!output.stdout.match(/error! src[\\|\/]app[\\|\/]test-component[\\|\/]test-component.component.ts already exists./)) { - throw new Error(oneLine` - Expected to match - "ERROR! src/app/test-component/test-component.ts" - in ${output.stdout}.`); - } - }); + .then(() => expectToFail(() => ng('generate', 'component', 'test-component'))); }