常见的颠覆钩子types

Subversion使用哪种钩子脚本? 只是一般的想法,但代码将是伟大的!

我正在使用pre-revprop-change钩子,允许在执行提交之后返回并编辑注释和这些信息。 如果提交注释中缺less错误信息,这非常有用。

在这里,我发布了Windows NT pre-revprop-change.batbatch file或更高版本…您当然可以通过更多的修改来增强它。 你也可以派生出一个post-revprop-change.cmd来备份旧的snv:log ,或者只是将它附加到新的日志中。

唯一棘手的部分是能够从batch file实际parsingstdin …这是用FIND.EXE命令完成的。

另一个是我从其他用户那里得到了有关使用/bexit命令的问题的报告。 如果错误情况performance不佳,您可能只需要删除特定应用程序中的那个/b

 @ECHO OFF set repos=%1 set rev=%2 set user=%3 set propname=%4 set action=%5 :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :: Only allow changes to svn:log. The author, date and other revision :: properties cannot be changed :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: if /I not '%propname%'=='svn:log' goto ERROR_PROPNAME :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :: Only allow modifications to svn:log (no addition/overwrite or deletion) :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: if /I not '%action%'=='M' goto ERROR_ACTION :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :: Make sure that the new svn:log message contains some text. :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: set bIsEmpty=true for /f "tokens=*" %%g in ('find /V ""') do ( set bIsEmpty=false ) if '%bIsEmpty%'=='true' goto ERROR_EMPTY goto :eof :ERROR_EMPTY echo Empty svn:log properties are not allowed. >&2 goto ERROR_EXIT :ERROR_PROPNAME echo Only changes to svn:log revision properties are allowed. >&2 goto ERROR_EXIT :ERROR_ACTION echo Only modifications to svn:log revision properties are allowed. >&2 goto ERROR_EXIT :ERROR_EXIT exit /b 1 

如果你有一个unix和Windows用户一起工作的库,我build议你使用case-insensitive.py pre-commit钩子脚本作为预防措施。 它可以防止Windows用户 svn 更新失败的难以分类的情况, 因为文件重命名只改变了文件名的大小写 。 相信我,这是一个很好的机会,可以帮你省去麻烦。

我们使用FogBugz进行错误跟踪,它提供了Subversion提交脚本,允许您在检查注释中包含一个案例编号,然后将错误与修复它的检查相关联。 它确实需要设置WebSVN实例,以便为您的存储库提供基于Web的查看器。

在我的工作地点,我们build立了一个提交后钩子,生成显示在各种仪表板上的RSS源,用于代码审查人员,以便知道什么时候需要审核,并且让我们看到新员工的投入足够。

我们使用它们的几件事情是:

  • 与bug跟踪器集成( 在我们的案例Trac – 一个提交消息,说'closures#514'自动标记该错误为closures
  • 与构build集成集成( 在我们的例子中是buildbot – 对被监视分支的提交触发构build
  • 预validation提交钩子validation提交 – 我们使用svnchecker 。 它validation我们的Python代码为PEP8正确性
  • 发送签到邮件到邮件列表
  • 运行缩进脚本

对于正在为snvsync操作寻找pre-revprop-change.bat的用户

https://gist.github.com/1679659

 @ECHO OFF set user=%3 if /I '%user%'=='syncuser' goto ERROR_REV exit 0 :ERROR_REV echo "Only the syncuser user may change revision properties" >&2 exit 1 

它只是来自这里: http : //chestofbooks.com/computers/revision-control/subversion-svn/Repository-Replication-Reposadmin-Maint-Replication.html并已被改编为Windows。

我使用后提交挂钩( 我认为这是一个 )发布消息到Basecamp每个提交的论坛。 两个优点:

  1. 作为首席开发人员,我每天早上都会收到一份提交(通过该basecamp论坛的RSS提要),并可以看到我的团队已经快速完成。

  2. 我们的Trac / SVN安装在我们的防火墙后面,所以这给了我在其他地方的上级一个窗口,我们正在做什么。 他们可能不理解,但是对于一个经理来说,很多活动看起来像很多活动;)

我猜这最后的结果是类似于@Aviv正在做的事情。

我正在研究在独立服务器上构build最新提交以实现持续集成的解决scheme,但是我将不得不改变在数据库模式更改之前进行更改的方式。

这在前面的Subversion用户邮件列表中已经讨论过了。 这篇文章特别有一些有用的想法。

提交后挂钩发送电子邮件通知,在存储库中的东西更改为电子邮件列表。 你需要sendmail.exe和你的钩子文件一起在sendmail.ini文件夹下。

您还需要post-commit.cmd旁边的文件post-commit.tos.txt来列出邮件收件人。 该文件应该包含:

 user1@example.com,user2@example.com,user3@example.com 

这里是钩子代码:

 @ECHO OFF setlocal ::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :: Get subversion arguments set repos=%~1 set rev=%2 ::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :: Set some variables set tos=%repos%\hooks\%~n0.tos.txt set reposname=%~nx1 set svnlookparam="%repos%" --revision %rev% if not exist "%tos%" goto :END ::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :: Prepare sendmail email file set author= for /f "tokens=* usebackq" %%g in (`svnlook author %svnlookparam%`) do ( set author=%%g ) for /f "tokens=* usebackq delims=" %%g in ("%tos%") do ( set EmailNotificationTo=%%g ) set SendMailFile=%~n0_%reposname%_%rev%.sm echo To: %EmailNotificationTo% >> "%SendMailFile%" echo From: %reposname%.svn.technologie@gsmprjct.com >> "%SendMailFile%" echo Subject: [%reposname%] Revision %rev% - Subversion Commit Notification >> "%SendMailFile%" echo --- log [%author%] --- >> "%SendMailFile%" svnlook log %svnlookparam% >> "%SendMailFile%" 2>&1 echo --- changed --- >> "%SendMailFile%" svnlook changed %svnlookparam% --copy-info >> "%SendMailFile%" 2>&1 echo .>> "%SendMailFile%" ::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :: Send email type "%SendMailFile%" | "%~dp0sendmail.exe" -t ::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :: Clean-up if exist "%SendMailFile%" del "%SendMailFile%" :END endlocal 

我认为最常见的是允许人们在合作之后改变修改意见。

你需要启用“pre-revprop-change”钩子脚本来允许。 所提供的例子,如果启用,只允许编辑注释属性,只能是原来的comitter。 伟大的纠正错别字。

通知bug /问题pipe理系统存储库更改的钩子。 IE浏览器。 提交消息的问题是:546或类似的标签被parsing并提供给bugpipe理系统。

我们使用我们的钩子脚本检查以下内容:

  • 提交了一个提交日志消息
  • 已经为提交指定了审阅者
  • 没有自动生成的代码或禁止的文件types在版本库中
  • 在创build分支/标签时发送电子邮件

我们仍然要实施以下内容:

  • 当用户获取文件locking时发送电子邮件
  • 当你的锁被盗时发送电子邮件
  • 当修订版本属性发生变化时,向所有人发送电子邮件

我们使用提交钩子脚本触发我们的发布机器人。 将新版本信息写入我们不同产品中名为changes.txt的文件将触发标签和相关工件的创build。

我有一个使用Ruby Tinder库的设置,我将它发送到一个篝火房间,如果有人想要我可以发布或发送代码给你的脚本。

我见过的其他常见types是bug追踪系统和电子邮件通知。

Windows预先提交挂钩来检查日志包含的东西。

 @ECHO OFF setlocal ::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :: Get subversion arguments set repos=%~1 set txn=%2 ::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :: Set some variables set svnlookparam="%repos%" -t %txn% :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :: Make sure that the new svn:log message contains some text. set bIsEmpty=true for /f "tokens=* usebackq" %%g in (`svnlook log %svnlookparam%`) do ( set bIsEmpty=false ) if '%bIsEmpty%'=='true' goto ERROR_EMPTY echo Allowed. >&2 goto :END :ERROR_EMPTY echo Empty log messages are not allowed. >&2 goto ERROR_EXIT :ERROR_EXIT :: You may require to remove the /b below if your hook is called directly by subversion exit /b 1 :END endlocal 

我提交时忘了input评论。 没有时间弄清楚为什么我的pre-revprop-change钩子没有工作。 所以下面的svnadmin命令为我input了一个提交信息: svnadmin setlog <filesystem path to my repository> --bypass-hooks -r 117 junk ,其中“垃圾”是包含我想成为评论的文本的文件。 svn setlog help有更多的使用信息…