簡體   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