リポジトリルートに対してすべてのリビジョンで「svnlog-q-v」を実行してから、目的のパスでフィルタリングすることが、これを行うための本当に最良の(唯一の?)方法ですか?自動化されたツールにペグのリビジョンを提供し、変更レポートにサポートの詳細を追加するには、これらの範囲を見つける必要があります。
私はすでにルートのクエリを少し最適化しました:
与えられたパス:
プロトコル://server/repo/a/b/c/d/foo.txt
パス上で繰り返しsvnログクエリを実行するスクリプトをすでに作成しました。
svn log -q -v ... / a / b / c / d / foo.txt
svn log -q -v ... / a / b / c / d
svn log -q -v ... / a / b / c
svn log -q -v ... / a / b
svn log -q -v ... / a
svn log -q-v..。
私が得られないまで:
svn:ファイルが見つかりません:..。
私は重要なプロファイリングテストを実行していませんが、エラーはかなり迅速に処理されるべきであり、ネットワークトラフィックの全体的な潜在的な削減は、リポジトリルートが必要な場合を除いてすべての場合に繰り返されるクエリのコストを上回るはずです。とにかく問い合わせました。
祖先に複数のライブ範囲がある場合、上記は機能しません。誰かがよく知っていない限り、私の唯一の選択肢はリポジトリルートからクエリすることです。
結果から、私は基本的に、ファイルが存在する個別の範囲のリストが必要です(これは、復活したファイルに複数の範囲があるように、後で履歴も追跡するように修正する可能性があります。逆に聞こえるかもしれませんが、同じパスは無関係になります)。現時点では、リビジョン番号が通過するときに解析し、パスまたはその祖先の1つが削除された目的のパスの最後のリビジョンを追跡しています(最初はHEADで、削除が表示されると上書きされます)。パスが追加されていることを確認したら、範囲をダンプしますrev_added - rev_lastdeleted
。
上記は機能しますが、かなりの量の情報を追跡する必要があり、そのほとんどは偽物です。これを行うためのより効率的な方法はありますか?できれば、ネットワークトラフィックを最小限に抑えるためにサーバー側でより多くの作業を行う方法がありますか(多くの作業はVPN経由でリモートで行われます)?
TortoiseSVNがこれと同じ情報を提供する唯一の方法は、同じプロセスを実行することであるようです(祖先のログを取得してからフィルター処理します)。