mirror of
https://github.com/flutter/flutter.git
synced 2025-06-03 00:51:18 +00:00
[flutter_tools] show only supported sub commands (#85125)
This commit is contained in:
parent
501474de99
commit
84e576786c
@ -24,25 +24,31 @@ import 'build_winuwp.dart';
|
|||||||
|
|
||||||
class BuildCommand extends FlutterCommand {
|
class BuildCommand extends FlutterCommand {
|
||||||
BuildCommand({ bool verboseHelp = false }) {
|
BuildCommand({ bool verboseHelp = false }) {
|
||||||
addSubcommand(BuildAarCommand(verboseHelp: verboseHelp));
|
_addSubcommand(BuildAarCommand(verboseHelp: verboseHelp));
|
||||||
addSubcommand(BuildApkCommand(verboseHelp: verboseHelp));
|
_addSubcommand(BuildApkCommand(verboseHelp: verboseHelp));
|
||||||
addSubcommand(BuildAppBundleCommand(verboseHelp: verboseHelp));
|
_addSubcommand(BuildAppBundleCommand(verboseHelp: verboseHelp));
|
||||||
addSubcommand(BuildIOSCommand(verboseHelp: verboseHelp));
|
_addSubcommand(BuildIOSCommand(verboseHelp: verboseHelp));
|
||||||
addSubcommand(BuildIOSFrameworkCommand(
|
_addSubcommand(BuildIOSFrameworkCommand(
|
||||||
buildSystem: globals.buildSystem,
|
buildSystem: globals.buildSystem,
|
||||||
verboseHelp: verboseHelp,
|
verboseHelp: verboseHelp,
|
||||||
));
|
));
|
||||||
addSubcommand(BuildIOSArchiveCommand(verboseHelp: verboseHelp));
|
_addSubcommand(BuildIOSArchiveCommand(verboseHelp: verboseHelp));
|
||||||
addSubcommand(BuildBundleCommand(verboseHelp: verboseHelp));
|
_addSubcommand(BuildBundleCommand(verboseHelp: verboseHelp));
|
||||||
addSubcommand(BuildWebCommand(verboseHelp: verboseHelp));
|
_addSubcommand(BuildWebCommand(verboseHelp: verboseHelp));
|
||||||
addSubcommand(BuildMacosCommand(verboseHelp: verboseHelp));
|
_addSubcommand(BuildMacosCommand(verboseHelp: verboseHelp));
|
||||||
addSubcommand(BuildLinuxCommand(
|
_addSubcommand(BuildLinuxCommand(
|
||||||
operatingSystemUtils: globals.os,
|
operatingSystemUtils: globals.os,
|
||||||
verboseHelp: verboseHelp
|
verboseHelp: verboseHelp
|
||||||
));
|
));
|
||||||
addSubcommand(BuildWindowsCommand(verboseHelp: verboseHelp));
|
_addSubcommand(BuildWindowsCommand(verboseHelp: verboseHelp));
|
||||||
addSubcommand(BuildWindowsUwpCommand(verboseHelp: verboseHelp));
|
_addSubcommand(BuildWindowsUwpCommand(verboseHelp: verboseHelp));
|
||||||
addSubcommand(BuildFuchsiaCommand(verboseHelp: verboseHelp));
|
_addSubcommand(BuildFuchsiaCommand(verboseHelp: verboseHelp));
|
||||||
|
}
|
||||||
|
|
||||||
|
void _addSubcommand(BuildSubCommand command) {
|
||||||
|
if (command.supported) {
|
||||||
|
addSubcommand(command);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@ -63,6 +69,8 @@ abstract class BuildSubCommand extends FlutterCommand {
|
|||||||
@override
|
@override
|
||||||
bool get reportNullSafety => true;
|
bool get reportNullSafety => true;
|
||||||
|
|
||||||
|
bool get supported => true;
|
||||||
|
|
||||||
/// Display a message describing the current null safety runtime mode
|
/// Display a message describing the current null safety runtime mode
|
||||||
/// that was selected.
|
/// that was selected.
|
||||||
///
|
///
|
||||||
|
@ -58,6 +58,9 @@ class BuildFuchsiaCommand extends BuildSubCommand {
|
|||||||
@override
|
@override
|
||||||
String get description => 'Build the Fuchsia target (Experimental).';
|
String get description => 'Build the Fuchsia target (Experimental).';
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool get supported => globals.platform.isLinux || globals.platform.isMacOS;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<FlutterCommandResult> runCommand() async {
|
Future<FlutterCommandResult> runCommand() async {
|
||||||
if (!featureFlags.isFuchsiaEnabled) {
|
if (!featureFlags.isFuchsiaEnabled) {
|
||||||
@ -68,7 +71,7 @@ class BuildFuchsiaCommand extends BuildSubCommand {
|
|||||||
}
|
}
|
||||||
final BuildInfo buildInfo = await getBuildInfo();
|
final BuildInfo buildInfo = await getBuildInfo();
|
||||||
final FlutterProject flutterProject = FlutterProject.current();
|
final FlutterProject flutterProject = FlutterProject.current();
|
||||||
if (!globals.platform.isLinux && !globals.platform.isMacOS) {
|
if (!supported) {
|
||||||
throwToolExit('"build fuchsia" is only supported on Linux and MacOS hosts.');
|
throwToolExit('"build fuchsia" is only supported on Linux and MacOS hosts.');
|
||||||
}
|
}
|
||||||
if (!flutterProject.fuchsia.existsSync()) {
|
if (!flutterProject.fuchsia.existsSync()) {
|
||||||
|
@ -224,12 +224,15 @@ abstract class _BuildIOSSubCommand extends BuildSubCommand {
|
|||||||
|
|
||||||
Directory _outputAppDirectory(String xcodeResultOutput);
|
Directory _outputAppDirectory(String xcodeResultOutput);
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool get supported => globals.platform.isMacOS;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<FlutterCommandResult> runCommand() async {
|
Future<FlutterCommandResult> runCommand() async {
|
||||||
defaultBuildMode = forSimulator ? BuildMode.debug : BuildMode.release;
|
defaultBuildMode = forSimulator ? BuildMode.debug : BuildMode.release;
|
||||||
final BuildInfo buildInfo = await getBuildInfo();
|
final BuildInfo buildInfo = await getBuildInfo();
|
||||||
|
|
||||||
if (!globals.platform.isMacOS) {
|
if (!supported) {
|
||||||
throwToolExit('Building for iOS is only supported on macOS.');
|
throwToolExit('Building for iOS is only supported on macOS.');
|
||||||
}
|
}
|
||||||
if (forSimulator && !buildInfo.supportsSimulator) {
|
if (forSimulator && !buildInfo.supportsSimulator) {
|
||||||
|
@ -141,11 +141,14 @@ class BuildIOSFrameworkCommand extends BuildSubCommand {
|
|||||||
return buildInfos;
|
return buildInfos;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool get supported => _platform.isMacOS;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<void> validateCommand() async {
|
Future<void> validateCommand() async {
|
||||||
await super.validateCommand();
|
await super.validateCommand();
|
||||||
_project = FlutterProject.current();
|
_project = FlutterProject.current();
|
||||||
if (!_platform.isMacOS) {
|
if (!supported) {
|
||||||
throwToolExit('Building frameworks for iOS is only supported on the Mac.');
|
throwToolExit('Building frameworks for iOS is only supported on the Mac.');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -39,6 +39,9 @@ class BuildMacosCommand extends BuildSubCommand {
|
|||||||
@override
|
@override
|
||||||
String get description => 'Build a macOS desktop application.';
|
String get description => 'Build a macOS desktop application.';
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool get supported => globals.platform.isMacOS;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<FlutterCommandResult> runCommand() async {
|
Future<FlutterCommandResult> runCommand() async {
|
||||||
final BuildInfo buildInfo = await getBuildInfo();
|
final BuildInfo buildInfo = await getBuildInfo();
|
||||||
@ -46,7 +49,7 @@ class BuildMacosCommand extends BuildSubCommand {
|
|||||||
if (!featureFlags.isMacOSEnabled) {
|
if (!featureFlags.isMacOSEnabled) {
|
||||||
throwToolExit('"build macos" is not currently supported. To enable, run "flutter config --enable-macos-desktop".');
|
throwToolExit('"build macos" is not currently supported. To enable, run "flutter config --enable-macos-desktop".');
|
||||||
}
|
}
|
||||||
if (!globals.platform.isMacOS) {
|
if (!supported) {
|
||||||
throwToolExit('"build macos" only supported on macOS hosts.');
|
throwToolExit('"build macos" only supported on macOS hosts.');
|
||||||
}
|
}
|
||||||
displayNullSafetyMode(buildInfo);
|
displayNullSafetyMode(buildInfo);
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
|
|
||||||
// @dart = 2.8
|
// @dart = 2.8
|
||||||
|
|
||||||
|
import 'package:args/command_runner.dart';
|
||||||
import 'package:file/memory.dart';
|
import 'package:file/memory.dart';
|
||||||
import 'package:file_testing/file_testing.dart';
|
import 'package:file_testing/file_testing.dart';
|
||||||
import 'package:flutter_tools/src/base/file_system.dart';
|
import 'package:flutter_tools/src/base/file_system.dart';
|
||||||
@ -111,7 +112,7 @@ void main() {
|
|||||||
|
|
||||||
expect(
|
expect(
|
||||||
createTestCommandRunner(command).run(const <String>['build', 'fuchsia']),
|
createTestCommandRunner(command).run(const <String>['build', 'fuchsia']),
|
||||||
throwsToolExit(),
|
throwsA(isA<UsageException>()),
|
||||||
);
|
);
|
||||||
}, overrides: <Type, Generator>{
|
}, overrides: <Type, Generator>{
|
||||||
Platform: () => windowsPlatform,
|
Platform: () => windowsPlatform,
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
|
|
||||||
// @dart = 2.8
|
// @dart = 2.8
|
||||||
|
|
||||||
|
import 'package:args/command_runner.dart';
|
||||||
import 'package:file/memory.dart';
|
import 'package:file/memory.dart';
|
||||||
import 'package:flutter_tools/src/base/file_system.dart';
|
import 'package:flutter_tools/src/base/file_system.dart';
|
||||||
import 'package:flutter_tools/src/base/platform.dart';
|
import 'package:flutter_tools/src/base/platform.dart';
|
||||||
@ -162,7 +163,7 @@ void main() {
|
|||||||
|
|
||||||
expect(createTestCommandRunner(command).run(
|
expect(createTestCommandRunner(command).run(
|
||||||
const <String>['build', 'ios', '--no-pub']
|
const <String>['build', 'ios', '--no-pub']
|
||||||
), throwsToolExit());
|
), throwsA(isA<UsageException>()));
|
||||||
}, overrides: <Type, Generator>{
|
}, overrides: <Type, Generator>{
|
||||||
Platform: () => notMacosPlatform,
|
Platform: () => notMacosPlatform,
|
||||||
FileSystem: () => fileSystem,
|
FileSystem: () => fileSystem,
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
|
|
||||||
// @dart = 2.8
|
// @dart = 2.8
|
||||||
|
|
||||||
|
import 'package:args/command_runner.dart';
|
||||||
import 'package:file/memory.dart';
|
import 'package:file/memory.dart';
|
||||||
import 'package:flutter_tools/src/base/file_system.dart';
|
import 'package:flutter_tools/src/base/file_system.dart';
|
||||||
import 'package:flutter_tools/src/base/logger.dart';
|
import 'package:flutter_tools/src/base/logger.dart';
|
||||||
@ -157,7 +158,7 @@ void main() {
|
|||||||
|
|
||||||
expect(createTestCommandRunner(command).run(
|
expect(createTestCommandRunner(command).run(
|
||||||
const <String>['build', 'ipa', '--no-pub']
|
const <String>['build', 'ipa', '--no-pub']
|
||||||
), throwsToolExit());
|
), throwsA(isA<UsageException>()));
|
||||||
}, overrides: <Type, Generator>{
|
}, overrides: <Type, Generator>{
|
||||||
Platform: () => notMacosPlatform,
|
Platform: () => notMacosPlatform,
|
||||||
FileSystem: () => fileSystem,
|
FileSystem: () => fileSystem,
|
||||||
|
@ -149,7 +149,7 @@ void main() {
|
|||||||
|
|
||||||
expect(createTestCommandRunner(command).run(
|
expect(createTestCommandRunner(command).run(
|
||||||
const <String>['build', 'macos', '--no-pub']
|
const <String>['build', 'macos', '--no-pub']
|
||||||
), throwsToolExit(message: '"build macos" only supported on macOS hosts.'));
|
), throwsA(isA<UsageException>()));
|
||||||
}, overrides: <Type, Generator>{
|
}, overrides: <Type, Generator>{
|
||||||
Platform: () => notMacosPlatform,
|
Platform: () => notMacosPlatform,
|
||||||
FileSystem: () => fileSystem,
|
FileSystem: () => fileSystem,
|
||||||
@ -391,7 +391,7 @@ void main() {
|
|||||||
final CommandRunner<void> runner = createTestCommandRunner(BuildCommand());
|
final CommandRunner<void> runner = createTestCommandRunner(BuildCommand());
|
||||||
|
|
||||||
expect(() => runner.run(<String>['build', 'macos', '--no-pub']),
|
expect(() => runner.run(<String>['build', 'macos', '--no-pub']),
|
||||||
throwsToolExit());
|
throwsA(isA<UsageException>()));
|
||||||
}, overrides: <Type, Generator>{
|
}, overrides: <Type, Generator>{
|
||||||
FeatureFlags: () => TestFeatureFlags(isMacOSEnabled: false),
|
FeatureFlags: () => TestFeatureFlags(isMacOSEnabled: false),
|
||||||
});
|
});
|
||||||
|
@ -5,6 +5,7 @@
|
|||||||
// @dart = 2.8
|
// @dart = 2.8
|
||||||
|
|
||||||
import 'package:args/args.dart';
|
import 'package:args/args.dart';
|
||||||
|
import 'package:args/command_runner.dart';
|
||||||
import 'package:flutter_tools/src/build_info.dart';
|
import 'package:flutter_tools/src/build_info.dart';
|
||||||
import 'package:flutter_tools/src/commands/attach.dart';
|
import 'package:flutter_tools/src/commands/attach.dart';
|
||||||
import 'package:flutter_tools/src/commands/build.dart';
|
import 'package:flutter_tools/src/commands/build.dart';
|
||||||
@ -75,6 +76,13 @@ void main() {
|
|||||||
FakeBuildSubCommand().test(sound);
|
FakeBuildSubCommand().test(sound);
|
||||||
expect(testLogger.statusText, contains('💪 Building with sound null safety 💪'));
|
expect(testLogger.statusText, contains('💪 Building with sound null safety 💪'));
|
||||||
});
|
});
|
||||||
|
|
||||||
|
testUsingContext('Include only supported sub commands', () {
|
||||||
|
final BuildCommand command = BuildCommand();
|
||||||
|
for (final Command<void> x in command.subcommands.values) {
|
||||||
|
expect((x as BuildSubCommand).supported, isTrue);
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
class FakeBuildSubCommand extends BuildSubCommand {
|
class FakeBuildSubCommand extends BuildSubCommand {
|
||||||
|
Loading…
Reference in New Issue
Block a user