-
Notifications
You must be signed in to change notification settings - Fork 163
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
コマンドのエラー判定に if errorlevel を使うようにする #590
コマンドのエラー判定に if errorlevel を使うようにする #590
Conversation
これ、不思議です。99% のケースにおいてそういう違いが生じるようなものだとは思っていなかったので。 ところどころ popd が省略されているのはなにか考えの変化があったのでしょうか。
見た感じ、論理が反転しているところはないみたいです。 |
具体的にどこの話ですか?
なにか参考資料はありますか? |
以下の popd です。
することはその時点で環境変数の %ERRORLEVEL% が本物の ERRORLEVEL になるという点で危険です。 exit /B が exit /B 0 とは違い ERRORLEVEL を変更しないことは実験で確かめました。 |
どちらも対応する pushd がないので popd は不要です。 |
どういう実験したのかを共有していただけますか? |
前に議論した気がします。 たしか、バッチとして「1 or 0 を返す」の仕様にしたい、だったような。 |
面倒なので自分で考えてください。自分(ds14050)の主張が間違っていると確かめられたなら、それを教えてください。
例外ケースをひとつだけ見つけました。
以上が準備です。ERRORLEVEL が 0 の状態で a.bat を呼び出す以下の4つの方法を試し、ERRORLEVEL を確認しました。
cmd.exe を通して call なしで直接 a.bat を呼び出した場合だけ、a.bat から ERRORLEVEL 変数が伝わってきませんでした。 |
その面倒というのは、実験したけど、それを記録していないから、書くのが面倒という意味ですか? 現状のやり方に問題があり、それを変えるように主張するなら、どういう論理でそのような
何が危険ですか? |
上で4通りの方法を書きましたが、a.bat の中で b.bat を呼び出すのにも4通り考えられます。4×4 通りを網羅した実験をするのが面倒であるし、それによって「exit /B が exit /B 0 とは違い ERRORLEVEL を変更しない」ことの反例が存在しないことの証明にもならないので、自身で反例を見つけていただくしかないということです。自分は1つ見つけました。それを除けばほぼ間違いないようです。
書いてある通りです。環境変数としての ERRORLEVEL と本物の ERRORLEVEL の区別が曖昧になることを、自分は最初から嫌っていました>#580 (review) 「危険」というのは言葉の綾で、直ちに実害があるというニュアンスはありません。 |
取得できる ERRORLEVEL は変わりないのに call がある場合とない場合で論理が逆になるようです。 論理演算子に続く echo が実行されなかった場合に絞って echo !ERRORLEVEL! を実行させてみましたが、取得できる値はやはり 9 (非正常終了)でした。
これが何の話かというと、call のあるなしで ERRORLEVEL が伝わってこない場合があったので、call とは何か、という調査の一環です。まだわかりません。 |
%errorlevel% さえ確認できればいいので、%errorlevel% の値を表示して |
修正しました。 |
0 か否かが本質的に重要だという考えが抜け落ちていました。必要以上に拘りすぎていたようです。 |
https://ci.appveyor.com/project/sakuraeditor/sakura/builds/20114618/job/it5jp1v8883bch0j 原因調査のために この PR 入れたいです。 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ポチッとな。
…rlevel コマンドのエラー判定に if errorlevel を使うようにする
コマンドのエラー判定に if errorlevel を使うようにする
なお、#559 (comment) のMinGWビルドのエラーをエラーとして検出できています。
このブランチで #559 適用前
https://ci.appveyor.com/project/m-tmatma/sakura/builds/19857732/job/9j6nv94ejb9qmdvl
このブランチで #559 適用後
https://ci.appveyor.com/project/m-tmatma/sakura/builds/19972548/job/rwxie98v4h7w5wj1