You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by br...@apache.org on 2013/06/19 17:54:23 UTC
svn commit: r1494670 - in /subversion/branches/javahl-1.8-extensions: ./
subversion/bindings/javahl/ subversion/bindings/javahl/native/
subversion/bindings/javahl/src/org/apache/subversion/javahl/
subversion/bindings/javahl/src/org/apache/subversion/ja...
Author: brane
Date: Wed Jun 19 15:54:22 2013
New Revision: 1494670
URL: http://svn.apache.org/r1494670
Log:
On the javahl-1.8-extensions branch:
Sync JavaHL changes from trunk up to r1494655.
Added:
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/OperationContext.cpp
- copied unchanged from r1494655, subversion/trunk/subversion/bindings/javahl/native/OperationContext.cpp
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/OperationContext.h
- copied unchanged from r1494655, subversion/trunk/subversion/bindings/javahl/native/OperationContext.h
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/RemoteSession.cpp
- copied unchanged from r1494655, subversion/trunk/subversion/bindings/javahl/native/RemoteSession.cpp
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/RemoteSession.h
- copied unchanged from r1494655, subversion/trunk/subversion/bindings/javahl/native/RemoteSession.h
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/RemoteSessionContext.cpp
- copied unchanged from r1494655, subversion/trunk/subversion/bindings/javahl/native/RemoteSessionContext.cpp
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/RemoteSessionContext.h
- copied unchanged from r1494655, subversion/trunk/subversion/bindings/javahl/native/RemoteSessionContext.h
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/org_apache_subversion_javahl_remote_RemoteFactory.cpp
- copied unchanged from r1494655, subversion/trunk/subversion/bindings/javahl/native/org_apache_subversion_javahl_remote_RemoteFactory.cpp
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/org_apache_subversion_javahl_remote_RemoteSession.cpp
- copied unchanged from r1494655, subversion/trunk/subversion/bindings/javahl/native/org_apache_subversion_javahl_remote_RemoteSession.cpp
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNEditor.java
- copied unchanged from r1494655, subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNEditor.java
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNRemote.java
- copied unchanged from r1494655, subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNRemote.java
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/JNIObject.java
- copied unchanged from r1494655, subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/JNIObject.java
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/OperationContext.java
- copied unchanged from r1494655, subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/OperationContext.java
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/remote/
- copied from r1494655, subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/remote/
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/tests/org/apache/subversion/javahl/SVNRemoteTests.java
- copied unchanged from r1494655, subversion/trunk/subversion/bindings/javahl/tests/org/apache/subversion/javahl/SVNRemoteTests.java
Modified:
subversion/branches/javahl-1.8-extensions/build.conf
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/ (props changed)
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/ClientContext.cpp
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/ClientContext.h
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/CreateJ.cpp
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/CreateJ.h
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/JNIUtil.cpp
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/JNIUtil.h
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/Prompter.cpp
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/RevpropTable.cpp
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/RevpropTable.h
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/SVNBase.cpp
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/SVNBase.h
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/SVNClient.cpp
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/SVNClient.h
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNClient.cpp
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNClient.java
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNClient.java
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/tests/org/apache/subversion/javahl/RunTests.java
Modified: subversion/branches/javahl-1.8-extensions/build.conf
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-1.8-extensions/build.conf?rev=1494670&r1=1494669&r2=1494670&view=diff
==============================================================================
--- subversion/branches/javahl-1.8-extensions/build.conf (original)
+++ subversion/branches/javahl-1.8-extensions/build.conf Wed Jun 19 15:54:22 2013
@@ -64,6 +64,8 @@ private-built-includes =
subversion/bindings/javahl/include/org_apache_subversion_javahl_types_VersionExtended_LoadedLibIterator.h
subversion/bindings/javahl/include/org_apache_subversion_javahl_types_Revision.h
subversion/bindings/javahl/include/org_apache_subversion_javahl_callback_UserPasswordCallback.h
+ subversion/bindings/javahl/include/org_apache_subversion_javahl_remote_RemoteSession.h
+ subversion/bindings/javahl/include/org_apache_subversion_javahl_remote_RemoteFactory.h
test-scripts =
@@ -539,6 +541,7 @@ type = java
path = subversion/bindings/javahl/src/org/apache/subversion/javahl
subversion/bindings/javahl/src/org/apache/subversion/javahl/callback
subversion/bindings/javahl/src/org/apache/subversion/javahl/types
+ subversion/bindings/javahl/src/org/apache/subversion/javahl/remote
src-root = subversion/bindings/javahl/src
sources = *.java
install = javahl-java
@@ -593,6 +596,17 @@ add-deps = $(javahl_java_DEPS)
install = javahl-javah
link-cmd = $(COMPILE_JAVAHL_JAVAH) -force
+[javahl-remote-javah]
+type = javah
+path = subversion/bindings/javahl/src/org/apache/subversion/javahl/remote
+classes = subversion/bindings/javahl/classes
+headers = subversion/bindings/javahl/include
+package = org.apache.subversion.javahl.remote
+sources = *.java
+add-deps = $(javahl_java_DEPS)
+install = javahl-javah
+link-cmd = $(COMPILE_JAVAHL_JAVAH) -force
+
[javahl-callback-javah]
type = javah
path = subversion/bindings/javahl/src/org/apache/subversion/javahl/callback
@@ -622,7 +636,7 @@ path = subversion/bindings/javahl/native
libs = libsvn_repos libsvn_client libsvn_wc libsvn_ra libsvn_delta libsvn_diff
libsvn_subr libsvn_fs aprutil apriconv apr
sources = *.cpp *.c
-add-deps = $(javahl_javah_DEPS) $(javahl_java_DEPS) $(javahl_callback_javah_DEPS) $(javahl_types_javah_DEPS)
+add-deps = $(javahl_javah_DEPS) $(javahl_java_DEPS) $(javahl_callback_javah_DEPS) $(javahl_types_javah_DEPS) $(javahl_remote_javah_DEPS)
install = javahl-lib
# need special build rule to include -I$(JDK)/include/jni.h
compile-cmd = $(COMPILE_JAVAHL_CXX)
Propchange: subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/
------------------------------------------------------------------------------
--- svn:mergeinfo (added)
+++ svn:mergeinfo Wed Jun 19 15:54:22 2013
@@ -0,0 +1,79 @@
+/subversion/branches/1.5.x-r30215/subversion/bindings/javahl:870312
+/subversion/branches/1.7.x-fs-verify/subversion/bindings/javahl:1146708,1161180
+/subversion/branches/1.8.x/subversion/bindings/javahl:1483275-1494630
+/subversion/branches/1.8.x-libsvnjavahl-version/subversion/bindings/javahl:1483910-1485054
+/subversion/branches/1.8.x-r1477876/subversion/bindings/javahl:1477981-1487716
+/subversion/branches/1.8.x-r1481625/subversion/bindings/javahl:1481637-1482135
+/subversion/branches/1.8.x-svn_fs_info-removal/subversion/bindings/javahl:1467420-1468159
+/subversion/branches/10Gb/subversion/bindings/javahl:1388102,1388163-1388190,1388195,1388202,1388205,1388211,1388276,1388362,1388375,1388394,1388636,1388639-1388640,1388643-1388644,1388654,1388720,1388789,1388795,1388801,1388805,1388807,1388810,1388816,1389044,1389276,1389289,1389662,1389867,1390017,1390209,1390216,1390407,1390409,1390414,1390419,1390955
+/subversion/branches/atomic-revprop/subversion/bindings/javahl:965046-1000689
+/subversion/branches/auto-props-sdc/subversion/bindings/javahl:1384106-1401643
+/subversion/branches/bdb-reverse-deltas/subversion/bindings/javahl:872050-872529
+/subversion/branches/diff-callbacks3/subversion/bindings/javahl:870059-870761
+/subversion/branches/diff-optimizations/subversion/bindings/javahl:1031270-1037352
+/subversion/branches/diff-optimizations-bytes/subversion/bindings/javahl:1037353-1067789
+/subversion/branches/dont-save-plaintext-passwords-by-default/subversion/bindings/javahl:870728-871118
+/subversion/branches/double-delete/subversion/bindings/javahl:870511-872970
+/subversion/branches/ev2-export/subversion/bindings/javahl:1325914,1332738,1413107
+/subversion/branches/explore-wc/subversion/bindings/javahl:875486,875493,875497,875507,875511,875514,875559,875580-875581,875584,875587,875611,875627,875647,875667-875668,875711-875712,875733-875734,875736,875744-875748,875751,875758,875782,875795-875796,875830,875836,875838,875842,875852,875855,875864,875870,875873,875880,875885-875888,875890,875897-875898,875905,875907-875909,875935,875943-875944,875946,875979,875982-875983,875985-875986,875990,875997
+/subversion/branches/file-externals/subversion/bindings/javahl:871779-873302
+/subversion/branches/fs-rep-sharing/subversion/bindings/javahl:869036-873803
+/subversion/branches/fsfs-pack/subversion/bindings/javahl:873717-874575
+/subversion/branches/gnome-keyring/subversion/bindings/javahl:870558-871410
+/subversion/branches/gpg-agent-password-store/subversion/bindings/javahl:1005036-1150766
+/subversion/branches/http-protocol-v2/subversion/bindings/javahl:874395-876041
+/subversion/branches/in-memory-cache/subversion/bindings/javahl:869829-871452
+/subversion/branches/in-repo-authz/subversion/bindings/javahl:1414342-1424779
+/subversion/branches/inheritable-props/subversion/bindings/javahl:1297080-1395089
+/subversion/branches/integrate-cache-item-serialization/subversion/bindings/javahl:1068724-1068739
+/subversion/branches/integrate-cache-membuffer/subversion/bindings/javahl:998649-998852
+/subversion/branches/integrate-compression-level/subversion/bindings/javahl:1068651-1072287
+/subversion/branches/integrate-io-improvements/subversion/bindings/javahl:1068684-1072297
+/subversion/branches/integrate-is-cachable/subversion/bindings/javahl:1072568-1074082
+/subversion/branches/integrate-partial-getter/subversion/bindings/javahl:1072558-1076552
+/subversion/branches/integrate-readline-speedup/subversion/bindings/javahl:1072553-1072555
+/subversion/branches/integrate-stream-api-extensions/subversion/bindings/javahl:1068695-1072516
+/subversion/branches/integrate-string-improvements/subversion/bindings/javahl:1068251-1190617
+/subversion/branches/integrate-txdelta-caching/subversion/bindings/javahl:1072541-1078213
+/subversion/branches/issue-2779-dev/subversion/bindings/javahl:965496-984198
+/subversion/branches/issue-2843-dev/subversion/bindings/javahl:871432-874179
+/subversion/branches/issue-3000/subversion/bindings/javahl:871713,871716-871719,871721-871726,871728,871734
+/subversion/branches/issue-3067-deleted-subtrees/subversion/bindings/javahl:873375-874084
+/subversion/branches/issue-3148-dev/subversion/bindings/javahl:875193-875204
+/subversion/branches/issue-3220-dev/subversion/bindings/javahl:872210-872226
+/subversion/branches/issue-3242-dev/subversion/bindings/javahl:879653-896436
+/subversion/branches/issue-3334-dirs/subversion/bindings/javahl:875156-875867
+/subversion/branches/issue-3975/subversion/bindings/javahl:1152931-1160746
+/subversion/branches/issue-4116-dev/subversion/bindings/javahl:1424719-1425040
+/subversion/branches/issue-4194-dev/subversion/bindings/javahl:1410507-1414880
+/subversion/branches/javahl-ra/subversion/bindings/javahl:1342682,1344977
+/subversion/branches/kwallet/subversion/bindings/javahl:870785-871314
+/subversion/branches/log-g-performance/subversion/bindings/javahl:870941-871032
+/subversion/branches/merge-skips-obstructions/subversion/bindings/javahl:874525-874615
+/subversion/branches/multi-layer-moves/subversion/bindings/javahl:1239019-1300930
+/subversion/branches/nfc-nfd-aware-client/subversion/bindings/javahl:870276,870376
+/subversion/branches/node_pool/subversion/bindings/javahl:1304828-1305388
+/subversion/branches/performance/subversion/bindings/javahl:979193,980118,981087,981090,981189,981194,981287,981684,981827,982043,982355,983398,983406,983430,983474,983488,983490,983760,983764,983766,983770,984927,984973,984984,985014,985037,985046,985472,985477,985482,985487-985488,985493,985497,985500,985514,985601,985603,985606,985669,985673,985695,985697,986453,986465,986485,986491-986492,986517,986521,986605,986608,986817,986832,987865,987868-987869,987872,987886-987888,987893,988319,988898,990330,990533,990535-990537,990541,990568,990572,990574-990575,990600,990759,992899,992904,992911,993127,993141,994956,995478,995507,995603,998012,998858,999098,1001413,1001417,1004291,1022668,1022670,1022676,1022715,1022719,1025660,1025672,1027193,1027203,1027206,1027214,1027227,1028077,1028092,1028094,1028104,1028107,1028111,1028354,1029038,1029042-1029043,1029054-1029055,1029062-1029063,1029078,1029080,1029090,1029092-1029093,1029111,1029151,1029158,1029229-1029230,1029232,1029335
-1029336,1029339-1029340,1029342,1029344,1030763,1030827,1031203,1031235,1032285,1032333,1033040,1033057,1033294,1035869,1035882,1039511,1043705,1053735,1056015,1066452,1067683,1067697-1078365
+/subversion/branches/py-tests-as-modules/subversion/bindings/javahl:956579-1033052
+/subversion/branches/ra_serf-digest-authn/subversion/bindings/javahl:875693-876404
+/subversion/branches/reintegrate-improvements/subversion/bindings/javahl:873853-874164
+/subversion/branches/revprop-cache/subversion/bindings/javahl:1298521-1326293
+/subversion/branches/revprop-packing/subversion/bindings/javahl:1143907,1143971,1143997,1144017,1144499,1144568,1146145
+/subversion/branches/subtree-mergeinfo/subversion/bindings/javahl:876734-878766
+/subversion/branches/svn-mergeinfo-enhancements/subversion/bindings/javahl:870119-870195,870197-870288
+/subversion/branches/svn-patch-improvements/subversion/bindings/javahl:918519-934609
+/subversion/branches/svn_mutex/subversion/bindings/javahl:1141683-1182099
+/subversion/branches/svnpatch-diff/subversion/bindings/javahl:865738-876477
+/subversion/branches/svnraisetc/subversion/bindings/javahl:874709-875149
+/subversion/branches/svnserve-logging/subversion/bindings/javahl:869828-870893
+/subversion/branches/tc-issue-3334/subversion/bindings/javahl:874697-874773
+/subversion/branches/tc-merge-notify/subversion/bindings/javahl:874017-874062
+/subversion/branches/tc-resolve/subversion/bindings/javahl:874191-874239
+/subversion/branches/tc_url_rev/subversion/bindings/javahl:874351-874483
+/subversion/branches/tree-conflicts/subversion/bindings/javahl:868291-873154
+/subversion/branches/tree-conflicts-notify/subversion/bindings/javahl:873926-874008
+/subversion/branches/tweak-build-take-two/subversion/bindings/javahl:1424288-1425049,1425051-1425613
+/subversion/branches/uris-as-urls/subversion/bindings/javahl:1060426-1064427
+/subversion/branches/verify-at-commit/subversion/bindings/javahl:1462039-1462408
+/subversion/branches/wc-collate-path/subversion/bindings/javahl:1407642
+/subversion/trunk/subversion/bindings/javahl:1467414-1494655
Modified: subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/ClientContext.cpp
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/ClientContext.cpp?rev=1494670&r1=1494669&r2=1494670&view=diff
==============================================================================
--- subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/ClientContext.cpp (original)
+++ subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/ClientContext.cpp Wed Jun 19 15:54:22 2013
@@ -39,37 +39,10 @@
ClientContext::ClientContext(jobject jsvnclient, SVN::Pool &pool)
- : m_prompter(NULL),
- m_cancelOperation(false)
+ : OperationContext(pool)
{
- JNIEnv *env = JNIUtil::getEnv();
-
- /* Grab a global reference to the Java object embedded in the parent Java
- object. */
static jfieldID ctxFieldID = 0;
- if (ctxFieldID == 0)
- {
- jclass clazz = env->GetObjectClass(jsvnclient);
- if (JNIUtil::isJavaExceptionThrown())
- return;
-
- ctxFieldID = env->GetFieldID(clazz, "clientContext",
- "L"JAVA_PACKAGE"/SVNClient$ClientContext;");
- if (JNIUtil::isJavaExceptionThrown() || ctxFieldID == 0)
- return;
-
- env->DeleteLocalRef(clazz);
- }
-
- jobject jctx = env->GetObjectField(jsvnclient, ctxFieldID);
- if (JNIUtil::isJavaExceptionThrown())
- return;
-
- m_jctx = env->NewGlobalRef(jctx);
- if (JNIUtil::isJavaExceptionThrown())
- return;
-
- env->DeleteLocalRef(jctx);
+ attachJavaObject(jsvnclient, "L"JAVA_PACKAGE"/SVNClient$ClientContext;", "clientContext", &ctxFieldID);
SVN_JNI_ERR(svn_client_create_context2(&m_context, NULL,
pool.getPool()),
@@ -96,16 +69,11 @@ ClientContext::ClientContext(jobject jsv
m_context->conflict_func2 = resolve;
m_context->conflict_baton2 = m_jctx;
- m_context->client_name = "javahl";
- m_pool = &pool;
+ m_context->client_name = getClientName();
}
ClientContext::~ClientContext()
{
- delete m_prompter;
-
- JNIEnv *env = JNIUtil::getEnv();
- env->DeleteGlobalRef(m_jctx);
}
@@ -140,7 +108,6 @@ svn_client_ctx_t *
ClientContext::getContext(CommitMessage *message, SVN::Pool &in_pool)
{
apr_pool_t *pool = in_pool.getPool();
- svn_auth_baton_t *ab;
svn_client_ctx_t *ctx = m_context;
/* Make a temporary copy of ctx to restore at pool cleanup to avoid
@@ -157,122 +124,17 @@ ClientContext::getContext(CommitMessage
apr_pool_cleanup_register(in_pool.getPool(), bt, clear_ctx_ptrs,
clear_ctx_ptrs);
-
if (!ctx->config)
{
- const char *configDir = m_configDir.c_str();
- if (m_configDir.empty())
- configDir = NULL;
- SVN_JNI_ERR(svn_config_get_config(&(ctx->config), configDir,
- m_pool->getPool()),
- NULL);
+ apr_hash_t * configData = getConfigData();
+ ctx->config = configData;
bt->backup->config = ctx->config;
}
- svn_config_t *config =
- reinterpret_cast<svn_config_t *>(apr_hash_get(ctx->config,
- SVN_CONFIG_CATEGORY_CONFIG,
- APR_HASH_KEY_STRING));
-
- /* The whole list of registered providers */
- apr_array_header_t *providers;
-
- /* Populate the registered providers with the platform-specific providers */
- SVN_JNI_ERR(svn_auth_get_platform_specific_client_providers(&providers,
- config,
- pool),
- NULL);
-
- /* Use the prompter (if available) to prompt for password and cert
- * caching. */
- svn_auth_plaintext_prompt_func_t plaintext_prompt_func = NULL;
- void *plaintext_prompt_baton = NULL;
- svn_auth_plaintext_passphrase_prompt_func_t plaintext_passphrase_prompt_func;
- void *plaintext_passphrase_prompt_baton = NULL;
-
- if (m_prompter != NULL)
- {
- plaintext_prompt_func = Prompter::plaintext_prompt;
- plaintext_prompt_baton = m_prompter;
- plaintext_passphrase_prompt_func = Prompter::plaintext_passphrase_prompt;
- plaintext_passphrase_prompt_baton = m_prompter;
- }
-
- /* The main disk-caching auth providers, for both
- * 'username/password' creds and 'username' creds. */
- svn_auth_provider_object_t *provider;
-
- svn_auth_get_simple_provider2(&provider, plaintext_prompt_func,
- plaintext_prompt_baton, pool);
- APR_ARRAY_PUSH(providers, svn_auth_provider_object_t *) = provider;
-
- svn_auth_get_username_provider(&provider, pool);
- APR_ARRAY_PUSH(providers, svn_auth_provider_object_t *) = provider;
-
- /* The server-cert, client-cert, and client-cert-password providers. */
- SVN_JNI_ERR(svn_auth_get_platform_specific_provider(&provider,
- "windows",
- "ssl_server_trust",
- pool),
- NULL);
-
- if (provider)
- APR_ARRAY_PUSH(providers, svn_auth_provider_object_t *) = provider;
-
- svn_auth_get_ssl_server_trust_file_provider(&provider, pool);
- APR_ARRAY_PUSH(providers, svn_auth_provider_object_t *) = provider;
- svn_auth_get_ssl_client_cert_file_provider(&provider, pool);
- APR_ARRAY_PUSH(providers, svn_auth_provider_object_t *) = provider;
- svn_auth_get_ssl_client_cert_pw_file_provider2(&provider,
- plaintext_passphrase_prompt_func,
- plaintext_passphrase_prompt_baton, pool);
- APR_ARRAY_PUSH(providers, svn_auth_provider_object_t *) = provider;
-
- if (m_prompter != NULL)
- {
- /* Two basic prompt providers: username/password, and just username.*/
- provider = m_prompter->getProviderSimple(in_pool);
-
- APR_ARRAY_PUSH(providers, svn_auth_provider_object_t *) = provider;
-
- provider = m_prompter->getProviderUsername(in_pool);
- APR_ARRAY_PUSH(providers, svn_auth_provider_object_t *) = provider;
-
- /* Three ssl prompt providers, for server-certs, client-certs,
- * and client-cert-passphrases. */
- provider = m_prompter->getProviderServerSSLTrust(in_pool);
- APR_ARRAY_PUSH(providers, svn_auth_provider_object_t *) = provider;
-
- provider = m_prompter->getProviderClientSSL(in_pool);
- APR_ARRAY_PUSH(providers, svn_auth_provider_object_t *) = provider;
-
- provider = m_prompter->getProviderClientSSLPassword(in_pool);
- APR_ARRAY_PUSH(providers, svn_auth_provider_object_t *) = provider;
- }
-
- /* Build an authentication baton to give to libsvn_client. */
- svn_auth_open(&ab, providers, pool);
-
- /* Place any default --username or --password credentials into the
- * auth_baton's run-time parameter hash. ### Same with --no-auth-cache? */
- if (!m_userName.empty())
- svn_auth_set_parameter(ab, SVN_AUTH_PARAM_DEFAULT_USERNAME,
- apr_pstrdup(in_pool.getPool(),
- m_userName.c_str()));
- if (!m_passWord.empty())
- svn_auth_set_parameter(ab, SVN_AUTH_PARAM_DEFAULT_PASSWORD,
- apr_pstrdup(in_pool.getPool(),
- m_passWord.c_str()));
- /* Store where to retrieve authentication data? */
- if (!m_configDir.empty())
- svn_auth_set_parameter(ab, SVN_AUTH_PARAM_CONFIG_DIR,
- apr_pstrdup(in_pool.getPool(),
- m_configDir.c_str()));
-
- ctx->auth_baton = ab;
+ ctx->auth_baton = getAuthBaton(in_pool);
ctx->log_msg_baton3 = message;
- m_cancelOperation = false;
+ resetCancelRequest();
SVN_JNI_ERR(svn_wc_context_create(&ctx->wc_ctx, NULL,
in_pool.getPool(), in_pool.getPool()),
@@ -282,60 +144,6 @@ ClientContext::getContext(CommitMessage
}
void
-ClientContext::username(const char *pi_username)
-{
- m_userName = (pi_username == NULL ? "" : pi_username);
-}
-
-void
-ClientContext::password(const char *pi_password)
-{
- m_passWord = (pi_password == NULL ? "" : pi_password);
-}
-
-void
-ClientContext::setPrompt(Prompter *prompter)
-{
- delete m_prompter;
- m_prompter = prompter;
-}
-
-void
-ClientContext::setConfigDirectory(const char *configDir)
-{
- // A change to the config directory may necessitate creation of
- // the config templates.
- SVN::Pool requestPool;
- SVN_JNI_ERR(svn_config_ensure(configDir, requestPool.getPool()), );
-
- m_configDir = (configDir == NULL ? "" : configDir);
- m_context->config = NULL;
-}
-
-const char *
-ClientContext::getConfigDirectory() const
-{
- return m_configDir.c_str();
-}
-
-void
-ClientContext::cancelOperation()
-{
- m_cancelOperation = true;
-}
-
-svn_error_t *
-ClientContext::checkCancel(void *cancelBaton)
-{
- ClientContext *that = static_cast<ClientContext *>(cancelBaton);
- if (that->m_cancelOperation)
- return svn_error_create(SVN_ERR_CANCELLED, NULL,
- _("Operation cancelled"));
- else
- return SVN_NO_ERROR;
-}
-
-void
ClientContext::notify(void *baton,
const svn_wc_notify_t *notify,
apr_pool_t *pool)
@@ -369,54 +177,6 @@ ClientContext::notify(void *baton,
env->DeleteLocalRef(jInfo);
}
-void
-ClientContext::progress(apr_off_t progressVal, apr_off_t total,
- void *baton, apr_pool_t *pool)
-{
- jobject jctx = (jobject) baton;
- JNIEnv *env = JNIUtil::getEnv();
-
- // Create a local frame for our references
- env->PushLocalFrame(LOCAL_FRAME_SIZE);
- if (JNIUtil::isJavaExceptionThrown())
- return;
-
- static jmethodID mid = 0;
- if (mid == 0)
- {
- jclass clazz = env->GetObjectClass(jctx);
- if (JNIUtil::isJavaExceptionThrown())
- POP_AND_RETURN_NOTHING();
-
- mid = env->GetMethodID(clazz, "onProgress",
- "(L"JAVA_PACKAGE"/ProgressEvent;)V");
- if (JNIUtil::isJavaExceptionThrown() || mid == 0)
- POP_AND_RETURN_NOTHING();
- }
-
- static jmethodID midCT = 0;
- jclass clazz = env->FindClass(JAVA_PACKAGE"/ProgressEvent");
- if (JNIUtil::isJavaExceptionThrown())
- POP_AND_RETURN_NOTHING();
-
- if (midCT == 0)
- {
- midCT = env->GetMethodID(clazz, "<init>", "(JJ)V");
- if (JNIUtil::isJavaExceptionThrown() || midCT == 0)
- POP_AND_RETURN_NOTHING();
- }
-
- // Call the Java method.
- jobject jevent = env->NewObject(clazz, midCT,
- (jlong) progressVal, (jlong) total);
- if (JNIUtil::isJavaExceptionThrown())
- POP_AND_RETURN_NOTHING();
-
- env->CallVoidMethod(jctx, mid, jevent);
-
- POP_AND_RETURN_NOTHING();
-}
-
svn_error_t *
ClientContext::resolve(svn_wc_conflict_result_t **result,
const svn_wc_conflict_description2_t *desc,
Modified: subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/ClientContext.h
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/ClientContext.h?rev=1494670&r1=1494669&r2=1494670&view=diff
==============================================================================
--- subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/ClientContext.h (original)
+++ subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/ClientContext.h Wed Jun 19 15:54:22 2013
@@ -29,6 +29,8 @@
#include <string>
+#include "OperationContext.h"
+
#include "svn_types.h"
#include "svn_client.h"
@@ -36,7 +38,6 @@
#include "Pool.h"
#include "JNIStringHolder.h"
-class Prompter;
class CommitMessage;
/**
@@ -44,25 +45,14 @@ class CommitMessage;
* and implements the functions read & close of svn_stream_t.
*
*/
-class ClientContext
+class ClientContext : public OperationContext
{
private:
svn_client_ctx_t *m_context;
- const SVN::Pool *m_pool;
- jobject m_jctx;
-
- std::string m_userName;
- std::string m_passWord;
- std::string m_configDir;
-
- Prompter *m_prompter;
- bool m_cancelOperation;
protected:
static void notify(void *baton, const svn_wc_notify_t *notify,
apr_pool_t *pool);
- static void progress(apr_off_t progressVal, apr_off_t total,
- void *baton, apr_pool_t *pool);
static svn_error_t *resolve(svn_wc_conflict_result_t **result,
const svn_wc_conflict_description2_t *desc,
void *baton,
@@ -73,24 +63,9 @@ class ClientContext
public:
ClientContext(jobject jsvnclient, SVN::Pool &pool);
- ~ClientContext();
-
- static svn_error_t *checkCancel(void *cancelBaton);
+ virtual ~ClientContext();
svn_client_ctx_t *getContext(CommitMessage *message, SVN::Pool &in_pool);
-
- void username(const char *pi_username);
- void password(const char *pi_password);
- void setPrompt(Prompter *prompter);
- void cancelOperation();
- const char *getConfigDirectory() const;
-
- /**
- * Set the configuration directory, taking the usual steps to
- * ensure that Subversion's config file templates exist in the
- * specified location.
- */
- void setConfigDirectory(const char *configDir);
};
#endif // CLIENTCONTEXT_H
Modified: subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/CreateJ.cpp
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/CreateJ.cpp?rev=1494670&r1=1494669&r2=1494670&view=diff
==============================================================================
--- subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/CreateJ.cpp (original)
+++ subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/CreateJ.cpp Wed Jun 19 15:54:22 2013
@@ -423,6 +423,72 @@ CreateJ::Lock(const svn_lock_t *lock)
}
jobject
+CreateJ::LockMap(const apr_hash_t *locks, apr_pool_t *pool)
+{
+ JNIEnv *env = JNIUtil::getEnv();
+
+ if (locks == NULL)
+ return NULL;
+
+ // Create a local frame for our references
+ env->PushLocalFrame(LOCAL_FRAME_SIZE);
+ if (JNIUtil::isJavaExceptionThrown())
+ return NULL;
+
+ jclass clazz = env->FindClass("java/util/HashMap");
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+
+ static jmethodID init_mid = 0;
+ if (init_mid == 0)
+ {
+ init_mid = env->GetMethodID(clazz, "<init>", "()V");
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+ }
+
+ static jmethodID put_mid = 0;
+ if (put_mid == 0)
+ {
+ put_mid = env->GetMethodID(clazz, "put",
+ "(Ljava/lang/Object;Ljava/lang/Object;)"
+ "Ljava/lang/Object;");
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+ }
+
+ jobject map = env->NewObject(clazz, init_mid);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+
+ apr_hash_index_t *hi;
+ int i = 0;
+ for (hi = apr_hash_first(pool, (apr_hash_t *) locks); hi;
+ hi = apr_hash_next(hi), ++i)
+ {
+ const char *key = (const char *) svn__apr_hash_index_key(hi);
+ const svn_lock_t *lock = (const svn_lock_t *) svn__apr_hash_index_val(hi);
+
+ jstring jpath = JNIUtil::makeJString(key);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+
+ jobject jlock = Lock(lock);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+
+ env->CallObjectMethod(map, put_mid, jpath, jlock);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+
+ env->DeleteLocalRef(jpath);
+ env->DeleteLocalRef(jlock);
+ }
+
+ return env->PopLocalFrame(map);
+}
+
+jobject
CreateJ::ChangedPath(const char *path, svn_log_changed_path2_t *log_item)
{
JNIEnv *env = JNIUtil::getEnv();
Modified: subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/CreateJ.h
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/CreateJ.h?rev=1494670&r1=1494669&r2=1494670&view=diff
==============================================================================
--- subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/CreateJ.h (original)
+++ subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/CreateJ.h Wed Jun 19 15:54:22 2013
@@ -55,6 +55,9 @@ class CreateJ
Lock(const svn_lock_t *lock);
static jobject
+ LockMap(const apr_hash_t *locks, apr_pool_t *pool);
+
+ static jobject
ChangedPath(const char *path, svn_log_changed_path2_t *log_item);
static jobject
Modified: subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/JNIUtil.cpp
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/JNIUtil.cpp?rev=1494670&r1=1494669&r2=1494670&view=diff
==============================================================================
--- subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/JNIUtil.cpp (original)
+++ subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/JNIUtil.cpp Wed Jun 19 15:54:22 2013
@@ -796,6 +796,31 @@ jobject JNIUtil::createDate(apr_time_t t
return ret;
}
+apr_time_t
+JNIUtil::getDate(jobject jdate)
+{
+ JNIEnv *env = getEnv();
+ jclass clazz = env->FindClass("java/util/Date");
+ if (isJavaExceptionThrown())
+ return 0;
+
+ static jmethodID mid = 0;
+ if (mid == 0)
+ {
+ mid = env->GetMethodID(clazz, "getTime", "()J");
+ if (isJavaExceptionThrown())
+ return 0;
+ }
+
+ jlong jmillis = env->CallLongMethod(jdate, mid);
+ if (isJavaExceptionThrown())
+ return 0;
+
+ env->DeleteLocalRef(clazz);
+
+ return jmillis * 1000;
+}
+
/**
* Create a Java byte array from an array of characters.
* @param data the character array
@@ -871,7 +896,21 @@ void JNIUtil::assembleErrorMessage(svn_e
buffer.append(svn_strerror(err->apr_err, errbuf, sizeof(errbuf)));
/* Otherwise, this must be an APR error code. */
else
- buffer.append(apr_strerror(err->apr_err, errbuf, sizeof(errbuf)));
+ {
+ /* Messages coming from apr_strerror are in the native
+ encoding, it's a good idea to convert them to UTF-8. */
+ const char* utf8_message;
+ apr_strerror(err->apr_err, errbuf, sizeof(errbuf));
+ svn_error_t* utf8_err = svn_utf_cstring_to_utf8(
+ &utf8_message, errbuf, err->pool);
+ if (utf8_err)
+ {
+ /* Use fuzzy transliteration instead. */
+ svn_error_clear(utf8_err);
+ utf8_message = svn_utf_cstring_from_utf8_fuzzy(errbuf, err->pool);
+ }
+ buffer.append(utf8_message);
+ }
buffer.append("\n");
}
if (err->message)
Modified: subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/JNIUtil.h
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/JNIUtil.h?rev=1494670&r1=1494669&r2=1494670&view=diff
==============================================================================
--- subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/JNIUtil.h (original)
+++ subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/JNIUtil.h Wed Jun 19 15:54:22 2013
@@ -67,6 +67,7 @@ class JNIUtil
static jbyteArray makeJByteArray(const void *data, int length);
static jbyteArray makeJByteArray(const svn_string_t *str);
static jobject createDate(apr_time_t time);
+ static apr_time_t getDate(jobject jdate);
static void logMessage(const char *message);
static int getLogLevel();
static char *getFormatBuffer();
Modified: subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/Prompter.cpp
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/Prompter.cpp?rev=1494670&r1=1494669&r2=1494670&view=diff
==============================================================================
--- subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/Prompter.cpp (original)
+++ subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/Prompter.cpp Wed Jun 19 15:54:22 2013
@@ -40,9 +40,9 @@
* @param jprompter a global reference to the Java callback object
*/
Prompter::Prompter(jobject jprompter)
-{
- m_prompter = jprompter;
-}
+ : m_prompter(jprompter),
+ m_maySave(false)
+{}
Prompter::~Prompter()
{
Modified: subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/RevpropTable.cpp
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/RevpropTable.cpp?rev=1494670&r1=1494669&r2=1494670&view=diff
==============================================================================
--- subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/RevpropTable.cpp (original)
+++ subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/RevpropTable.cpp Wed Jun 19 15:54:22 2013
@@ -41,9 +41,9 @@ RevpropTable::~RevpropTable()
JNIUtil::getEnv()->DeleteLocalRef(m_revpropTable);
}
-const apr_hash_t *RevpropTable::hash(const SVN::Pool &pool)
+apr_hash_t *RevpropTable::hash(const SVN::Pool &pool, bool nullIfEmpty)
{
- if (m_revprops.size() == 0)
+ if (m_revprops.size() == 0 && nullIfEmpty)
return NULL;
apr_hash_t *revprop_table = apr_hash_make(pool.getPool());
Modified: subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/RevpropTable.h
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/RevpropTable.h?rev=1494670&r1=1494669&r2=1494670&view=diff
==============================================================================
--- subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/RevpropTable.h (original)
+++ subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/RevpropTable.h Wed Jun 19 15:54:22 2013
@@ -44,7 +44,7 @@ class RevpropTable
public:
RevpropTable(jobject jrevpropTable);
~RevpropTable();
- const apr_hash_t *hash(const SVN::Pool &pool);
+ apr_hash_t *hash(const SVN::Pool &pool, bool nullIfEmpty = true);
};
#endif // REVPROPTABLE_H
Modified: subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/SVNBase.cpp
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/SVNBase.cpp?rev=1494670&r1=1494669&r2=1494670&view=diff
==============================================================================
--- subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/SVNBase.cpp (original)
+++ subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/SVNBase.cpp Wed Jun 19 15:54:22 2013
@@ -97,3 +97,29 @@ inline void SVNBase::findCppAddrFieldID(
}
}
}
+
+jobject SVNBase::createCppBoundObject(const char *clazzName)
+{
+ JNIEnv *env = JNIUtil::getEnv();
+
+ // Create java session object
+ jclass clazz = env->FindClass(clazzName);
+ if (JNIUtil::isJavaExceptionThrown())
+ return NULL;
+
+ static jmethodID ctor = 0;
+ if (ctor == 0)
+ {
+ ctor = env->GetMethodID(clazz, "<init>", "(J)V");
+ if (JNIUtil::isJavaExceptionThrown())
+ return NULL;
+ }
+
+ jlong cppAddr = this->getCppAddr();
+
+ jobject jself = env->NewObject(clazz, ctor, cppAddr);
+ if (JNIUtil::isJavaExceptionThrown())
+ return NULL;
+
+ return jself;
+}
Modified: subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/SVNBase.h
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/SVNBase.h?rev=1494670&r1=1494669&r2=1494670&view=diff
==============================================================================
--- subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/SVNBase.h (original)
+++ subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/SVNBase.h Wed Jun 19 15:54:22 2013
@@ -82,6 +82,11 @@ class SVNBase
*/
void dispose(jobject jthis, jfieldID *fid, const char *className);
+ /**
+ * Instantiates java object attached to this base object
+ */
+ jobject createCppBoundObject(const char *clazzName);
+
private:
/**
* If the value pointed to by @a fid is zero, find the @c jfieldID
Modified: subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/SVNClient.cpp
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/SVNClient.cpp?rev=1494670&r1=1494669&r2=1494670&view=diff
==============================================================================
--- subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/SVNClient.cpp (original)
+++ subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/SVNClient.cpp Wed Jun 19 15:54:22 2013
@@ -30,6 +30,7 @@
#include "DiffSummaryReceiver.h"
#include "ClientContext.h"
#include "Prompter.h"
+#include "RemoteSession.h"
#include "Pool.h"
#include "Targets.h"
#include "Revision.h"
@@ -70,6 +71,7 @@
#include <vector>
#include <iostream>
#include <sstream>
+#include <string>
SVNClient::SVNClient(jobject jthis_in)
@@ -1525,6 +1527,77 @@ SVNClient::patch(const char *patchPath,
ctx, subPool.getPool()), );
}
+jobject
+SVNClient::openRemoteSession(const char* path, int retryAttempts)
+{
+ static const svn_opt_revision_t HEAD = { svn_opt_revision_head, {0}};
+ static const svn_opt_revision_t NONE = { svn_opt_revision_unspecified, {0}};
+
+ SVN_JNI_NULL_PTR_EX(path, "path", NULL);
+
+ SVN::Pool subPool(pool);
+ svn_client_ctx_t *ctx = context.getContext(NULL, subPool);
+ if (ctx == NULL)
+ return NULL;
+
+ Path checkedPath(path, subPool);
+ SVN_JNI_ERR(checkedPath.error_occurred(), NULL);
+
+ struct PathInfo
+ {
+ std::string url;
+ std::string uuid;
+ static svn_error_t *callback(void *baton,
+ const char *,
+ const svn_client_info2_t *info,
+ apr_pool_t *)
+ {
+ PathInfo* const pi = static_cast<PathInfo*>(baton);
+ pi->url = info->URL;
+ pi->uuid = info->repos_UUID;
+ return SVN_NO_ERROR;
+ }
+ } path_info;
+
+ SVN_JNI_ERR(svn_client_info3(
+ checkedPath.c_str(), &NONE,
+ (svn_path_is_url(checkedPath.c_str()) ? &HEAD : &NONE),
+ svn_depth_empty, FALSE, TRUE, NULL,
+ PathInfo::callback, &path_info,
+ ctx, subPool.getPool()),
+ NULL);
+
+ jobject jctx = context.getSelf();
+ if (JNIUtil::isJavaExceptionThrown())
+ return NULL;
+
+ /* Decouple the RemoteSession's context from SVNClient's context
+ by creating a copy of the prompter here. */
+ Prompter* prompter = new Prompter(context.getPrompter());
+ if (!prompter)
+ {
+ /* context.getSelf() created a new global reference. */
+ JNIUtil::getEnv()->DeleteGlobalRef(jctx);
+ JNIUtil::throwNullPointerException("allocating Prompter");
+ return NULL;
+ }
+
+ jobject jremoteSession = RemoteSession::open(
+ retryAttempts, path_info.url.c_str(), path_info.uuid.c_str(),
+ context.getConfigDirectory(),
+ context.getUsername(), context.getPassword(),
+ prompter, jctx);
+ if (JNIUtil::isJavaExceptionThrown())
+ {
+ /* context.getSelf() created a new global reference. */
+ JNIUtil::getEnv()->DeleteGlobalRef(jctx);
+ jremoteSession = NULL;
+ delete prompter;
+ }
+
+ return jremoteSession;
+}
+
ClientContext &
SVNClient::getClientContext()
{
Modified: subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/SVNClient.h
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/SVNClient.h?rev=1494670&r1=1494669&r2=1494670&view=diff
==============================================================================
--- subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/SVNClient.h (original)
+++ subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/SVNClient.h Wed Jun 19 15:54:22 2013
@@ -62,6 +62,7 @@ class DiffOptions;
class SVNClient :public SVNBase
{
public:
+ jobject openRemoteSession(const char* path, int);
void patch(const char *patchPath, const char *targetPath, bool dryRun,
int stripCount, bool reverse, bool ignoreWhitespace,
bool removeTempfiles, PatchCallback *callback);
Modified: subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNClient.cpp
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNClient.cpp?rev=1494670&r1=1494669&r2=1494670&view=diff
==============================================================================
--- subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNClient.cpp (original)
+++ subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNClient.cpp Wed Jun 19 15:54:22 2013
@@ -1851,3 +1851,22 @@ Java_org_apache_subversion_javahl_SVNCli
jreverse ? true : false, jignoreWhitespace ? true : false,
jremoveTempfiles ? true : false, &callback);
}
+
+JNIEXPORT jobject JNICALL
+Java_org_apache_subversion_javahl_SVNClient_nativeOpenRemoteSession
+(JNIEnv *env, jobject jthis, jstring jpath, jint jretryAttempts)
+{
+ JNIEntry(SVNClient, openRemoteSession);
+ SVNClient *cl = SVNClient::getCppObject(jthis);
+ if (cl == NULL)
+ {
+ JNIUtil::throwError("bad C++ this");
+ return NULL;
+ }
+
+ JNIStringHolder path(jpath);
+ if (JNIUtil::isJavaExceptionThrown())
+ return NULL;
+
+ return cl->openRemoteSession(path, jretryAttempts);
+}
Modified: subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNClient.java
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNClient.java?rev=1494670&r1=1494669&r2=1494670&view=diff
==============================================================================
--- subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNClient.java (original)
+++ subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNClient.java Wed Jun 19 15:54:22 2013
@@ -1145,4 +1145,36 @@ public interface ISVNClient
int stripCount, boolean reverse, boolean ignoreWhitespace,
boolean removeTempfiles, PatchCallback callback)
throws ClientException;
+
+ /**
+ * Open a persistent session to a repository.
+ * @param path A path in a working copy from which the
+ * session URL is derived.
+ * @throws remote.RetryOpenSession If the session URL was redirected
+ * @throws SubversionException If an URL redirect cycle was detected
+ * @throws ClientException
+ * @note The session object inherits the progress callback,
+ * configuration directory and authentication info.
+ * @since 1.9
+ */
+ ISVNRemote openRemoteSession(String path)
+ throws ClientException, SubversionException;
+
+ /**
+ * Open a persistent session to a repository.
+ * @param path A path in a working copy from which the
+ * session URL is derived.
+ * @param retryAttempts The number of times to retry the operation
+ * if the given URL is redirected.
+ * @throws IllegalArgumentException If <code>retryAttempts</code>
+ * is not positive
+ * @throws remote.RetryOpenSession If the session URL was redirected
+ * @throws SubversionException If an URL redirect cycle was detected
+ * @throws ClientException
+ * @note The session object inherits the progress callback,
+ * configuration directory and authentication info.
+ * @since 1.9
+ */
+ ISVNRemote openRemoteSession(String path, int retryAttempts)
+ throws ClientException, SubversionException;
}
Modified: subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNClient.java
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNClient.java?rev=1494670&r1=1494669&r2=1494670&view=diff
==============================================================================
--- subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNClient.java (original)
+++ subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNClient.java Wed Jun 19 15:54:22 2013
@@ -151,14 +151,14 @@ public class SVNClient implements ISVNCl
clientContext.notify = notify;
}
- public void setConflictResolver(ConflictResolverCallback listener)
+ public void setConflictResolver(ConflictResolverCallback resolver)
{
- clientContext.resolver = listener;
+ clientContext.resolver = resolver;
}
- public void setProgressCallback(ProgressCallback listener)
+ public void setProgressCallback(ProgressCallback progress)
{
- clientContext.listener = listener;
+ clientContext.setProgressCallback(progress);
}
public native void remove(Set<String> paths, boolean force,
@@ -661,16 +661,33 @@ public class SVNClient implements ISVNCl
PatchCallback callback)
throws ClientException;
+ public ISVNRemote openRemoteSession(String path)
+ throws ClientException, SubversionException
+ {
+ return nativeOpenRemoteSession(path, 1);
+ }
+
+ public ISVNRemote openRemoteSession(String path, int retryAttempts)
+ throws ClientException, SubversionException
+ {
+ if (retryAttempts <= 0)
+ throw new IllegalArgumentException(
+ "retryAttempts must be positive");
+ return nativeOpenRemoteSession(path, retryAttempts);
+ }
+
+ private native ISVNRemote nativeOpenRemoteSession(
+ String path, int retryAttempts)
+ throws ClientException, SubversionException;
+
/**
* A private class to hold the contextual information required to
* persist in this object, such as notification handlers.
*/
- private class ClientContext
- implements ClientNotifyCallback, ProgressCallback,
- ConflictResolverCallback
+ private class ClientContext extends OperationContext
+ implements ClientNotifyCallback, ConflictResolverCallback
{
public ClientNotifyCallback notify = null;
- public ProgressCallback listener = null;
public ConflictResolverCallback resolver = null;
public void onNotify(ClientNotifyInformation notifyInfo)
@@ -679,12 +696,6 @@ public class SVNClient implements ISVNCl
notify.onNotify(notifyInfo);
}
- public void onProgress(ProgressEvent event)
- {
- if (listener != null)
- listener.onProgress(event);
- }
-
public ConflictResult resolve(ConflictDescriptor conflict)
throws SubversionException
{
Modified: subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/tests/org/apache/subversion/javahl/RunTests.java
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/tests/org/apache/subversion/javahl/RunTests.java?rev=1494670&r1=1494669&r2=1494670&view=diff
==============================================================================
--- subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/tests/org/apache/subversion/javahl/RunTests.java (original)
+++ subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/tests/org/apache/subversion/javahl/RunTests.java Wed Jun 19 15:54:22 2013
@@ -92,6 +92,7 @@ public class RunTests
{
// Add default test suites.
suite.addTestSuite(SVNReposTests.class);
+ suite.addTestSuite(SVNRemoteTests.class);
suite.addTestSuite(BasicTests.class);
}
else