42

人们为 Subversion 使用了哪些类型的钩子脚本?只是一般的想法,但代码也会很棒!

4

16 回答 16

69

我正在使用pre-revprop-change允许我在执行提交后实际返回并编辑评论和此类信息的钩子。如果提交注释中缺少/错误信息,这将非常有用。

在这里,我发布了一个pre-revprop-change.batWindows NT 或更高版本的批处理文件。您当然可以通过更多修改来增强它。您还可以从中派生一个 post-revprop-change.cmd来备份旧的snv:log某处或只是将其附加到新日志中。

唯一棘手的部分是能够从批处理文件中实际解析标准输入。这是在这里使用FIND.EXE命令完成的。

另一件事是,我收到了其他用户关于使用/bwithexit命令的问题的报告。/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 
于 2008-09-16T02:21:00.277 回答
8

如果您有混合使用存储库的 unix 和 Windows 用户,我建议您使用case-insensitive.py预提交钩子脚本作为预防措施。它可以防止由于文件重命名仅更改了文件名的大小写而导致 Windows 用户svn 更新失败的难以解决的情况。相信我,它很有可能会为您省去麻烦。

于 2008-09-04T21:40:58.250 回答
5

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

于 2008-08-27T17:05:01.083 回答
3

在我的工作场所,我们设置了一个 post-commit 挂钩,它生成 RSS 提要,这些提要显示在各种仪表板中,并用于代码审查人员知道什么时候该审查,并让我们看到新员工是否有足够的承诺.

于 2008-08-08T19:30:58.067 回答
3

我们将它们用于以下几件事:

于 2008-08-26T23:49:14.457 回答
3

对于那些正在为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。

于 2012-01-25T21:11:18.167 回答
1

我正在使用 post-commit 钩子(我认为是这个)为每次提交在 Basecamp 上的论坛上发布消息。两大优势:

  1. 作为首席开发人员,我每天早上都会收到一份提交汇总(通过那个 basecamp 论坛的 RSS 提要),并且可以很快看到我的团队在做什么。

  2. 我们的 Trac/SVN 安装在我们的防火墙后面,因此这让我在其他地方的上级可以了解我们正在做什么。他们可能不理解,但对经理来说,很多活动看起来,嗯,很多活动;)

我想这的最终结果类似于@Aviv 正在做的事情。

我正在寻找在单独的服务器上构建最新提交以进行持续集成的解决方案,但我将不得不改变我们对数据库模式进行更改的方式,然后才能工作。

于 2008-08-08T20:38:12.313 回答
1

前段时间在 subversion 用户邮件列表上讨论过这个问题。这篇文章特别有一些有用的想法。

于 2008-09-10T11:27:16.487 回答
1

post-commit 挂钩,用于将存储库中发生更改的电子邮件通知发送到电子邮件列表。您需要将 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
于 2010-09-02T19:31:59.757 回答
0

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

  • 已提供提交日志消息
  • 已为提交指定了审阅者
  • 存储库中没有自动生成的代码或禁止的文件类型
  • 创建分支/标签时发送电子邮件

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

  • 当用户获得文件锁定时发送电子邮件
  • 当您的锁被盗时发送电子邮件
  • 更改修订属性时向所有人发送电子邮件
于 2008-08-25T21:59:57.317 回答
0

一个钩子,用于通知错误/问题管理系统对存储库的更改。IE。提交消息中包含 issue:546 或类似标签,已被解析并提供给错误管理系统。

于 2008-08-13T07:16:35.083 回答
0

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

于 2008-09-04T21:02:23.897 回答
0

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

我见过的其他常见问题是错误跟踪系统和电子邮件通知的帖子。

于 2008-09-04T21:20:06.957 回答
0

我认为最常见的一种是允许人们在提交后更改修订评论。

您需要启用 'pre-revprop-change' 挂钩脚本以允许这样做。提供的示例,如果启用,则仅允许编辑评论属性并且只能是原始提交者。非常适合纠正错别字。

于 2008-08-08T17:15:26.903 回答
0

我在提交时忘记输入评论。没有时间弄清楚为什么我的 pre-revprop-change 挂钩不起作用。所以下面的 svnadmin 命令对我有用,可以输入提交消息: svnadmin setlog <filesystem path to my repository> --bypass-hooks -r 117 junk,其中“垃圾”是包含我想成为评论的文本的文件。svn setlog help有更多使用信息...

于 2011-09-05T03:06:06.290 回答
0

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
于 2010-09-02T19:04:06.563 回答