diff options
author | Therzok <teromario@yahoo.com> | 2013-09-16 19:12:13 +0400 |
---|---|---|
committer | Lluis Sanchez <lluis@xamarin.com> | 2013-09-18 16:11:11 +0400 |
commit | c66520a8992149ce9ceb50106fd3b85b74904704 (patch) | |
tree | ca589a8e86b96c9d95755faae9f7830c1e1fc3fb /main | |
parent | a655c353d2b900d261f56f2918d239a0f5ee556a (diff) |
[Subversion] Try and fix NREs caused by lib loading.
Diffstat (limited to 'main')
-rw-r--r-- | main/src/addins/VersionControl/MonoDevelop.VersionControl.Subversion.Unix/MonoDevelop.VersionControl.Subversion.Unix/SvnClient.cs | 45 |
1 files changed, 29 insertions, 16 deletions
diff --git a/main/src/addins/VersionControl/MonoDevelop.VersionControl.Subversion.Unix/MonoDevelop.VersionControl.Subversion.Unix/SvnClient.cs b/main/src/addins/VersionControl/MonoDevelop.VersionControl.Subversion.Unix/MonoDevelop.VersionControl.Subversion.Unix/SvnClient.cs index 87209b8623..5ba39ca30a 100644 --- a/main/src/addins/VersionControl/MonoDevelop.VersionControl.Subversion.Unix/MonoDevelop.VersionControl.Subversion.Unix/SvnClient.cs +++ b/main/src/addins/VersionControl/MonoDevelop.VersionControl.Subversion.Unix/MonoDevelop.VersionControl.Subversion.Unix/SvnClient.cs @@ -17,11 +17,27 @@ namespace MonoDevelop.VersionControl.Subversion.Unix { public class SvnClient : SubversionVersionControl { - internal static LibApr apr; + static LibApr apr; static readonly Lazy<bool> isInstalled; - internal static LibSvnClient svn; + static LibSvnClient svn; static readonly Lazy<bool> pre_1_7; + internal static LibApr Apr { + get { + if (apr == null) + CheckInstalled (); + return apr; + } + } + + internal static LibSvnClient Svn { + get { + if (svn == null) + CheckInstalled (); + return svn; + } + } + internal static void CheckError (IntPtr error) { CheckError (error, null); @@ -56,7 +72,7 @@ namespace MonoDevelop.VersionControl.Subversion.Unix return error.message; else { byte[] buf = new byte [300]; - svn.strerror (error.apr_err, buf, buf.Length); + Svn.strerror (error.apr_err, buf, buf.Length); return Encoding.UTF8.GetString (buf); } } @@ -64,10 +80,8 @@ namespace MonoDevelop.VersionControl.Subversion.Unix internal static IntPtr newpool (IntPtr parent) { IntPtr p; - if (apr == null) - CheckInstalled (); - apr.pool_create_ex (out p, parent, IntPtr.Zero, IntPtr.Zero); + Apr.pool_create_ex (out p, parent, IntPtr.Zero, IntPtr.Zero); if (p == IntPtr.Zero) throw new InvalidOperationException ("Could not create an APR pool."); return p; @@ -77,7 +91,7 @@ namespace MonoDevelop.VersionControl.Subversion.Unix { if (pathOrUrl == null) return null; - IntPtr res = svn.path_internal_style (pathOrUrl, localpool); + IntPtr res = Svn.path_internal_style (pathOrUrl, localpool); return Marshal.PtrToStringAnsi (res); } @@ -110,7 +124,7 @@ namespace MonoDevelop.VersionControl.Subversion.Unix public static string GetVersion () { - IntPtr ptr = svn.client_version (); + IntPtr ptr = Svn.client_version (); LibSvnClient.svn_version_t ver = (LibSvnClient.svn_version_t)Marshal.PtrToStructure (ptr, typeof(LibSvnClient.svn_version_t)); return ver.major + "." + ver.minor + "." + ver.patch; } @@ -163,9 +177,9 @@ namespace MonoDevelop.VersionControl.Subversion.Unix IntPtr localpool = newpool (IntPtr.Zero); try { string npath = NormalizePath (path, localpool); - CheckError (svn.client_url_from_path (ref ret, npath, localpool)); + CheckError (Svn.client_url_from_path (ref ret, npath, localpool)); } finally { - apr.pool_destroy (localpool); + Apr.pool_destroy (localpool); } if (ret == IntPtr.Zero) @@ -180,6 +194,9 @@ namespace MonoDevelop.VersionControl.Subversion.Unix return base.GetDirectoryDotSvn (path); UnixSvnBackend backend = CreateBackend () as UnixSvnBackend; + if (backend == null) + return String.Empty; + return backend.GetDirectoryDotSvnInternal (path); } } @@ -188,17 +205,13 @@ namespace MonoDevelop.VersionControl.Subversion.Unix { protected static LibApr apr { get { - if (SvnClient.apr == null) - SvnClient.CheckInstalled (); - return SvnClient.apr; + return SvnClient.Apr; } } protected static LibSvnClient svn { get { - if (SvnClient.svn == null) - SvnClient.CheckInstalled (); - return SvnClient.svn; + return SvnClient.Svn; } } |