繁体   English   中英

如何在开发人员/客户端计算机上的工作目录上侦听svn commit事件?

[英]How to listen to svn commit event on working directory on developer/client machine?

我需要编写一个node.js程序,只要开发人员将代码检入svn,它就会以某种方式触发。 这将更新工作目录中的文件。 开发人员可以在Mac OS X和Windows上工作。 该程序需要在两台计算机上运行。

有没有办法我可以以某种方式听svn客户的提交? 是否有允许插件/扩展的svk sdk? 是否可以查看.svn隐藏目录(svn为自己创建的隐藏目录)进行更改? 如果是这样,如何通过查看此目录来知道文件已提交?

起初我以为可以使用挂接,但是挂接在托管svn的计算机上运行,​​它们主要用于管理任务,例如发送电子邮件警报或启动构建

首先,您需要了解,如果不连接服务器,就无法知道服务器上是否发生了更新。 因此,您不能仅通过查看本地文件夹来完成此操作,因为这不是svn的工作方式。

以下是实现您想要的解决方法。 在服务器上,编写一个“提交后”钩子,该钩子从文本文件中获取一个计数器,对其进行递增并写回。 将此文本文件存放在客户可以下载的位置。 我假设这将在“ http://www.example.com/commit-id.txt”上。 然后,在客户端上,使用Shell脚本来监视此文本文件的更改并执行所需的操作。 例如,使用Windows Powershell,这可能会如下工作。 对于Mac,您需要使用其他外壳程序,但我确信可以轻松移植此脚本。

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
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM