2011-08-30 54 views
3

我需要一个更智能的提交后脚本。svn post-commit execute(if message〜Revision.blah)

如果一个提交消息声明类似“Adding Revision-v.10.3 production”,那么需要执行一个ssh命令。

是否可以通过post-commit做到这一点?

+0

REPOS =“$ 1”,REV =“$ 2”是变量......我如何在提交后获取'提交消息'字符串? – Cmag

+1

@Clustermagnet:尝试'MESSAGE = $(/ usr/bin/svn log“$ 1”-r HEAD --limit 1 --incremental | sed'1,3d')'(from [here](http:// www .designified。COM /博客/文章/ 89/AN-svn的,提交后罩-shell脚本到复制的日志,消息和修订号码到了剪贴板上-OS-X) )。 –

+0

@火箭:谢谢! – Cmag

回答

4

没有简单的方法从SVN post-commit钩子获取提交消息。你可以询问 svn log的消息,然后解析出来。

MESSAGE=$(/usr/bin/svn log "$1" -r HEAD --limit 1 --incremental | sed '1,3d') 

来源: here

post-commit使用获得的提交信息如下:

MESSAGE=$(svnlook propget --revprop -r $REV $REPOS_PATH svn:log) 
+0

@David:我不知道。由于某些原因,谷歌搜索“svn post-commit get message”并不会返回很多内容。我在答案中发布的链接是我能找到的最多信息。 –

+0

将更正附加到您的答案,我将删除我的评论和downmod。以下是关于[Subversion revprops]的信息(http://svnbook.red-bean.com/nightly/en/svn.ref.properties.html#svn.ref.properties.unversioned-props)。以下是关于[svnlook](http://svnbook.red-bean.com/nightly/en/svn.reposadmin.maint.html#svn.reposadmin.maint.tk.svnlook)命令的信息。不要灰心。这是你学习的方式。 –

+0

@David:感谢您的信息:-) –

1

NO!没有!没有!

您应该做的最后一件事是在提交后执行ssh

我不确定你的意图是什么,我认为他们是光荣的。但是,请记住,在提交后挂钩执行完成之前,Subversion不会将控制权返回给客户端。如果您的ssh命令只需要十秒钟执行,那么用户在他们可以执行任何操作之前看到挂在那里的时间为10秒。

在这十秒钟内,用户会对您,公司和Subversion产生愤怒的仇恨。他们会成为他们以前的自我的emb and,而这将是你的错!你想让你感到内疚吗?没想到。

最好的解决方案是使用像Jenkins这样的连续构建服务器,并且可以执行SSH命令。它可以采取命令的结果,如果失败,则将结果通过电子邮件发送给开发人员及其团队。詹金斯非常容易设置和使用,并且通过詹金斯(即正确的方式)这样做不应超过几个小时(最多)。

因此,用户提交将不会挂在那里,但他们仍然会得到他们需要的信息。而且,既然你把它和詹金斯绑在一起,你可能会发现各种各样的插件给詹金斯,他们会做各种你认为不可能的奇妙的事情。你会成为英雄,并被尊为神。难道不比沸腾的仇恨更好吗?

选择是你的。

0

只是一个供参考(顺便说一句,你可以做一个svn propget --rev-prop -r $REV svn:log得到提交信息),我刚刚建立了一个PHP脚本EXECUT上后提交。如果你对PHP感到满意,这会给你很多控制权,并且有可能运行ssh命令。我在这里概述了它: https://stackoverflow.com/a/10146169/654235