feat(core): 优化 Homebrew 缓存清理策略

* 禁用安装步骤中的自动清理,统一在升级流程结束后执行
* 清理 Homebrew prefix 失效链接及日期早于今天的缓存
* 保留当天生成的下载缓存,并支持失败后继续清理
* 扩展全量清理参数支持并更新相关文档说明
This commit is contained in:
2026-07-17 09:15:23 +08:00
parent ff54bffc53
commit 854aceeae5
4 changed files with 61 additions and 19 deletions
+11 -9
View File
@@ -20,7 +20,7 @@
- 默认使用 `brew upgrade --cask --greedy`,不强制覆盖已有 App;需要时可显式开启 `--force`
- 网络、下载、HTTP 429/5xx 等瞬时错误会自动退避重试;权限、root、证书、checksum 和磁盘空间错误不会盲目重试。
- 同一用户只能运行一个主脚本实例,避免并发升级争用 Homebrew 锁和 `/Applications`
- 升级全部成功后执行常规 `brew cleanup`;存在失败时默认保留缓存,方便下次恢复
- 升级结束后清理 Homebrew prefix 中的失效链接,再按本地自然日清理日期早于今天的缓存,同时保留今天生成的文件
- 支持 `--width`、环境变量宽度和终端动态宽度。
- 启动器支持通过 macOS Keychain 保存并读取 sudo 密码,用于 `sudo -A -v` 预刷新 sudo 凭据。
@@ -189,18 +189,20 @@ BREWUP_CONNECT_TIMEOUT_SECONDS=20 BREWUP_LOW_SPEED_TIME_SECONDS=45 brewup
HB_CASK_FORCE=1 brewup
```
升级成功后默认执行常规 `brew cleanup`。可指定缓存保留天数,或明确清空全部缓存
默认在升级流程的最后先执行
```bash
HB_CLEANUP_DAYS=30 brewup
HB_CLEANUP_ALL=1 brewup
HB_SKIP_CLEANUP=1 brewup
brew cleanup --prune-prefix
```
存在升级失败时默认跳过 cleanup,以保留下载缓存。仍希望清理时:
该命令只处理 prefix 中的失效链接,不删除下载缓存。随后脚本以本地时区的“昨天 23:59:59”为截止点,只删除 Homebrew 缓存目录中修改日期早于今天的文件。它不是滚动 24 小时:无论今天几点运行,今天 00:00 之后生成的缓存都会保留,昨天及更早的缓存会清理。主脚本同时设置了 `HOMEBREW_NO_INSTALL_CLEANUP=1`,避免 Homebrew 在每个安装步骤后提前清理。
如需调整缓存保留天数、彻底清理,或完全跳过清理:
```bash
HB_CLEANUP_ON_FAILURE=1 brewup
HB_CLEANUP_DAYS=30 brewup # 改用 Homebrew 的滚动天数策略
HB_CLEANUP_ALL=1 brewup
HB_SKIP_CLEANUP=1 brewup
```
如果 `brew doctor` 明显影响执行时间,也可以跳过:
@@ -217,8 +219,8 @@ HB_SKIP_DOCTOR=1 brewup
2. `brew doctor`
3. `brew upgrade --formula`;失败时仅重试仍然过期的 Formula
4. `brew upgrade --cask --greedy`;失败时仅重试仍然过期的 Cask
5. 全部成功时执行 `brew cleanup`,否则默认保留缓存
6. 汇总失败的 Formula/Cask 并返回最终状态码
5. `brew cleanup --prune-prefix`,再删除日期早于今天的缓存并保留今天的下载
6. 汇总失败并返回最终状态码
## 常见问题