svn预提交挂钩阻止提交而不合并

时间:2012-05-21 10:11:07

标签: svn

我试着编写一个预提交钩子来阻止开发人员进入发布分支,如果修订版本不是合并版本。 开发人员只能提交合并修订版。

这是我计划的行动

svn:mergeinfo属性将跟踪修改merged.so在我的预提交钩子中如果我以某种方式设法获得即将提交的修订。我可以检查它对mergeinfo输出以查看修订是否合并的。

在理论上看起来很容易。问题是如何才能得到修订。

如何从SVNLOOK命令

中获取修订号 如果我的问题很愚蠢,请原谅我。

1 个答案:

答案 0 :(得分:0)

如果你的开发人员没有受过教育,那么他们可能不会意识到你的svn钩子正在做什么,如果他们故意编辑svn:mergeinfo属性纯粹是为了提交发布分支而不是合并,那么你就会遇到更大的问题。 / p>

此脚本检查提交是否适用于发布分支。 然后它使用svnlook diff检查是否存在属性更改并且svn:mergeinfo已更改。

!#/bin/bash
REPOS="$1"
TXN="$2"

#Make the release branch only accept merge commits
if svnlook changed $REPOS -t $TXN |grep -q "my-release-branch-name/" ; then
    if svnlook diff $REPOS -t $TXN |grep 'Modified: svn:mergeinfo' && svnlook diff $REPOS -t $TXN |grep 'Property changes on:'; then
        #Assume that someone hasn't gone to the trouble of making a commit look like a merge!
        exit 0
    else
        echo "Branch my-release-branch-name only accepts merge commits! " 1>&2
        exit 1
    fi
fi

# All checks passed, so allow the commit.
exit 0