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真正失败了?我必须阅读流输出吗?

(顺便说一句,有人在 Janaruy 2012 中指出它不是这样工作的,他们修复了程序而不是文档。)

(我也知道set -e 有问题。这不是那个。)

4

2 回答 2

2

第一个例子:

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

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

"${ERREXITSAVE[@]}"

第二个例子:

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 回答