run method

  1. @override
FutureOr<int>? run()
override

Runs this command.

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

Implementation

@override
FutureOr<int>? run() async {
  if (await setHooksPath() case final int code) {
    return code;
  }

  final root = this.root;
  if (root == null) {
    logger.err('Could not find root directory');
    return 1;
  }

  final (definedHooks, exitCode) = this.definedHooks(root);

  if (exitCode case final int code) {
    return code;
  }

  logger.detail('Registering hooks (${definedHooks.length})');

  final hooksDartToolDir = dartToolGitHooksDir(root);
  final executablesDir = this.executablesDir(root);

  final progress = logger.progress('Registering hooks');

  final executablesToCompile = prepareExecutables(
    definedHooks,
    hooksDartToolDir: hooksDartToolDir,
    executablesDir: executablesDir,
  );

  final executables = await compile(executablesToCompile, progress.fail);
  if (executables == null) {
    return 1;
  }

  final hooksPath = gitHooksDir;
  if (hooksPath == null) {
    logger.err('Could not find .git/hooks directory');
    return 1;
  }

  if (copyExecutables(executables, gitHooksDir: hooksPath) case final int code
      when code != 0) {
    return code;
  }

  progress.complete('Registered hooks');

  return 0;
}