run method

  1. @override
Future<int> run()
override

Runs this command.

The return value is wrapped in a Future if necessary and returned by CommandRunner.runCommand.

Implementation

@override
Future<int> run() async {
  final parsed = _parsePassthroughArguments(argResults!.rest);
  final options = parsed.options;
  final isHelpRequest =
      parsed.pubArguments.contains('--help') ||
      parsed.pubArguments.contains('-h');

  if (isHelpRequest) {
    return runDartProcess(
      arguments: ['pub', commandName, ...parsed.pubArguments],
    );
  }

  final targetDirectory =
      options.globalOptions.directory ?? config.workingDirectory;
  final arguments = [
    'pub',
    ...buildGlobalArgs(options),
    commandName,
    ...parsed.pubArguments,
  ];

  final beforeHookExitCode = await runBeforeHook(
    commandName: commandName,
    globalOptions: options.globalOptions,
  );
  if (beforeHookExitCode != 0) {
    return beforeHookExitCode;
  }

  final preHookExitCode = await runPreHook(
    commandName: commandName,
    globalOptions: options.globalOptions,
  );
  if (preHookExitCode != 0) {
    return preHookExitCode;
  }

  if (options.globalOptions.isVerbose) {
    logger.info('Running: dart ${arguments.join(' ')}');
  }

  final exitCode = await runDartProcess(
    arguments: arguments,
    workingDirectory: targetDirectory,
    environment: getCacheEnv(options.cacheDir),
  );
  if (exitCode != 0) {
    return exitCode;
  }

  final postHookExitCode = await runPostHook(
    commandName: commandName,
    globalOptions: options.globalOptions,
  );
  if (postHookExitCode != 0) {
    return postHookExitCode;
  }

  final afterHookExitCode = await runAfterHook(
    commandName: commandName,
    globalOptions: options.globalOptions,
  );
  return afterHookExitCode;
}