2009-02-20 11 views
19

現在、私は最後のX日間に変更されていないすべてのファイルを探したいだけですが、最終的に私のSubversionリポジトリに対してより複雑なクエリを作成できるようにしたいと思います。Subversionリポジトリに問い合わせる方法は?

何らかの種類のSubversionクエリ言語やAPIを使用できますか?

答えて

14

を試してみてください。

svn log URL --xml --verbose > commits.xml 

いくつかのより多くのオプションを使用すると、再生することができますがありますリビジョン範囲を制限したり、リボン小道具やマージ情報などの情報を入手することができます。

この問題は、「XML文書の内容に関するクエリをどのように実行するのか」になります。既存のSVN API。たとえば、C#ではLINQ queries on XMLを実行できます。

+1

特に、--revisionの範囲には日付範囲が含まれます:[[svn log --verbose --revision '{2009-01-01}': '{2009-02-20} ' - xml]]変更されていないものを特定するには、後処理が必要です。 – phord

2

現在のところ、普及しているSubversionのクエリ言語やクエリベースのAPIはありません(今、誰か​​が私と矛盾するのを見て、それは私が推測するネット上の人生です)。

これは、あなたが

svn info 

svn log 

ような通常のsvnコマンドからの出力は、私はbashやPowerShellのようなものは、少なくともこれを作ることができると確信して一緒にスプライシングに限られていることを意味実現可能である。あなたが窓のバッチで立ち往生しているなら、私は今泣き始めるでしょう。

+2

本当に、プラットフォーム間の開発者にとって便利なツールが必要であり、存在しません。私たちは午後と夕方に何をしていますか? –

+1

実際には、日々必要とされる情報のほとんどは、標準のコマンドセットで簡単に利用できます。しばらく変更されていないファイルのリストを探したいのはもっと珍しいことです。私の心はSVNSQLの作成に忙しくなっていますが、まあまあです。 –

+1

Linq2Svn - 気分がいいよね。 –

1

すでに述べたように、svn log/infoをシェルコマンドと組み合わせて、必要なものを見つけることができます。あるいは、C/C++でSVN独自のAPIを直接使用して、プログラムでリポジトリのエンティティを処理することもできます。 SVNにはPythonバインディングがあります。 Javaが選択した言語である場合、あなたはこのようなすべてのコミットに関する多くの情報を含むXMLファイルを生成するためにsvn logコマンドを使用することができますhttp://svnkit.com/

16

このようなクエリを実行するためのクエリインターフェイスを提供することを意図したSvnQueryプロジェクト(http://svnquery.tigris.org)を使用できます。 .NET APIとWebフロントエンドを持ち、同じクエリ言語を提供します。演算子、ネストされた式、ワイルドカード、フレーズ、ギャップフレーズを使用して複雑なクエリを実行できます。あなたが求めているオペレータは、現在と最後のコミット日との差を計算していませんが、オープンソースプロジェクトであるので、ボランティアしたり、機能要求を投稿することができます:-)

2

$data = [xml] (svn log -r "r1:r2" --xml) 
$data.log.logentry | where-object {$_.message -match "regex"} 

、さらには(よく知られたPowerShellの問題を回避するために、いくつかの必要な魔法で)変​​更したファイル上

1

svnリポジトリの履歴を表示するために、SubversionのコマンドラインやTortoiseSVNなどのグラフィカルクライアントを使用する以外にも、 SubversionリポジトリのWebインタフェース。

たとえば、VisualSVN Server 3.2以降では、Webベースの改訂履歴ビューアsee the demo hereを使用できます。

the HTML5-based web svn client hereの説明を参照してください。

1

1.7 SVN以降、作業コピーには.svnディレクトリにwc.dbファイルがあります。これは基本的なsqliteデータベースなので、照会が非常に簡単です。

作業コピーが最新であることを確認する必要があります。あなたが素早く簡単な選択以上のことをしているならば、ファイルを破壊するリスクよりもファイルをコピーするほうが安全です。

変更日は、Unixエポックに基づいています。たとえば、

sqlite3 .svn\wc.db "select changed_revision, datetime((changed_date/1000000),'unixepoch') changed_date, changed_author, repos_path from NODES" 
+0

'changed_date/1000000'をありがとうございました。あなたはそれを述べた唯一の人です。 – steven

関連する問題