0

需要一些帮助

我试图增强预提交钩子,看看如果提交消息中有某个键(“!ignore”),我是否可以忽略解析提交消息

这个之前的 if 条件,比如检查是否有空的提交消息有效。但是,如果条件以某种方式不起作用。

好的,当我使用不包含我的检查键“!ignore”的消息“SMARTCOMMITTEST”进行提交时,提交成功,这意味着下面的 If 条件从未执行或未按预期执行。所以试图理解它有什么问题。

SMARTCOMMIT=1 
$SVNLOOK log -t "$TXN" "$REPOS" | grep "!ignore" | wc -c || SMARTCOMMIT=0
if [ $SMARTCOMMIT = 0];      
then
echo "Please use !ignore if you dont want to use smart commits in your commit message." 1>&2
exit 1
fi

非常感谢 Etan 提供的一些提示...

我像评论中的另一个 if 条件一样更改了条件,然后它起作用了

SMARTCOMMIT=$($SVNLOOK log -t "$TXN" "$REPOS" | grep "!ignore" | wc -c)                
if [ "$SMARTCOMMIT" = "0" ];  then
echo "Please use !ignore if you dont want to use smart commits in your commit message." 1>&2
exit 1
fi

这个很好用。。

@David W .. 我现在有一种情况要同时检查多个条件 if

SMARTCOMMIT=$($SVNLOOK log -t "$TXN" "$REPOS" | grep '!ignore' | wc -c)
COMMITMESSAGENOREVIEW=$($SVNLOOK log -t "$TXN" "$REPOS" | grep '#comment' | wc -c)
COMMITMESSAGEWITHREVIEW=$($SVNLOOK log -t "$TXN" "$REPOS" | grep '+review' | wc -c)
 
if [ "$SMARTCOMMIT" =  "0" -a "$COMMITMESSAGENOREVIEW" = "0" -a "COMMITMESSAGEWITHREVIEW" = "0" ]; then
echo "Please use #comment or +review to enable smart commits or !ignore to not use smart commits." 1>&2
exit 1
fi

我尝试了此处链接中给出的方法,但我仍然没有看到 if 条件被执行。你现在能帮我解决这个问题吗?

4

1 回答 1

0

if语句可以查看命令的退出输出,因此您无需根据输出设置环境变量:

shopt extglob > /dev/null  && extglob=1
if ! $SVNLOOK log -t "$TXN" "$REPOS" | grep -q '!ignore'
then
    echo 'Please use "!ignore" if you dont want to use smart commits in your commit message.' 1>&2
    exit 1
fi

这运行$SVNLOOK log -t "$TXN" "$REPOS" | grep -q '!ignore'

-q安静模式。grep如果字符串存在则退出零,如果不存在则退出非零。通过将它放在 中if !,该then子句仅!ignore在找到时才执行。

你必须确保它!ignore被单引号包围,或者你\!. Bash 里面有一个 csh 类型的历史机制,没有办法关闭它。每当 shell 看到!时,它就假定它与进程 ID 号有关。

于 2015-02-03T19:02:15.777 回答