首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Svn预提交挂钩禁止在非根目录上使用svn:mergeinfo

Svn预提交挂钩禁止在非根目录上使用svn:mergeinfo
EN

Stack Overflow用户
提问于 2010-07-22 12:00:13
回答 1查看 2.7K关注 0票数 19

我想使用一个预提交钩子来防止开发人员在非根目录上设置svn:mergeinfo。也就是说,我希望强制要求svn:mergeinfo只能设置在"trunk“或"branches/branchName”这样的目录上。有时需要“提醒”开发人员,使用根目录的子目录作为合并目标并不是一个好的实践(根据列出的here的最佳实践)。有没有人有这样的钩子脚本,或者知道我在哪里可以找到?我在windows环境中,所以batch或powershell会更好,但任何东西都肯定会有帮助。

EN

回答 1

Stack Overflow用户

发布于 2016-02-15 04:52:41

如果您可以在服务器上执行CPAN:

https://github.com/gnustavo/SVN-Hooks/blob/master/examples/check-mergeinfo.pl

如果不是(基于http://comments.gmane.org/gmane.comp.version-control.subversion.user/118969):

REPOS="$1"
TXN="$2"
SVNLOOK=/usr/bin/svnlook

if !($SVNLOOK log -t "$TXN" "$REPOS" | grep -q '\[override] ';) then

    # Get list of paths which have changed      
    TXN_PATHS=$($SVNLOOK changed -t "$TXN" "$REPOS")

    # Filter those which are allowed: /trunk, /branches/*,...
    TXN_PATHS=$(echo "$TXN_PATHS" | grep -Ev "^....(trunk/|branches/[^/]+/)$")

    # Iterate over all paths, which are not allowed to have mergeinfo
    while IFS= read -r TXN_PATH; do
      ELEM_PATH=$(echo "$TXN_PATH" | cut -c 5-)

      MERGEINFO=$($SVNLOOK propget "$REPOS" svn:mergeinfo -t "$TXN" "$ELEM_PATH" 2>/dev/null)
      if [ ! "$MERGEINFO" = "" ]; then 
        echo "  Cannot merge into directory that is not trunk or a branch:" >&2;
        echo "  $ELEM_PATH" >&2;
        echo "  Override by using [override]." >&2;
        exit 1;
      fi      
    done <<< "$TXN_PATHS"

    # echo "Merge info check: OK"
fi
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3305695

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档