0

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

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

错误=$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) 部分需要帮助,以便我可以创建它。

4

1 回答 1

0

我不记得会在纯服务器端副本之后执行挂钩(并且懒得 RTFM 或手动检查),但无论如何

在钩子中,您必须使用svnlook带有不同子命令的命令

因为钩子是存储库范围的,所以您的第一个检查将是“它是提交到/tags存储库的另一个子树还是提交到另一个子树” svnlook dirs-changed(手动尝试命令以查看不同修订的输出,以防好的操作系统svnlook dirs-changed |grep tags会回答问题)

在提交到 /tags 的情况下,您必须获取并检查内部(创建的)子目录的名称/tags。在这里,来自 WC 的服务器端标记和标记给出(至少对我而言)不同的结果

svnlook 目录更改

服务器端标记

>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:只捕获第一行输出,其中包含创建的标签的名称),您必须强制执行严格的标记策略“仅标记主干” HEAD(使用服务器端副本)”。

在这种情况下,测试将更短且可重复,例如svnlook changed | grep -q -E REGEXP(为测试约定构建 REGEXP<application>_<project>_<version>_<iteration>是您的任务)加上|减去一些细节

于 2014-05-18T03:38:39.010 回答