【发布时间】:2015-02-03 17:45:18
【问题描述】:
需要帮助
我试图增强预提交钩子,看看如果提交消息中有某个键(“!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 提供的一些提示...
我像 cmets 中的另一个 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
我按照link here 中给出的方法进行了尝试,但我仍然没有看到 if 条件被执行。你现在可以帮我解决这个问题吗?
【问题讨论】:
-
[ $SMARTCOMMIT = 0];您错过了0和结束]之间所需的空间。还要在!ignore周围使用单引号,以确保禁用历史解析(无论如何应该在脚本中禁用,但单引号更安全)。该命令的||部分何时发生?wc什么时候返回非零值? -
@EtanReisner 当我在 0 和 ] 之后给出空间时,它仍然不起作用。我假设当提交消息使用字符串 !ignore 时 wc -c 返回一个非零值,因此它会找到它并返回一个非零值并且 Smartcommit=0 不会被设置..
-
在那种情况下定义“不起作用”? (为了记录,您也没有在原始上下文中解释它。)我假设我关于
wc的次要 cmets 可能是相关的。 -
很抱歉我没有关注您的最后评论...
-
您是否检查过
wc在找到或未找到任何输出时返回非零值?不吐出非零值但返回非零的退出代码?因为它几乎肯定不会。另一方面,grep在没有打印行时退出非零。这可能对你更有用。而且您还没有解释究竟是什么在这里不起作用。