Skip to content

Commit 7f251b2

Browse files
clydinalexeagle
authored andcommitted
fix(@angular/cli): avoid updating when package is already up to date
Fixes #14647
1 parent e71bc87 commit 7f251b2

File tree

1 file changed

+32
-7
lines changed

1 file changed

+32
-7
lines changed

packages/angular/cli/commands/update-impl.ts

Lines changed: 32 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,11 @@ import {
1818
PackageManifest,
1919
fetchPackageMetadata,
2020
} from '../utilities/package-metadata';
21-
import { findNodeDependencies, readPackageTree } from '../utilities/package-tree';
21+
import {
22+
PackageTreeActual,
23+
findNodeDependencies,
24+
readPackageTree,
25+
} from '../utilities/package-tree';
2226
import { Schema as UpdateCommandSchema } from './update';
2327

2428
const npa = require('npm-package-arg');
@@ -238,7 +242,10 @@ export class UpdateCommand extends SchematicCommand<UpdateCommandSchema> {
238242
});
239243
}
240244

241-
const requests: PackageIdentifier[] = [];
245+
const requests: {
246+
identifier: PackageIdentifier;
247+
node: PackageTreeActual | string;
248+
}[] = [];
242249

243250
// Validate packages actually are part of the workspace
244251
for (const pkg of packages) {
@@ -259,22 +266,26 @@ export class UpdateCommand extends SchematicCommand<UpdateCommandSchema> {
259266
continue;
260267
}
261268

262-
requests.push(pkg);
269+
requests.push({ identifier: pkg, node });
263270
}
264271

265272
if (requests.length === 0) {
266273
return 0;
267274
}
268275

276+
const packagesToUpdate: string[] = [];
277+
269278
this.logger.info('Fetching dependency metadata from registry...');
270-
for (const requestIdentifier of requests) {
279+
for (const { identifier: requestIdentifier, node } of requests) {
280+
const packageName = requestIdentifier.name;
281+
271282
let metadata;
272283
try {
273284
// Metadata requests are internally cached; multiple requests for same name
274285
// does not result in additional network traffic
275-
metadata = await fetchPackageMetadata(requestIdentifier.name, this.logger);
286+
metadata = await fetchPackageMetadata(packageName, this.logger);
276287
} catch (e) {
277-
this.logger.error(`Error fetching metadata for '${requestIdentifier.name}': ` + e.message);
288+
this.logger.error(`Error fetching metadata for '${packageName}': ` + e.message);
278289

279290
return 1;
280291
}
@@ -303,6 +314,20 @@ export class UpdateCommand extends SchematicCommand<UpdateCommandSchema> {
303314

304315
return 1;
305316
}
317+
318+
if (
319+
(typeof node === 'string' && manifest.version === node) ||
320+
(typeof node === 'object' && manifest.version === node.package.version)
321+
) {
322+
this.logger.info(`Package '${packageName}' is already up to date.`);
323+
continue;
324+
}
325+
326+
packagesToUpdate.push(requestIdentifier.toString());
327+
}
328+
329+
if (packagesToUpdate.length === 0) {
330+
return 0;
306331
}
307332

308333
return this.runSchematic({
@@ -313,7 +338,7 @@ export class UpdateCommand extends SchematicCommand<UpdateCommandSchema> {
313338
additionalOptions: {
314339
force: options.force || false,
315340
packageManager,
316-
packages: requests.map(p => p.toString()),
341+
packages: packagesToUpdate,
317342
},
318343
});
319344
}

0 commit comments

Comments
 (0)