exec method
Run command.
The contents of katana.yaml and the arguments of the command are passed to context.
コマンドを実行します。
contextにkatana.yamlの内容やコマンドの引数が渡されます。
Implementation
@override
Future<void> exec(ExecContext context) async {
final flavors = context.args.skip(2).where((e) => !e.startsWith("-"));
final paths = <String>[];
if (flavors.isEmpty) {
final directory = Directory("dart_defines");
if (directory.existsSync()) {
paths.addAll(
directory
.listSync()
.whereType<File>()
.map((e) => e.path)
.where((e) => e.endsWith(".env"))
.toList()
..sort(),
);
}
if (paths.isEmpty) {
error("Cannot find `dart_defines/*.env`.");
return;
}
} else {
for (final flavor in flavors) {
if (!RegExp(r"^[A-Za-z0-9_-]+$").hasMatch(flavor)) {
error("Invalid flavor: $flavor");
return;
}
final path = "dart_defines/$flavor.env";
if (!File(path).existsSync()) {
error("Cannot find `$path`.");
return;
}
paths.add(path);
}
}
for (final path in paths) {
try {
final output = resolveDartDefinesFile(path, alwaysWrite: true);
stdout.writeln("$path -> $output");
} on KatanaEnvironmentVariableException catch (e) {
error(e.toString());
return;
} on KatanaDartDefinesException catch (e) {
error(e.toString());
return;
}
}
}