概要
DevLog::finish (src/devlog.rs:358) は run.prompt が無いと何も書かずに戻ります。そのため、プロンプトを組み立てる前に失敗した実行 (--all のステージングの失敗など) は dev_log に残りません。
App::run (src/app.rs:741) のコメントは「出口を増やしても記録漏れが起きないように、1 か所で書き出す」としています。finish のコメントも「set_result まで到達しなかった = 途中で失敗した実行」を failed として記録する意図です。プロンプトを作る前の失敗だけが、この経路から漏れています。
影響
Stop フックから git-sc --all --yes --quiet を切り離して起動すると、標準エラーを受け取る相手がいないので、失敗がどこにも残りません。
実際に、中断された git 操作が残した .git/index.lock (0 バイト、握っているプロセスなし) のせいで、自動コミットが数時間にわたって毎回失敗していました。手で git-sc --dry-run --all を実行するまで、原因にも失敗そのものにも気付けませんでした。
再現
[dev_log] enabled = true の設定で確認しました。
mkdir repro && cd repro && git init -q .
echo a > a.txt && git add a.txt && git commit -qm init
echo b >> a.txt
touch .git/index.lock
ls ~/.config/git-sc/logs/$(date +%F) | wc -l # 実行前の件数
git-sc --all --yes --quiet; echo "exit=$?" # exit=1。標準エラーに index.lock の File exists
ls ~/.config/git-sc/logs/$(date +%F) | wc -l # 件数が増えない
期待する動作
- プロンプトを作る前に失敗した実行も、
result.status = "failed" と result.error を付けて記録する (prompt は null のまま)
- このケースの回帰テストを足す (ステージングで失敗しても 1 件記録される)
環境
概要
DevLog::finish(src/devlog.rs:358) はrun.promptが無いと何も書かずに戻ります。そのため、プロンプトを組み立てる前に失敗した実行 (--allのステージングの失敗など) は dev_log に残りません。App::run(src/app.rs:741) のコメントは「出口を増やしても記録漏れが起きないように、1 か所で書き出す」としています。finishのコメントも「set_result まで到達しなかった = 途中で失敗した実行」をfailedとして記録する意図です。プロンプトを作る前の失敗だけが、この経路から漏れています。影響
Stop フックから
git-sc --all --yes --quietを切り離して起動すると、標準エラーを受け取る相手がいないので、失敗がどこにも残りません。実際に、中断された git 操作が残した
.git/index.lock(0 バイト、握っているプロセスなし) のせいで、自動コミットが数時間にわたって毎回失敗していました。手でgit-sc --dry-run --allを実行するまで、原因にも失敗そのものにも気付けませんでした。再現
[dev_log] enabled = trueの設定で確認しました。期待する動作
result.status = "failed"とresult.errorを付けて記録する (promptは null のまま)環境