C#からTracを操作する

Visual Studio 2005で、プロジェクトはXML RPCという名前で作ったと仮定。
Tracのプロジェクトはhttp://192.168.1.11/trac/SampleProjectでアクセス可能で、ユーザ名は"user"、パスワードは"pass"でパーミッションは面倒だからTRAC_ADMINを持ってると仮定*1

まず、http://xml-rpc.net/からXML-RPC.NETを取得し、ビルド*2してbinに入っているdll*3をプロジェクトのフォルダにコピーし、参照を追加しておく。


次に、チケット操作用のインターフェイスを記述する。

using System;
...
using CookComputing.XmlRpc;

namespace XML_RPC
{
    [XmlRpcUrl("http://localhost/trac/login/xmlrpc")]
    public interface ITicket : IXmlRpcProxy
    {
        // http://192.168.1.11/trac/SampleProject/xmlrpcにアクセスすると、使用できる操作が一覧できる。
        // その中の最後らへん、ticket - An interface to Trac's ticketing system.の中に、
        // int ticket.create(string summary, string description, struct attributes={}, boolean notify=False)
        // があったので、そのまま使用してみた。
        [XmlRpcMethod("ticket.create")]
        int Create(string summary, string description, XmlRpcStruct attributes, bool notify);
    }
}


最後にこれを使用して、ためしにチケットを登録してみる。

//ITicket ticket = (ITicket) XmlRpcProxyGen.Create(typeof(ITicket));
ITicket ticket = XmlRpcProxyGen.Create<ITicket>();
ticket.Url = "htt://192.168.1.11/trac/SampleProject/login/xmlrpc";
ticket.PreAuthenticate = true;
ticket.Credentials = new NetworkCredential("user", "pass");
ticket.Create("サマリー", "説明", new XmlRpcStruct(), false);

これを実行してみると、チケットが登録されてた!すげー!簡単だー!
XML-RPCはいまいちよくわかってなかったけど、Remote Procedure Callね。まんまじゃん。


と、言うことで、VS2005用のTracアドインでも作ってみようかな。
VSTracを試してみたら、今の段階では「見る」だけしかできないんだもんなぁ。
せめてチケットの登録とチケットの解決はできないと、お話にならない。

*1:XmlRpcPluginはもちろん導入済みである必要あり

*2:エラーがたくさん出るけど、Assert系は削除の方向でw なんとか.keyファイルがないって言われたからAssemblyInfo.csの39行目を削除したらうまくいった

*3:CookComputing.XmlRpcV2.dllだけでOKっぽい?