3

svn modify ファイルにコミットする頻度を示すものを探しています。どのファイルが頻繁に、どのくらいの頻度で変更されるかを確認できるようにしたいと考えています。プロジェクトごとの変更頻度を確認できるように、「レポート」もディレクトリごとにグループ化することをお勧めします。

そのような機能を提供するツールはどれですか?

(それが重要な場合-私もmavenを使用しており、言語はほとんどJavaです)

4

3 に答える 3

2

Subversion には、これを行うための標準ツールはありません。ただし、それを行う方法の 1 つが考えられますが、時間がかかる場合があります。

まず、リポジトリ内のすべてのファイルのリストを生成する必要があります。これはそれを行う必要があります:

$ svn ls -R $REPO

次に、それを入力として使用して、各ファイルから何らかの方法でレポートを生成できます。

$ svn ls -R $REPO | while read $file
do
    here be dragons
done

ファイルを削除する必要があります (現在は BASH および Kornshell 固有):

$ svn ls -R $REPO | while read $file
do
    [[ $file == */ ]] && continue
    here be dragons
done

次に、すべての変更をカウントする方法を理解する必要があります。するsvn logべきです。ダッシュだけで構成されているすべての行をカウントすると、カウントが得られます。

$ svn ls -R $REPO | while read $file
do
    [[ $file == */ ]] && continue
    count=$(svn log $REPO/$file | grep "^--*$" | wc -l)
    echo "$REPO/$file: $count"
done

これにはいくつかの問題があります。

  • リポジトリのルートから移動していると仮定しています。そうでない場合は、ディレクトリ エントリを考慮する必要があります。
  • 名前に奇抜な空白が含まれるファイルの問題があります。これは、ファイルに空白がない場合 (ソース ファイルには空白がないと仮定しています)、または単一のスペースがあり、名前の前後にスペースがない場合に機能します。ただし、ダブル スペースやタブなどは問題になります。
  • これは遅くなり、実際のレポートはなく、ファイルのリストと数だけです。
  • これは、削除されたファイルを処理しません。ファイルがリポジトリから削除されている場合、このプログラムには表示されません。
  • このプログラムは非常に遅いです。私のテストでは、ファイルごとに約 1 秒かかります。それを開始し、昼食を取り、コーヒーを飲みます。たぶん、アトランティック シティまで自転車で行って、クラップスを数回プレイすることもできます。帰ってくるまでに済ませておくべきです。

始まりです。-rのパラメータを使用して、日付の範囲を制限できますsvn log。それらのリビジョンのほとんどが 2 年前のものであれば、ファイルに多くのリビジョンがあったとしても気にしないかもしれません。そして、これはおそらくシェルスクリプトの限界です。ロジックは Python または Perl に移植でき、そこでさらに多くのことを実行できます。

于 2013-06-28T12:00:20.853 に答える