0

リビジョンがマージされていない場合、開発者がリリース ブランチにコミットするのをブロックする pre-commit フックを作成しようとしていました。開発者は、マージされたリビジョンをコミットすることしか許可されていません。

これは私の計画された行動です

svn:mergeinfo プロパティは、マージされたリビジョンを追跡します。そのため、コミットしようとしているリビジョンを何らかの方法で取得できた場合、コミット前のフックで、リビジョンがマージされたものであるかどうかを確認するために、mergeinfo 出力に対してチェックできます。 .

理論的には簡単そうに見えますが、問題はどうすればリビジョンを入手できるかということです。

SVNLOOKコマンドからリビジョン番号をgrepするにはどうすればよいですか

私の質問がばかげているなら、私を許してください。

4

1 に答える 1

0

開発者がそれほど教育を受けていない場合、おそらく svn フックが何をしているのか理解できず、マージではなくリリース ブランチにコミットするためだけに svn:mergeinfo プロパティを意図的に編集している場合は、より大きな問題が発生します。

このスクリプトは、コミットがリリース ブランチに対するものであることを確認します。次に、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
于 2012-11-26T16:49:06.033 に答える