文件
phonerail/.claude/r2/remote_d16.sh
T

70 行
3.9 KiB
Bash
原始文件 Blame 文件历史

此文件含有模棱两可的 Unicode 字符
此文件含有可能会与其他字符混淆的 Unicode 字符。 如果您是想特意这样的,可以安全地忽略该警告。 使用 Escape 按钮显示他们。
#!/bin/bash
# D16 南带补线上服务器(CLAUDE.md:布线运算只在 10.5.5.13 跑)。
#
# bash .claude/r2/remote_d16.sh [NET=宽度 ...]
#
# 前提:本机已把板上快照写成 .claude/r2/_board_for_nets.json(旧入口的铜已删)。
# 结果拉回 .claude/r2/_d16_route.out.json / _d16_route.log,**不下发** —— 本机复核净距之后再下发。
set -euo pipefail
SERVER=${SERVER:-10.5.5.13}
INTERP=${INTERP:-/root/pypy/bin/pypy3}
SSH=/c/Windows/System32/OpenSSH/ssh.exe
SCP=/c/Windows/System32/OpenSSH/scp.exe
REPO=$(cd "$(dirname "$0")/../.." && pwd)
cd "$REPO"
[ -f .claude/r2/_board_for_nets.json ] || { echo '缺 _board_for_nets.json(先抓板)'; exit 1; }
TMP=${TMPDIR:-/tmp}
TGZ=$(mktemp -u "$TMP/d16-route-XXXXXX").tgz
tar --exclude='*.png' --exclude='*.bak' --exclude='__pycache__' --exclude='archive_*' \
--exclude='_base_routes.r*' --exclude='_blade_routes.*' --exclude='_base_board_*' -czf "$TGZ" \
.claude/r2 .claude/eda.py .claude/eda-parts.json .claude/pcb_pour.py
R=$("$SSH" "$SERVER" 'mktemp -d /tmp/dcdc-d16.XXXXXX' | tr -d '\r')
case "$R" in /tmp/dcdc-d16.*) ;; *) echo "远程目录不对: $R"; exit 1 ;; esac
cleanup() {
rm -f "$TGZ"
# ⚠ `[.]claude` 是故意的:直接写目录串的话 pkill 会先把执行这条命令的远程 shell 杀掉
"$SSH" "$SERVER" "pkill -f '$R/[.]claude/r2/d16_route' ; rm -rf -- '$R'" || true
}
trap cleanup EXIT
"$SCP" -q "$(cygpath -w "$TGZ")" "$SERVER:$R/b.tgz"
"$SSH" "$SERVER" "tar -xzf $R/b.tgz -C $R"
# MODE=gnd:d16_gndfix.py(给指定 GND 焊盘各打一个孔),拉回 _d16_gndfix.out.json
if [ "${MODE:-route}" = gnd ]; then
"$SSH" "$SERVER" "cd $R && DCDC_ROUTE_SERVER=1 $INTERP .claude/r2/d16_gndfix.py $* 2>&1" | tee .claude/r2/_d16_gndfix.log
"$SCP" -q "$SERVER:$R/.claude/r2/_d16_gndfix.out.json" .claude/r2/_d16_gndfix.out.json
echo "已拉回 .claude/r2/_d16_gndfix.out.json(未下发)"
exit 0
fi
# MODE=rip:d16_rip.py(拆 U13 I²C 三线束,连同 CH224A 的 SDA/SCL 一起重布;只改数据不动板),拉回 _d16_rip.out.json
if [ "${MODE:-route}" = rip ]; then
"$SSH" "$SERVER" "cd $R && DCDC_ROUTE_SERVER=1 $INTERP .claude/r2/d16_rip.py $* 2>&1" | tee .claude/r2/_d16_rip.log
"$SCP" -q "$SERVER:$R/.claude/r2/_d16_rip.out.json" .claude/r2/_d16_rip.out.json
echo "已拉回 .claude/r2/_d16_rip.out.json(未下发)"
exit 0
fi
# MODE=tap:d16_tap.py(孤立小块接到本网已有铜上,大块不挑焊盘代表),拉回 _d16_tap.out.json
if [ "${MODE:-route}" = tap ]; then
"$SSH" "$SERVER" "cd $R && DCDC_ROUTE_SERVER=1 $INTERP .claude/r2/d16_tap.py $* 2>&1" | tee .claude/r2/_d16_tap.log
"$SCP" -q "$SERVER:$R/.claude/r2/_d16_tap.out.json" .claude/r2/_d16_tap.out.json
echo "已拉回 .claude/r2/_d16_tap.out.json(未下发)"
exit 0
fi
# MODE=nets:只补给定的网(route_nets.py:板上铜全当障碍,按连通块接起来),拉回 _route_nets.out.json
if [ "${MODE:-route}" = nets ]; then
"$SSH" "$SERVER" "cd $R && DCDC_ROUTE_SERVER=1 $INTERP .claude/r2/route_nets.py $* 2>&1" | tee .claude/r2/_route_nets.log
"$SCP" -q "$SERVER:$R/.claude/r2/_route_nets.out.json" .claude/r2/_route_nets.out.json
echo "已拉回 .claude/r2/_route_nets.out.json(未下发)"
exit 0
fi
# MODE=reach:不布线,跑 d16_reach.py(SDA6 / SCL6 在布线网格上的泛洪诊断),拉回 _d16_reach.out.json
if [ "${MODE:-route}" = reach ]; then
"$SSH" "$SERVER" "cd $R && DCDC_ROUTE_SERVER=1 $INTERP .claude/r2/d16_reach.py $* 2>&1" | tee .claude/r2/_d16_reach.log
"$SCP" -q "$SERVER:$R/.claude/r2/_d16_reach.out.json" .claude/r2/_d16_reach.out.json
echo "已拉回 .claude/r2/_d16_reach.out.json"
exit 0
fi
"$SSH" "$SERVER" "cd $R && DCDC_ROUTE_SERVER=1 /usr/bin/time -f 'REMOTE_TIME=%e sec RSS=%M KB' $INTERP .claude/r2/d16_route.py $* 2>&1" \
| tee .claude/r2/_d16_route.log
"$SCP" -q "$SERVER:$R/.claude/r2/_d16_route.out.json" .claude/r2/_d16_route.out.json
echo "已拉回 .claude/r2/_d16_route.out.json(未下发)"