mirror of
https://bitbucket.org/siakitem/my-pi.git
synced 2026-08-28 08:35:57 +00:00
fix(update): recover from incomplete git clean
This commit is contained in:
@@ -59,6 +59,49 @@ select_updated_bundle_config() {
|
||||
fi
|
||||
}
|
||||
|
||||
recover_incomplete_bundle_update() {
|
||||
recovery_applicable=0
|
||||
case $PACKAGE_SOURCE in
|
||||
git:git@bitbucket.org:siakitem/my-pi.git) ;;
|
||||
*) return 1 ;;
|
||||
esac
|
||||
|
||||
agent_dir=${PI_CODING_AGENT_DIR:-$HOME/.pi/agent}
|
||||
recovery_target=$agent_dir/git/bitbucket.org/siakitem/my-pi
|
||||
recovery_marker=$agent_dir/git/bitbucket.org/siakitem/.my-pi.pi-update-incomplete
|
||||
if [ ! -f "$recovery_marker" ] || [ -L "$recovery_marker" ]; then
|
||||
return 1
|
||||
fi
|
||||
if ! command -v git >/dev/null 2>&1 || [ ! -d "$recovery_target/.git" ]; then
|
||||
warn "检测到 Pi Git 升级中断标记,但无法验证已安装 checkout,已跳过自动恢复。"
|
||||
return 1
|
||||
fi
|
||||
|
||||
recovery_target=$(CDPATH=; cd "$recovery_target" 2>/dev/null && pwd -P) || return 1
|
||||
recovery_top=$(git -C "$recovery_target" rev-parse --show-toplevel 2>/dev/null) || return 1
|
||||
recovery_top=$(CDPATH=; cd "$recovery_top" 2>/dev/null && pwd -P) || return 1
|
||||
recovery_origin=$(git -C "$recovery_target" remote get-url origin 2>/dev/null) || return 1
|
||||
if [ "$recovery_top" != "$recovery_target" ] || \
|
||||
[ "$recovery_origin" != "git@bitbucket.org:siakitem/my-pi.git" ]; then
|
||||
warn "检测到 Pi Git 升级中断标记,但 checkout 身份校验失败,拒绝自动清理。"
|
||||
return 1
|
||||
fi
|
||||
|
||||
recovery_applicable=1
|
||||
say "检测到默认组合包的 Pi Git 升级中断,正在有限重试依赖清理。"
|
||||
recovery_attempt=1
|
||||
while [ "$recovery_attempt" -le 4 ]; do
|
||||
if git -C "$recovery_target" clean -fdx; then
|
||||
say "✓ Pi Git 缓存清理在第 ${recovery_attempt} 次尝试后完成。"
|
||||
return 0
|
||||
fi
|
||||
warn "Pi Git 缓存第 ${recovery_attempt} 次清理未完成。"
|
||||
recovery_attempt=$((recovery_attempt + 1))
|
||||
done
|
||||
warn "Pi Git 缓存清理在 4 次尝试后仍未完成;将交由最后一次 pi update 恢复依赖并报告结果。"
|
||||
return 1
|
||||
}
|
||||
|
||||
migrate_tool_search_settings() {
|
||||
settings_file=${PI_CODING_AGENT_DIR:-$HOME/.pi/agent}/settings.json
|
||||
if [ ! -e "$settings_file" ]; then
|
||||
@@ -430,9 +473,27 @@ if ! command -v pi >/dev/null 2>&1; then
|
||||
fi
|
||||
|
||||
say "正在升级 Pi 组合包:$PACKAGE_SOURCE"
|
||||
if ! pi update "$PACKAGE_SOURCE"; then
|
||||
warn "pi update 执行失败,已停止后续升级。"
|
||||
exit 1
|
||||
if pi update "$PACKAGE_SOURCE"; then
|
||||
:
|
||||
else
|
||||
recovery_applicable=0
|
||||
recovery_cleaned=0
|
||||
if recover_incomplete_bundle_update; then
|
||||
recovery_cleaned=1
|
||||
fi
|
||||
if [ "$recovery_applicable" -ne 1 ]; then
|
||||
warn "pi update 执行失败,已停止后续升级。"
|
||||
exit 1
|
||||
fi
|
||||
if [ "$recovery_cleaned" -eq 1 ]; then
|
||||
say "正在重试 Pi 组合包升级,由 Pi 完成依赖安装并清除中断标记。"
|
||||
else
|
||||
warn "正在执行最后一次 pi update,以恢复可能被部分清理的依赖。"
|
||||
fi
|
||||
if ! pi update "$PACKAGE_SOURCE"; then
|
||||
warn "pi update 自动恢复后仍然失败,已停止后续升级。"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
select_updated_bundle_config || exit 1
|
||||
migrate_tool_search_settings || record_update_failure "Tool Search 用户配置"
|
||||
|
||||
Reference in New Issue
Block a user