Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/monodevelop.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/main
diff options
context:
space:
mode:
authorTherzok <teromario@yahoo.com>2013-09-13 19:29:47 +0400
committerLluis Sanchez <lluis@xamarin.com>2013-09-18 16:10:28 +0400
commitb91ad1d6b7a246992d97fbb92294598bbc544193 (patch)
treeb0082bf7b0c6150854f6fa10c9a4a218799650fb /main
parent69ae942d7fb0fc60d322cdceb826b2f714901840 (diff)
[Svn] Fix Subversion 1.8 crashing whenever you open a solution.
Diffstat (limited to 'main')
-rw-r--r--main/src/addins/VersionControl/MonoDevelop.VersionControl.Subversion.Unix/MonoDevelop.VersionControl.Subversion.Unix/LibSvnClient.cs2
-rw-r--r--main/src/addins/VersionControl/MonoDevelop.VersionControl.Subversion.Unix/MonoDevelop.VersionControl.Subversion.Unix/LibSvnClient0.cs9
-rw-r--r--main/src/addins/VersionControl/MonoDevelop.VersionControl.Subversion.Unix/MonoDevelop.VersionControl.Subversion.Unix/LibSvnClient1.cs9
-rw-r--r--main/src/addins/VersionControl/MonoDevelop.VersionControl.Subversion.Unix/MonoDevelop.VersionControl.Subversion.Unix/SvnClient.cs77
4 files changed, 49 insertions, 48 deletions
diff --git a/main/src/addins/VersionControl/MonoDevelop.VersionControl.Subversion.Unix/MonoDevelop.VersionControl.Subversion.Unix/LibSvnClient.cs b/main/src/addins/VersionControl/MonoDevelop.VersionControl.Subversion.Unix/MonoDevelop.VersionControl.Subversion.Unix/LibSvnClient.cs
index 28ff02b3cb..84519146c1 100644
--- a/main/src/addins/VersionControl/MonoDevelop.VersionControl.Subversion.Unix/MonoDevelop.VersionControl.Subversion.Unix/LibSvnClient.cs
+++ b/main/src/addins/VersionControl/MonoDevelop.VersionControl.Subversion.Unix/MonoDevelop.VersionControl.Subversion.Unix/LibSvnClient.cs
@@ -146,6 +146,8 @@ namespace MonoDevelop.VersionControl.Subversion.Unix {
public abstract IntPtr client_get_wc_root (out IntPtr wcroot_abspath, string local_abspath, IntPtr ctx, IntPtr result_pool, IntPtr scratch_pool);
+ public abstract IntPtr repos_find_root_path (string path, IntPtr pool);
+
// TODO: Check if intptr
public abstract IntPtr strerror (int statcode, byte[] buf, int bufsize);
diff --git a/main/src/addins/VersionControl/MonoDevelop.VersionControl.Subversion.Unix/MonoDevelop.VersionControl.Subversion.Unix/LibSvnClient0.cs b/main/src/addins/VersionControl/MonoDevelop.VersionControl.Subversion.Unix/MonoDevelop.VersionControl.Subversion.Unix/LibSvnClient0.cs
index 5b25e1cb12..7775bdf7f9 100644
--- a/main/src/addins/VersionControl/MonoDevelop.VersionControl.Subversion.Unix/MonoDevelop.VersionControl.Subversion.Unix/LibSvnClient0.cs
+++ b/main/src/addins/VersionControl/MonoDevelop.VersionControl.Subversion.Unix/MonoDevelop.VersionControl.Subversion.Unix/LibSvnClient0.cs
@@ -302,7 +302,12 @@ namespace MonoDevelop.VersionControl.Subversion.Unix {
{
return svn_client_get_wc_root (out wcroot_abspath, local_abspath, ctx, result_pool, scratch_pool);
}
-
+
+ public override IntPtr repos_find_root_path (string path, IntPtr pool)
+ {
+ return svn_repos_find_root_path (path, pool);
+ }
+
public override IntPtr strerror (int statcode, byte[] buf, int bufsize)
{
return svn_strerror (statcode, buf, bufsize);
@@ -450,6 +455,8 @@ namespace MonoDevelop.VersionControl.Subversion.Unix {
[DllImport(svnclientlib)] static extern IntPtr svn_client_get_wc_root (out IntPtr wcroot_abspath, string local_abspath, IntPtr ctx, IntPtr result_pool, IntPtr scratch_pool);
+ [DllImport(svnclientlib)] static extern IntPtr svn_repos_find_root_path (string path, IntPtr pool);
+
[DllImport(svnclientlib)] static extern IntPtr svn_strerror (int statcode, byte[] buf, int bufsize);
[DllImport(svnclientlib)] static extern IntPtr svn_path_internal_style (string path, IntPtr pool);
diff --git a/main/src/addins/VersionControl/MonoDevelop.VersionControl.Subversion.Unix/MonoDevelop.VersionControl.Subversion.Unix/LibSvnClient1.cs b/main/src/addins/VersionControl/MonoDevelop.VersionControl.Subversion.Unix/MonoDevelop.VersionControl.Subversion.Unix/LibSvnClient1.cs
index 2a35df1fea..1f51aab8b0 100644
--- a/main/src/addins/VersionControl/MonoDevelop.VersionControl.Subversion.Unix/MonoDevelop.VersionControl.Subversion.Unix/LibSvnClient1.cs
+++ b/main/src/addins/VersionControl/MonoDevelop.VersionControl.Subversion.Unix/MonoDevelop.VersionControl.Subversion.Unix/LibSvnClient1.cs
@@ -303,7 +303,12 @@ namespace MonoDevelop.VersionControl.Subversion.Unix {
{
return svn_client_get_wc_root (out wcroot_abspath, local_abspath, ctx, result_pool, scratch_pool);
}
-
+
+ public override IntPtr repos_find_root_path (string path, IntPtr pool)
+ {
+ return svn_repos_find_root_path (path, pool);
+ }
+
public override IntPtr strerror (int statcode, byte[] buf, int bufsize)
{
return svn_strerror (statcode, buf, bufsize);
@@ -451,6 +456,8 @@ namespace MonoDevelop.VersionControl.Subversion.Unix {
[DllImport(svnclientlib)] static extern IntPtr svn_client_get_wc_root (out IntPtr wcroot_abspath, string local_abspath, IntPtr ctx, IntPtr result_pool, IntPtr scratch_pool);
+ [DllImport(svnclientlib)] static extern IntPtr svn_repos_find_root_path (string path, IntPtr pool);
+
[DllImport(svnclientlib)] static extern IntPtr svn_strerror (int statcode, byte[] buf, int bufsize);
[DllImport(svnclientlib)] static extern IntPtr svn_path_internal_style (string path, IntPtr pool);
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 51aef5eefa..80dfc2b7af 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
@@ -18,8 +18,9 @@ namespace MonoDevelop.VersionControl.Subversion.Unix
public class SvnClient : SubversionVersionControl
{
internal static LibApr apr;
- static Lazy<bool> isInstalled;
+ static readonly Lazy<bool> isInstalled;
internal static LibSvnClient svn;
+ static readonly Lazy<bool> pre_1_7;
internal static void CheckError (IntPtr error)
{
@@ -98,7 +99,19 @@ namespace MonoDevelop.VersionControl.Subversion.Unix
}
return true;
}
-
+
+ internal static bool CheckVersion ()
+ {
+ return GetVersion ().StartsWith ("1.6", StringComparison.Ordinal);
+ }
+
+ public static string GetVersion ()
+ {
+ 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;
+ }
+
static int GetLoadAprLib (int oldVersion)
{
// Get the version of the loaded libapr
@@ -123,9 +136,14 @@ namespace MonoDevelop.VersionControl.Subversion.Unix
get { return isInstalled.Value; }
}
+ public static bool Pre_1_7 {
+ get { return pre_1_7.Value; }
+ }
+
static SvnClient ()
{
isInstalled = new Lazy<bool> (CheckInstalled);
+ pre_1_7 = new Lazy<bool> (CheckVersion);
}
public override SubversionBackend CreateBackend ()
@@ -155,12 +173,16 @@ namespace MonoDevelop.VersionControl.Subversion.Unix
public override string GetDirectoryDotSvn (FilePath path)
{
- UnixSvnBackend backend = CreateBackend () as UnixSvnBackend;
- bool pre_1_7;
- string new_path = backend.GetDirectoryDotSvnInternal (path, out pre_1_7);
- if (pre_1_7)
+ if (Pre_1_7)
return base.GetDirectoryDotSvn (path);
- return new_path;
+
+ IntPtr localpool = newpool (IntPtr.Zero);
+ try {
+ IntPtr res = svn.repos_find_root_path (path, localpool);
+ return Marshal.PtrToStringAnsi (res);
+ } finally {
+ apr.pool_destroy (localpool);
+ }
}
}
@@ -193,7 +215,6 @@ namespace MonoDevelop.VersionControl.Subversion.Unix
return SvnClient.newpool (parent);
}
- bool pre_1_7;
bool disposed = false;
IntPtr auth_baton;
IntPtr pool;
@@ -228,7 +249,6 @@ namespace MonoDevelop.VersionControl.Subversion.Unix
public UnixSvnBackend ()
{
- pre_1_7 = GetVersion ().StartsWith ("1.6", StringComparison.Ordinal);
// Allocate the APR pool and the SVN client context.
pool = newpool (IntPtr.Zero);
@@ -266,7 +286,7 @@ namespace MonoDevelop.VersionControl.Subversion.Unix
(int) Marshal.OffsetOf (typeof (LibSvnClient.svn_client_ctx_t), "config"),
config_hash);
- if (!pre_1_7) {
+ if (!SvnClient.Pre_1_7) {
IntPtr scratch = newpool (IntPtr.Zero);
svn.wc_context_create (out wc_ctx, config_hash, pool, scratch);
Marshal.WriteIntPtr (ctx,
@@ -455,9 +475,7 @@ namespace MonoDevelop.VersionControl.Subversion.Unix
public override string GetVersion ()
{
- 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;
+ return SvnClient.GetVersion ();
}
public override IEnumerable<DirectoryEntry> List (FilePath path, bool recurse, SvnRevision rev)
@@ -1430,39 +1448,6 @@ namespace MonoDevelop.VersionControl.Subversion.Unix
lockFileList.Add (file);
}
- internal string GetDirectoryDotSvnInternal (FilePath path, out bool pre_1_7)
- {
- pre_1_7 = this.pre_1_7;
- if (pre_1_7)
- return "";
-
- IntPtr result;
- IntPtr scratch = newpool (pool);
- var localpool = TryStartOperation (null);
- try {
- string new_path = NormalizePath (path.FullPath, localpool);
- try {
- CheckError (svn.client_get_wc_root (out result, new_path, ctx, localpool, scratch));
- } catch (SubversionException e) {
- // We are not in a working copy.
- switch (e.ErrorCode) {
- // SVN_ERR_WC_NOT_DIRECTORY
- case 155007:
- // SVN_ERR_WC_NOT_FILE
- case 155008:
- return "";
- }
-
- throw;
- }
- return Marshal.PtrToStringAnsi (result);
- } finally {
- apr.pool_destroy (localpool);
- apr.pool_destroy (scratch);
- TryEndOperation ();
- }
- }
-
public class StatusCollector {
ArrayList statuses;