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/14 05:02:55 UTC
svn commit: r1492940 - in
/subversion/branches/javahl-ra/subversion/bindings/javahl: native/
tests/org/apache/subversion/javahl/
Author: brane
Date: Fri Jun 14 03:02:54 2013
New Revision: 1492940
URL: http://svn.apache.org/r1492940
Log:
On the javahl_ra branch:
Implement the SVNClient.openRemoteSession factory method.
[in subversion/bindings/javahl/native]
* OperationContext.h, OperationContext.cpp
(OperationContext::getSelf, OperationContext::getUsername,
OperationContext::getPassword, OperationContext::getPrompter):
Add accessor methods for the configuration parameters so that
the native code can use them directly.
* SVNClient.h, SVNClient.cpp (SVNClient::openRemoteSession): New.
* org_apache_subversion_javahl_SVNClient.cpp
(Java_org_apache_subversion_javahl_SVNClient_openRemoteSession):
Implement native wrapper.
* RemoteSession.cpp (RemoteSession::open): Check returned pointer.
* org_apache_subversion_javahl_remote_RemoteFactory.cpp
(Java_org_apache_subversion_javahl_remote_RemoteFactory_open):
Do not delete the session object on failure; RemoteSession::open does that.
[in subversion/bindings/javahl/tests/org/apache/subversion/javahl]
* SVNRemoteTests.java (SVNRemoteTests.testGetUrl_viaSVNClient):
Add a test case for SVNClient.openRemoteSession.
Modified:
subversion/branches/javahl-ra/subversion/bindings/javahl/native/OperationContext.cpp
subversion/branches/javahl-ra/subversion/bindings/javahl/native/OperationContext.h
subversion/branches/javahl-ra/subversion/bindings/javahl/native/RemoteSession.cpp
subversion/branches/javahl-ra/subversion/bindings/javahl/native/SVNClient.cpp
subversion/branches/javahl-ra/subversion/bindings/javahl/native/SVNClient.h
subversion/branches/javahl-ra/subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNClient.cpp
subversion/branches/javahl-ra/subversion/bindings/javahl/native/org_apache_subversion_javahl_remote_RemoteFactory.cpp
subversion/branches/javahl-ra/subversion/bindings/javahl/tests/org/apache/subversion/javahl/SVNRemoteTests.java
Modified: subversion/branches/javahl-ra/subversion/bindings/javahl/native/OperationContext.cpp
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-ra/subversion/bindings/javahl/native/OperationContext.cpp?rev=1492940&r1=1492939&r2=1492940&view=diff
==============================================================================
--- subversion/branches/javahl-ra/subversion/bindings/javahl/native/OperationContext.cpp (original)
+++ subversion/branches/javahl-ra/subversion/bindings/javahl/native/OperationContext.cpp Fri Jun 14 03:02:54 2013
@@ -213,6 +213,14 @@ OperationContext::getAuthBaton(SVN::Pool
return ab;
}
+jobject OperationContext::getSelf() const
+{
+ jobject jctx = JNIUtil::getEnv()->NewGlobalRef(m_jctx);
+ if (JNIUtil::isJavaExceptionThrown())
+ return NULL;
+ return jctx;
+}
+
void
OperationContext::username(const char *pi_username)
{
@@ -248,7 +256,24 @@ OperationContext::setConfigDirectory(con
const char *
OperationContext::getConfigDirectory() const
{
- return m_configDir.c_str();
+ return (m_configDir.empty() ? NULL : m_configDir.c_str());
+}
+
+const char *
+OperationContext::getUsername() const
+{
+ return (m_userName.empty() ? NULL : m_userName.c_str());
+}
+
+const char *
+OperationContext::getPassword() const
+{
+ return (m_passWord.empty() ? NULL : m_passWord.c_str());
+}
+
+const Prompter& OperationContext::getPrompter() const
+{
+ return *m_prompter;
}
void
Modified: subversion/branches/javahl-ra/subversion/bindings/javahl/native/OperationContext.h
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-ra/subversion/bindings/javahl/native/OperationContext.h?rev=1492940&r1=1492939&r2=1492940&view=diff
==============================================================================
--- subversion/branches/javahl-ra/subversion/bindings/javahl/native/OperationContext.h (original)
+++ subversion/branches/javahl-ra/subversion/bindings/javahl/native/OperationContext.h Fri Jun 14 03:02:54 2013
@@ -74,7 +74,11 @@ class OperationContext
void cancelOperation();
void resetCancelRequest();
virtual bool isCancelledOperation();
+ jobject getSelf() const;
const char *getConfigDirectory() const;
+ const char *getUsername() const;
+ const char *getPassword() const;
+ const Prompter& getPrompter() const;
/**
* Set the configuration directory, taking the usual steps to
Modified: subversion/branches/javahl-ra/subversion/bindings/javahl/native/RemoteSession.cpp
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-ra/subversion/bindings/javahl/native/RemoteSession.cpp?rev=1492940&r1=1492939&r2=1492940&view=diff
==============================================================================
--- subversion/branches/javahl-ra/subversion/bindings/javahl/native/RemoteSession.cpp (original)
+++ subversion/branches/javahl-ra/subversion/bindings/javahl/native/RemoteSession.cpp Fri Jun 14 03:02:54 2013
@@ -92,7 +92,7 @@ RemoteSession::open(jobject* jthis_out,
RemoteSession* session = new RemoteSession(
jthis_out, url, uuid, configDirectory,
usernameStr, passwordStr, prompter, jprogress);
- if (JNIUtil::isJavaExceptionThrown())
+ if (JNIUtil::isJavaExceptionThrown() || !session)
{
delete session;
delete prompter;
Modified: subversion/branches/javahl-ra/subversion/bindings/javahl/native/SVNClient.cpp
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-ra/subversion/bindings/javahl/native/SVNClient.cpp?rev=1492940&r1=1492939&r2=1492940&view=diff
==============================================================================
--- subversion/branches/javahl-ra/subversion/bindings/javahl/native/SVNClient.cpp (original)
+++ subversion/branches/javahl-ra/subversion/bindings/javahl/native/SVNClient.cpp Fri Jun 14 03:02:54 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"
@@ -1525,6 +1526,67 @@ SVNClient::patch(const char *patchPath,
ctx, subPool.getPool()), );
}
+jobject
+SVNClient::openRemoteSession(const char* path)
+{
+ 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
+ {
+ const char *url;
+ const char *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;
+
+ Prompter* prompter = new Prompter(context.getPrompter());
+ jobject jremoteSession = NULL;
+ RemoteSession* session = new RemoteSession(
+ &jremoteSession, path_info.url, path_info.uuid,
+ context.getConfigDirectory(),
+ context.getUsername(), context.getPassword(),
+ prompter, jctx);
+ if (JNIUtil::isJavaExceptionThrown() || !session)
+ {
+ JNIUtil::getEnv()->DeleteGlobalRef(jctx);
+ jremoteSession = NULL;
+ delete session;
+ delete prompter;
+ }
+
+ return jremoteSession;
+}
+
ClientContext &
SVNClient::getClientContext()
{
Modified: subversion/branches/javahl-ra/subversion/bindings/javahl/native/SVNClient.h
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-ra/subversion/bindings/javahl/native/SVNClient.h?rev=1492940&r1=1492939&r2=1492940&view=diff
==============================================================================
--- subversion/branches/javahl-ra/subversion/bindings/javahl/native/SVNClient.h (original)
+++ subversion/branches/javahl-ra/subversion/bindings/javahl/native/SVNClient.h Fri Jun 14 03:02:54 2013
@@ -62,6 +62,7 @@ class DiffOptions;
class SVNClient :public SVNBase
{
public:
+ jobject openRemoteSession(const char* path);
void patch(const char *patchPath, const char *targetPath, bool dryRun,
int stripCount, bool reverse, bool ignoreWhitespace,
bool removeTempfiles, PatchCallback *callback);
Modified: subversion/branches/javahl-ra/subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNClient.cpp
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-ra/subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNClient.cpp?rev=1492940&r1=1492939&r2=1492940&view=diff
==============================================================================
--- subversion/branches/javahl-ra/subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNClient.cpp (original)
+++ subversion/branches/javahl-ra/subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNClient.cpp Fri Jun 14 03:02:54 2013
@@ -1864,11 +1864,9 @@ Java_org_apache_subversion_javahl_SVNCli
return NULL;
}
- // TODO: convert path to URL
- JNIStringHolder url(jpath);
+ JNIStringHolder path(jpath);
if (JNIUtil::isJavaExceptionThrown())
return NULL;
- //return cl->openRemoteSession(url);
- return NULL;
+ return cl->openRemoteSession(path);
}
Modified: subversion/branches/javahl-ra/subversion/bindings/javahl/native/org_apache_subversion_javahl_remote_RemoteFactory.cpp
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-ra/subversion/bindings/javahl/native/org_apache_subversion_javahl_remote_RemoteFactory.cpp?rev=1492940&r1=1492939&r2=1492940&view=diff
==============================================================================
--- subversion/branches/javahl-ra/subversion/bindings/javahl/native/org_apache_subversion_javahl_remote_RemoteFactory.cpp (original)
+++ subversion/branches/javahl-ra/subversion/bindings/javahl/native/org_apache_subversion_javahl_remote_RemoteFactory.cpp Fri Jun 14 03:02:54 2013
@@ -53,10 +53,7 @@ Java_org_apache_subversion_javahl_remote
&jremoteSession, jurl, juuid, jconfigDirectory,
jusername, jpassword, jprompter, jprogress);
if (JNIUtil::isJavaExceptionThrown() || !session)
- {
- delete session;
- return NULL;
- }
+ return NULL;
return jremoteSession;
}
Modified: subversion/branches/javahl-ra/subversion/bindings/javahl/tests/org/apache/subversion/javahl/SVNRemoteTests.java
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-ra/subversion/bindings/javahl/tests/org/apache/subversion/javahl/SVNRemoteTests.java?rev=1492940&r1=1492939&r2=1492940&view=diff
==============================================================================
--- subversion/branches/javahl-ra/subversion/bindings/javahl/tests/org/apache/subversion/javahl/SVNRemoteTests.java (original)
+++ subversion/branches/javahl-ra/subversion/bindings/javahl/tests/org/apache/subversion/javahl/SVNRemoteTests.java Fri Jun 14 03:02:54 2013
@@ -165,4 +165,12 @@ public class SVNRemoteTests extends SVNT
assertEquals(getTestRepoUrl(), session.getUrl());
}
+
+ public void testGetUrl_viaSVNClient() throws Exception
+ {
+ ISVNRemote session = client.openRemoteSession(getTestRepoUrl());
+
+ assertEquals(getTestRepoUrl(), session.getUrl());
+ }
+
}