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
diff options
context:
space:
mode:
authorLluis Sanchez <llsan@microsoft.com>2017-04-25 16:08:43 +0300
committerGitHub <noreply@github.com>2017-04-25 16:08:43 +0300
commit16708831000404810632f8c18b25e0020919c040 (patch)
tree99470f8d2a41041690c7d3432b46d7dfec80164b /main/src/addins/VersionControl
parent3c198e743dc4bc82c1972c0f7623bd26f5dc415c (diff)
parent8c444700b1eb57b7a8391866db4cb74804926a0f (diff)
Merge pull request #2261 from mono/svn-mismatch
[Svn] Make unix svn resilient to native crashes
Diffstat (limited to 'main/src/addins/VersionControl')
-rw-r--r--main/src/addins/VersionControl/MonoDevelop.VersionControl.Subversion.Unix/MonoDevelop.VersionControl.Subversion.Unix.csproj1
-rw-r--r--main/src/addins/VersionControl/MonoDevelop.VersionControl.Subversion.Unix/MonoDevelop.VersionControl.Subversion.Unix/LibApr.cs35
-rw-r--r--main/src/addins/VersionControl/MonoDevelop.VersionControl.Subversion.Unix/MonoDevelop.VersionControl.Subversion.Unix/LibSvnClient.cs22
-rw-r--r--main/src/addins/VersionControl/MonoDevelop.VersionControl.Subversion.Unix/MonoDevelop.VersionControl.Subversion.Unix/LibSvnClient2.cs465
4 files changed, 521 insertions, 2 deletions
diff --git a/main/src/addins/VersionControl/MonoDevelop.VersionControl.Subversion.Unix/MonoDevelop.VersionControl.Subversion.Unix.csproj b/main/src/addins/VersionControl/MonoDevelop.VersionControl.Subversion.Unix/MonoDevelop.VersionControl.Subversion.Unix.csproj
index d29c22aec5..401bb059b9 100644
--- a/main/src/addins/VersionControl/MonoDevelop.VersionControl.Subversion.Unix/MonoDevelop.VersionControl.Subversion.Unix.csproj
+++ b/main/src/addins/VersionControl/MonoDevelop.VersionControl.Subversion.Unix/MonoDevelop.VersionControl.Subversion.Unix.csproj
@@ -72,6 +72,7 @@
<Compile Include="MonoDevelop.VersionControl.Subversion.Unix\LibSvnClient0.cs" />
<Compile Include="MonoDevelop.VersionControl.Subversion.Unix\LibSvnClient1.cs" />
<Compile Include="AddinInfo.cs" />
+ <Compile Include="MonoDevelop.VersionControl.Subversion.Unix\LibSvnClient2.cs" />
</ItemGroup>
<ItemGroup>
<Folder Include="MonoDevelop.VersionControl.Subversion.Unix\" />
diff --git a/main/src/addins/VersionControl/MonoDevelop.VersionControl.Subversion.Unix/MonoDevelop.VersionControl.Subversion.Unix/LibApr.cs b/main/src/addins/VersionControl/MonoDevelop.VersionControl.Subversion.Unix/MonoDevelop.VersionControl.Subversion.Unix/LibApr.cs
index 3e77c6a055..8f0716d44c 100644
--- a/main/src/addins/VersionControl/MonoDevelop.VersionControl.Subversion.Unix/MonoDevelop.VersionControl.Subversion.Unix/LibApr.cs
+++ b/main/src/addins/VersionControl/MonoDevelop.VersionControl.Subversion.Unix/MonoDevelop.VersionControl.Subversion.Unix/LibApr.cs
@@ -20,6 +20,8 @@ namespace MonoDevelop.VersionControl.Subversion.Unix
public static LibApr GetLib (int ver)
{
+ if (Core.Platform.IsMac)
+ return new LibApr2 ();
try {
if (ver == 0)
return new LibApr0 ();
@@ -161,4 +163,37 @@ namespace MonoDevelop.VersionControl.Subversion.Unix
[DllImport(aprlib)] static extern int apr_file_open(ref IntPtr newf, string fname, int flag, int perm, IntPtr pool);
[DllImport(aprlib)] static extern int apr_file_close (IntPtr file);
}
+
+ sealed class LibApr2: LibApr
+ {
+ const string aprlib = "__Internal";
+
+ protected override int initialize() { return apr_initialize (); }
+ public override int pool_create_ex (out IntPtr pool, IntPtr parent, IntPtr abort, IntPtr allocator) { return apr_pool_create_ex(out pool, parent, abort, allocator); }
+ public override void pool_destroy(IntPtr pool) { apr_pool_destroy (pool); }
+ public override IntPtr hash_first(IntPtr pool, IntPtr hash) { return apr_hash_first (pool, hash); }
+ public override IntPtr hash_next(IntPtr hashindex) { return apr_hash_next(hashindex); }
+ public override void hash_this(IntPtr hashindex, out IntPtr key, out int keylen, out IntPtr val) { apr_hash_this(hashindex, out key, out keylen, out val); }
+ public override IntPtr hash_get(IntPtr ht, IntPtr key, int klen) { return apr_hash_get (ht, key, klen); }
+ public override IntPtr array_make(IntPtr pool, int nelts, int elt_size) { return apr_array_make(pool, nelts, elt_size); }
+ public override IntPtr array_push(IntPtr arr) { return apr_array_push (arr); }
+ public override IntPtr pstrdup(IntPtr pool, string s) { return apr_pstrdup(pool, s); }
+ public override IntPtr pcalloc (IntPtr pool, [MarshalAs (UnmanagedType.SysInt)] int size) { return apr_pcalloc (pool, size); }
+ public override int file_open(ref IntPtr newf, string fname, int flag, int perm, IntPtr pool) { return apr_file_open(ref newf, fname, flag, perm, pool); }
+ public override int file_close (IntPtr file) { return apr_file_close (file); }
+
+ [DllImport(aprlib)] static extern int apr_initialize();
+ [DllImport(aprlib)] static extern int apr_pool_create_ex(out IntPtr pool, IntPtr parent, IntPtr abort, IntPtr allocator);
+ [DllImport(aprlib)] static extern void apr_pool_destroy(IntPtr pool);
+ [DllImport(aprlib)] static extern IntPtr apr_hash_first(IntPtr pool, IntPtr hash);
+ [DllImport(aprlib)] static extern IntPtr apr_hash_next(IntPtr hashindex);
+ [DllImport(aprlib)] static extern void apr_hash_this(IntPtr hashindex, out IntPtr key, out int keylen, out IntPtr val);
+ [DllImport(aprlib)] static extern IntPtr apr_hash_get(IntPtr ht, IntPtr key, int klen);
+ [DllImport(aprlib)] static extern IntPtr apr_array_make(IntPtr pool, int nelts, int elt_size);
+ [DllImport(aprlib)] static extern IntPtr apr_array_push(IntPtr arr);
+ [DllImport(aprlib)] static extern IntPtr apr_pstrdup(IntPtr pool, string s);
+ [DllImport(aprlib)] static extern IntPtr apr_pcalloc(IntPtr pool, [MarshalAs (UnmanagedType.SysInt)] int size);
+ [DllImport(aprlib)] static extern int apr_file_open(ref IntPtr newf, string fname, int flag, int perm, IntPtr pool);
+ [DllImport(aprlib)] static extern int apr_file_close (IntPtr file);
+ }
}
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 c331c3b3da..3d284564b7 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
@@ -17,12 +17,30 @@ namespace MonoDevelop.VersionControl.Subversion.Unix {
{
client_version ();
}
-
+
+ [DllImport ("libc")]
+ extern static IntPtr dlopen (string name, int mode);
+
public static LibSvnClient GetLib ()
{
+ // Here be linker dragons.
+ // Due to the way the mono dlloader works, and how svn is architected we need to manually load libsvn_client
+ // Because libsvn_client relies on apr_initialize being called, we need to get the right apr dependency.
+ // Letting mono resolve both libraries separately will only load libsvn_client's deps when needed,
+ // Thus it'll end up loading the wrong libapr in the case of Mac.
+ // We rely on using Xcode's libsvn_client, so if that isn't found or the license hasn't been accepted,
+ // it'll be skipped. If svn is installed from somewhere else (most commonly via brew), we end up loading
+ // brew's libsvn_client and the system libapr, which are mismatched on dependency versions causing a native
+ // crash. dlopen-ining libsvn_client allows us to handle the right mix-match of svn and apr, since it loads
+ // apr via the linker flags on the binary.
+ if (Core.Platform.IsMac) {
+ if (dlopen ("libsvn_client-1.0.dylib", 0x1) == IntPtr.Zero)
+ return null;
+ return new LibSvnClient2 ();
+ }
try {
return new LibSvnClient0 ();
- } catch {}
+ } catch { }
try {
return new LibSvnClient1 ();
diff --git a/main/src/addins/VersionControl/MonoDevelop.VersionControl.Subversion.Unix/MonoDevelop.VersionControl.Subversion.Unix/LibSvnClient2.cs b/main/src/addins/VersionControl/MonoDevelop.VersionControl.Subversion.Unix/MonoDevelop.VersionControl.Subversion.Unix/LibSvnClient2.cs
new file mode 100644
index 0000000000..35c01c3c5f
--- /dev/null
+++ b/main/src/addins/VersionControl/MonoDevelop.VersionControl.Subversion.Unix/MonoDevelop.VersionControl.Subversion.Unix/LibSvnClient2.cs
@@ -0,0 +1,465 @@
+//
+// LibSvnClient2.cs
+//
+// Author:
+// Jeffrey Stedfast <jeff@xamarin.com>
+// Alan McGovern <alan@xamarin.com>
+//
+// Copyright (c) 2012 Xamarin Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.Runtime.InteropServices;
+
+using svn_revnum_t = System.IntPtr;
+
+namespace MonoDevelop.VersionControl.Subversion.Unix {
+
+ sealed class LibSvnClient2 : LibSvnClient {
+ const string svnclientlib = "__Internal";
+
+ public override IntPtr client_root_url_from_path (ref IntPtr url, string path_or_url, IntPtr ctx, IntPtr pool)
+ {
+ return svn_client_root_url_from_path (ref url, path_or_url, ctx, pool);
+ }
+
+ public override IntPtr config_ensure (string config_dir, IntPtr pool)
+ {
+ return svn_config_ensure (config_dir, pool);
+ }
+
+ public override IntPtr config_get_config (ref IntPtr cfg_hash, string config_dir, IntPtr pool)
+ {
+ return svn_config_get_config (ref cfg_hash, config_dir, pool);
+ }
+
+ public override void auth_open (out IntPtr auth_baton, IntPtr providers, IntPtr pool)
+ {
+ svn_auth_open (out auth_baton, providers, pool);
+ }
+
+ public override void auth_set_parameter (IntPtr auth_baton, string name, IntPtr value)
+ {
+ svn_auth_set_parameter (auth_baton, name, value);
+ }
+
+ public override IntPtr auth_get_parameter (IntPtr auth_baton, string name)
+ {
+ return svn_auth_get_parameter (auth_baton, name);
+ }
+
+ public override void client_get_simple_provider (IntPtr item, IntPtr pool)
+ {
+ svn_client_get_simple_provider (item, pool);
+ }
+
+ public override void client_get_simple_prompt_provider (IntPtr item, svn_auth_simple_prompt_func_t prompt_func, IntPtr prompt_batton, int retry_limit, IntPtr pool)
+ {
+ svn_client_get_simple_prompt_provider (item, prompt_func, prompt_batton, retry_limit, pool);
+ }
+
+ public override void client_get_username_provider (IntPtr item, IntPtr pool)
+ {
+ svn_client_get_username_provider (item, pool);
+ }
+
+ public override void client_get_username_prompt_provider (IntPtr item, svn_auth_username_prompt_func_t prompt_func, IntPtr prompt_batton, int retry_limit, IntPtr pool)
+ {
+ svn_client_get_username_prompt_provider (item, prompt_func, prompt_batton, retry_limit, pool);
+ }
+
+ public override void client_get_ssl_server_trust_file_provider (IntPtr item, IntPtr pool)
+ {
+ svn_client_get_ssl_server_trust_file_provider (item, pool);
+ }
+
+ public override void client_get_ssl_client_cert_file_provider (IntPtr item, IntPtr pool)
+ {
+ svn_client_get_ssl_client_cert_file_provider (item, pool);
+ }
+
+ public override void client_get_ssl_client_cert_pw_file_provider (IntPtr item, IntPtr pool)
+ {
+ svn_client_get_ssl_client_cert_pw_file_provider (item, pool);
+ }
+
+ public override void client_get_ssl_server_trust_prompt_provider (IntPtr item, svn_auth_ssl_server_trust_prompt_func_t prompt_func, IntPtr prompt_batton, IntPtr pool)
+ {
+ svn_client_get_ssl_server_trust_prompt_provider (item, prompt_func, prompt_batton, pool);
+ }
+
+ public override void client_get_ssl_client_cert_prompt_provider (IntPtr item, svn_auth_ssl_client_cert_prompt_func_t prompt_func, IntPtr prompt_batton, int retry_limit, IntPtr pool)
+ {
+ svn_client_get_ssl_client_cert_prompt_provider (item, prompt_func, prompt_batton, retry_limit, pool);
+ }
+
+ public override void client_get_ssl_client_cert_pw_prompt_provider (IntPtr item, svn_auth_ssl_client_cert_pw_prompt_func_t prompt_func, IntPtr prompt_batton, int retry_limit, IntPtr pool)
+ {
+ svn_client_get_ssl_client_cert_pw_prompt_provider (item, prompt_func, prompt_batton, retry_limit, pool);
+ }
+
+ public override IntPtr client_version ()
+ {
+ return svn_client_version ();
+ }
+
+ public override IntPtr client_create_context (out IntPtr ctx, IntPtr pool)
+ {
+ return svn_client_create_context (out ctx, pool);
+ }
+
+ public override IntPtr client_ls (out IntPtr dirents, string path_or_url,
+ ref Rev revision, bool recurse, IntPtr ctx,
+ IntPtr pool)
+ {
+ return svn_client_ls (out dirents, path_or_url, ref revision, recurse, ctx, pool);
+ }
+
+ public override IntPtr client_status (IntPtr result_rev, string path, ref Rev revision,
+ svn_wc_status_func2_t status_func, IntPtr status_baton,
+ bool recurse, bool get_all, bool update, bool no_ignore,
+ bool ignore_externals, IntPtr ctx, IntPtr pool)
+ {
+ return svn_client_status2 (result_rev, path, ref revision, status_func,
+ status_baton, recurse, get_all, update,
+ no_ignore, ignore_externals, ctx, pool);
+ }
+
+ public override IntPtr client_log (IntPtr apr_array_header_t_targets,
+ ref Rev rev_start, ref Rev rev_end,
+ bool discover_changed_paths,
+ bool strict_node_history,
+ svn_log_message_receiver_t receiver,
+ IntPtr receiver_baton,
+ IntPtr ctx, IntPtr pool)
+ {
+ return svn_client_log (apr_array_header_t_targets, ref rev_start, ref rev_end,
+ discover_changed_paths, strict_node_history, receiver,
+ receiver_baton,ctx, pool);
+ }
+
+ public override IntPtr time_from_cstring (out long aprtime, string time, IntPtr pool)
+ {
+ return svn_time_from_cstring (out aprtime, time, pool);
+ }
+
+ public override IntPtr client_url_from_path (ref IntPtr url, string path_or_url, IntPtr pool)
+ {
+ return svn_client_url_from_path (ref url, path_or_url, pool);
+ }
+
+ public override IntPtr client_cat2 (IntPtr stream, string path_or_url,
+ ref Rev peg_revision,
+ ref Rev revision,
+ IntPtr ctx, IntPtr pool)
+ {
+ return svn_client_cat2 (stream, path_or_url, ref peg_revision, ref revision, ctx, pool);
+ }
+
+ public override IntPtr stream_create (IntPtr baton, IntPtr pool)
+ {
+ return svn_stream_create (baton, pool);
+ }
+
+ //public override IntPtr stream_set_read (IntPtr stream, svn_readwrite_fn_t reader);
+
+ public override void stream_set_write (IntPtr stream, svn_readwrite_fn_t writer)
+ {
+ svn_stream_set_write (stream, writer);
+ }
+
+ public override IntPtr client_update (svn_revnum_t result_rev, string path, ref Rev revision,
+ bool recurse, IntPtr ctx, IntPtr pool)
+ {
+ return svn_client_update (result_rev, path, ref revision, recurse, ctx, pool);
+ }
+
+ public override IntPtr client_delete (ref IntPtr commit_info_p, IntPtr apr_array_header_t_targets,
+ bool force, IntPtr ctx, IntPtr pool)
+ {
+ return svn_client_delete (ref commit_info_p, apr_array_header_t_targets, force, ctx, pool);
+ }
+
+ public override IntPtr client_add3 (string path, bool recurse, bool force, bool no_ignore, IntPtr ctx, IntPtr pool)
+ {
+ return svn_client_add3 (path, recurse, force, no_ignore, ctx, pool);
+ }
+
+ public override IntPtr client_commit (ref IntPtr svn_client_commit_info_t_commit_info,
+ IntPtr apr_array_header_t_targets,
+ bool nonrecursive,
+ IntPtr ctx, IntPtr pool)
+ {
+ return svn_client_commit (ref svn_client_commit_info_t_commit_info, apr_array_header_t_targets,
+ nonrecursive, ctx, pool);
+ }
+
+ public override IntPtr client_revert (IntPtr apr_array_header_t_targets, bool recursive,
+ IntPtr ctx, IntPtr pool)
+ {
+ return svn_client_revert (apr_array_header_t_targets, recursive, ctx, pool);
+ }
+
+ public override IntPtr client_resolved (string path, bool recursive, IntPtr ctx, IntPtr pool)
+ {
+ return svn_client_resolved (path, recursive, ctx, pool);
+ }
+
+ public override IntPtr client_move (ref IntPtr commit_info_p, string srcPath, ref Rev rev,
+ string destPath, bool force, IntPtr ctx, IntPtr pool)
+ {
+ return svn_client_move (ref commit_info_p, srcPath, ref rev, destPath, force, ctx, pool);
+ }
+
+ public override IntPtr client_checkout (IntPtr result_rev, string url, string path, ref Rev rev,
+ bool recurse, IntPtr ctx, IntPtr pool)
+ {
+ return svn_client_checkout (result_rev, url, path, ref rev, recurse, ctx, pool);
+ }
+
+ public override IntPtr client_mkdir2 (ref IntPtr commit_info, IntPtr apr_array_paths, IntPtr ctx, IntPtr pool)
+ {
+ return svn_client_mkdir2 (ref commit_info, apr_array_paths, ctx, pool);
+ }
+
+ public override IntPtr client_diff (IntPtr diff_options, string path1, ref Rev revision1,
+ string path2, ref Rev revision2, bool recurse,
+ bool ignore_ancestry, bool no_diff_deleted,
+ IntPtr outfile, IntPtr errfile,
+ IntPtr ctx, IntPtr pool)
+ {
+ return svn_client_diff (diff_options, path1, ref revision1, path2, ref revision2, recurse, ignore_ancestry,
+ no_diff_deleted, outfile, errfile, ctx, pool);
+ }
+
+ public override IntPtr client_merge_peg2 (
+ string source,
+ ref Rev revision1,
+ ref Rev revision2,
+ ref Rev peg_revision,
+ string target_wcpath,
+ bool recurse,
+ bool ignore_ancestry,
+ bool force,
+ bool dry_run,
+ IntPtr merge_options,
+ IntPtr ctx,
+ IntPtr pool)
+ {
+ // svn_boolean_t == int
+ return svn_client_merge_peg2 (source, ref revision1, ref revision2, ref peg_revision, target_wcpath,
+ recurse ? 1: 0, ignore_ancestry ? 1 : 0, force ? 1 : 0, dry_run ? 1 : 0,
+ merge_options, ctx, pool);
+ }
+
+ public override IntPtr client_lock (IntPtr apr_array_header_t_targets, string comment, bool steal_lock, IntPtr ctx, IntPtr pool)
+ {
+ return svn_client_lock (apr_array_header_t_targets, comment, steal_lock, ctx, pool);
+ }
+
+ public override IntPtr client_unlock (IntPtr apr_array_header_t_targets, bool break_lock, IntPtr ctx, IntPtr pool)
+ {
+ return svn_client_unlock (apr_array_header_t_targets, break_lock, ctx, pool);
+ }
+
+ public override IntPtr client_propget (out IntPtr value, string name, string target, ref Rev revision, bool recurse, IntPtr ctx, IntPtr pool)
+ {
+ return svn_client_propget (out value, name, target, ref revision, recurse, ctx, pool);
+ }
+
+ public override IntPtr client_propset (string propname, IntPtr propval, string target, bool recurse, IntPtr pool)
+ {
+ return svn_client_propset (propname, propval, target, recurse, pool);
+ }
+
+ public override IntPtr client_blame (string path, ref Rev rev_start, ref Rev rev_end, svn_client_blame_receiver_t receiver, System.IntPtr baton, System.IntPtr ctx, System.IntPtr pool)
+ {
+ return svn_client_blame (path, ref rev_start, ref rev_end, receiver, baton, ctx, pool);
+ }
+
+ public override IntPtr wc_context_create (out IntPtr svn_wc_context_t, IntPtr config, IntPtr result_pool, IntPtr scratch_pool)
+ {
+ return svn_wc_context_create (out svn_wc_context_t, config, result_pool, scratch_pool);
+ }
+
+ public override IntPtr client_get_wc_root (out IntPtr wcroot_abspath, string local_abspath, IntPtr ctx, IntPtr result_pool, IntPtr scratch_pool)
+ {
+ return svn_client_get_wc_root (out wcroot_abspath, local_abspath, ctx, result_pool, scratch_pool);
+ }
+
+ public override IntPtr strerror (int statcode, byte[] buf, int bufsize)
+ {
+ return svn_strerror (statcode, buf, bufsize);
+ }
+
+ public override IntPtr path_internal_style (string path, IntPtr pool)
+ {
+ return svn_path_internal_style (path, pool);
+ }
+
+ public override IntPtr client_upgrade (string wcroot_dir, IntPtr ctx, IntPtr scratch_pool)
+ {
+ return svn_client_upgrade (wcroot_dir, ctx, scratch_pool);
+ }
+
+ [DllImport(svnclientlib)] static extern IntPtr svn_client_root_url_from_path (ref IntPtr url, string path_or_url, IntPtr ctx, IntPtr pool);
+ [DllImport(svnclientlib)] static extern IntPtr svn_config_ensure (string config_dir, IntPtr pool);
+ [DllImport(svnclientlib)] static extern IntPtr svn_config_get_config (ref IntPtr cfg_hash, string config_dir, IntPtr pool);
+ [DllImport(svnclientlib)] static extern void svn_auth_open (out IntPtr auth_baton, IntPtr providers, IntPtr pool);
+ [DllImport(svnclientlib)] static extern void svn_auth_set_parameter (IntPtr auth_baton, string name, IntPtr value);
+ [DllImport(svnclientlib)] static extern IntPtr svn_auth_get_parameter (IntPtr auth_baton, string name);
+ [DllImport(svnclientlib)] static extern void svn_client_get_simple_provider (IntPtr item, IntPtr pool);
+ [DllImport(svnclientlib)] static extern void svn_client_get_simple_prompt_provider (IntPtr item, svn_auth_simple_prompt_func_t prompt_func, IntPtr prompt_batton, int retry_limit, IntPtr pool);
+ [DllImport(svnclientlib)] static extern void svn_client_get_username_provider (IntPtr item, IntPtr pool);
+ [DllImport(svnclientlib)] static extern void svn_client_get_username_prompt_provider (IntPtr item, svn_auth_username_prompt_func_t prompt_func, IntPtr prompt_batton, int retry_limit, IntPtr pool);
+ [DllImport(svnclientlib)] static extern void svn_client_get_ssl_server_trust_file_provider (IntPtr item, IntPtr pool);
+ [DllImport(svnclientlib)] static extern void svn_client_get_ssl_client_cert_file_provider (IntPtr item, IntPtr pool);
+ [DllImport(svnclientlib)] static extern void svn_client_get_ssl_client_cert_pw_file_provider (IntPtr item, IntPtr pool);
+ [DllImport(svnclientlib)] static extern void svn_client_get_ssl_server_trust_prompt_provider (IntPtr item, svn_auth_ssl_server_trust_prompt_func_t prompt_func, IntPtr prompt_batton, IntPtr pool);
+ [DllImport(svnclientlib)] static extern void svn_client_get_ssl_client_cert_prompt_provider (IntPtr item, svn_auth_ssl_client_cert_prompt_func_t prompt_func, IntPtr prompt_batton, int retry_limit, IntPtr pool);
+ [DllImport(svnclientlib)] static extern void svn_client_get_ssl_client_cert_pw_prompt_provider (IntPtr item, svn_auth_ssl_client_cert_pw_prompt_func_t prompt_func, IntPtr prompt_batton, int retry_limit, IntPtr pool);
+
+ [DllImport(svnclientlib)] static extern IntPtr svn_client_version();
+
+ [DllImport(svnclientlib)] static extern IntPtr svn_client_create_context(out IntPtr ctx, IntPtr pool);
+
+ [DllImport(svnclientlib)] static extern IntPtr svn_client_ls (out IntPtr dirents, string path_or_url,
+ ref Rev revision, [MarshalAs (UnmanagedType.Bool)] bool recurse,
+ IntPtr ctx, IntPtr pool);
+
+ [DllImport(svnclientlib)] static extern IntPtr svn_client_status2 (IntPtr svn_revnum_t, string path, ref Rev revision,
+ svn_wc_status_func2_t status_func, IntPtr status_baton,
+ [MarshalAs (UnmanagedType.Bool)] bool recurse,
+ [MarshalAs (UnmanagedType.Bool)] bool get_all,
+ [MarshalAs (UnmanagedType.Bool)] bool update,
+ [MarshalAs (UnmanagedType.Bool)] bool no_ignore,
+ [MarshalAs (UnmanagedType.Bool)] bool ignore_externals,
+ IntPtr ctx, IntPtr pool);
+
+ [DllImport(svnclientlib)] static extern IntPtr svn_client_log (IntPtr apr_array_header_t_targets,
+ ref Rev rev_start, ref Rev rev_end,
+ [MarshalAs (UnmanagedType.Bool)] bool discover_changed_paths,
+ [MarshalAs (UnmanagedType.Bool)] bool strict_node_history,
+ svn_log_message_receiver_t receiver,
+ IntPtr receiver_baton,
+ IntPtr ctx, IntPtr pool);
+
+ [DllImport(svnclientlib)] static extern IntPtr svn_time_from_cstring (out long aprtime, string time, IntPtr pool);
+
+ [DllImport(svnclientlib)] static extern IntPtr svn_client_url_from_path (ref IntPtr url, string path_or_url, IntPtr pool);
+
+ [DllImport(svnclientlib)] static extern IntPtr svn_client_cat2 (IntPtr stream, string path_or_url,
+ ref Rev peg_revision,
+ ref Rev revision,
+ IntPtr ctx, IntPtr pool);
+
+ [DllImport(svnclientlib)] static extern IntPtr svn_stream_create (IntPtr baton, IntPtr pool);
+
+ //[DllImport(svnclientlib)] static extern IntPtr svn_stream_set_read (IntPtr stream, svn_readwrite_fn_t reader);
+
+ [DllImport(svnclientlib)] static extern void svn_stream_set_write (IntPtr stream, svn_readwrite_fn_t writer);
+
+ [DllImport(svnclientlib)] static extern IntPtr svn_client_update (svn_revnum_t result_rev, string path, ref Rev revision,
+ [MarshalAs (UnmanagedType.Bool)] bool recurse,
+ IntPtr ctx, IntPtr pool);
+
+ [DllImport(svnclientlib)] static extern IntPtr svn_client_delete (ref IntPtr commit_info_p, IntPtr apr_array_header_t_targets,
+ [MarshalAs (UnmanagedType.Bool)] bool force, IntPtr ctx, IntPtr pool);
+
+ [DllImport(svnclientlib)] static extern IntPtr svn_client_add3 (string path, [MarshalAs (UnmanagedType.Bool)] bool recurse,
+ [MarshalAs (UnmanagedType.Bool)] bool force,
+ [MarshalAs (UnmanagedType.Bool)] bool no_ignore,
+ IntPtr ctx, IntPtr pool);
+
+ [DllImport(svnclientlib)] static extern IntPtr svn_client_commit (ref IntPtr svn_client_commit_info_t_commit_info,
+ IntPtr apr_array_header_t_targets,
+ [MarshalAs (UnmanagedType.Bool)] bool nonrecursive,
+ IntPtr ctx, IntPtr pool);
+
+ [DllImport(svnclientlib)] static extern IntPtr svn_client_revert (IntPtr apr_array_header_t_targets,
+ [MarshalAs (UnmanagedType.Bool)] bool recursive,
+ IntPtr ctx, IntPtr pool);
+
+ [DllImport(svnclientlib)] static extern IntPtr svn_client_resolved (string path,
+ [MarshalAs (UnmanagedType.Bool)] bool recursive,
+ IntPtr ctx, IntPtr pool);
+
+ [DllImport(svnclientlib)] static extern IntPtr svn_client_move (ref IntPtr commit_info_p, string srcPath, ref Rev rev,
+ string destPath, [MarshalAs (UnmanagedType.Bool)] bool force,
+ IntPtr ctx, IntPtr pool);
+
+ [DllImport(svnclientlib)] static extern IntPtr svn_client_checkout (IntPtr result_rev, string url, string path, ref Rev rev,
+ [MarshalAs (UnmanagedType.Bool)] bool recurse,
+ IntPtr ctx, IntPtr pool);
+
+ [DllImport(svnclientlib)] static extern IntPtr svn_client_mkdir2 (ref IntPtr commit_info, IntPtr apr_array_paths, IntPtr ctx, IntPtr pool);
+
+ [DllImport(svnclientlib)] static extern IntPtr svn_client_diff (IntPtr diff_options, string path1,
+ ref Rev revision1, string path2,
+ ref Rev revision2, [MarshalAs (UnmanagedType.Bool)] bool recurse,
+ [MarshalAs (UnmanagedType.Bool)] bool ignore_ancestry,
+ [MarshalAs (UnmanagedType.Bool)] bool no_diff_deleted,
+ IntPtr outfile,
+ IntPtr errfile,
+ IntPtr ctx,
+ IntPtr pool);
+
+ [DllImport(svnclientlib)] static extern IntPtr svn_client_merge_peg2 (string source,
+ ref Rev revision1,
+ ref Rev revision2,
+ ref Rev peg_revision,
+ string target_wcpath,
+ int recurse,
+ int ignore_ancestry,
+ int force,
+ int dry_run,
+ IntPtr merge_options,
+ IntPtr ctx,
+ IntPtr pool);
+
+ [DllImport(svnclientlib)] static extern IntPtr svn_client_lock (IntPtr apr_array_header_t_targets, string comment,
+ [MarshalAs (UnmanagedType.Bool)] bool steal_lock,
+ IntPtr ctx, IntPtr pool);
+
+ [DllImport(svnclientlib)] static extern IntPtr svn_client_unlock (IntPtr apr_array_header_t_targets,
+ [MarshalAs (UnmanagedType.Bool)] bool break_lock,
+ IntPtr ctx, IntPtr pool);
+
+ [DllImport(svnclientlib)] static extern IntPtr svn_client_propget (out IntPtr value, string name, string target,
+ ref Rev revision,
+ [MarshalAs (UnmanagedType.Bool)] bool recurse,
+ IntPtr ctx, IntPtr pool);
+
+ [DllImport(svnclientlib)] static extern IntPtr svn_client_propset (string propname, IntPtr propval, string target,
+ [MarshalAs (UnmanagedType.Bool)] bool recurse, IntPtr pool);
+
+ [DllImport(svnclientlib)] static extern IntPtr svn_client_blame (string path, ref Rev rev_start, ref Rev rev_end, svn_client_blame_receiver_t receiver, IntPtr baton, IntPtr ctx, IntPtr pool);
+
+ [DllImport(svnclientlib)] static extern IntPtr svn_wc_context_create (out IntPtr svn_wc_context_t, IntPtr svn_config_ensure, IntPtr result_pool, IntPtr scratch_pool);
+
+ [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_strerror (int statcode, byte[] buf, int bufsize);
+
+ [DllImport(svnclientlib)] static extern IntPtr svn_path_internal_style (string path, IntPtr pool);
+
+ [DllImport(svnclientlib)] static extern IntPtr svn_client_upgrade (string wcroot_dir, IntPtr ctx, IntPtr scratch_pool);
+ }
+} \ No newline at end of file