[英]Pre-commit hook for Subversion fails
我需要最基本的挂钩来防止空注释签入。 用Google搜索,找到示例bash脚本。 简而言之,这就是我所拥有的:
#!/bin/sh
REPOS="$1"
TXN="$2"
# Make sure that the log message contains some text.
SVNLOOK=/usr/bin/svnlook
ICONV=/usr/bin/iconv
SVNLOOKOK=1
$SVNLOOK log -t "$TXN" "$REPOS" | \
grep "[a-zA-Z0-9]" > /dev/null || SVNLOOKOK=0
if [ $SVNLOOKOK = 0 ]; then
echo "Empty log messages are not allowed. Please provide a proper log message." >&2
exit 1
fi
# Comments should have more than 5 characters
LOGMSG=$($SVNLOOK log -t "$TXN" "$REPOS" | grep [a-zA-Z0-9] | wc -c)
if [ "$LOGMSG" -lt 6 ]; then
echo -e "Please provide a meaningful comment when committing changes." 1>&2
exit 1
fi
现在,我正在使用Tortoise SVN进行测试,这是我看到的内容:
提交失败(详细信息如下):提交被预提交钩子(退出代码1)阻止,其输出为:/ home / svn / repos / apress / hooks / pre-commit:第11行::找不到命令不允许空日志消息。 请提供适当的日志消息。 此错误是由Subversion服务器上的自定义钩子脚本生成的。 请与您的服务器管理员联系以获取解决此问题的帮助。
有什么错误? svnlook在/ usr / bin中,我是Linux的新手,不明白会发生什么。
要调试脚本,您必须手动运行它。 为此,您必须获取传递给它的参数的样本值。 将脚本的开头更改为
#!/bin/sh
REPOS="$1"
TXN="$2"
echo "REPOS = $REPOS, TXN = $TXN" >/tmp/svnhookparams.txt
提交并检查文件/tmp/svnhookparams.txt
中的值。
然后对脚本进行另一个更改:
#!/bin/sh
set -x
REPOS="$1"
TXN="$2"
这将启用由Shell运行的所有命令的回显。
现在,直接从终端运行脚本,将先前获得的值传递给它。
检查输出中是否有无效命令或空变量分配。 如果您对此有疑问,请在此处发布输出。
运行挂钩脚本时, $PATH
为空。 因此,您需要为每个外部命令指定完整路径。 我的猜测是找不到grep
。
我在回答我自己的问题。
这不起作用:
$SVNLOOK log -t "$TXN" "$REPOS" | \
grep "[a-zA-Z0-9]" > /dev/null || SVNLOOKOK=0
必须是1行:
$SVNLOOK log -t "$TXN" "$REPOS" | grep "[a-zA-Z0-9]" > /dev/null || SVNLOOKOK=0
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.