VBAでSVNワーキングコピーの情報を拾う

※pgカテゴリはプログラミング系のお話なので興味がない方はスルーしてください。

最近やったのでメモ。
Subversion(以下SVN)でリポジトリ管理をしているプロジェクトの場合、WindowsTortoiseSVNを入れて使われていることが多いのではないでしょうか。TortoiseSVNExplorerに統合され、右クリックから操作ができるためGUIに慣れた方にはとても便利です。その半面、スクリプト化しようとすると、コマンドラインから起動できる機能が限られているために、それだけでは難しいことがあります。
コマンドラインクライアントをインストールすればいいだけなのだけれども、自由にインストールできない環境だったり、ツールを皆が使うためには皆のPCにインストールしないといけなかったりするとそれも面倒なのでなんとかならないかなぁと探してみました。

TortoiseProc

更新を自動化したい程度であれば下記、TortoiseProcでことが足りそうです。
付録D TortoiseSVN の自動化
こんな感じでしょうか。

SET APP_HOME=(ワーキングコピーのフォルダパス)
TortoiseProc /command:update /path:%APP_HOME% /closeonend:3

しかし、更新以外はほぼ必ずダイアログが上がってくるため、GUIアプリとして組み込む場合には使えても、完全自動化を目指す場合にはやっぱり難しいということになります。

SubWCRev

今回は複数ブランチに分かれている各ファイルを順次マージをしないといけないので、どのブランチのリビジョンが最新かを知るために、リビジョン番号を一覧化したいというのがやりたいことです。
一覧はExcelで見たいので、VBAでなんとかできないかと調べていたら、こんなのを見つけました。
http://www.caldron.jp/~nabetaro/svn/TortoiseSVN-trunk/TortoiseSVN_ja/tsvn-subwcrev-com-interface.html
本来的にはリポジトリから直接取得するのが望ましいのですが、やはりそれは難しいので、ローカルのワーキングコピーから取得する方法です。
ちなみにコードはうろ覚え&例として適当に書いているので、やりたいことに合わせて書き換えが必要です。

Dim wc As Object
Set wc = CreateObject("SubWCRev.object")

'filePathは対象のファイルパス
wc.GetWCInfo filePath, False, False

'任意のセルに値を設定
Cells(1, 1) = wc.Revision

Set wc = Nothing

自動化

というわけで、最初の自動更新でローカルのワーキングコピーを最新化した後リビジョン取得を行うことで現在のリビジョン番号を取得することができます。

リポジトリ側を見るには

TortoiseSVNではできないので別の何かを考える必要があります。ここでは説明省略しますが、Java開発であれば皆のPCにJavaはインストールされているので、以前はSVNKitで簡単なコマンドラインクライアントを作りましたが、ライセンスの考え方がよく分からなかったのでお蔵入。