任意のタイプの svn フックを作成するときに、リポジトリまたはトランザクションに関する情報が必要な場合はsvnlook
、シェル スクリプトからプログラムを使用するか、選択した言語で svn API を使用します。svnlook
スクリプトはサーバーのコンテキストで実行されるため、認証チェックのレイヤーを含むすべての svn RA (リモート アクセス) コードをバイパスするため、使用は高速です。これは問題ではありません。さらに、ファイルの種類の情報以外には使用していない作業コピーを更新するという追加のオーバーヘッドはありません。
svnlook
リビジョン (post-* フックの場合) とトランザクション (pre-* トランザクションの場合) の両方を調査するための多数のオプションが含まれています。ここで特に興味深いのはchanged
オプションです。
変更: 使用法: svnlook が REPOS_PATH を変更しました
変更されたパスを印刷します。
有効なオプション:
-r [--revision] ARG : リビジョン番号 ARG を指定
-t [--transaction] ARG : トランザクション名 ARG を指定
--copy-info : コピーの詳細を表示
次のように、リビジョンまたはトランザクションを構成する変更が表示されます。
A trunk/src/new-dir/
A trunk/src/new-dir/newheader.h
A trunk/src/new-dir/newsrc.c
U trunk/src/existingsrc.c
ディレクトリを参照する場合、svnlook からの出力は常に / で終わります。これは、ファイルまたはディレクトリを検出するための簡単な識別器です。
ただし、削除を処理する場合、状況は少し複雑になります。ディレクトリが削除されると、そのディレクトリの下にあるものもすべて削除され、この情報は に表示されませんchanged
。ここを参照してください:
D trunk/src/new-dir/
U trunk/src/existingsrc.c
あなたが見ているものの説明に基づいて、コミット後の何らかの形式のレポートを探していると推測します。もしそうなら、Subversion メーラーの post-* hookをチェックしてみてください。結果を電子メールで送信したくない場合でも、コードは、svn API を使用して変更のトランザクションまたはリビジョンをウォークスルーする方法を示しています。