4

によるとhg help push

プッシュが成功した場合は 0 を返し、プッシュするものが何もない場合は 1 を返します。

今、あごひげはありませんが、これは「Unixy」のやり方とは思えません。

例えば

set -e
hg push -R ~/some-repo
# never get here if push aborts for any reason
# ...OR if some-repo has no changes
exit 0

hg push特に情報コマンドhg outがまったく同じステータスコードを返すため、なぜこのように動作したいのか想像できません。

だから私の質問は、hg push実際にいつ失敗したかをどうやって知ることができますか? ストリーム出力を読み取る必要がありますか?

(ちなみに、2012 年 1 月に誰かがこの方法では機能していないと指摘し、ドキュメントではなくプログラムを修正しました。)

(また、問題があることも知ってset -e います。これはそれについてではありません。)

4

2 に答える 2

2

最初の例:

read -a ERREXITSAVE < <(shopt -o -p errexit)
set +o errexit

hg push -R "$repo"
[[ $? == [01] ]] || exit 1

"${ERREXITSAVE[@]}"

2 番目の例:

read -a ERREXITSAVE < <(shopt -o -p errexit)
read -a LASTPIPESAVE < <(shopt -o -p lastpipe)

set +o errexit
set -o lastpipe

... | ( hg push -R "$repo"; [[ $? == [01] ]]; ) | ... || exit 1

"${ERREXITSAVE[@]}"
"${LASTPIPESAVE[@]}"
于 2013-08-30T19:28:02.370 に答える
1

@iamnotmaynard がコメントに示すように、エラーでhg push終了します。255だからあなたはこのようなことをすることができます

set +e
hg push -R $repo
status=$?
set -e
if [[ ! "01" =~ $status ]]; then
    exit 1
fi

それはまだ私には意味がありませんが、先に進みます。

于 2013-08-30T16:31:10.397 に答える