第二輪端對端測試(#9)發現:命令旗標放在位置參數(path/編號)之後時不被剖析,直接被當成位置參數,導致 README 記載的用法失敗。
ffae335
teai api /repos/alterminal/test --method POST --data '{}' → exit 2「api 需要恰好一個 path」 teai issues view --repo alterminal/teai 9 --comments → exit 2「issues view 需要恰好一個編號」 teai pulls view --repo alterminal/teai 13 --comments → exit 2「pulls view 需要恰好一個編號」
旗標放在位置參數之前則正常: teai issues view --repo alterminal/teai --comments 9 → exit 0 teai api '/repos/alterminal/teai/pulls?state=all&limit=5' → exit 0(此例旗標在前)
internal/cli/cli.go 的 parseFlags 直接用 flag.FlagSet.Parse:Go 標準 flag 在遇到第一個非旗標參數後即停止剖析,其後的旗標全被當成位置參數。README「全域選項位置」一節宣稱全域選項可與命令旗標交錯,但實際上命令旗標一落在位置參數後就失效。
parseFlags 改為允許交錯(遇到非旗標參數先收集、繼續掃描後續旗標,最後把收集到的位置參數設回 fs.Args),或各命令改用自訂剖析;附回归測試覆蓋「位置參數在前、旗標在後」的組合。
拆自 #9(第二輪端對端測試發現)。
開始處理:我(alex)接手這個 issue。計畫:把 internal/cli 的 parseFlags 改為允許旗標與位置參數交錯(先分離旗標與位置參數、再剖析旗標、最後把位置參數設回),涵蓋直接用 fs.Parse 且帶位置參數的命令(login default/remove),附回歸測試。
已完成:PR #28(commit 3ed20b6,分支 fix/issue25-interleaved-flags)。
修法:parseFlags 先分離旗標與位置參數、再剖析旗標串、最後以第二次 Parse 把位置參數設回 fs.Args;Go 標準 flag「遇位置參數即停止」不再影響交錯用法。login.go/workflow_commands.go 直接呼叫 fs.Parse 的六處一併改走 parseFlags(login default/remove 的名稱也可與旗標交錯),並讓命令層 -h 的結束碼依其既有註解宣稱視為成功(0)。
驗證:go vet/go test ./... 全綠;以修復後二進位對本站複測 issue 三個重現步驟(teai api --method POST --data '{}'、teai issues view --repo alterminal/teai <編號> --comments、teai pulls view --repo alterminal/teai <編號> --comments)皆 exit 0,旗標在前用法與寫入閘門(未帶 --yes 回 2)不變。附回歸測試 interleaved_flags_test.go。已請 @queena 審核。
PR #28 已驗證符合本 issue 要求並合併,關閉本 issue。
驗證摘要:parseFlags 改為先分離旗標與位置參數再剖析,「位置參數在前、旗標在後」恢復正常;login/workflow 命令六處 fs.Parse 改走 parseFlags;新增 interleaved_flags_test.go 回歸測試。以 PR head(3ed20b6)建置複測重現步驟皆 exit 0,寫入命令未帶 --yes 仍 exit 2;go vet/go test 全綠。
No dependencies set.
The note is not visible to the blocked user.
第二輪端對端測試(#9)發現:命令旗標放在位置參數(path/編號)之後時不被剖析,直接被當成位置參數,導致 README 記載的用法失敗。
重現步驟(main @
ffae335建置)teai api /repos/alterminal/test --method POST --data '{}' → exit 2「api 需要恰好一個 path」
teai issues view --repo alterminal/teai 9 --comments → exit 2「issues view 需要恰好一個編號」
teai pulls view --repo alterminal/teai 13 --comments → exit 2「pulls view 需要恰好一個編號」
旗標放在位置參數之前則正常:
teai issues view --repo alterminal/teai --comments 9 → exit 0
teai api '/repos/alterminal/teai/pulls?state=all&limit=5' → exit 0(此例旗標在前)
根因
internal/cli/cli.go 的 parseFlags 直接用 flag.FlagSet.Parse:Go 標準 flag 在遇到第一個非旗標參數後即停止剖析,其後的旗標全被當成位置參數。README「全域選項位置」一節宣稱全域選項可與命令旗標交錯,但實際上命令旗標一落在位置參數後就失效。
影響
建議修法
parseFlags 改為允許交錯(遇到非旗標參數先收集、繼續掃描後續旗標,最後把收集到的位置參數設回 fs.Args),或各命令改用自訂剖析;附回归測試覆蓋「位置參數在前、旗標在後」的組合。
拆自 #9(第二輪端對端測試發現)。
開始處理:我(alex)接手這個 issue。計畫:把 internal/cli 的 parseFlags 改為允許旗標與位置參數交錯(先分離旗標與位置參數、再剖析旗標、最後把位置參數設回),涵蓋直接用 fs.Parse 且帶位置參數的命令(login default/remove),附回歸測試。
已完成:PR #28(commit 3ed20b6,分支 fix/issue25-interleaved-flags)。
修法:parseFlags 先分離旗標與位置參數、再剖析旗標串、最後以第二次 Parse 把位置參數設回 fs.Args;Go 標準 flag「遇位置參數即停止」不再影響交錯用法。login.go/workflow_commands.go 直接呼叫 fs.Parse 的六處一併改走 parseFlags(login default/remove 的名稱也可與旗標交錯),並讓命令層 -h 的結束碼依其既有註解宣稱視為成功(0)。
驗證:go vet/go test ./... 全綠;以修復後二進位對本站複測 issue 三個重現步驟(teai api --method POST --data '{}'、teai issues view --repo alterminal/teai <編號> --comments、teai pulls view --repo alterminal/teai <編號> --comments)皆 exit 0,旗標在前用法與寫入閘門(未帶 --yes 回 2)不變。附回歸測試 interleaved_flags_test.go。已請 @queena 審核。
PR #28 已驗證符合本 issue 要求並合併,關閉本 issue。
驗證摘要:parseFlags 改為先分離旗標與位置參數再剖析,「位置參數在前、旗標在後」恢復正常;login/workflow 命令六處 fs.Parse 改走 parseFlags;新增 interleaved_flags_test.go 回歸測試。以 PR head(3ed20b6)建置複測重現步驟皆 exit 0,寫入命令未帶 --yes 仍 exit 2;go vet/go test 全綠。