Author: hwright Date: Mon Aug 9 18:59:56 2010 New Revision: 983775 URL: http://svn.apache.org/viewvc?rev=983775&view=rev Log: JavaHL: Add a shim class to allow updating various commity APIs in JavaHL. This does not push those changes up to Java-land, but maintains them all within C++. Also, this only adjusts the call for to svn_client_commit5().
The approach only captures the most recent commit if several are performed by the API, but we currenly don't have any multi-commit APIs. Adjustments will need to happen in Java-land to return multiple values, anyway. * subversion/bindings/javahl/native/SVNClient.cpp (CommitNotifier): New class. (commit): Create a CommitNotifier, and use it in the context to capture commit information. Modified: subversion/trunk/subversion/bindings/javahl/native/SVNClient.cpp Modified: subversion/trunk/subversion/bindings/javahl/native/SVNClient.cpp URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/SVNClient.cpp?rev=983775&r1=983774&r2=983775&view=diff ============================================================================== --- subversion/trunk/subversion/bindings/javahl/native/SVNClient.cpp (original) +++ subversion/trunk/subversion/bindings/javahl/native/SVNClient.cpp Mon Aug 9 18:59:56 2010 @@ -68,6 +68,42 @@ #include <iostream> #include <sstream> +class CommitNotifier +{ + public: + CommitNotifier(SVN::Pool &inPool) + : pool(inPool), info(NULL) + { + ; + } + + static svn_error_t *callback(const svn_commit_info_t *commit_info, + void *baton, + apr_pool_t *pool) + { + if (baton) + return ((CommitNotifier *)baton)->stashInfo(commit_info); + + return SVN_NO_ERROR; + } + + svn_commit_info_t *getInfo() + { + return info; + } + + protected: + svn_error_t *stashInfo(const svn_commit_info_t *commit_info) + { + info = svn_commit_info_dup(commit_info, pool.pool()); + return SVN_NO_ERROR; + } + + private: + SVN::Pool &pool; + svn_commit_info_t *info; +}; + struct log_msg_baton { const char *message; @@ -411,20 +447,24 @@ jlong SVNClient::commit(Targets &targets StringArray &changelists, RevpropTable &revprops) { SVN::Pool requestPool; - svn_commit_info_t *commit_info = NULL; + CommitNotifier commitNotifier(requestPool); const apr_array_header_t *targets2 = targets.array(requestPool); SVN_JNI_ERR(targets.error_occured(), -1); svn_client_ctx_t *ctx = getContext(message); if (ctx == NULL) return SVN_INVALID_REVNUM; - SVN_JNI_ERR(svn_client_commit4(&commit_info, targets2, depth, + ctx->commit_callback2 = CommitNotifier::callback; + ctx->commit_baton = &commitNotifier; + + SVN_JNI_ERR(svn_client_commit5(targets2, depth, noUnlock, keepChangelist, changelists.array(requestPool), revprops.hash(requestPool), ctx, requestPool.pool()), SVN_INVALID_REVNUM); + svn_commit_info_t *commit_info = commitNotifier.getInfo(); if (commit_info && SVN_IS_VALID_REVNUM(commit_info->revision)) return commit_info->revision;