[flutter_tool] Allow analytics without a terminal attached (#36208)
diff --git a/packages/flutter_tools/lib/src/base/utils.dart b/packages/flutter_tools/lib/src/base/utils.dart
index 9b612e2..ebdc745 100644
--- a/packages/flutter_tools/lib/src/base/utils.dart
+++ b/packages/flutter_tools/lib/src/base/utils.dart
@@ -33,9 +33,6 @@
return platform.environment['BOT'] == 'true'
- // Non-interactive terminals are assumed to be bots.
- || !io.stdout.hasTerminal
-
// https://docs.travis-ci.com/user/environment-variables/#Default-Environment-Variables
|| platform.environment['TRAVIS'] == 'true'
|| platform.environment['CONTINUOUS_INTEGRATION'] == 'true'
@@ -48,7 +45,8 @@
|| platform.environment.containsKey('CIRRUS_CI')
// https://docs.aws.amazon.com/codebuild/latest/userguide/build-env-ref-env-vars.html
- || (platform.environment.containsKey('AWS_REGION') && platform.environment.containsKey('CODEBUILD_INITIATOR'))
+ || (platform.environment.containsKey('AWS_REGION') &&
+ platform.environment.containsKey('CODEBUILD_INITIATOR'))
// https://wiki.jenkins.io/display/JENKINS/Building+a+software+project#Buildingasoftwareproject-belowJenkinsSetEnvironmentVariables
|| platform.environment.containsKey('JENKINS_URL')
diff --git a/packages/flutter_tools/lib/src/runner/flutter_command.dart b/packages/flutter_tools/lib/src/runner/flutter_command.dart
index dc48eab..d39d4d1 100644
--- a/packages/flutter_tools/lib/src/runner/flutter_command.dart
+++ b/packages/flutter_tools/lib/src/runner/flutter_command.dart
@@ -13,6 +13,7 @@
import '../base/common.dart';
import '../base/context.dart';
import '../base/file_system.dart';
+import '../base/io.dart' as io;
import '../base/terminal.dart';
import '../base/time.dart';
import '../base/user_messages.dart';
@@ -424,6 +425,7 @@
break;
}
}
+ additionalUsageValues[kCommandHasTerminal] = io.stdout.hasTerminal ? 'true' : 'false';
flutterUsage.sendCommand(commandPath, parameters: additionalUsageValues);
// Send timing.
diff --git a/packages/flutter_tools/lib/src/usage.dart b/packages/flutter_tools/lib/src/usage.dart
index 6ad484b..f68e4a1 100644
--- a/packages/flutter_tools/lib/src/usage.dart
+++ b/packages/flutter_tools/lib/src/usage.dart
@@ -49,12 +49,13 @@
const String kCommandBuildBundleIsModule = 'cd25';
const String kCommandResult = 'cd26';
+const String kCommandHasTerminal = 'cd31';
const String reloadExceptionTargetPlatform = 'cd27';
const String reloadExceptionSdkName = 'cd28';
const String reloadExceptionEmulator = 'cd29';
const String reloadExceptionFullRestart = 'cd30';
-// Next ID: cd31
+// Next ID: cd32
Usage get flutterUsage => Usage.instance;
diff --git a/packages/flutter_tools/test/general.shard/base/utils_test.dart b/packages/flutter_tools/test/general.shard/base/utils_test.dart
index 097d72f..9046c5e 100644
--- a/packages/flutter_tools/test/general.shard/base/utils_test.dart
+++ b/packages/flutter_tools/test/general.shard/base/utils_test.dart
@@ -42,11 +42,11 @@
Platform: () => fakePlatform,
});
- testUsingContext('returns true for non-interactive terminals', () async {
+ testUsingContext('returns false with and without a terminal attached', () async {
mockStdio.stdout.hasTerminal = true;
expect(botDetector.isRunningOnBot, isFalse);
mockStdio.stdout.hasTerminal = false;
- expect(botDetector.isRunningOnBot, isTrue);
+ expect(botDetector.isRunningOnBot, isFalse);
}, overrides: <Type, Generator>{
Stdio: () => mockStdio,
Platform: () => fakePlatform,
diff --git a/packages/flutter_tools/test/general.shard/runner/flutter_command_test.dart b/packages/flutter_tools/test/general.shard/runner/flutter_command_test.dart
index 86ee99d..e3502c4 100644
--- a/packages/flutter_tools/test/general.shard/runner/flutter_command_test.dart
+++ b/packages/flutter_tools/test/general.shard/runner/flutter_command_test.dart
@@ -62,11 +62,8 @@
expect(
verify(usage.sendCommand(captureAny,
- parameters: captureAnyNamed('parameters'))).captured,
- <dynamic>[
- 'dummy',
- const <String, String>{'cd26': 'success'}
- ],
+ parameters: captureAnyNamed('parameters'))).captured[1]['cd26'],
+ equals('success'),
);
},
overrides: <Type, Generator>{
@@ -87,11 +84,8 @@
expect(
verify(usage.sendCommand(captureAny,
- parameters: captureAnyNamed('parameters'))).captured,
- <dynamic>[
- 'dummy',
- const <String, String>{'cd26': 'warning'}
- ],
+ parameters: captureAnyNamed('parameters'))).captured[1]['cd26'],
+ equals('warning'),
);
},
overrides: <Type, Generator>{
@@ -114,11 +108,8 @@
} on ToolExit {
expect(
verify(usage.sendCommand(captureAny,
- parameters: captureAnyNamed('parameters'))).captured,
- <dynamic>[
- 'dummy',
- const <String, String>{'cd26': 'fail'}
- ],
+ parameters: captureAnyNamed('parameters'))).captured[1]['cd26'],
+ equals('fail'),
);
}
},
@@ -144,11 +135,8 @@
} on ToolExit {
expect(
verify(usage.sendCommand(captureAny,
- parameters: captureAnyNamed('parameters'))).captured,
- <dynamic>[
- 'dummy',
- const <String, String>{'cd26': 'fail'}
- ],
+ parameters: captureAnyNamed('parameters'))).captured[1]['cd26'],
+ equals('fail'),
);
}
},