【问题标题】:Pre-commit hook for Subversion failsSubversion 的预提交挂钩失败
【发布时间】:2015-07-08 03:09:07
【问题描述】:

我需要最基本的钩子来防止空评论签入。谷歌搜索,找到示例 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 行: : command not found 不允许空日志消息。 请提供正确的日志消息。此错误是由 Subversion 服务器上的自定义挂钩脚本。请联系您的 服务器管理员寻求解决此问题的帮助。

什么是错误? svnlook 在 /usr/bin 我对 Linux 很陌生,不明白会发生什么..

【问题讨论】:

    标签: linux bash shell svn commit


    【解决方案1】:

    要调试您的脚本,您必须手动运行它。 为此,您必须获取传递给它的参数的示例值。 将脚本的开头更改为类似

    #!/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 运行的所有命令的回显。

    现在直接从终端运行您的脚本,将您之前获得的值传递给它。

    检查无效命令或空变量分配的输出。 如果您对此有疑问,请在此处发布输出。

    【讨论】:

      【解决方案2】:

      $PATH 在运行钩子脚本时为空。因此,您需要为每个外部命令指定完整路径。我的猜测是,grep 没有找到。

      【讨论】:

        【解决方案3】:

        我正在回答我自己的问题。

        这不起作用:

        $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
        

        【讨论】:

        • 如果\ 后面有空格,这可能是一个错误,否则看起来不错。无论如何,如果您已经在使用管道,我建议您始终跳过反斜杠。这样空间就无关紧要了。
        • 谢谢,复制/粘贴中可能会有空格。我会标记您的答案,因为它教会了我一些未来。我刚刚开始学习 Linux 并看到了它的力量 :)
        猜你喜欢
        • 1970-01-01
        • 2019-06-02
        • 1970-01-01
        • 1970-01-01
        • 2020-02-06
        • 1970-01-01
        • 2013-08-26
        • 2019-10-02
        相关资源
        最近更新 更多