From c2aa193c5fb723ccf3ee80ceed08e5060ca7463f Mon Sep 17 00:00:00 2001 From: Jonah Williams Date: Wed, 21 Apr 2021 21:40:48 -0700 Subject: [PATCH] [flutter_tools] pin transitive deps during --transitive-closure (#80911) --- dev/bots/allowlist.dart | 9 +++- dev/bots/analyze.dart | 2 +- .../lib/src/commands/update_packages.dart | 41 ++++++++++++++----- 3 files changed, 38 insertions(+), 14 deletions(-) diff --git a/dev/bots/allowlist.dart b/dev/bots/allowlist.dart index 9b1b016f9ea..535b7ac9527 100644 --- a/dev/bots/allowlist.dart +++ b/dev/bots/allowlist.dart @@ -18,7 +18,6 @@ const Set kCorePackageAllowList = { 'collection', 'fake_async', 'file', - 'frontend_server_client', 'intl', 'meta', 'path', @@ -73,5 +72,11 @@ const Set kCorePackageAllowList = { 'flutter_driver', 'flutter_localizations', 'flutter_test', - 'integration_test' + 'integration_test', + 'flutter_goldens', + 'flutter_goldens_client', + 'fuchsia_remote_debug_protocol', + 'platform', + 'process', + 'sky_engine', }; diff --git a/dev/bots/analyze.dart b/dev/bots/analyze.dart index 429b9b37b6f..cae1d65fb73 100644 --- a/dev/bots/analyze.dart +++ b/dev/bots/analyze.dart @@ -1173,7 +1173,7 @@ Future _checkConsumerDependencies() async { // Do not change this signature without following the directions in // dev/bots/allowlist.dart - const String kExpected = 'nkO7DCjvSMB6VKyw+V9MU46m3xFEk/oYSbmgAWqvbXE='; + const String kExpected = 'QnuXnTSwemf+qT+LAU8K8Bb0l9L20z4qT1PUEQlBrVg='; if (disallowed.isNotEmpty) { exitWithError([ diff --git a/packages/flutter_tools/lib/src/commands/update_packages.dart b/packages/flutter_tools/lib/src/commands/update_packages.dart index 0204ba529a4..cefddf6a3db 100644 --- a/packages/flutter_tools/lib/src/commands/update_packages.dart +++ b/packages/flutter_tools/lib/src/commands/update_packages.dart @@ -196,22 +196,41 @@ class UpdatePackagesCommand extends FlutterCommand { '--force-upgrade cannot be used with the --offline flag' ); } + if (isConsumerOnly && !isPrintTransitiveClosure) { + throwToolExit( + '--consumer-only can only be used with the --transitive-closure flag' + ); + } // "consumer" packages are those that constitute our public API (e.g. flutter, flutter_test, flutter_driver, flutter_localizations, integration_test). - if (isConsumerOnly) { - if (!isPrintTransitiveClosure) { - throwToolExit( - '--consumer-only can only be used with the --transitive-closure flag' - ); - } + if (isPrintTransitiveClosure) { // Only retain flutter, flutter_test, flutter_driver, and flutter_localizations. const List consumerPackages = ['flutter', 'flutter_test', 'flutter_driver', 'flutter_localizations', 'integration_test']; - // ensure we only get flutter/packages - packages.retainWhere((Directory directory) { - return consumerPackages.any((String package) { - return directory.path.endsWith('packages${globals.fs.path.separator}$package'); - }); + + final PubDependencyTree tree = PubDependencyTree(); + for (final Directory package in packages) { + final String packageName = globals.fs.path.basename(package.path); + if (!consumerPackages.contains(packageName) && isConsumerOnly) { + continue; + } + await pub.batch( + ['get'], + context: PubContext.updatePackages, + directory: package.path, + retry: false, // errors here are usually fatal since we're not hitting the network + ); + await pub.batch( + ['deps', '--style=compact'], + context: PubContext.updatePackages, + directory: package.path, + filter: tree.fill, + retry: false, // errors here are usually fatal since we're not hitting the network + ); + } + tree._dependencyTree.forEach((String from, Set to) { + globals.printStatus('$from -> $to'); }); + return FlutterCommandResult.success(); } if (isVerifyOnly) {