fix(implement): 明確指定分析頁檢查工作包相依

This commit is contained in:
2026-08-28 09:30:08 +08:00
parent 7d8a8d527d
commit 8381f334a1
7 changed files with 32 additions and 19 deletions
+21 -8
View File
@@ -16,9 +16,10 @@
# --since 只印比該時間更新的留言,值用上一輪印出的 latest=(UTC,形如 2026-08-25T10:19:59Z)。
# wp-gate.sh lock {owner}/{repo} {index}
# PR 開好之後上鎖,讓閘門跨工作階段有效。轉呼叫 sdlc-gate.sh wp-lock。
# wp-gate.sh check-deps {owner}/{repo} {wp-number}
# wp-gate.sh check-deps {owner}/{repo} {wp-number} --analyze {分析頁頁名}
# 候選工作包能不能挑:活抓分析頁 WBS 表的相依欄,逐一核對每個相依工作包的狀態欄與
# PR 欄(PR 有給就活查 Gitea 是否已合併),不吃 implement 技能自己讀到的任何快取或判斷。
# 分析頁由呼叫端明確指定;沒帶 --analyze 直接拒絕,不用存取庫 hash 猜頁名。
# 只認同一張分析頁上的 WP-NN 編號;相依欄裡指到別份計畫或別頁分析的文字項目查不了,
# 照樣放行但會在說明裡列出來,要求人工確認。
# wp-gate.sh claim {owner}/{repo} {wp-number} [--analyze {分析頁頁名}]
@@ -88,7 +89,7 @@ usage() {
cat >&2 <<'EOF'
用法:
wp-gate.sh check {owner}/{repo} {index} [--since {ISO 時間}] 查 PR:合併就解鎖放行,沒合併就印出留言並擋住
wp-gate.sh check-deps {owner}/{repo} {wp-number} 候選工作包能不能挑:核對它在分析頁上的相依工作包是否都已結清
wp-gate.sh check-deps {owner}/{repo} {wp-number} --analyze {頁名} 候選工作包能不能挑:核對它在分析頁上的相依工作包是否都已結清
wp-gate.sh claim {owner}/{repo} {wp-number} [--analyze {頁名}] 領包當下登錄歸屬
wp-gate.sh lock {owner}/{repo} {index} [--wp {wp-number}] 開完 PR 後上鎖並把 PR 掛到工作包名下,讓閘門跨工作階段有效
wp-gate.sh owns {owner}/{repo} {index} [--wp {wp-number}] 這支 PR 是不是自己這一包的:不是就擋,查無歸屬就放行
@@ -281,8 +282,8 @@ case "$sub" in
echo "$repo 第 $index 號 PR 還開著,沒有合併。這一包還沒結清。"
fi
echo '這一包沒結清,只表示相依於它的工作包不能開始;其餘互不相依的工作包能不能挑,見 wp-gate.sh check-deps。'
echo '下列每一筆留言都要有結果(已修、不需修、修不動)。修不動或純討論、讚美的留言直接忽略:'
echo '不在 PR 上回覆、也不因此停下流程,但要在最終回報裡逐筆列出被忽略的留言與理由。'
echo '下列每一筆留言都要有結果(已修、不需修、修不動)。已處理的留言要用 gitea.sh comment-reply 回覆:'
echo '純討論或讚美可以不回覆、也不因此停下流程,但要在最終回報裡逐筆列出被忽略的留言與理由。'
if [ -n "$since" ]; then
echo "留言(只列比 $since 更新的;更早的已經處理過):"
else
@@ -309,15 +310,27 @@ case "$sub" in
repo="${1:-}"; wp_number="${2:-}"
valid_repo "$repo" || { echo 'status=usage'; usage; exit 2; }
valid_index "$wp_number" || { echo 'status=usage'; usage; exit 2; }
[ "$#" -le 2 ] || { echo 'status=usage'; usage; exit 2; }
shift 2
analyze=''
while [ "$#" -gt 0 ]; do
case "$1" in
--analyze) analyze="${2:-}"; [ -n "$analyze" ] || { echo 'status=usage'; usage; exit 2; }; shift 2 ;;
--analyze=*) analyze=${1#--analyze=}; [ -n "$analyze" ] || { echo 'status=usage'; usage; exit 2; }; shift ;;
*) echo 'status=usage'; usage; exit 2 ;;
esac
done
[ -n "$analyze" ] || {
echo 'status=usage'
echo '[jsc][工作包閘門][ERR]:缺少 --analyze ANALYZE_{HASH},check-deps 不會用存取庫 hash 猜分析頁。' >&2
usage
exit 2
}
gitea=$(gitea_sh) || missing_dep "找不到 jsc-gitea 的 tools/gitea.sh。並排版面請確認 {workspace}/gitea 存在,已安裝版面請確認 jsc-gitea plugin 已安裝,或設定 JSC_GITEA_TOOLS 指向它的 tools 目錄。"
hash=$(sh "$gitea" hash-id "$repo" 2>/dev/null)
[ -n "$hash" ] || missing_dep "算不出 $repo 的 wiki HASH。"
wiki_repo=$(sh "$gitea" wiki-repo ANALYZE 2>/dev/null)
[ -n "$wiki_repo" ] || missing_dep "解析不出 ANALYZE 頁的 wiki 存取庫(JSC_WIKI_REPO_ANALYZE 與 JSC_WIKI_REPO 都未設定)。"
page="ANALYZE_${hash}"
page="$analyze"
content=$(sh "$gitea" wiki-get "$wiki_repo" "$page" 2>/dev/null)
[ -n "$content" ] || missing_dep "讀不到分析頁 $wiki_repo 的 $page。"