refactor(core): undecorated-classes-with-decorated-fields migration commits empty updates (#32391)

Commit 904a2018e0 introduced a new migration for
undecorated classes with decorated Angular class members. Currently the migration
always calls `tree.beginUpdate` and `tree.commitUpdate` (even if there are no changes).

This causes unnecessary updates to be reported to developers running `ng update`. Once
an update is commited, the CLI will report the update regardless of whether any changes were
made or not.

This behavior can be observed in the `ng_update_migrations` integration test. See:
https://circleci.com/gh/angular/angular/438470#tests/containers/3. Notice how all
source files are denoted as `UPDATED` (even though there are no changes).

PR Close #32391
This commit is contained in:
Paul Gschwendtner 2019-08-29 12:03:11 +02:00 committed by Misko Hevery
parent d498314850
commit c56c2416a9
1 changed files with 6 additions and 1 deletions

View File

@ -65,9 +65,14 @@ function runUndecoratedClassesMigration(tree: Tree, tsconfigPath: string, basePa
file => !file.isDeclarationFile && !program.isSourceFileFromExternalLibrary(file));
sourceFiles.forEach(sourceFile => {
const update = tree.beginUpdate(relative(basePath, sourceFile.fileName));
const classes = getUndecoratedClassesWithDecoratedFields(sourceFile, typeChecker);
if (classes.length === 0) {
return;
}
const update = tree.beginUpdate(relative(basePath, sourceFile.fileName));
classes.forEach((current, index) => {
// If it's the first class that we're processing in this file, add `Directive` to the imports.
if (index === 0 && !hasNamedImport(current.importDeclaration, FALLBACK_DECORATOR)) {