[[[ Followup to r28979: Add mergeReintegrate method to JavaHL. [ in subversion/bindings/javahl/ ] * native/SVNClient.h, native/SVNClient.cpp (mergeReintegrate): Add method and call svn_client_merge_reintegrate. * native/org_tigris_subversion_javahl_SVNClient.cpp (Java_org_tigris_subversion_javahl_SVNClient_mergeReintegrate__Ljava_lang_String_2Lorg_tigris_subversion_javahl_Revision_2Ljava_lang_String_2ZZ): Added mergeReintegrate method. * src/org/tigris/subversion/javahl/SVNClientInterface.java, src/org/tigris/subversion/javahl/SVNClient.java, src/org/tigris/subversion/javahl/SVNClientSynchronized.java (mergeReintegrate): Added method. ]]] Index: subversion/bindings/javahl/native/org_tigris_subversion_javahl_SVNClient.cpp =================================================================== --- subversion/bindings/javahl/native/org_tigris_subversion_javahl_SVNClient.cpp (revision 28982) +++ subversion/bindings/javahl/native/org_tigris_subversion_javahl_SVNClient.cpp (working copy) @@ -872,6 +872,36 @@ } JNIEXPORT void JNICALL +Java_org_tigris_subversion_javahl_SVNClient_mergeReintegrate__Ljava_lang_String_2Lorg_tigris_subversion_javahl_Revision_2Ljava_lang_String_2ZZ +(JNIEnv *env, jobject jthis, jstring jpath, jobject jpegRevision, + jstring jlocalPath, jboolean jforce, jboolean jdryRun) +{ + JNIEntry(SVNClient, mergeReintegrate); + SVNClient *cl = SVNClient::getCppObject(jthis); + if (cl == NULL) + { + JNIUtil::throwError(_("bad C++ this")); + return; + } + + JNIStringHolder path(jpath); + if (JNIUtil::isExceptionThrown()) + return; + + Revision pegRevision(jpegRevision); + if (JNIUtil::isExceptionThrown()) + return; + + JNIStringHolder localPath(jlocalPath); + if (JNIUtil::isExceptionThrown()) + return; + + cl->mergeReintegrate(path, pegRevision, localPath, + jforce ? true:false, + jdryRun ? true:false); +} + +JNIEXPORT void JNICALL Java_org_tigris_subversion_javahl_SVNClient_properties (JNIEnv *env, jobject jthis, jstring jpath, jobject jrevision, jobject jpegRevision, jint jdepth, jobjectArray jchangelists, Index: subversion/bindings/javahl/native/SVNClient.h =================================================================== --- subversion/bindings/javahl/native/SVNClient.h (revision 28982) +++ subversion/bindings/javahl/native/SVNClient.h (working copy) @@ -100,6 +100,8 @@ std::vector &rangesToMerge, const char *localPath, bool force, svn_depth_t depth, bool ignoreAncestry, bool dryRun, bool recordOnly); + void mergeReintegrate(const char *path, Revision &pegRevision, + const char *localPath, bool force, bool dryRun); void doImport(const char *path, const char *url, const char *message, svn_depth_t depth, bool noIgnore, bool ignoreUnknownNodeTypes); jlong doSwitch(const char *path, const char *url, Revision &revision, Index: subversion/bindings/javahl/native/SVNClient.cpp =================================================================== --- subversion/bindings/javahl/native/SVNClient.cpp (revision 28982) +++ subversion/bindings/javahl/native/SVNClient.cpp (working copy) @@ -709,6 +709,30 @@ requestPool.pool()), ); } +void SVNClient::mergeReintegrate(const char *path, Revision &pegRevision, + const char *localPath, bool force, bool dryRun) +{ + Pool requestPool; + SVN_JNI_NULL_PTR_EX(path, "path", ); + SVN_JNI_NULL_PTR_EX(localPath, "localPath", ); + Path intLocalPath(localPath); + SVN_JNI_ERR(intLocalPath.error_occured(), ); + + Path srcPath(path); + SVN_JNI_ERR(srcPath.error_occured(), ); + + svn_client_ctx_t *ctx = getContext(NULL); + if (ctx == NULL) + return; + + SVN_JNI_ERR(svn_client_merge_reintegrate(srcPath.c_str(), + pegRevision.revision(), + intLocalPath.c_str(), + force, dryRun, + NULL, ctx, + requestPool.pool()), ); +} + jobject SVNClient::getMergeInfo(const char *target, Revision &pegRevision) { Index: subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNClientSynchronized.java =================================================================== --- subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNClientSynchronized.java (revision 28982) +++ subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNClientSynchronized.java (working copy) @@ -994,6 +994,20 @@ /** * @since 1.5 */ + public void mergeReintegrate(String path, Revision pegRevision, + String localPath, boolean force, + boolean dryRun) + throws ClientException + { + synchronized(clazz) + { + worker.mergeReintegrate(path, pegRevision, localPath, force, dryRun); + } + } + + /** + * @since 1.5 + */ public MergeInfo getMergeInfo(String path, Revision pegRevision) throws SubversionException { Index: subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNClient.java =================================================================== --- subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNClient.java (revision 28982) +++ subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNClient.java (working copy) @@ -765,6 +765,14 @@ /** * @since 1.5 */ + public native void mergeReintegrate(String path, Revision pegRevision, + String localPath, boolean force, + boolean dryRun) + throws ClientException; + + /** + * @since 1.5 + */ public native MergeInfo getMergeInfo(String path, Revision pegRevision) throws SubversionException; Index: subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNClientInterface.java =================================================================== --- subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNClientInterface.java (revision 28982) +++ subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNClientInterface.java (working copy) @@ -980,6 +980,28 @@ throws ClientException; /** + * Perform a reintegration merge of path into localPath. + * localPath must be a single-revision, infinite depth, + * pristine, unswitched working copy -- in other words, it must + * reflect a single revision tree, the "target". The mergeinfo on + * path must reflect that all of the target has been merged into it. + * Then this behaves like a merge from the target's URL to the + * localPath. + * + * The depth of the merge is always infinity. + * @param path path or url + * @param pegRevision revision to interpret path + * @param localPath target local path + * @param force overwrite local changes + * @param dryRun do not change anything + * @throws ClientException + * @since 1.5 + */ + void mergeReintegrate(String path, Revision pegRevision, + String localPath, boolean force, boolean dryRun) + throws ClientException; + + /** * Get merge info for path at pegRevision. * @param path WC path or URL. * @param pegRevision peg revision at which to get the merge info for