1

開発者がコードを svn にチェックインするたびにトリガーされる node.js プログラムを作成する必要があります。これにより、作業ディレクトリ内のファイルが更新されます。開発者は Mac OS X と Windows で作業しています。プログラムは両方のマシンで実行する必要があります。

どうにかしてsvnクライアントのコミットを聞く方法はありますか? プラグイン/拡張機能を許可する svn 用の SDK はありますか? .svn隠しディレクトリ(svnが独自に使用するために作成する)の変更を監視しますか?もしそうなら、このディレクトリを見て、ファイルがコミットされたことをどのように知ることができますか?

最初はフックの方がいいかもしれないと思っていましたが、フックはホストの svn を実行するマシン上で実行され、主に電子メール アラートの送信やビルドの開始などの管理タスク用です。

4

1 に答える 1

1

まず、サーバーに接続せずにサーバーで更新が発生したかどうかを知る方法がないことを理解する必要があります。したがって、svnの仕組みではないため、ローカルフォルダーを見るだけではできません。

あなたが望むものを達成するための回避策は次のとおりです。サーバー上で、テキスト ファイルからカウンターを取得し、インクリメントして、書き戻す "post-commit" フックを記述します。このテキスト ファイルをクライアントがダウンロードできる場所に置きます。これが「http://www.example.com/commit-id.txt」にあると仮定します。次に、クライアントで、このテキスト ファイルの変更を監視し、目的のアクションを実行するシェル スクリプトを使用します。たとえば、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
}
于 2013-01-11T09:21:28.897 に答える