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

标签 node.js svn commit

我需要编写一个 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/

相关文章:

node.js - Socket.io 断开 Ping 超时错误

svn switch --relocate 不持久

java - JPA CriteriaQuery 是否需要 begin() 和 commit()?

svn 提交到多个存储库

javascript - 无法读取未定义的属性 'MessageEmbed'

node.js - iisnode 在 Windows 8 上找不到我的 32 位 Node.js 安装

javascript - Yodlee Interactive - 用于身份验证的 coblogin API - 错误代码 415

linux - 如何在 shell 脚本中给出输入列表?

svn - git提交者和SVN用户之间的映射

Android 共享首选项分配不会在模拟器 session 之间持续存在