Improve the error message when a target is specified but not found. https://github.com/flutter/flutter/issues/2368
diff --git a/packages/flutter_tools/lib/src/runner/flutter_command.dart b/packages/flutter_tools/lib/src/runner/flutter_command.dart index d43f121..c916ca6 100644 --- a/packages/flutter_tools/lib/src/runner/flutter_command.dart +++ b/packages/flutter_tools/lib/src/runner/flutter_command.dart
@@ -21,7 +21,7 @@ FlutterCommandRunner get runner => super.runner; /// Whether this command needs to be run from the root of a project. - bool get requiresProjectRoot => !_targetSpecified; + bool get requiresProjectRoot => true; /// Whether this command requires a (single) Flutter target device to be connected. bool get requiresDevice => false; @@ -29,6 +29,10 @@ /// Whether this command only applies to Android devices. bool get androidOnly => false; + /// Whether this command allows usage of the 'target' option. + bool get allowsTarget => _targetOptionSpecified; + bool _targetOptionSpecified = false; + List<BuildConfiguration> get buildConfigurations => runner.buildConfigurations; Future downloadToolchain() async { @@ -59,7 +63,8 @@ } Future<int> _run() async { - if (requiresProjectRoot && !projectRootValidator()) + bool _checkRoot = requiresProjectRoot && allowsTarget && !_targetSpecified; + if (_checkRoot && !projectRootValidator()) return 1; // Ensure at least one toolchain is installed. @@ -152,5 +157,6 @@ callback: (val) => _targetSpecified = true, defaultsTo: flx.defaultMainPath, help: 'Target app path / main entry-point file.'); + _targetOptionSpecified = true; } }
diff --git a/packages/flutter_tools/test/run_test.dart b/packages/flutter_tools/test/run_test.dart index 100aa98..8c07516 100644 --- a/packages/flutter_tools/test/run_test.dart +++ b/packages/flutter_tools/test/run_test.dart
@@ -13,7 +13,7 @@ defineTests() { group('run', () { - testUsingContext('fail when target not found', () { + testUsingContext('fails when target not found', () { RunCommand command = new RunCommand(); applyMocksToCommand(command); return createTestCommandRunner(command).run(<String>['run', '-t', 'abc123']).then((int code) {