[flutter_releases] Flutter Dev 2.2.0-10.1.pre Framework Cherrypicks (#80459)
* [flutter_tools] fix null check in crash reporter (#80382)
* roll engine cherrypicks
* Roll engine with dart_style cp
Co-authored-by: Jonah Williams <jonahwilliams@google.com>
diff --git a/bin/internal/engine.version b/bin/internal/engine.version
index abde1fe..9b55168 100644
--- a/bin/internal/engine.version
+++ b/bin/internal/engine.version
@@ -1 +1 @@
-56b13559807bf4cb83d16c659757d6ae4f209490
+d2a2e93510ad6cfc3d62a90d903b7056e4da8264
diff --git a/packages/flutter_tools/lib/src/base/bot_detector.dart b/packages/flutter_tools/lib/src/base/bot_detector.dart
index 94d39c0..8ae9301 100644
--- a/packages/flutter_tools/lib/src/base/bot_detector.dart
+++ b/packages/flutter_tools/lib/src/base/bot_detector.dart
@@ -30,9 +30,6 @@
final PersistentToolState _persistentToolState;
Future<bool> get isRunningOnBot async {
- if (_persistentToolState.isRunningOnBot != null) {
- return _persistentToolState.isRunningOnBot;
- }
if (
// Explicitly stated to not be a bot.
_platform.environment['BOT'] == 'false'
@@ -45,6 +42,10 @@
return _persistentToolState.isRunningOnBot = false;
}
+ if (_persistentToolState.isRunningOnBot != null) {
+ return _persistentToolState.isRunningOnBot;
+ }
+
return _persistentToolState.isRunningOnBot = _platform.environment['BOT'] == 'true'
// https://docs.travis-ci.com/user/environment-variables/#Default-Environment-Variables
diff --git a/packages/flutter_tools/lib/src/commands/update_packages.dart b/packages/flutter_tools/lib/src/commands/update_packages.dart
index b19bb2c..0204ba5 100644
--- a/packages/flutter_tools/lib/src/commands/update_packages.dart
+++ b/packages/flutter_tools/lib/src/commands/update_packages.dart
@@ -125,6 +125,12 @@
help: 'Use cached packages instead of accessing the network.',
defaultsTo: false,
negatable: false,
+ )
+ ..addFlag(
+ 'crash',
+ help: 'For Flutter CLI testing only, forces this command to throw an unhandled exception.',
+ defaultsTo: false,
+ negatable: false,
);
}
@@ -179,6 +185,11 @@
final bool isVerifyOnly = boolArg('verify-only');
final bool isConsumerOnly = boolArg('consumer-only');
final bool offline = boolArg('offline');
+ final bool crash = boolArg('crash');
+
+ if (crash) {
+ throw StateError('test crash please ignore.');
+ }
if (upgrade && offline) {
throwToolExit(
diff --git a/packages/flutter_tools/lib/src/globals_null_migrated.dart b/packages/flutter_tools/lib/src/globals_null_migrated.dart
index 78dcc07..2ebd640 100644
--- a/packages/flutter_tools/lib/src/globals_null_migrated.dart
+++ b/packages/flutter_tools/lib/src/globals_null_migrated.dart
@@ -26,7 +26,7 @@
Cache get cache => context.get<Cache>()!;
Config get config => context.get<Config>()!;
-HttpClientFactory get httpClientFactory => context.get<HttpClientFactory>()!;
+HttpClientFactory? get httpClientFactory => context.get<HttpClientFactory>();
Logger get logger => context.get<Logger>()!;
OperatingSystemUtils get os => context.get<OperatingSystemUtils>()!;
Signals get signals => context.get<Signals>() ?? LocalSignals.instance;
diff --git a/packages/flutter_tools/test/general.shard/base/bot_detector_test.dart b/packages/flutter_tools/test/general.shard/base/bot_detector_test.dart
index cab0c9e..c158485 100644
--- a/packages/flutter_tools/test/general.shard/base/bot_detector_test.dart
+++ b/packages/flutter_tools/test/general.shard/base/bot_detector_test.dart
@@ -47,6 +47,24 @@
expect(persistentToolState.isRunningOnBot, isFalse);
});
+ testWithoutContext('does not cache BOT environment variable', () async {
+ fakePlatform.environment['BOT'] = 'true';
+
+ final BotDetector botDetector = BotDetector(
+ platform: fakePlatform,
+ httpClientFactory: () => FakeHttpClient.any(),
+ persistentToolState: persistentToolState,
+ );
+
+ expect(await botDetector.isRunningOnBot, isTrue);
+ expect(persistentToolState.isRunningOnBot, isTrue);
+
+ fakePlatform.environment['BOT'] = 'false';
+
+ expect(await botDetector.isRunningOnBot, isFalse);
+ expect(persistentToolState.isRunningOnBot, isFalse);
+ });
+
testWithoutContext('returns false unconditionally if FLUTTER_HOST is set', () async {
fakePlatform.environment['FLUTTER_HOST'] = 'foo';
fakePlatform.environment['TRAVIS'] = 'true';
diff --git a/packages/flutter_tools/test/integration.shard/command_output_test.dart b/packages/flutter_tools/test/integration.shard/command_output_test.dart
index 4a89046..685b855 100644
--- a/packages/flutter_tools/test/integration.shard/command_output_test.dart
+++ b/packages/flutter_tools/test/integration.shard/command_output_test.dart
@@ -221,4 +221,22 @@
expect(result.exitCode, isNot(0));
expect(result.stderr, contains('Could not find an option named "release"'));
});
+
+ testWithoutContext('flutter can report crashes', () async {
+ final String flutterBin = fileSystem.path.join(getFlutterRoot(), 'bin', 'flutter');
+ final ProcessResult result = await processManager.run(<String>[
+ flutterBin,
+ ...getLocalEngineArguments(),
+ 'update-packages',
+ '--crash',
+ ], environment: <String, String>{
+ 'BOT': 'false',
+ });
+
+ expect(result.exitCode, isNot(0));
+ expect(result.stderr, contains(
+ 'Oops; flutter has exited unexpectedly: "Bad state: test crash please ignore.".\n'
+ 'A crash report has been written to',
+ ));
+ });
}