2010-11-30 7 views
1

私はコミット後のフックを書いています。ここでは、svn diff -summarizeを使って変更されたものの概要を取得します。ファイルやフォルダが追加または変更されたときには、作業コピーでそのファイルタイプを取得し、自動的に更新されます。しかし、ファイルやフォルダが削除されると、svn diff -summarizeの項目がファイルかフォルダかを調べる方法がありません。SVN diffの項目がファイルかフォルダかを識別する方法は?

これは、別の作業コピーを保持し、自動的に更新することですが、常に1つのリビジョンを他の作業コピーよりも遅らせることです。そうすれば、ファイル/フォルダが削除された場合、それを古い作業コピーに入れることができます。しかし、これは非常に非効率的なやり方で、2つの異なる作業コピーを同時に作成することを余儀なくされていると思います。SVNにはこの作業に役立つものがあるのだろうかと思っていました。

答えて

2

任意のタイプの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を使用してトランザクションやリビジョンを変更する方法を示します。

+0

私はそれについて考えたことはありませんでした。私はすでにこれをあきらめて、Gitに移っても、質問に答えてくれてありがとう。 –

+0

@BrunoDeBarros私はあなたを責めているとは言えません。 4ヶ月は誰でも再考するのに十分な時間です。 –

関連する問題