针对另一个路径/修订的Diff事务树

时间:2012-01-10 10:30:14

标签: svn pre-commit-hook

在预提交脚本中,如何针对同一存储库中的任意路径/修订获取已提交更改的差异?

例如,当提交对/trunk内的文件的更改时,我希望得到提交的/trunk(尚未修订)的差异,例如/branches/feature_x(这是/trunk)的一个分支。

据我所知,svnlook diff仅显示该交易提出的更改,而svn diff仅适用于修订而非交易。

蛮力方式方法是为每个被修改的文件区分“svnlook cat ...”和“svn cat PATH:REV”的输出。但是,这似乎效率很低,而不是我想在钩子脚本中使用的东西。

背景

我正在尝试创建一个预提交脚本,该脚本拒绝所有对某些目录的提交,并且只允许通过分支重新集成进行更改(相关帖子:Detecting branch reintegration or merge in pre-commit script)。

到目前为止,似乎可以通过检查基目录的svn merge属性来检测svn:mergeinfo的使用。但是,无法区分合并应用的文件修改和手动修改的文件修改,因此合并后的编辑将不会被检测到。

我希望能够将提交的事务树与合并源进行比较,以确保不会进行额外的更改。 (根据我们的项目政策,所有冲突解决都在重新整合之前在功能分支中完成,因此在merge --reintegrate进入/trunk后不需要进行任何更改。

1 个答案:

答案 0 :(得分:0)

  

区分“svnlook cat ...”和“svn cat PATH:REV”的输出

OS-diff只能从stdin接受一个FILE,你不能同时替换

肮脏的想法,而不是解决方案

  • 您可以尝试在事务中预先提交钩子提交文件到第二个存储库的post-commit钩子中的附加(与main无关)存储库和diff文件,这会将所需的结果返回到repo one中的调用pre-commit钩子(具有为此repo预先制作本地回购和WC,将事务中的文件保存到WC中,添加/如果需要/,提交)