C# から Subversion を操作する方法

大人の事情で、Subversion のコミットログを整形して出力する Web アプリを、ASP.NET で作ろうかと検討中。手はじめに、C# から Subversion を簡単に操作する方法を調べてみました。

見つけたのは『SharpSvn』というライブラリ。Visual Studio アドインの Subversion クライアント『AnkhSVN』で使われているライブラリなので、実績は十分です。

さっそくログを取得するサンプルを作ってみました。

using System;
using SharpSvn;
using System.Collections.ObjectModel;

namespace SvnSample
{
    class Program
    {
        static void Main(string[] args)
        {
            // SVN リポジトリのパス
            string path = @"適当なリポジトリに変更して下さい";

            // SVNリポジトリを操作するクライアント
            SvnClient client = new SvnClient();

            SvnLogArgs logArgs = new SvnLogArgs()
            {
                Limit = 10,
            };

            // 10件取得
            Collection<SvnLogEventArgs> logs;
            client.GetLog(path, logArgs, out logs);
            foreach (var log in logs)
            {
                Console.Write(log.Revision + ":");
                Console.WriteLine(log.LogMessage);
            }

            // 非同期に10件取得
            client.Log(path, logArgs, (sender, e) =>
            {
                Console.Write(e.Revision + ":");
                Console.WriteLine(e.LogMessage);
            });

            Console.ReadLine();
        }
    }
}

ログデータが格納されるクラスに SvnLogEventArgs という名前が付いてる事に違和感があります。イベント引数じゃないのに、なぜこの名前を…。あと、GetLog メソッドが out パラメータで受け取ったコレクションにログを格納する仕様も使いにくいです。戻り値でいいのに。

インタフェースが少し使いにくいですが、それさえ目をつぶれば、じゅうぶんに使えるライブラリですけどね。