run method

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

Runs this command.

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

Implementation

@override
FutureOr<void>? run() async {
  final argsRest = argResults?.rest ?? const [];
  final projectInfo = ProjectInfoCollector().projectInfo;
  final cmd = <String>["pub", ...argsRest];
  int totalCount =
      (projectInfo.hasPubspec ? 1 : 0) + projectInfo.packages.length;
  int successCount = 0;
  for (var package in projectInfo.packages) {
    final workingDir = p.join(projectInfo.rootDir, package.path);
    final processResult = await Process.start(
      package.isFlutterProject ? "flutter" : "dart",
      cmd,
      workingDirectory: workingDir,
      mode: ProcessStartMode.inheritStdio,
    );
    int code = await processResult.exitCode;
    if (code == 0) {
      successCount = successCount + 1;
    }
    print("\rcurrent progress: $successCount / $totalCount");
  }
  if (projectInfo.hasPubspec) {
    final result = await Process.start(
      projectInfo.isFlutterProject ? "flutter" : "dart",
      cmd,
      workingDirectory: projectInfo.rootDir,
      mode: ProcessStartMode.inheritStdio,
    );
    int codeFinal = await result.exitCode;
    if (codeFinal == 0) {
      successCount = successCount + 1;
    }
    if (successCount == totalCount) {
      print("执行成功");
    } else {
      print("执行失败,失败了${totalCount - successCount}个");
    }
  }
}