build method

Future<void> build()

Implementation

Future<void> build() async {
  var localCommandNames = localCommands.map((c) => c.name).toSet();

  ArgResults parsedArgs;
  BuildCommandRunner commandRunner;
  try {
    commandRunner =
        BuildCommandRunner([], await PackageGraph.forThisPackage());
    parsedArgs = commandRunner.parse(args);
  } on UsageException catch (e) {
    print(red.wrap(e.message));
    print('');
    print(e.usage);
    exitCode = ExitCode.usage.code;
    return;
  }

  var commandName = parsedArgs.command?.name;

  if (parsedArgs.rest.isNotEmpty) {
    print(yellow
        .wrap('Could not find a command named "${parsedArgs.rest[0]}".'));
    print('');
    print(commandRunner.usageWithoutDescription);
    exitCode = ExitCode.usage.code;
    return;
  }

  if (commandName == null || commandName == 'help') {
    commandRunner.printUsage();
    return;
  }

  final logListener = Logger.root.onRecord.listen(stdIOLogListener());
  if (localCommandNames.contains(commandName)) {
    exitCode = await commandRunner.runCommand(parsedArgs) ?? 0;
  } else {
    while (
        (exitCode = await generateAndRun(args)) == ExitCode.tempFail.code) {}
  }
  await logListener.cancel();
  return;
}