2009-10-27 13 views
13

私はリポジトリに接続し、コミットのリストをダウンロードしてローカルに保存するPHPツールを作っています。しかし、特定のリポジトリが大規模で待ち時間やタイムアウト/エラーの可能性があるログ結果を取得する可能性があるため、非同期要求を使用して各コミットメッセージをダウンロードしたいと考えています。SVN:指定されたパスのリビジョン番号のリストを取得できますか?

だから、私は、改訂履歴で開始点と終了点を持っている、と私はこのようにすべてのログをつかむことができます。

svn log -r <from_revision>:<to_revision> <REPO_URL>

を...と私はおそらくあるXMLファイルになってしまいますダウンロードに長い時間がかかり、解析に長時間と多くのリソースが必要になり、保存に長い時間がかかります。私は特定のリビジョンが存在するかわからないので、

svn log -r <revision> ...

しかし、:

私は始点と終点を知っていれば、私は改正を一つずつをつかむためにのための()ループを作成することができます与えられたパスについて、私はエラーを受け取ります。私は、更新中にそのエラーを無視するようにアプリケーションを作ることができますが、それは厄介なハックであり、リクエストを投稿し、とにかく応答を待っています。

だから、私はこのような何か必要があります:「私は、このパスのリビジョン番号のリストを与える」、OR

  • を:
  • 「私は、このパスのリビジョン番号のリストを与え、間および

私はリポジトリパスの有効なリビジョンの配列を作成し、それらを一つ一つを得ることができるでしょうその方法は。

すべての提案は、事前のおかげで歓迎されています。

+0

あなたはSVN CLIの実行ファイルを呼び出すのではなく、SVNバインディングを使用することを検討しましたか? IIRC、彼らは既にPHPのために存在します。これは、はるかにプログラマティックで誤りの少ないインタフェースです。 – rmeador

答えて

9

あなたの最善の策は、特定のディレクトリまたはファイルの最初の100ログを取得する次のsvn log -l 100 0:{$newest} .\を実行することです。返された最後のリビジョン番号を読んでから、次のリクエストを読んでください。100 svn log -l 100 {$last_ret_log}:{$newest} .\

あなたはそれぞれのリクエストで99の新しいログエントリを取得しますが、すべて取得することはありません。

+0

ああ、最初のリビジョンが何であったか分からないので、最初のグラブで#:#ビットを削除したいと思うかもしれません。おっとっと。 –

+0

これは良い妥協のように聞こえる。反復ごとに多数のログを取得しますが、あまり多くは取得しないでください。 リポジトリ内の任意のパスに対して 'svn log 1:HEAD 'として使用できますが、SVNは1とHEADリビジョン間のログを返すだけで十分です。要求された。 –

+0

お役立ち情報私は一般的にすべての私のSubversionのニーズにバージョンを使用します。しかし、私は管理に与えるためにsvnのログを解析するいくつかのスクリプトがあります。 :) –

2

svn listをご覧ください。だからあなたの目的のために :


$ svn list --verbose file:///var/svn/repos 
    16 sally   28361 Jan 16 23:18 README.txt 
    27 sally    0 Jan 18 15:27 INSTALL 
    24 harry    Jan 18 11:27 examples/ 

これは、任意のファイルの最後(先頭)のリビジョンを示しています。

+0

ありがとうございますが、すべてのリビジョン、各パスの最後のリビジョンだけを表示しているわけではありません。 –

3

Subversionサーバーのリポジトリツリーにアクセスできる場合は、svnlook historyを使用してリビジョン番号のリストを取得できます。

詳細はhttp://svnbook.red-bean.com/en/1.1/re49.htmlにあります。

+0

Yikes、あなたはほとんど問題を解決しましたが、唯一の問題は 'svnlook'がURLで動作しないということです。このアプリケーションは、ほとんどの場合、URLを使用して、データのリモートリポジトリを取得するために使用されますパス:( –

+0

ありがとう!これは私の問題を解決している可能性があります。 – styfle

2
svn log url -l limitNumber - r fromReversion:toReversion 

Uは、Uは次の新しい(大きな)復帰を検索する場合toReversion より

svn log url -l 4 -r someVersion:1 
or 
    svn log url -l 4 -r 99: 3 

fromReversion大きい例えば次の古い(小さい)復帰(バージョン) を検索する場合(バージョン)

svn log url -l 4 -r someVersion:head 
or 
    svn log url -l 4 -r 3:99 
    fromReversion lower than toReversion 
3

私はちょうど同様の結果を得ようとしています。 特定のブランチのすべてのリビジョン番号が必要です。

私は以下が非常に有用であることを発見しました。

svn log <svn_server_path> | grep "^r[0-9]\+ | " | cut -d' ' -f1 | cut -c2- > revisions.csv 

これは、すべての改訂番号が別々の行にあるファイルを私に提供します。

うまくいけば、あなたや他の人が役に立つと思います。

レポには25000件以上のリビジョンがあり、このファイルを作成するのに数秒かかります。

関連する問題