refactor(homebrew): 重构 Homebrew 升级管理脚本的配色和清理策略
- 实现终端主题检测功能,支持深色/浅色模式自动切换配色方案 - 添加 256 色终端支持,优化不同背景下的颜色对比度 - 引入版本变更高亮显示,突出包名、旧版本、新版本的变化 - 集成 OSC 11 协议查询终端背景色,提升跨终端兼容性 - 将清理策略从按日期清理改为统一执行 brew cleanup --prune=all - 移除自定义缓存清理逻辑,使用 Homebrew 内置清理机制 - 增强输出着色功能,按语义对 Homebrew 输出进行彩色标记 - 更新文档说明新的清理流程和终端配色特性
This commit is contained in:
+19
-14
@@ -20,7 +20,7 @@
|
||||
- 默认使用 `brew upgrade --cask --greedy`,不强制覆盖已有 App;需要时可显式开启 `--force`。
|
||||
- 网络、下载、HTTP 429/5xx 等瞬时错误会自动退避重试;权限、root、证书、checksum 和磁盘空间错误不会盲目重试。
|
||||
- 同一用户只能运行一个主脚本实例,避免并发升级争用 Homebrew 锁和 `/Applications`。
|
||||
- 升级结束后清理 Homebrew prefix 中的失效链接,再按本地自然日清理日期早于今天的缓存,同时保留今天生成的文件。
|
||||
- 升级与失败重试全部结束后,执行 `brew cleanup --prune=all` 清理全部缓存和旧版本。
|
||||
- 支持 `--width`、环境变量宽度和终端动态宽度。
|
||||
- 启动器支持通过 macOS Keychain 保存并读取 sudo 密码,用于 `sudo -A -v` 预刷新 sudo 凭据。
|
||||
|
||||
@@ -102,6 +102,19 @@ HB_TERMINAL_WIDTH=130 ./brew-upgrade-manager.sh
|
||||
|
||||
优先级为:命令行 `--width` 高于 `HB_TERMINAL_WIDTH`。两者都不设置时,脚本会读取当前终端宽度;无法读取时默认使用 `130`。
|
||||
|
||||
## 终端主题与配色
|
||||
|
||||
主脚本默认使用 `HB_COLOR_THEME=auto`。它会优先读取终端提供的背景信息,并通过标准 OSC 11 查询兼容 Apple Terminal、iTerm2、Termius、Kitty、WezTerm、Alacritty 等常见终端;在 SSH 中,终端客户端允许响应透传时也能识别本地背景。深色背景使用偏亮色阶,浅色背景使用更深的色阶,避免黄色、青色在白底上难以辨认。
|
||||
|
||||
如果终端屏蔽了背景色查询,或者需要固定配色,可以手动覆盖:
|
||||
|
||||
```bash
|
||||
HB_COLOR_THEME=dark brewup
|
||||
HB_COLOR_THEME=light brewup
|
||||
```
|
||||
|
||||
终端支持 256 色时会使用精细色阶;否则自动退回标准 ANSI 深色/浅色方案。输出含义保持一致:包名为青色,旧版本为黄色,变化箭头为蓝色,新版本和成功状态为绿色,警告为黄色,错误为红色。
|
||||
|
||||
## 启动器行为
|
||||
|
||||
`brew-upgrade-manager-bootstrap.sh` 会执行以下操作:
|
||||
@@ -189,21 +202,13 @@ BREWUP_CONNECT_TIMEOUT_SECONDS=20 BREWUP_LOW_SPEED_TIME_SECONDS=45 brewup
|
||||
HB_CASK_FORCE=1 brewup
|
||||
```
|
||||
|
||||
默认在升级流程的最后先执行:
|
||||
升级、失败隔离和重试全部在前一步完成。最后的清理阶段只执行一次:
|
||||
|
||||
```bash
|
||||
brew cleanup --prune-prefix
|
||||
brew cleanup --prune=all
|
||||
```
|
||||
|
||||
该命令只处理 prefix 中的失效链接,不删除下载缓存。随后脚本以本地时区的“昨天 23:59:59”为截止点,只删除 Homebrew 缓存目录中修改日期早于今天的文件。它不是滚动 24 小时:无论今天几点运行,今天 00:00 之后生成的缓存都会保留,昨天及更早的缓存会清理。主脚本同时设置了 `HOMEBREW_NO_INSTALL_CLEANUP=1`,避免 Homebrew 在每个安装步骤后提前清理。
|
||||
|
||||
如需调整缓存保留天数、彻底清理,或完全跳过清理:
|
||||
|
||||
```bash
|
||||
HB_CLEANUP_DAYS=30 brewup # 改用 Homebrew 的滚动天数策略
|
||||
HB_CLEANUP_ALL=1 brewup
|
||||
HB_SKIP_CLEANUP=1 brewup
|
||||
```
|
||||
不再按日期区分新旧缓存,也不保留当天下载;清理由 Homebrew 自己统一完成。主脚本设置 `HOMEBREW_NO_INSTALL_CLEANUP=1`,避免每个包安装后重复清理。
|
||||
|
||||
如果 `brew doctor` 明显影响执行时间,也可以跳过:
|
||||
|
||||
@@ -219,7 +224,7 @@ HB_SKIP_DOCTOR=1 brewup
|
||||
2. `brew doctor`
|
||||
3. `brew upgrade --formula`;失败时仅重试仍然过期的 Formula
|
||||
4. `brew upgrade --cask --greedy`;失败时仅重试仍然过期的 Cask
|
||||
5. `brew cleanup --prune-prefix`,再删除日期早于今天的缓存并保留今天的下载
|
||||
5. `brew cleanup --prune=all`,一次性清理全部缓存和旧版本
|
||||
6. 汇总失败项并返回最终状态码
|
||||
|
||||
## 常见问题
|
||||
@@ -301,7 +306,7 @@ Warning: 'brew doctor' detected issues. Manual review and resolution are recomme
|
||||
brew outdated --cask --greedy
|
||||
```
|
||||
|
||||
如果没有剩余过期 Cask,脚本会把前一次错误视为已恢复。如果仍有过期 Cask,脚本会逐个重试;网络类错误按配置退避重试,其他错误执行一次。最终仍有过期项时,脚本返回失败状态并默认保留缓存。
|
||||
如果没有剩余过期 Cask,脚本会把前一次错误视为已恢复。如果仍有过期 Cask,脚本会逐个重试;网络类错误按配置退避重试,其他错误执行一次。最终仍有过期项时,脚本记录失败状态,然后进入统一的 `brew cleanup --prune=all` 清理阶段。
|
||||
|
||||
### Cask 报 `Running Homebrew as root`
|
||||
|
||||
|
||||
Reference in New Issue
Block a user