diff --git a/packages/flutter_tools/lib/src/commands/version.dart b/packages/flutter_tools/lib/src/commands/version.dart index ed71c55a104..0fb9e908cad 100644 --- a/packages/flutter_tools/lib/src/commands/version.dart +++ b/packages/flutter_tools/lib/src/commands/version.dart @@ -65,6 +65,10 @@ class VersionCommand extends FlutterCommand { // check min supported version final Version targetVersion = Version.parse(version); + if (targetVersion == null) { + throwToolExit('Failed to parse version "$version"'); + } + bool withForce = false; if (targetVersion < minSupportedVersion) { if (!argResults['force']) { diff --git a/packages/flutter_tools/test/general.shard/commands/version_test.dart b/packages/flutter_tools/test/general.shard/commands/version_test.dart index c09ff6900bc..647e6571552 100644 --- a/packages/flutter_tools/test/general.shard/commands/version_test.dart +++ b/packages/flutter_tools/test/general.shard/commands/version_test.dart @@ -62,6 +62,16 @@ void main() { ProcessManager: () => MockProcessManager(), }); + testUsingContext('tool exit on confusing version', () async { + const String version = 'master'; + final VersionCommand command = VersionCommand(); + final Future runCommand = createTestCommandRunner(command).run(['version', version]); + expect(() async => await Future.wait(>[runCommand]), + throwsA(isInstanceOf())); + }, overrides: { + ProcessManager: () => MockProcessManager(), + }); + testUsingContext('exit tool if can\'t get the tags', () async { final VersionCommand command = VersionCommand();