diff --git a/packages/flutter_tools/lib/src/runner/flutter_command_runner.dart b/packages/flutter_tools/lib/src/runner/flutter_command_runner.dart index 511de9abc12..1a380f108f9 100644 --- a/packages/flutter_tools/lib/src/runner/flutter_command_runner.dart +++ b/packages/flutter_tools/lib/src/runner/flutter_command_runner.dart @@ -309,7 +309,8 @@ class FlutterCommandRunner extends CommandRunner { globals.printError('Please ensure you have permissions in the artifact cache directory.'); throwToolExit('Failed to write the version file'); } - if (topLevelResults.command?.name != 'upgrade' && topLevelResults['version-check'] as bool) { + final bool machineFlag = topLevelResults['machine'] as bool; + if (topLevelResults.command?.name != 'upgrade' && topLevelResults['version-check'] as bool && !machineFlag) { await FlutterVersion.instance.checkFlutterVersionFreshness(); } @@ -323,7 +324,7 @@ class FlutterCommandRunner extends CommandRunner { if (topLevelResults['version'] as bool) { flutterUsage.sendCommand('version'); String status; - if (topLevelResults['machine'] as bool) { + if (machineFlag) { status = const JsonEncoder.withIndent(' ').convert(FlutterVersion.instance.toJson()); } else { status = FlutterVersion.instance.toString(); @@ -332,7 +333,7 @@ class FlutterCommandRunner extends CommandRunner { return; } - if (topLevelResults['machine'] as bool) { + if (machineFlag) { throwToolExit('The --machine flag is only valid with the --version flag.', exitCode: 2); } await super.runCommand(topLevelResults); diff --git a/packages/flutter_tools/test/general.shard/runner/flutter_command_runner_test.dart b/packages/flutter_tools/test/general.shard/runner/flutter_command_runner_test.dart index af132d30fe1..8cea9b05275 100644 --- a/packages/flutter_tools/test/general.shard/runner/flutter_command_runner_test.dart +++ b/packages/flutter_tools/test/general.shard/runner/flutter_command_runner_test.dart @@ -72,6 +72,22 @@ void main() { Platform: () => platform, }, initializeFlutterRoot: false); + testUsingContext('does not check that Flutter installation is up-to-date with --machine flag', () async { + final MockFlutterVersion version = FlutterVersion.instance as MockFlutterVersion; + bool versionChecked = false; + when(version.checkFlutterVersionFreshness()).thenAnswer((_) async { + versionChecked = true; + }); + + await runner.run(['dummy', '--machine', '--version']); + + expect(versionChecked, isFalse); + }, overrides: { + FileSystem: () => fs, + ProcessManager: () => FakeProcessManager.any(), + Platform: () => platform, + }, initializeFlutterRoot: false); + testUsingContext('throw tool exit if the version file cannot be written', () async { final MockFlutterVersion version = FlutterVersion.instance as MockFlutterVersion; when(version.ensureVersionFile()).thenThrow(const FileSystemException());