refactor(homebrew): 统一 Homebrew 输出着色处理
- 移除交互式终端的特殊处理逻辑,禁用 Homebrew 自带动态进度显示 - 统一使用语义着色处理所有场景下的 Homebrew 输出 - 删除 BSD script 伪终端分配功能,简化日志记录流程 - 更新 README 文档说明输出着色的一致性改进
This commit is contained in:
+1
-1
@@ -325,7 +325,7 @@ brew upgrade --cask --greedy visual-studio-code
|
|||||||
## 注意事项
|
## 注意事项
|
||||||
|
|
||||||
- 脚本启用了 `set -euo pipefail`,但 Formula/Cask 升级阶段会捕获错误、继续隔离其他失败项,并在最后统一返回状态。
|
- 脚本启用了 `set -euo pipefail`,但 Formula/Cask 升级阶段会捕获错误、继续隔离其他失败项,并在最后统一返回状态。
|
||||||
- 交互式终端中直接保留 Homebrew 的 TTY 输出,因此 Formula/Cask 下载会显示原生实时进度;输出被重定向或用于 CI 时会自动回退到按行输出。
|
- Homebrew 输出在交互式终端、重定向和 CI 中都会经过同一套语义着色,避免版本变化行因原生 TTY 输出而丢失颜色。
|
||||||
- `brew upgrade --cask --greedy` 可能退出正在运行的 GUI 应用,建议先保存重要工作。
|
- `brew upgrade --cask --greedy` 可能退出正在运行的 GUI 应用,建议先保存重要工作。
|
||||||
- 不建议日常启用 `HB_CASK_FORCE=1`;它会允许 Homebrew 覆盖已有 Cask 文件。
|
- 不建议日常启用 `HB_CASK_FORCE=1`;它会允许 Homebrew 覆盖已有 Cask 文件。
|
||||||
- 远程启动器属于“下载后执行”模式,只应从可信仓库使用。
|
- 远程启动器属于“下载后执行”模式,只应从可信仓库使用。
|
||||||
|
|||||||
@@ -573,14 +573,8 @@ colorize_brew_output() {
|
|||||||
run_brew_colored() {
|
run_brew_colored() {
|
||||||
local pipeline_status=()
|
local pipeline_status=()
|
||||||
|
|
||||||
# Homebrew 只有在 stdout 连接 TTY 时才会让 curl 显示动态下载进度。
|
# 禁用 Homebrew 自带的不完整配色,统一按语义着色。这里不能在
|
||||||
# 交互式终端中保留原始文件描述符,并使用 Homebrew 原生配色。
|
# 交互式终端直接运行 brew,否则版本变化行会绕过着色器。
|
||||||
if [[ -t 1 ]]; then
|
|
||||||
brew "$@"
|
|
||||||
return $?
|
|
||||||
fi
|
|
||||||
|
|
||||||
# 非交互式输出无法显示动态进度,继续按行进行语义着色。
|
|
||||||
if env -u HOMEBREW_COLOR brew "$@" 2>&1 | colorize_brew_output; then
|
if env -u HOMEBREW_COLOR brew "$@" 2>&1 | colorize_brew_output; then
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
@@ -704,26 +698,17 @@ run_brew_with_retries() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
: > "$ACTIVE_LOG_FILE"
|
: > "$ACTIVE_LOG_FILE"
|
||||||
if [[ -t 0 && -t 1 && -t 2 && "$(uname -s 2>/dev/null || true)" == "Darwin" && -x /usr/bin/script ]]; then
|
if env -u HOMEBREW_COLOR brew "$@" 2>&1 | tee "$ACTIVE_LOG_FILE" | colorize_brew_output; then
|
||||||
# BSD script 为 brew 分配伪终端:既保留实时进度,又记录完整输出供错误分类。
|
status=0
|
||||||
if /usr/bin/script -q -e "$ACTIVE_LOG_FILE" brew "$@"; then
|
|
||||||
status=0
|
|
||||||
else
|
|
||||||
status=$?
|
|
||||||
fi
|
|
||||||
else
|
else
|
||||||
if env -u HOMEBREW_COLOR brew "$@" 2>&1 | tee "$ACTIVE_LOG_FILE" | colorize_brew_output; then
|
pipeline_status=("${PIPESTATUS[@]}")
|
||||||
status=0
|
status="${pipeline_status[0]}"
|
||||||
else
|
if ((${pipeline_status[1]:-0} != 0)); then
|
||||||
pipeline_status=("${PIPESTATUS[@]}")
|
print_error "failed to write retry log."
|
||||||
status="${pipeline_status[0]}"
|
status="${pipeline_status[1]}"
|
||||||
if ((${pipeline_status[1]:-0} != 0)); then
|
elif ((${pipeline_status[2]:-0} != 0)); then
|
||||||
print_error "failed to write retry log."
|
print_error "failed to colorize Homebrew output."
|
||||||
status="${pipeline_status[1]}"
|
status="${pipeline_status[2]}"
|
||||||
elif ((${pipeline_status[2]:-0} != 0)); then
|
|
||||||
print_error "failed to colorize Homebrew output."
|
|
||||||
status="${pipeline_status[2]}"
|
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user