You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by hw...@apache.org on 2010/09/01 17:18:11 UTC
svn commit: r991569 - in /subversion/trunk/subversion/bindings/javahl:
native/ src/org/apache/subversion/javahl/
Author: hwright
Date: Wed Sep 1 15:18:10 2010
New Revision: 991569
URL: http://svn.apache.org/viewvc?rev=991569&view=rev
Log:
JavaHL: First part of an effort to simplify the commit message callback
handling. In C++-land, don't hold a global reference to a commit message
callback, but instead require each commit-y API to provide a commit message
callback.
* subversion/bindings/javahl/native/CommitMessage.h
(makeCCommitMessage): Remove.
(callback): New.
(getCommitMessage): Make protected.
(CommitMessage): Make public.
* subversion/bindings/javahl/native/SVNClient.h
(doImport, mkdir, commit, remove, move, copy): Replace the message param
with the commit callback.
* subversion/bindings/javahl/native/SVNClient.cpp
(remove, commit, copy, move, doImport, mkdir): Same.
* subversion/bindings/javahl/native/CommitMessage.cpp
(~CommitMessage): Don't destory the reference (no need).
(callback): New.
(makeCCommitMessage): Remove.
(getCommitMessage): Return the log message through output params.
* subversion/bindings/javahl/native/ClientContext.h
(m_commitMessage, getCommitMessage, getCommitMessageBaton): Remove.
(getContext): Accept a commit message handler, rather than a message.
(commitMessageHandler): Remove.
* subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNClient.cpp
(Java_org_apache_subversion_javahl_SVNClient_commitMessageHandler): Remove.
(Java_org_apache_subversion_javahl_SVNClient_remove,
Java_org_apache_subversion_javahl_SVNClient_commit,
Java_org_apache_subversion_javahl_SVNClient_copy,
Java_org_apache_subversion_javahl_SVNClient_move,
Java_org_apache_subversion_javahl_SVNClient_mkdir,
Java_org_apache_subversion_javahl_SVNClient_doImport):
Convert to use an explicit commit message handler, rather than just a
commit message.
* subversion/bindings/javahl/native/ClientContext.cpp
(ClientContext): Don't initialize the global commit message value,
but do initialize the log message func.
(~ClientContext): Don't destroy the global commit message value.
(getContext): Set the log message baton as the provided message handler.
(getCommitMessage, getCommitMessageBaton, commitMessageHandler): Remove.
* subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNClient.java
(commitMessageHandler): Add a native implementation.
(remove, commit, copy, move, mkdir, doImport): Implement the public API as
wrappers around the update C++ APIs.
(ConstMsg): New helper class to implement the above wrappers.
Modified:
subversion/trunk/subversion/bindings/javahl/native/ClientContext.cpp
subversion/trunk/subversion/bindings/javahl/native/ClientContext.h
subversion/trunk/subversion/bindings/javahl/native/CommitMessage.cpp
subversion/trunk/subversion/bindings/javahl/native/CommitMessage.h
subversion/trunk/subversion/bindings/javahl/native/SVNClient.cpp
subversion/trunk/subversion/bindings/javahl/native/SVNClient.h
subversion/trunk/subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNClient.cpp
subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNClient.java
Modified: subversion/trunk/subversion/bindings/javahl/native/ClientContext.cpp
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/ClientContext.cpp?rev=991569&r1=991568&r2=991569&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/native/ClientContext.cpp (original)
+++ subversion/trunk/subversion/bindings/javahl/native/ClientContext.cpp Wed Sep 1 15:18:10 2010
@@ -44,8 +44,7 @@ struct log_msg_baton
};
ClientContext::ClientContext(jobject jsvnclient)
- : m_prompter(NULL),
- m_commitMessage(NULL)
+ : m_prompter(NULL)
{
JNIEnv *env = JNIUtil::getEnv();
JNICriticalSection criticalSection(*JNIUtil::getGlobalPoolMutex());
@@ -85,7 +84,7 @@ ClientContext::ClientContext(jobject jsv
this object. */
persistentCtx->notify_func = NULL;
persistentCtx->notify_baton = NULL;
- persistentCtx->log_msg_func3 = getCommitMessage;
+ persistentCtx->log_msg_func3 = CommitMessage::callback;
persistentCtx->cancel_func = checkCancel;
persistentCtx->cancel_baton = this;
persistentCtx->notify_func2= notify;
@@ -99,14 +98,13 @@ ClientContext::ClientContext(jobject jsv
ClientContext::~ClientContext()
{
delete m_prompter;
- delete m_commitMessage;
JNIEnv *env = JNIUtil::getEnv();
env->DeleteGlobalRef(m_jctx);
}
svn_client_ctx_t *
-ClientContext::getContext(const char *message)
+ClientContext::getContext(CommitMessage *message)
{
SVN::Pool *requestPool = JNIUtil::getRequestPool();
apr_pool_t *pool = requestPool->pool();
@@ -211,58 +209,12 @@ ClientContext::getContext(const char *me
m_passWord.c_str());
ctx->auth_baton = ab;
- ctx->log_msg_baton3 = getCommitMessageBaton(message);
+ ctx->log_msg_baton3 = message;
m_cancelOperation = false;
return ctx;
}
-svn_error_t *
-ClientContext::getCommitMessage(const char **log_msg,
- const char **tmp_file,
- const apr_array_header_t *commit_items,
- void *baton,
- apr_pool_t *pool)
-{
- *log_msg = NULL;
- *tmp_file = NULL;
- log_msg_baton *lmb = (log_msg_baton *) baton;
-
- if (lmb && lmb->messageHandler)
- {
- jstring jmsg = lmb->messageHandler->getCommitMessage(commit_items);
- if (jmsg != NULL)
- {
- JNIStringHolder msg(jmsg);
- *log_msg = apr_pstrdup(pool, msg);
- }
- return SVN_NO_ERROR;
- }
- else if (lmb && lmb->message)
- {
- *log_msg = apr_pstrdup(pool, lmb->message);
- return SVN_NO_ERROR;
- }
-
- return SVN_NO_ERROR;
-}
-
-void *
-ClientContext::getCommitMessageBaton(const char *message)
-{
- if (message != NULL || m_commitMessage)
- {
- log_msg_baton *baton = (log_msg_baton *)
- apr_palloc(JNIUtil::getRequestPool()->pool(), sizeof(*baton));
-
- baton->message = message;
- baton->messageHandler = m_commitMessage;
-
- return baton;
- }
- return NULL;
-}
-
void
ClientContext::username(const char *pi_username)
{
@@ -300,13 +252,6 @@ ClientContext::getConfigDirectory()
}
void
-ClientContext::commitMessageHandler(CommitMessage *commitMessage)
-{
- delete m_commitMessage;
- m_commitMessage = commitMessage;
-}
-
-void
ClientContext::cancelOperation()
{
m_cancelOperation = true;
Modified: subversion/trunk/subversion/bindings/javahl/native/ClientContext.h
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/ClientContext.h?rev=991569&r1=991568&r2=991569&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/native/ClientContext.h (original)
+++ subversion/trunk/subversion/bindings/javahl/native/ClientContext.h Wed Sep 1 15:18:10 2010
@@ -56,22 +56,6 @@ class ClientContext
Prompter *m_prompter;
bool m_cancelOperation;
- CommitMessage *m_commitMessage;
-
- /**
- * Implements the svn_client_get_commit_log3_t API.
- */
- static svn_error_t *getCommitMessage(const char **log_msg,
- const char **tmp_file,
- const apr_array_header_t *
- commit_items,
- void *baton,
- apr_pool_t *pool);
- /**
- * Produce a baton for the getCommitMessage() callback.
- */
- void *getCommitMessageBaton(const char *message);
-
protected:
static void notify(void *baton, const svn_wc_notify_t *notify,
apr_pool_t *pool);
@@ -90,12 +74,11 @@ class ClientContext
static svn_error_t *checkCancel(void *cancelBaton);
- svn_client_ctx_t *getContext(const char *message);
+ svn_client_ctx_t *getContext(CommitMessage *message);
void username(const char *pi_username);
void password(const char *pi_password);
void setPrompt(Prompter *prompter);
- void commitMessageHandler(CommitMessage *commitMessage);
void cancelOperation();
const char *getConfigDirectory();
Modified: subversion/trunk/subversion/bindings/javahl/native/CommitMessage.cpp
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/CommitMessage.cpp?rev=991569&r1=991568&r2=991569&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/native/CommitMessage.cpp (original)
+++ subversion/trunk/subversion/bindings/javahl/native/CommitMessage.cpp Wed Sep 1 15:18:10 2010
@@ -28,6 +28,8 @@
#include "CreateJ.h"
#include "EnumMapper.h"
#include "JNIUtil.h"
+#include "JNIStringHolder.h"
+
#include <apr_tables.h>
#include "svn_client.h"
@@ -38,61 +40,33 @@ CommitMessage::CommitMessage(jobject jco
CommitMessage::~CommitMessage()
{
- // Since the m_jcommitMessage is a global reference, it has to be
- // deleted to allow the Java garbage collector to reclaim the
- // object.
- if (m_jcommitMessage!= NULL)
- {
- JNIEnv *env = JNIUtil::getEnv();
- env->DeleteGlobalRef(m_jcommitMessage);
- }
+ // No need to delete the local reference
}
-CommitMessage *CommitMessage::makeCCommitMessage(jobject jcommitMessage)
+svn_error_t *
+CommitMessage::callback(const char **log_msg,
+ const char **tmp_file,
+ const apr_array_header_t *commit_items,
+ void *baton,
+ apr_pool_t *pool)
{
- // If there is no object passed into this method, there is no need
- // for a C++ holding object.
- if (jcommitMessage == NULL)
- return NULL;
-
- // Sanity check, that the passed Java object implements the right
- // interface.
- JNIEnv *env = JNIUtil::getEnv();
- jclass clazz = env->FindClass(JAVA_PACKAGE"/CommitMessage");
- if (JNIUtil::isJavaExceptionThrown())
- return NULL;
-
- if (!env->IsInstanceOf(jcommitMessage, clazz))
- {
- env->DeleteLocalRef(clazz);
- return NULL;
- }
- env->DeleteLocalRef(clazz);
-
- // Since the reference is longer needed then the duration of the
- // SVNClient.commtMessage, the local reference has to be converted
- // to a global reference.
- jobject myCommitMessage = env->NewGlobalRef(jcommitMessage);
- if (JNIUtil::isJavaExceptionThrown())
- return NULL;
-
- // create & return the holding object
- return new CommitMessage(myCommitMessage);
+ if (baton && ((CommitMessage *)baton)->m_jcommitMessage)
+ return ((CommitMessage *)baton)->getCommitMessage(log_msg, tmp_file,
+ commit_items, pool);
+
+ *log_msg = NULL;
+ *tmp_file = NULL;
+ return SVN_NO_ERROR;
}
-/**
- * Call the Java callback method to retrieve the commit message
- * @param commit_items the array of the items of this commit
- * @returns the commit message
- */
-jstring
-CommitMessage::getCommitMessage(const apr_array_header_t *commit_items)
+svn_error_t *
+CommitMessage::getCommitMessage(const char **log_msg,
+ const char **tmp_file,
+ const apr_array_header_t *commit_items,
+ apr_pool_t *pool)
{
+ *tmp_file = NULL;
JNIEnv *env = JNIUtil::getEnv();
- // create an Java array for the commit items
-
- // Java method ids will not change during the time this library is
- // loaded, so they can be cached.
// get the method if for the CommitMessage callback method
static jmethodID midCallback = 0;
@@ -100,12 +74,12 @@ CommitMessage::getCommitMessage(const ap
{
jclass clazz2 = env->FindClass(JAVA_PACKAGE"/CommitMessage");
if (JNIUtil::isJavaExceptionThrown())
- return NULL;
+ return SVN_NO_ERROR;
midCallback = env->GetMethodID(clazz2, "getLogMessage",
"(Ljava/util/Set;)Ljava/lang/String;");
if (JNIUtil::isJavaExceptionThrown())
- return NULL;
+ return SVN_NO_ERROR;
env->DeleteLocalRef(clazz2);
}
@@ -128,7 +102,15 @@ CommitMessage::getCommitMessage(const ap
midCallback,
CreateJ::Set(jitems));
if (JNIUtil::isJavaExceptionThrown())
- return NULL;
+ return SVN_NO_ERROR;
+
+ if (jmessage != NULL)
+ {
+ JNIStringHolder msg(jmessage);
+ *log_msg = apr_pstrdup(pool, msg);
+ }
+ else
+ *log_msg = NULL;
- return jmessage;
+ return SVN_NO_ERROR;
}
Modified: subversion/trunk/subversion/bindings/javahl/native/CommitMessage.h
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/CommitMessage.h?rev=991569&r1=991568&r2=991569&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/native/CommitMessage.h (original)
+++ subversion/trunk/subversion/bindings/javahl/native/CommitMessage.h Wed Sep 1 15:18:10 2010
@@ -28,7 +28,8 @@
#define COMMITMESSAGE_H
#include <jni.h>
-struct apr_array_header_t;
+
+#include "svn_client.h"
/**
* This class stores a Java object implementing the CommitMessage
@@ -37,36 +38,25 @@ struct apr_array_header_t;
class CommitMessage
{
public:
- /**
- * Deletes the global reference to m_jcommitMessage.
- */
+ CommitMessage(jobject jcommitMessage);
~CommitMessage();
- jstring getCommitMessage(const apr_array_header_t *commit_items);
-
- /**
- * Create a C++ holding object for the Java object passed into the
- * native code.
- *
- * @param jcommitMessage The local reference to a
- * org.tigris.subversion.javahl.CommitMessage Java commit message
- * object.
- */
- static CommitMessage *makeCCommitMessage(jobject jcommitMessage);
+ static svn_error_t *callback(const char **log_msg,
+ const char **tmp_file,
+ const apr_array_header_t *commit_items,
+ void *baton,
+ apr_pool_t *pool);
+
+ protected:
+ svn_error_t *getCommitMessage(const char **log_msg,
+ const char **tmp_file,
+ const apr_array_header_t *commit_items,
+ apr_pool_t *pool);
private:
- /**
- * A global reference to the Java object, because the reference
- * must be valid longer than the SVNClient.commitMessage call.
- */
+ /* A local reference. */
jobject m_jcommitMessage;
- /**
- * Create a commit message object.
- *
- * @param jcommitMessage The Java object to receive the callback.
- */
- CommitMessage(jobject jcommitMessage);
};
#endif // COMMITMESSAGE_H
Modified: subversion/trunk/subversion/bindings/javahl/native/SVNClient.cpp
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/SVNClient.cpp?rev=991569&r1=991568&r2=991569&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/native/SVNClient.cpp (original)
+++ subversion/trunk/subversion/bindings/javahl/native/SVNClient.cpp Wed Sep 1 15:18:10 2010
@@ -263,7 +263,7 @@ jlong SVNClient::checkout(const char *mo
return rev;
}
-void SVNClient::remove(Targets &targets, const char *message, bool force,
+void SVNClient::remove(Targets &targets, CommitMessage *message, bool force,
bool keep_local, RevpropTable &revprops,
CommitCallback *callback)
{
@@ -359,7 +359,7 @@ jlongArray SVNClient::update(Targets &ta
return jrevs;
}
-void SVNClient::commit(Targets &targets, const char *message,
+void SVNClient::commit(Targets &targets, CommitMessage *message,
svn_depth_t depth, bool noUnlock, bool keepChangelist,
StringArray &changelists, RevpropTable &revprops,
CommitCallback *callback)
@@ -381,9 +381,9 @@ void SVNClient::commit(Targets &targets,
}
void SVNClient::copy(CopySources ©Sources, const char *destPath,
- const char *message, bool copyAsChild, bool makeParents,
- bool ignoreExternals, RevpropTable &revprops,
- CommitCallback *callback)
+ CommitMessage *message, bool copyAsChild,
+ bool makeParents, bool ignoreExternals,
+ RevpropTable &revprops, CommitCallback *callback)
{
SVN::Pool requestPool;
@@ -410,7 +410,7 @@ void SVNClient::copy(CopySources ©So
}
void SVNClient::move(Targets &srcPaths, const char *destPath,
- const char *message, bool force, bool moveAsChild,
+ CommitMessage *message, bool force, bool moveAsChild,
bool makeParents, RevpropTable &revprops,
CommitCallback *callback)
{
@@ -433,8 +433,9 @@ void SVNClient::move(Targets &srcPaths,
requestPool.pool()), );
}
-void SVNClient::mkdir(Targets &targets, const char *message, bool makeParents,
- RevpropTable &revprops, CommitCallback *callback)
+void SVNClient::mkdir(Targets &targets, CommitMessage *message,
+ bool makeParents, RevpropTable &revprops,
+ CommitCallback *callback)
{
SVN::Pool requestPool;
svn_client_ctx_t *ctx = context.getContext(message);
@@ -545,7 +546,7 @@ jlong SVNClient::doSwitch(const char *pa
}
void SVNClient::doImport(const char *path, const char *url,
- const char *message, svn_depth_t depth,
+ CommitMessage *message, svn_depth_t depth,
bool noIgnore, bool ignoreUnknownNodeTypes,
RevpropTable &revprops, CommitCallback *callback)
{
Modified: subversion/trunk/subversion/bindings/javahl/native/SVNClient.h
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/SVNClient.h?rev=991569&r1=991568&r2=991569&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/native/SVNClient.h (original)
+++ subversion/trunk/subversion/bindings/javahl/native/SVNClient.h Wed Sep 1 15:18:10 2010
@@ -103,7 +103,7 @@ class SVNClient :public SVNBase
bool ignoreAncestry, bool dryRun, bool recordOnly);
void mergeReintegrate(const char *path, Revision &pegRevision,
const char *localPath, bool dryRun);
- void doImport(const char *path, const char *url, const char *message,
+ void doImport(const char *path, const char *url, CommitMessage *message,
svn_depth_t depth, bool noIgnore, bool ignoreUnknownNodeTypes,
RevpropTable &revprops, CommitCallback *callback);
jlong doSwitch(const char *path, const char *url, Revision &revision,
@@ -117,16 +117,16 @@ class SVNClient :public SVNBase
void resolve(const char *path, svn_depth_t depth,
svn_wc_conflict_choice_t choice);
void cleanup(const char *path);
- void mkdir(Targets &targets, const char *message, bool makeParents,
+ void mkdir(Targets &targets, CommitMessage *message, bool makeParents,
RevpropTable &revprops, CommitCallback *callback);
void move(Targets &srcPaths, const char *destPath,
- const char *message, bool force, bool moveAsChild,
+ CommitMessage *message, bool force, bool moveAsChild,
bool makeParents, RevpropTable &revprops, CommitCallback *callback);
void copy(CopySources ©Sources, const char *destPath,
- const char *message, bool copyAsChild, bool makeParents,
+ CommitMessage *message, bool copyAsChild, bool makeParents,
bool ignoreExternals, RevpropTable &revprops,
CommitCallback *callback);
- void commit(Targets &targets, const char *message, svn_depth_t depth,
+ void commit(Targets &targets, CommitMessage *message, svn_depth_t depth,
bool noUnlock, bool keepChangelist,
StringArray &changelists, RevpropTable &revprops,
CommitCallback *callback);
@@ -136,7 +136,7 @@ class SVNClient :public SVNBase
void add(const char *path, svn_depth_t depth, bool force, bool no_ignore,
bool add_parents);
void revert(const char *path, svn_depth_t depth, StringArray &changelists);
- void remove(Targets &targets, const char *message, bool force,
+ void remove(Targets &targets, CommitMessage *message, bool force,
bool keep_local, RevpropTable &revprops,
CommitCallback *callback);
jlong checkout(const char *moduleName, const char *destPath,
Modified: subversion/trunk/subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNClient.cpp
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNClient.cpp?rev=991569&r1=991568&r2=991569&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNClient.cpp (original)
+++ subversion/trunk/subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNClient.cpp Wed Sep 1 15:18:10 2010
@@ -343,28 +343,10 @@ Java_org_apache_subversion_javahl_SVNCli
}
JNIEXPORT void JNICALL
-Java_org_apache_subversion_javahl_SVNClient_commitMessageHandler
-(JNIEnv *env, jobject jthis, jobject jcommitMessage)
-{
- JNIEntry(SVNClient, commitMessageHandler);
- SVNClient *cl = SVNClient::getCppObject(jthis);
- if (cl == NULL)
- {
- JNIUtil::throwError("bad C++ this");
- return;
- }
- CommitMessage *commitMessage =
- CommitMessage::makeCCommitMessage(jcommitMessage);
- if (JNIUtil::isExceptionThrown())
- return;
-
- cl->getClientContext().commitMessageHandler(commitMessage);
-}
-
-JNIEXPORT void JNICALL
Java_org_apache_subversion_javahl_SVNClient_remove
-(JNIEnv *env, jobject jthis, jobject jtargets, jstring jmessage,
- jboolean jforce, jboolean keepLocal, jobject jrevpropTable, jobject jcallback)
+(JNIEnv *env, jobject jthis, jobject jtargets, jboolean jforce,
+ jboolean keepLocal, jobject jrevpropTable, jobject jmessage,
+ jobject jcallback)
{
JNIEntry(SVNClient, remove);
SVNClient *cl = SVNClient::getCppObject(jthis);
@@ -375,7 +357,10 @@ Java_org_apache_subversion_javahl_SVNCli
}
StringArray targetsArr(jtargets);
Targets targets(targetsArr);
- JNIStringHolder message(jmessage);
+ if (JNIUtil::isExceptionThrown())
+ return;
+
+ CommitMessage message(jmessage);
if (JNIUtil::isExceptionThrown())
return;
@@ -384,7 +369,7 @@ Java_org_apache_subversion_javahl_SVNCli
return;
CommitCallback callback(jcallback);
- cl->remove(targets, message, jforce ? true : false,
+ cl->remove(targets, &message, jforce ? true : false,
keepLocal ? true : false, revprops, jcallback ? &callback : NULL);
}
@@ -461,9 +446,9 @@ Java_org_apache_subversion_javahl_SVNCli
JNIEXPORT void JNICALL
Java_org_apache_subversion_javahl_SVNClient_commit
-(JNIEnv *env, jobject jthis, jobject jtargets, jstring jmessage, jobject jdepth,
+(JNIEnv *env, jobject jthis, jobject jtargets, jobject jdepth,
jboolean jnoUnlock, jboolean jkeepChangelist, jobject jchangelists,
- jobject jrevpropTable, jobject jcallback)
+ jobject jrevpropTable, jobject jmessage, jobject jcallback)
{
JNIEntry(SVNClient, commit);
SVNClient *cl = SVNClient::getCppObject(jthis);
@@ -474,7 +459,10 @@ Java_org_apache_subversion_javahl_SVNCli
}
StringArray targetsArr(jtargets);
Targets targets(targetsArr);
- JNIStringHolder message(jmessage);
+ if (JNIUtil::isExceptionThrown())
+ return;
+
+ CommitMessage message(jmessage);
if (JNIUtil::isExceptionThrown())
return;
@@ -488,7 +476,7 @@ Java_org_apache_subversion_javahl_SVNCli
return;
CommitCallback callback(jcallback);
- cl->commit(targets, message, EnumMapper::toDepth(jdepth),
+ cl->commit(targets, &message, EnumMapper::toDepth(jdepth),
jnoUnlock ? true : false, jkeepChangelist ? true : false,
changelists, revprops,
jcallback ? &callback : NULL);
@@ -497,8 +485,8 @@ Java_org_apache_subversion_javahl_SVNCli
JNIEXPORT void JNICALL
Java_org_apache_subversion_javahl_SVNClient_copy
(JNIEnv *env, jobject jthis, jobject jcopySources, jstring jdestPath,
- jstring jmessage, jboolean jcopyAsChild, jboolean jmakeParents,
- jboolean jignoreExternals, jobject jrevpropTable, jobject jcallback)
+ jboolean jcopyAsChild, jboolean jmakeParents, jboolean jignoreExternals,
+ jobject jrevpropTable, jobject jmessage, jobject jcallback)
{
JNIEntry(SVNClient, copy);
@@ -520,7 +508,7 @@ Java_org_apache_subversion_javahl_SVNCli
if (JNIUtil::isExceptionThrown())
return;
-JNIStringHolder message(jmessage);
+ CommitMessage message(jmessage);
if (JNIUtil::isExceptionThrown())
return;
@@ -529,7 +517,7 @@ JNIStringHolder message(jmessage);
return;
CommitCallback callback(jcallback);
- cl->copy(copySources, destPath, message, jcopyAsChild ? true : false,
+ cl->copy(copySources, destPath, &message, jcopyAsChild ? true : false,
jmakeParents ? true : false, jignoreExternals ? true : false,
revprops, jcallback ? &callback : NULL);
}
@@ -537,8 +525,8 @@ JNIStringHolder message(jmessage);
JNIEXPORT void JNICALL
Java_org_apache_subversion_javahl_SVNClient_move
(JNIEnv *env, jobject jthis, jobject jsrcPaths, jstring jdestPath,
- jstring jmessage, jboolean jforce, jboolean jmoveAsChild,
- jboolean jmakeParents, jobject jrevpropTable, jobject jcallback)
+ jboolean jforce, jboolean jmoveAsChild, jboolean jmakeParents,
+ jobject jrevpropTable, jobject jmessage, jobject jcallback)
{
JNIEntry(SVNClient, move);
@@ -555,7 +543,8 @@ Java_org_apache_subversion_javahl_SVNCli
JNIStringHolder destPath(jdestPath);
if (JNIUtil::isExceptionThrown())
return;
- JNIStringHolder message(jmessage);
+
+ CommitMessage message(jmessage);
if (JNIUtil::isExceptionThrown())
return;
@@ -564,15 +553,15 @@ Java_org_apache_subversion_javahl_SVNCli
return;
CommitCallback callback(jcallback);
- cl->move(srcPaths, destPath, message, jforce ? true : false,
+ cl->move(srcPaths, destPath, &message, jforce ? true : false,
jmoveAsChild ? true : false, jmakeParents ? true : false,
revprops, jcallback ? &callback : NULL);
}
JNIEXPORT void JNICALL
Java_org_apache_subversion_javahl_SVNClient_mkdir
-(JNIEnv *env, jobject jthis, jobject jtargets, jstring jmessage,
- jboolean jmakeParents, jobject jrevpropTable, jobject jcallback)
+(JNIEnv *env, jobject jthis, jobject jtargets, jboolean jmakeParents,
+ jobject jrevpropTable, jobject jmessage, jobject jcallback)
{
JNIEntry(SVNClient, mkdir);
SVNClient *cl = SVNClient::getCppObject(jthis);
@@ -583,7 +572,10 @@ Java_org_apache_subversion_javahl_SVNCli
}
StringArray targetsArr(jtargets);
Targets targets(targetsArr);
- JNIStringHolder message(jmessage);
+ if (JNIUtil::isExceptionThrown())
+ return;
+
+ CommitMessage message(jmessage);
if (JNIUtil::isExceptionThrown())
return;
@@ -592,7 +584,7 @@ Java_org_apache_subversion_javahl_SVNCli
return;
CommitCallback callback(jcallback);
- cl->mkdir(targets, message, jmakeParents ? true : false, revprops,
+ cl->mkdir(targets, &message, jmakeParents ? true : false, revprops,
jcallback ? &callback : NULL);
}
@@ -709,9 +701,9 @@ Java_org_apache_subversion_javahl_SVNCli
JNIEXPORT void JNICALL
Java_org_apache_subversion_javahl_SVNClient_doImport
-(JNIEnv *env, jobject jthis, jstring jpath, jstring jurl, jstring jmessage,
- jobject jdepth, jboolean jnoIgnore, jboolean jignoreUnknownNodeTypes,
- jobject jrevpropTable, jobject jcallback)
+(JNIEnv *env, jobject jthis, jstring jpath, jstring jurl, jobject jdepth,
+ jboolean jnoIgnore, jboolean jignoreUnknownNodeTypes, jobject jrevpropTable,
+ jobject jmessage, jobject jcallback)
{
JNIEntry(SVNClient, doImport);
SVNClient *cl = SVNClient::getCppObject(jthis);
@@ -728,7 +720,7 @@ Java_org_apache_subversion_javahl_SVNCli
if (JNIUtil::isExceptionThrown())
return;
- JNIStringHolder message(jmessage);
+ CommitMessage message(jmessage);
if (JNIUtil::isExceptionThrown())
return;
@@ -737,7 +729,7 @@ Java_org_apache_subversion_javahl_SVNCli
return;
CommitCallback callback(jcallback);
- cl->doImport(path, url, message, EnumMapper::toDepth(jdepth),
+ cl->doImport(path, url, &message, EnumMapper::toDepth(jdepth),
jnoIgnore ? true : false,
jignoreUnknownNodeTypes ? true : false, revprops,
jcallback ? &callback : NULL);
Modified: subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNClient.java
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNClient.java?rev=991569&r1=991568&r2=991569&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNClient.java (original)
+++ subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNClient.java Wed Sep 1 15:18:10 2010
@@ -200,15 +200,31 @@ public class SVNClient implements ISVNCl
/**
* @since 1.0
*/
- public native void commitMessageHandler(CommitMessage messageHandler);
+ public void commitMessageHandler(CommitMessage messageHandler)
+ {
+ this.messageHandler = messageHandler;
+ }
+
+ private CommitMessage messageHandler = null;
/**
* @since 1.5
*/
- public native void remove(Set<String> paths, String message, boolean force,
- boolean keepLocal,
- Map<String, String> revpropTable,
- CommitCallback callback)
+ public void remove(Set<String> paths, String message, boolean force,
+ boolean keepLocal,
+ Map<String, String> revpropTable,
+ CommitCallback callback)
+ throws ClientException
+ {
+ remove(paths, force, keepLocal, revpropTable, new ConstMsg(message),
+ callback);
+ }
+
+ private native void remove(Set<String> paths, boolean force,
+ boolean keepLocal,
+ Map<String, String> revpropTable,
+ CommitMessage handler,
+ CommitCallback callback)
throws ClientException;
/**
@@ -237,40 +253,87 @@ public class SVNClient implements ISVNCl
/**
* @since 1.5
*/
- public native void commit(Set<String> paths, String message, Depth depth,
- boolean noUnlock, boolean keepChangelist,
- Collection<String> changelists,
- Map<String, String> revpropTable,
- CommitCallback callback)
+ public void commit(Set<String> paths, String message, Depth depth,
+ boolean noUnlock, boolean keepChangelist,
+ Collection<String> changelists,
+ Map<String, String> revpropTable,
+ CommitCallback callback)
+ throws ClientException
+ {
+ commit(paths, depth, noUnlock, keepChangelist, changelists,
+ revpropTable, new ConstMsg(message), callback);
+ }
+
+ private native void commit(Set<String> paths, Depth depth,
+ boolean noUnlock, boolean keepChangelist,
+ Collection<String> changelists,
+ Map<String, String> revpropTable,
+ CommitMessage handler,
+ CommitCallback callback)
throws ClientException;
/**
* @since 1.7
*/
- public native void copy(List<CopySource> sources, String destPath,
- String message, boolean copyAsChild,
- boolean makeParents, boolean ignoreExternals,
- Map<String, String> revpropTable,
- CommitCallback callback)
+ public void copy(List<CopySource> sources, String destPath,
+ String message, boolean copyAsChild,
+ boolean makeParents, boolean ignoreExternals,
+ Map<String, String> revpropTable,
+ CommitCallback callback)
+ throws ClientException
+ {
+ copy(sources, destPath, copyAsChild, makeParents, ignoreExternals,
+ revpropTable, new ConstMsg(message), callback);
+ }
+
+ private native void copy(List<CopySource> sources, String destPath,
+ boolean copyAsChild,
+ boolean makeParents, boolean ignoreExternals,
+ Map<String, String> revpropTable,
+ CommitMessage handler,
+ CommitCallback callback)
throws ClientException;
/**
* @since 1.5
*/
- public native void move(Set<String> srcPaths, String destPath,
- String message, boolean force, boolean moveAsChild,
- boolean makeParents,
- Map<String, String> revpropTable,
- CommitCallback callback)
+ public void move(Set<String> srcPaths, String destPath,
+ String message, boolean force, boolean moveAsChild,
+ boolean makeParents,
+ Map<String, String> revpropTable,
+ CommitCallback callback)
+ throws ClientException
+ {
+ move(srcPaths, destPath, force, moveAsChild, makeParents,
+ revpropTable, new ConstMsg(message), callback);
+ }
+
+ private native void move(Set<String> srcPaths, String destPath,
+ boolean force, boolean moveAsChild,
+ boolean makeParents,
+ Map<String, String> revpropTable,
+ CommitMessage handler,
+ CommitCallback callback)
throws ClientException;
/**
* @since 1.5
*/
- public native void mkdir(Set<String> paths, String message,
- boolean makeParents,
- Map<String, String> revpropTable,
- CommitCallback callback)
+ public void mkdir(Set<String> paths, String message,
+ boolean makeParents,
+ Map<String, String> revpropTable,
+ CommitCallback callback)
+ throws ClientException
+ {
+ mkdir(paths, makeParents, revpropTable, new ConstMsg(message),
+ callback);
+ }
+
+ private native void mkdir(Set<String> paths,
+ boolean makeParents,
+ Map<String, String> revpropTable,
+ CommitMessage handler,
+ CommitCallback callback)
throws ClientException;
/**
@@ -307,11 +370,23 @@ public class SVNClient implements ISVNCl
/**
* @since 1.5
*/
- public native void doImport(String path, String url, String message,
- Depth depth, boolean noIgnore,
- boolean ignoreUnknownNodeTypes,
- Map<String, String> revpropTable,
- CommitCallback callback)
+ public void doImport(String path, String url, String message,
+ Depth depth, boolean noIgnore,
+ boolean ignoreUnknownNodeTypes,
+ Map<String, String> revpropTable,
+ CommitCallback callback)
+ throws ClientException
+ {
+ doImport(path, url, depth, noIgnore, ignoreUnknownNodeTypes,
+ revpropTable, new ConstMsg(message), callback);
+ }
+
+ private native void doImport(String path, String url,
+ Depth depth, boolean noIgnore,
+ boolean ignoreUnknownNodeTypes,
+ Map<String, String> revpropTable,
+ CommitMessage handler,
+ CommitCallback callback)
throws ClientException;
/**
@@ -682,4 +757,25 @@ public class SVNClient implements ISVNCl
null);
}
}
+
+ private class ConstMsg
+ implements CommitMessage
+ {
+ private String message;
+
+ public ConstMsg(String message)
+ {
+ this.message = message;
+ }
+
+ public String getLogMessage(Set<CommitItem> items)
+ {
+ if (message != null)
+ return message;
+ else if (messageHandler != null)
+ return messageHandler.getLogMessage(items);
+ else
+ return null;
+ }
+ }
}