// Example .NET bindings for Svn.RA // // Written by Jelmer Vernooij, 2006. // // Compile with: // // mcs /unsafe ra.cs // // Run like: // // mono ra.exe file://path/to/local/repository // // Example output: // // Latest revision of file:///home/jelmer/foo is 3 using System; using System.Collections; using System.Runtime.InteropServices; namespace Subversion.Remote { public class Session { [DllImport("libsvn_ra-1.so")] internal static extern IntPtr svn_ra_open2( out IntPtr ctx, string repos_url, IntPtr callbacks, IntPtr callback_baton, IntPtr config, IntPtr pool); [DllImport("libsvn_ra-1.so")] internal static extern IntPtr svn_ra_get_latest_revnum( IntPtr ctx, out long latest_revnum, IntPtr pool); [DllImport("libsvn_ra-1.so")] internal static extern IntPtr svn_ra_initialize(IntPtr pool); [DllImport("libapr.so.0")] internal static extern int apr_initialize(); [DllImport("libapr.so.0")] internal static extern int apr_pool_create_ex( ref IntPtr new_pool, IntPtr old_pool, IntPtr abortfn, IntPtr allocater); public string url; public IntPtr ra_ctx; public static IntPtr pool = IntPtr.Zero; static Session() { apr_initialize(); apr_pool_create_ex(ref pool, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero); svn_ra_initialize(pool); } /// /// Connect to a Remote Subversion server. /// public Session(string url) { this.url = url; svn_ra_open2(out ra_ctx, url, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, pool); } public long GetLatestRevnum() { long revnum; svn_ra_get_latest_revnum(ra_ctx, out revnum, pool); return revnum; } public static void Main(string[] args) { Session s = new Session(args[0]); Console.WriteLine("Latest revision of {0} is {1}", args[0], s.GetLatestRevnum()); } } }