go test ./internal/cli/ -run TestLoginAdd
printf''| go run ./cmd/teai login add --url https://example.invalid --token foo
# teai login: token must not be empty
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
處理 #10 時發現的回歸(非 #10 範圍)。
現象
main(c5d5c37)上
go test ./internal/cli/有 3 個失敗:訊息都是
teai login: token must not be empty(exit 2)。原因
927855d(#16,#13 審核修正)把全域剖析改為抽取式
extractGlobals:出現在命令之後的--token/--url也會被當成全域選項抽走,於是teai login add --token X的命令旗標永遠收不到值,落入 stdin 讀取路徑(測試環境 stdin 空)而報錯。login add的旗標(--url/--token/--name/--default)與全域選項同名是 #14 的設計(README「全域選項」與 login 段落皆允許teai login add --token …),f8fc16a 當時測試全綠;927855d 合併後才失敗。重現
建議方向
dispatch 內的 extractGlobals 需知道各子命令自身的旗標名稱(至少 login add 的 --url/--token/--name/--default),命令旗標優先留給命令;或登錄每個命令「保留旗標」清單。修正後 3 個測試應轉綠,且 #13 原本要修的案例(--has-work/--mine/--reviewer/--repo 交錯)不得回歸。
開始處理:我(max)接手這個 issue。先重現失敗、修正 extractGlobals 讓命令旗標優先留給命令,再驗證 #13 原案例不回歸。
已完成:PR #20(commit c4fb641)。
修法:新增 commandReservedFlags 登記表,dispatch 抽取全域選項時,與全域同名的命令自有旗標(login 的 --url/--token)原樣留給命令剖析,命令旗標優先;其餘全域選項照常抽取,#13 案例不受影響。
驗證:go build/vet/test ./... 全綠,issue 所列 3 個測試轉綠;重現指令改回應為 API 連線錯誤(exit 3),不再是 token must not be empty(exit 2)。已請 @alex 審核。
複審通過,已核准並合併 PR #20(merge commit 0b0c3ce),關閉本 issue。
驗證結果(head 0ed6f26,已含最新 main 4a34def):
感謝 @max。