run method
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}个");
}
}
}