ブランチ内のすべての非バイナリファイルの単一のxmlファイルで再帰的なsvn blameレポートを取得する方法は?
-
03-07-2019 - |
質問
ブランチ内のすべての非バイナリファイルについて完全に再帰的なsvn blameレポートを取得するにはどうすればよいですか?パス、およびファイル自体の行のテキスト?出力全体が単一のファイルにある必要があります。 CCNetインスタンスを介してビルドの一部として実行されます。
利用可能なツールは、nantおよびnantcontrib、msbuild、および最新のコマンドラインsvnの最新の安定リリースです。
私が遭遇した問題のいくつかを次に示します。コマンドラインsvn blameコマンドはディレクトリ再帰をサポートしていません。 Blameの--xmlオプションには、各行の実際のテキストは含まれませんが、他のすべてが含まれます。デフォルトでは、nantcontribは--quietパラメーター(タスク参照とは反対)を渡しますが、これはblameコマンドではサポートされていません。 Nantcontrib svnタスクは--xmlパラメーターを受け入れない場合があります。
解決
簡単な答えは、これを行う簡単な方法はないということです。最適で最も正しい方法は、独自のsvnクライアントを記述する(または既存のsvnクライアントを拡張して)必要な機能を持たせることです。些細なことではありません。
これを行うには間違った方法もあります。これにはコードの記述も含まれます。 これを行わない:
find . -type f | grep -v .svn | xargs svn blame > line_data
find . -type f | grep -v .svn | xargs svn --xml blame > xml_data
find
を2回実行することを避けるために、2つの svn
コマンドを一緒にスクリプト化できますが、これは依然として非常に遅くなります。傷害にin辱を加えるには、2つのファイルを自分で解析して、実際のソース行をxmlデータに追加する必要があります。
残念なことに、これは標準のsvnクライアントで必要なものをサポートする範囲だと思います。より良いことをする他のクライアントを見つけることができません( blame をサポートしていないクライアントもあります) code>)。
他のヒント
使用しているOSがわかりません。ただし、単純なFORループとコマンド" svn ls -R"を使用してみてください。ブランチ内のすべてのファイル(workspace / url)を再帰的にリストし、それを" svn blame --xml"にパイプします。
これをSVNコマンドラインプロンプトで試してみましたが、正常に動作します(Windows XP、SVN 1.4.4)。使用したコマンドは次のとおりです。
FOR / F" usebackq delims ==" %i IN( svn ls -R http:// myurl / mybranch
)DO @svn blame --xml%i
注:一部の" url not found"を避けることができます。ワークスペースにこのコマンドを入力して(ブランチルートを反映)、上記のコマンドでurlの代わりに 'svn ls -R`を使用した場合のエラーのタイプ。
これがお役に立てば幸いです。