#38 — 以 worktree 隔離平行工作包的實作與修正
pr-watch 在 PR 合併之後推導出錯的工作樹路徑,於是該清的那一棵永遠不會被清掉, 而且它回報 nothing-to-do——靜靜地什麼都沒做,使用者不會知道。
pr-watch
nothing-to-do
自動清理只在 PR 合併或關閉時發生,所以這個 bug 的效果是自動清理在真實情況下從來不會 成立:唯一該動手的時機,正好是推導失效的時機。
原因:Gitea 在 PR 合併(且來源分支被刪)之後,head.ref 會從分支名變成 refs/pull/{編號}/head,分支名退到 head.label。pr-watch 用的是 head.ref, PR 開著時正確,合併後就錯。
head.ref
refs/pull/{編號}/head
head.label
實測(#48,合併後):
"branch":"refs/pull/48/head" "工作樹":{"路徑":".../bb4f5127f641","存在":false} ← 實際上在 .../bd457620184e "terminal":true,"cleaned":false,"suggestedAction":"nothing-to-do"
API 的對照:
refs/pull/48/head
feat/pr-watch-and-cleanup/main
refs/pull/46/head
feat/worktree-branch-prep/main
改用 head.label 取分支名。fork 來的 PR 那一欄是 owner:branch,要取冒號後那一段。
owner:branch
worktree-remove 不受影響:它吃 --branch,不做推導。
worktree-remove
--branch
測試沒抓到,是因為假的 PR 一律照「開著的 PR」寫,head.ref 永遠是分支名—— 這次要補的正是「已合併且來源分支已刪」那一種。
PULL_HEAD_MISSING
No dependencies set.
The note is not visible to the blocked user.
母議題
#38 — 以 worktree 隔離平行工作包的實作與修正
要做出什麼
pr-watch在 PR 合併之後推導出錯的工作樹路徑,於是該清的那一棵永遠不會被清掉,而且它回報
nothing-to-do——靜靜地什麼都沒做,使用者不會知道。自動清理只在 PR 合併或關閉時發生,所以這個 bug 的效果是自動清理在真實情況下從來不會
成立:唯一該動手的時機,正好是推導失效的時機。
原因:Gitea 在 PR 合併(且來源分支被刪)之後,
head.ref會從分支名變成refs/pull/{編號}/head,分支名退到head.label。pr-watch用的是head.ref,PR 開著時正確,合併後就錯。
實測(#48,合併後):
API 的對照:
head.refhead.labelrefs/pull/48/headfeat/pr-watch-and-cleanup/mainrefs/pull/46/headfeat/worktree-branch-prep/main改用
head.label取分支名。fork 來的 PR 那一欄是owner:branch,要取冒號後那一段。worktree-remove不受影響:它吃--branch,不做推導。測試沒抓到,是因為假的 PR 一律照「開著的 PR」寫,
head.ref永遠是分支名——這次要補的正是「已合併且來源分支已刪」那一種。
驗收標準
pr-watch仍推導出正確的工作樹路徑並清掉它head.label;fork 來的owner:branch只取冒號後那一段head.ref為refs/pull/{編號}/head時不拿它當分支名PULL_HEAD_MISSING),不拿空字串去推導路徑阻擋於