任意のタイプのsvnフックを書くときに、リポジトリまたはトランザクションに関する情報が必要な場合は、シェルスクリプトからsvnlook
プログラムを使用するか、選択した言語のsvn APIを使用します。 svnlook
を使用すると、スクリプトがサーバーのコンテキストで実行されているため、権限チェックのレイヤーを含むすべてのsvn RA(リモートアクセス)コードをバイパスするため、処理が高速になりますが、これは問題ではありません。さらに、使用していない作業コピー(ファイルタイプ情報以外のもの)を更新する追加のオーバーヘッドはありません。
svnlook
には、リビジョン(ポスト*フック用)とトランザクション(プレ*トランザクション用)の両方を調べるためのさまざまなオプションが含まれています。特に興味があるのは、changed
オプションです。リビジョンやトランザクションを作っ
changed: usage: svnlook changed REPOS_PATH
Print the paths that were changed.
Valid options:
-r [--revision] ARG : specify revision number ARG
-t [--transaction] ARG : specify transaction name ARG
--copy-info : show details for copies
変更がそうのように、表示されます。svnlookから
A trunk/src/new-dir/
A trunk/src/new-dir/newheader.h
A trunk/src/new-dir/newsrc.c
U trunk/src/existingsrc.c
出力ディレクトリを参照するとき、常に/で終わります。これは、ファイルやディレクトリの検出のための簡単な弁別器です。
しかし、削除を処理するときには、少しばかげています。ディレクトリが削除された場合は、そのディレクトリの下のものもすべて削除され、この情報はchanged
に表示されません。ここを参照してください:あなたは私はあなたがコミット後の報告のいくつかのフォームを探していることを推測するつもりだ、見ているものの説明に基づいて
D trunk/src/new-dir/
U trunk/src/existingsrc.c
。もしそうなら、あなたはthe subversion mailer post-* hookをチェックアウトしたいかもしれません。結果を電子メールで送信したくない場合でも、コードはsvn APIを使用してトランザクションやリビジョンを変更する方法を示します。
私はそれについて考えたことはありませんでした。私はすでにこれをあきらめて、Gitに移っても、質問に答えてくれてありがとう。 –
@BrunoDeBarros私はあなたを責めているとは言えません。 4ヶ月は誰でも再考するのに十分な時間です。 –