feat(homebrew): 添加 Homebrew 输出流式着色功能

- 实现 can_stream_colorize_tty_output 函数检测流式着色支持
- 添加 colorize_brew_tty_stream 函数处理实时进度条和语义配色
- 使用 Perl 脚本实现流式过滤器,即时处理 CRLF 和 CR 换行
- 优化 run_brew_colored 函数集成伪终端和流式着色
- 改进日志记录功能,保留错误分类和重试决策所需信息
- 修复进度条缓冲问题,确保实时显示升级状态
This commit is contained in:
2026-07-24 08:32:50 +08:00
parent 972e7a142d
commit 8124810b6e
2 changed files with 160 additions and 11 deletions
+2 -1
View File
@@ -31,6 +31,7 @@
- Homebrew
- Bash
- `curl`
- macOS 自带的 `/usr/bin/script``/usr/bin/perl`(用于兼顾实时进度与自定义配色)
- macOS Keychain 工具 `/usr/bin/security`,仅启动器需要
可先检查:
@@ -197,7 +198,7 @@ BREWUP_CONNECT_TIMEOUT_SECONDS=20 BREWUP_LOW_SPEED_TIME_SECONDS=45 brewup
为了兼顾性能,Formula 和 Cask 的批量阶段都只执行一次,只有仍然过期的失败项进入单项重试。单项升级保持串行,因为并行运行多个 Homebrew 写操作会争用 Homebrew 锁和 `/Applications`。用于错误分类的临时日志会在命令结束或收到信号后删除。
在交互式终端中,主脚本会 Homebrew 直接连接 TTY,以便 Homebrew 6 实时重绘并行下载进度。需要记录错误以供重试判断时,macOS 自带的 `script(1)`创建伪终端并同步保存日志。如果将 `brewup` 输出重定向到文件或 CI,则自动切换为稳定的逐行输出,不绘制动态进度条。
在交互式终端中,主脚本会通过 macOS 自带的 `script(1)` Homebrew 创建伪终端,以便 Homebrew 6 实时重绘并行下载进度。后续的流式着色器会立即透传进度条的回车刷新,并只对完整文本行应用包名、版本和状态配色。需要记录错误以供重试判断时,`script(1)` 会同步保存日志。如果将 `brewup` 输出重定向到文件或 CI,则自动切换为稳定的逐行输出,不绘制动态进度条。
## Cask 与清理策略