我需要编写一个 node.js 程序,每当开发人员将代码 checkin svn 时,该程序都会以某种方式被触发。这将更新工作目录中的文件。开发人员在 Mac OS X 和 Windows 上工作。该程序需要在两台机器上运行。
有什么方法可以监听 svn 客户端的提交吗? svn 有没有允许插件/扩展的 sdk? 观察 .svn 隐藏目录(svn 创建供自己使用)是否会发生变化?如果是这样,我如何通过查看此目录知道文件已提交?
起初我认为钩子(Hook)可能是可行的方法,但钩子(Hook)是在托管 svn 的计算机上运行的,它们主要用于管理任务,例如发送电子邮件警报或启动构建
最佳答案
首先你需要明白,如果不连接到服务器,就无法知道服务器上是否发生了更新。因此,您不能简单地通过查看本地文件夹来完成此操作,因为这不是 svn 的工作方式。
实现您想要的效果的解决方法如下。在服务器上,编写一个“提交后” Hook ,该 Hook 从文本文件中获取计数器,递增该计数器,然后将其写回。将此文本文件存放在您的客户可以下载的地方。我假设这将位于“http://www.example.com/commit-id.txt”上。然后,在客户端上,使用 shell 脚本监视此文本文件的更改并执行所需的操作。例如,使用 Windows powershell,可以按如下方式工作。对于 Mac,您需要使用不同的 shell,但我确信这个脚本可以轻松移植。
function get-current-commit-id {
trap [Exception] {
# Make sure the script doesn't freak out when server is down or connection
$commitid
return
}
# The rand.next() ensures by brute force that the text file is not cached
[int] $clnt.DownloadString("http://www.example.com/commit-id.txt?q="+$rand.next())
}
$clnt = new-object System.Net.WebClient
$commitid = get-current-commit-id
while( 1 ){
$commitidnew = get-current-commit-id
if( $commitidnew -ne $rsid ){
Write-Output "Commit occured on server"
### execute desired action here
### perhaps you'll also want to run "svn up"
$commitid = $rsidnew
}
### check for new update every 10 seconds
sleep 10
}
关于node.js - 如何在开发人员/客户端计算机上的工作目录上监听 svn commit 事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14270294/