在svn中强制执行标记命名约定

时间:2014-05-17 16:28:01

标签: shell svn naming svn-hooks tagname

我正在尝试编写一个预提交钩子脚本,以使用shell脚本强制执行像<application>_<project>_<version>_<iteration>这样的标记命名约定。
任何人都可以引导我到我可以遵循的文档/链接参考,并可以创建一个。 我已经通过了许多链接,但它对我不起作用

我正在尝试做这样的事情:

ERROR = $SVNLOOK changed $REPO -t $REV |$EGREP "^A.+?/([a-z0-9_]+)/tags/\1-[0-9]+\.[0-9]+\.[0-9]+(\.[0-9]+)?-(dev|rc[0-9]+|final)/.*$" |$WC -l

在regex(EGREP)部分需要帮助,以便我可以创建它。

1 个答案:

答案 0 :(得分:0)

我无法回想起在纯服务器端副本之后执行的钩子(并且懒得RTFM或手动检查),但无论如何

在钩子中,你必须使用svnlook命令和不同的子命令

因为钩子是存储库范围的,所以第一次检查将是&#34;它是否提交到/tags或另一个子树的存储库&#34; svnlook dirs-changed(手动尝试命令以查看不同版本的输出,如果操作系统良好svnlook dirs-changed |grep tags将回答问题)

如果提交到/ tags,您必须获取并检查/tags内的(已创建)子目录的名称。这里WC的服务器端标记和标记给(至少对我来说)不同的结果

svnlook dirs-changed

服务器端标记

>svnlook dirs-changed z:\repo
tags/

WC标记

>svnlook dirs-changed z:\repo
tags/
tags/App_Main_1.0.0_2/
tags/App_Main_1.0.0_2/1/
tags/App_Main_1.0.0_2/1/2/

svnlook已更改

服务器端标记

>svnlook changed z:\repo
A   tags/App_Main_1.0.0_1/

WC标记

>svnlook changed z:\repo
A   tags/App_Main_1.0.0_2/
U   tags/App_Main_1.0.0_2/1/2/c.txt
U   tags/App_Main_1.0.0_2/1/b.txt
U   tags/App_Main_1.0.0_2/a.txt

在标签中的相同树下观察到这种明显的差异

>svnlook tree z:\repo
...
 tags/
  App_Main_1.0.0_1/
   1/
    2/
     c.txt
    b.txt
   a.txt
  App_Main_1.0.0_2/
   1/
    2/
     c.txt
    b.txt
   a.txt
...

我认为,而不是在钩子中添加一些逻辑(但是可能会尝试对两种类型的标记使用svnlook changed | head -n 1:仅捕获带有已创建标记名称的第一行输出it),你必须强制执行严格的标记策略&#34;仅标记中继的HEAD(使用服务器端副本)&#34;。

在这种情况下,测试将更短并且可以重新启动,例如svnlook changed | grep -q -E REGEXP(建立用于测试约定的<application>_<project>_<version>_<iteration>的REGEXP是你的任务)加上|减去一些细节