You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by gb...@apache.org on 2013/09/26 15:47:26 UTC

svn commit: r1526487 [2/10] - in /subversion/branches/invoke-diff-cmd-feature: ./ build/ac-macros/ build/generator/ build/generator/templates/ contrib/client-side/emacs/ notes/ subversion/bindings/javahl/native/ subversion/bindings/javahl/src/org/apach...

Modified: subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/native/org_apache_subversion_javahl_NativeResources.cpp
URL: http://svn.apache.org/viewvc/subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/native/org_apache_subversion_javahl_NativeResources.cpp?rev=1526487&r1=1526486&r2=1526487&view=diff
==============================================================================
--- subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/native/org_apache_subversion_javahl_NativeResources.cpp (original)
+++ subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/native/org_apache_subversion_javahl_NativeResources.cpp Thu Sep 26 13:47:21 2013
@@ -28,11 +28,11 @@
 #include "JNIUtil.h"
 #include "../include/org_apache_subversion_javahl_NativeResources.h"
 
-JNIEXPORT void JNICALL
+JNIEXPORT jboolean JNICALL
 Java_org_apache_subversion_javahl_NativeResources_initNativeLibrary
 (JNIEnv *env, jclass jclazz)
 {
   // No usual JNIEntry here, as the prerequisite native library
   // initialization is performed here.
-  JNIUtil::JNIGlobalInit(env);
+  return jboolean(JNIUtil::JNIGlobalInit(env));
 }

Modified: subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNClient.cpp
URL: http://svn.apache.org/viewvc/subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNClient.cpp?rev=1526487&r1=1526486&r2=1526487&view=diff
==============================================================================
--- subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNClient.cpp (original)
+++ subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNClient.cpp Thu Sep 26 13:47:21 2013
@@ -1634,21 +1634,6 @@ Java_org_apache_subversion_javahl_SVNCli
   cl->getClientContext().setConfigDirectory(configDir);
 }
 
-JNIEXPORT void JNICALL
-Java_org_apache_subversion_javahl_SVNClient_setConfigEventHandler
-(JNIEnv *env, jobject jthis, jobject jconfigHandler)
-{
-  JNIEntry(SVNClient, setConfigDirectory);
-  SVNClient *cl = SVNClient::getCppObject(jthis);
-  if (cl == NULL)
-    {
-      JNIUtil::throwError(_("bad C++ this"));
-      return;
-    }
-
-  cl->getClientContext().setConfigCallback(jconfigHandler);
-}
-
 JNIEXPORT jstring JNICALL
 Java_org_apache_subversion_javahl_SVNClient_getConfigDirectory
 (JNIEnv *env, jobject jthis)

Modified: subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/native/org_apache_subversion_javahl_remote_CommitEditor.cpp
URL: http://svn.apache.org/viewvc/subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/native/org_apache_subversion_javahl_remote_CommitEditor.cpp?rev=1526487&r1=1526486&r2=1526487&view=diff
==============================================================================
--- subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/native/org_apache_subversion_javahl_remote_CommitEditor.cpp (original)
+++ subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/native/org_apache_subversion_javahl_remote_CommitEditor.cpp Thu Sep 26 13:47:21 2013
@@ -182,16 +182,6 @@ Java_org_apache_subversion_javahl_remote
   editor->move(jsrc_relpath, jsrc_revision, jdst_relpath, jreplaces_revision);
 }
 
-//JNIEXPORT void JNICALL
-//Java_org_apache_subversion_javahl_remote_CommitEditor_rotate(
-//    JNIEnv* env, jobject jthis, jobject jelements)
-//{
-//  JNIEntry(CommitEditor, rotate);
-//  CommitEditor *editor = CommitEditor::getCppObject(jthis);
-//  CPPADDR_NULL_PTR(editor,);
-//  editor->rotate(jelements);
-//}
-
 JNIEXPORT void JNICALL
 Java_org_apache_subversion_javahl_remote_CommitEditor_complete(
     JNIEnv* env, jobject jthis)

Propchange: subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/native/org_apache_subversion_javahl_remote_CommitEditor.cpp
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/native/org_apache_subversion_javahl_remote_RemoteFactory.cpp
URL: http://svn.apache.org/viewvc/subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/native/org_apache_subversion_javahl_remote_RemoteFactory.cpp?rev=1526487&r1=1526486&r2=1526487&view=diff
==============================================================================
--- subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/native/org_apache_subversion_javahl_remote_RemoteFactory.cpp (original)
+++ subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/native/org_apache_subversion_javahl_remote_RemoteFactory.cpp Thu Sep 26 13:47:21 2013
@@ -38,7 +38,7 @@ JNIEXPORT jobject JNICALL
 Java_org_apache_subversion_javahl_remote_RemoteFactory_open(
     JNIEnv *env, jclass jclass, jint jretryAttempts,
     jstring jurl, jstring juuid,
-    jstring jconfigDirectory, jobject jconfigHandler,
+    jstring jconfigDirectory,
     jstring jusername, jstring jpassword,
     jobject jprompter, jobject jprogress)
 {
@@ -51,8 +51,7 @@ Java_org_apache_subversion_javahl_remote
    */
   jobject jremoteSession = RemoteSession::open(
       jretryAttempts, jurl, juuid,
-      jconfigDirectory, jconfigHandler,
-      jusername, jpassword, jprompter, jprogress);
+      jconfigDirectory, jusername, jpassword, jprompter, jprogress);
   if (JNIUtil::isJavaExceptionThrown())
     return NULL;
 

Propchange: subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/native/org_apache_subversion_javahl_remote_RemoteFactory.cpp
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/native/org_apache_subversion_javahl_remote_RemoteSession.cpp
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/native/org_apache_subversion_javahl_remote_StateReporter.cpp
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/native/org_apache_subversion_javahl_types_RevisionRangeList.cpp
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/native/org_apache_subversion_javahl_util_DiffLib.cpp
URL: http://svn.apache.org/viewvc/subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/native/org_apache_subversion_javahl_util_DiffLib.cpp?rev=1526487&r1=1526486&r2=1526487&view=diff
==============================================================================
--- subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/native/org_apache_subversion_javahl_util_DiffLib.cpp (original)
+++ subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/native/org_apache_subversion_javahl_util_DiffLib.cpp Thu Sep 26 13:47:21 2013
@@ -35,7 +35,7 @@
 
 #include "svn_diff.h"
 
-JNIEXPORT void JNICALL
+JNIEXPORT jboolean JNICALL
 Java_org_apache_subversion_javahl_util_DiffLib_nativeFileDiff(
     JNIEnv* env, jobject jthis,
     jstring joriginal_file,
@@ -60,13 +60,13 @@ Java_org_apache_subversion_javahl_util_D
 
   Path original(joriginal_file, pool);
   if (JNIUtil::isJavaExceptionThrown())
-    return;
-  SVN_JNI_ERR(original.error_occurred(),);
+    return false;
+  SVN_JNI_ERR(original.error_occurred(), false);
 
   Path modified(jmodified_file, pool);
   if (JNIUtil::isJavaExceptionThrown())
-    return;
-  SVN_JNI_ERR(modified.error_occurred(),);
+    return false;
+  SVN_JNI_ERR(modified.error_occurred(), false);
 
   svn_diff_t* diff;
   svn_diff_file_options_t* diff_options =
@@ -79,24 +79,27 @@ Java_org_apache_subversion_javahl_util_D
                                    original.c_str(),
                                    modified.c_str(),
                                    diff_options,
-                                   pool.getPool()),);
+                                   pool.getPool()),
+              false);
+
+  const jboolean diffs = svn_diff_contains_diffs(diff);
 
   JNIStringHolder original_header(joriginal_header);
   if (JNIUtil::isJavaExceptionThrown())
-    return;
+    return false;
 
   JNIStringHolder modified_header(jmodified_header);
   if (JNIUtil::isJavaExceptionThrown())
-    return;
+    return false;
 
   JNIStringHolder header_encoding(jheader_encoding);
   if (JNIUtil::isJavaExceptionThrown())
-    return;
+    return false;
 
   JNIStringHolder relative_to_dir(jrelative_to_dir);
   if (JNIUtil::isJavaExceptionThrown())
-    return;
-  
+    return false;
+
   OutputStream result_stream(jresult_stream);
 
   SVN_JNI_ERR(svn_diff_file_output_unified3(
@@ -105,10 +108,13 @@ Java_org_apache_subversion_javahl_util_D
                   original_header.c_str(), modified_header.c_str(),
                   header_encoding.c_str(), relative_to_dir.c_str(),
                   diff_options->show_c_function,
-                  pool.getPool()),);
+                  pool.getPool()),
+              false);
+
+  return diffs;
 }
 
-JNIEXPORT void JNICALL
+JNIEXPORT jboolean JNICALL
 Java_org_apache_subversion_javahl_util_DiffLib_nativeFileMerge(
     JNIEnv* env, jobject jthis,
     jstring joriginal_file,
@@ -135,18 +141,18 @@ Java_org_apache_subversion_javahl_util_D
 
   Path original(joriginal_file, pool);
   if (JNIUtil::isJavaExceptionThrown())
-    return;
-  SVN_JNI_ERR(original.error_occurred(),);
+    return false;
+  SVN_JNI_ERR(original.error_occurred(), false);
 
   Path modified(jmodified_file, pool);
   if (JNIUtil::isJavaExceptionThrown())
-    return;
-  SVN_JNI_ERR(modified.error_occurred(),);
+    return false;
+  SVN_JNI_ERR(modified.error_occurred(), false);
 
   Path latest(jlatest_file, pool);
   if (JNIUtil::isJavaExceptionThrown())
-    return;
-  SVN_JNI_ERR(latest.error_occurred(),);
+    return false;
+  SVN_JNI_ERR(latest.error_occurred(), false);
 
   svn_diff_t* diff;
   svn_diff_file_options_t* diff_options =
@@ -160,24 +166,27 @@ Java_org_apache_subversion_javahl_util_D
                                     modified.c_str(),
                                     latest.c_str(),
                                     diff_options,
-                                    pool.getPool()),);
+                                    pool.getPool()),
+              false);
+
+  const jboolean conflicts = svn_diff_contains_conflicts(diff);
 
   JNIStringHolder conflict_original(jconflict_original);
   if (JNIUtil::isJavaExceptionThrown())
-    return;
+    return false;
 
   JNIStringHolder conflict_modified(jconflict_modified);
   if (JNIUtil::isJavaExceptionThrown())
-    return;
+    return false;
 
   JNIStringHolder conflict_latest(jconflict_latest);
   if (JNIUtil::isJavaExceptionThrown())
-    return;
+    return false;
 
   JNIStringHolder conflict_separator(jconflict_separator);
   if (JNIUtil::isJavaExceptionThrown())
-    return;
-  
+    return false;
+
   OutputStream result_stream(jresult_stream);
 
   SVN_JNI_ERR(svn_diff_file_output_merge2(
@@ -188,5 +197,8 @@ Java_org_apache_subversion_javahl_util_D
                   conflict_latest.c_str(),
                   conflict_separator.c_str(),
                   svn_diff_conflict_display_style_t(jconflict_style_ordinal),
-                  pool.getPool()),);
+                  pool.getPool()),
+              false);
+
+  return conflicts;
 }

Propchange: subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/native/org_apache_subversion_javahl_util_DiffLib.cpp
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNClient.java
URL: http://svn.apache.org/viewvc/subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNClient.java?rev=1526487&r1=1526486&r2=1526487&view=diff
==============================================================================
--- subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNClient.java (original)
+++ subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNClient.java Thu Sep 26 13:47:21 2013
@@ -1069,12 +1069,6 @@ public interface ISVNClient
     void setConfigDirectory(String configDir) throws ClientException;
 
     /**
-     * Set an event handler that will be called every time the
-     * configuration is loaded.
-     */
-    void setConfigEventHandler(ConfigEvent configHandler);
-
-    /**
      * Get the configuration directory
      * @return  the directory
      * @throws ClientException

Modified: subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNConfig.java
URL: http://svn.apache.org/viewvc/subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNConfig.java?rev=1526487&r1=1526486&r2=1526487&view=diff
==============================================================================
--- subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNConfig.java (original)
+++ subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNConfig.java Thu Sep 26 13:47:21 2013
@@ -112,19 +112,19 @@ public interface ISVNConfig
     public static final String HTTP_CHUNKED_REQUESTS     = "http-chunked-requests";
 
     /**
-     * "true" value in configuraition. One of the values returned by
+     * "true" value in configuration. One of the values returned by
      * {@link Category#getYesNoAsk}.
      */
     public static final String TRUE = "TRUE";
 
     /**
-     * "false" value in configuraition. One of the values returned by
+     * "false" value in configuration. One of the values returned by
      * {@link Category#getYesNoAsk}.
      */
     public static final String FALSE = "FALSE";
 
     /**
-     * "ask" value in configuraition. One of the values returned by
+     * "ask" value in configuration. One of the values returned by
      * {@link Category#getYesNoAsk}.
      */
     public static final String ASK = "ASK";

Modified: subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNEditor.java
URL: http://svn.apache.org/viewvc/subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNEditor.java?rev=1526487&r1=1526486&r2=1526487&view=diff
==============================================================================
--- subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNEditor.java (original)
+++ subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNEditor.java Thu Sep 26 13:47:21 2013
@@ -261,8 +261,7 @@ public interface ISVNEditor
      * <code>sourceRelativePath</code> at the start of the whole edit
      * and<code>sourceRelativePath</code> at
      * <code>sourceRevision</code> must lie within the same node-rev
-     * (aka history-segment).  This is just like the #delete() and
-     * #rotate().
+     * (aka history-segment).  This is just like the #delete().
      * <p>
      * For a description of <code>replacesRevision</code>, see #addFile().
      *
@@ -274,42 +273,6 @@ public interface ISVNEditor
               long replacesRevision)
             throws ClientException;
 
-// Not implemented in the native API
-//    /**
-//     * Perform a rotation among multiple nodes in the target tree.
-//     * <p>
-//     * The <code>elements</code> list specifies the nodes in the tree
-//     * which are located at a path and expected to be at a specific
-//     * revision. These nodes are simultaneously moved in a rotation
-//     * pattern.  For example, the node at index 0
-//     * <code>elements</code> will be moved to the relative path
-//     * specified at index 1 of <code>elements</code>. The node at
-//     * index 1 will be moved to the location at index 2. The node at
-//     * index N-1 will be moved to the relative path specified at index 0.
-//     * <p>
-//     * The simplest form of this operation is to swap nodes A and
-//     * B. One may think to move A to a temporary location T, then move
-//     * B to A, then move T to B. However, this last move violations
-//     * the Once Rule by moving T (which had already by edited by the
-//     * move from A). In order to keep the restrictions against
-//     * multiple moves of a single node, the rotation operation is
-//     * needed for certain types of tree edits.
-//     *
-//     * @throws ClientException
-//     */
-//    void rotate(Iterable<RotatePair> elements) throws ClientException;
-//
-//    public static final class RotatePair
-//    {
-//        public RotatePair(String relativePath, long revision)
-//        {
-//            this.relativePath = relativePath;
-//            this.revision = revision;
-//        }
-//        public final String relativePath;
-//        public final long revision;
-//    }
-
     /**
      * Signal that the edit has been completed successfully.
      * After this method is called, the editor is considered closed.

Modified: subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/src/org/apache/subversion/javahl/NativeResources.java
URL: http://svn.apache.org/viewvc/subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/src/org/apache/subversion/javahl/NativeResources.java?rev=1526487&r1=1526486&r2=1526487&view=diff
==============================================================================
--- subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/src/org/apache/subversion/javahl/NativeResources.java (original)
+++ subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/src/org/apache/subversion/javahl/NativeResources.java Thu Sep 26 13:47:21 2013
@@ -129,7 +129,9 @@ public class NativeResources
      */
     private static final void init()
     {
-        initNativeLibrary();
+        if (!initNativeLibrary())
+            throw new LinkageError("Native library initialization failed");
+
         version = new Version();
         if (!version.isAtLeast(1, 9, 0))
         {
@@ -141,5 +143,5 @@ public class NativeResources
     /**
      * Initialize the native library layer.
      */
-    private static native void initNativeLibrary();
+    private static native boolean initNativeLibrary();
 }

Modified: subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNClient.java
URL: http://svn.apache.org/viewvc/subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNClient.java?rev=1526487&r1=1526486&r2=1526487&view=diff
==============================================================================
--- subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNClient.java (original)
+++ subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNClient.java Thu Sep 26 13:47:21 2013
@@ -573,8 +573,6 @@ public class SVNClient implements ISVNCl
     public native void setConfigDirectory(String configDir)
             throws ClientException;
 
-    public native void setConfigEventHandler(ConfigEvent configHandler);
-
     public native String getConfigDirectory()
             throws ClientException;
 

Modified: subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNUtil.java
URL: http://svn.apache.org/viewvc/subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNUtil.java?rev=1526487&r1=1526486&r2=1526487&view=diff
==============================================================================
--- subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNUtil.java (original)
+++ subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNUtil.java Thu Sep 26 13:47:21 2013
@@ -23,12 +23,97 @@
 
 package org.apache.subversion.javahl;
 
+import org.apache.subversion.javahl.callback.*;
 import org.apache.subversion.javahl.util.*;
 
 import java.io.OutputStream;
 
 public class SVNUtil
 {
+    //
+    // Global configuration
+    //
+
+    /**
+     * Enable storing authentication credentials in Subversion's
+     * standard credentials store in the configuration directory and
+     * system-specific secure locations.
+     * <p>
+     * The standard credentials store is enabled by default.
+     * <p>
+     * This setting will be inherited by all ISVNClient and ISVNRemote
+     * objects. Changing the setting will not affect existing such
+     * objects.
+     * @throws ClientException
+     */
+    public static void enableNativeCredentialsStore()
+        throws ClientException
+      {
+          new ConfigLib().enableNativeCredentialsStore();
+      }
+
+    /**
+     * Disable storing authentication credentials in Subversion's
+     * standard credentials store in the configuration directory and
+     * system-specific secure locations. In this mode, the
+     * authentication (see {@link ISVNClient#setPrompt} and {@link
+     * remote.RemoteFactory#setPrompt}) will be called every time the
+     * underlying library needs access to the credentials.
+     * <p>
+     * This mode is intented to support client implementations that
+     * use their own credentials store.
+     * <p>
+     * The standard credentials store is enabled by default.
+     * <p>
+     * This setting will be inherited by all ISVNClient and ISVNRemote
+     * objects. Changing the setting will not affect existing such
+     * objects.
+     * @throws ClientException
+     */
+    public static void disableNativeCredentialsStore()
+        throws ClientException
+      {
+          new ConfigLib().disableNativeCredentialsStore();
+      }
+
+    /**
+     * Find out if the standard credentials store is enabled.
+     */
+    public static boolean isNativeCredentialsStoreEnabled()
+        throws ClientException
+      {
+          return new ConfigLib().isNativeCredentialsStoreEnabled();
+      }
+
+    /**
+     * Set an event handler that will be called every time the
+     * configuration is loaded.
+     * <p>
+     * This setting will be inherited by all ISVNClient and ISVNRemote
+     * objects. Changing the setting will not affect existing such
+     * objects.
+     * @throws ClientException
+     */
+    public static void setConfigEventHandler(ConfigEvent configHandler)
+        throws ClientException
+      {
+          new ConfigLib().setConfigEventHandler(configHandler);
+      }
+
+    /**
+     * Return a reference to the installed configuration event
+     * handler. The returned value may be <code>null</code>.
+     */
+    public static ConfigEvent getConfigEventHandler()
+        throws ClientException
+      {
+          return new ConfigLib().getConfigEventHandler();
+      }
+
+    //
+    // Diff and Merge
+    //
+
     /**
      * Options to control the behaviour of the file diff routines.
      */
@@ -131,23 +216,25 @@ public class SVNUtil
      *        This path will be stripped from the beginning of those
      *        file names if they are used in the unidiff index header.
      * @param resultStream The stream that receives the merged output.
+     * @return <code>true</code> if there were differences between the files.
      * @throws ClientException
      */
-    public static void FileDiff(String originalFile,
-                                String modifiedFile,
-                                SVNUtil.DiffOptions diffOptions,
-
-                                String originalHeader,
-                                String modifiedHeader,
-                                String headerEncoding,
-                                String relativeToDir,
+    public static boolean fileDiff(String originalFile,
+                                   String modifiedFile,
+                                   SVNUtil.DiffOptions diffOptions,
+
+                                   String originalHeader,
+                                   String modifiedHeader,
+                                   String headerEncoding,
+                                   String relativeToDir,
 
-                                OutputStream resultStream)
+                                   OutputStream resultStream)
         throws ClientException
     {
-        new DiffLib().FileDiff(originalFile, modifiedFile, diffOptions,
-                               originalHeader, modifiedHeader, headerEncoding,
-                               relativeToDir, resultStream);
+        return new DiffLib().fileDiff(originalFile, modifiedFile, diffOptions,
+                                      originalHeader, modifiedHeader,
+                                      headerEncoding,
+                                      relativeToDir, resultStream);
     }
 
 
@@ -171,26 +258,27 @@ public class SVNUtil
      * @param conflictSeparator Optional custom conflict separator.
      * @param conflictStyle Determines how conflicts are displayed.
      * @param resultStream The stream that receives the merged output.
+     * @return <code>true</code> if there were any conflicts.
      * @throws ClientException
      */
-    public static void FileMerge(String originalFile,
-                                 String modifiedFile,
-                                 String latestFile,
-                                 DiffOptions diffOptions,
-
-                                 String conflictOriginal,
-                                 String conflictModified,
-                                 String conflictLatest,
-                                 String conflictSeparator,
-                                 ConflictDisplayStyle conflictStyle,
+    public static boolean fileMerge(String originalFile,
+                                    String modifiedFile,
+                                    String latestFile,
+                                    DiffOptions diffOptions,
+
+                                    String conflictOriginal,
+                                    String conflictModified,
+                                    String conflictLatest,
+                                    String conflictSeparator,
+                                    ConflictDisplayStyle conflictStyle,
 
-                                 OutputStream resultStream)
+                                    OutputStream resultStream)
         throws ClientException
     {
-        new DiffLib().FileMerge(originalFile, modifiedFile, latestFile,
-                                diffOptions,
-                                conflictOriginal, conflictModified,
-                                conflictLatest, conflictSeparator,
-                                conflictStyle, resultStream);
+        return new DiffLib().fileMerge(originalFile, modifiedFile, latestFile,
+                                       diffOptions,
+                                       conflictOriginal, conflictModified,
+                                       conflictLatest, conflictSeparator,
+                                       conflictStyle, resultStream);
     }
-}
\ No newline at end of file
+}

Modified: subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/src/org/apache/subversion/javahl/remote/CommitEditor.java
URL: http://svn.apache.org/viewvc/subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/src/org/apache/subversion/javahl/remote/CommitEditor.java?rev=1526487&r1=1526486&r2=1526487&view=diff
==============================================================================
--- subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/src/org/apache/subversion/javahl/remote/CommitEditor.java (original)
+++ subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/src/org/apache/subversion/javahl/remote/CommitEditor.java Thu Sep 26 13:47:21 2013
@@ -29,6 +29,7 @@ import org.apache.subversion.javahl.call
 import org.apache.subversion.javahl.ISVNEditor;
 import org.apache.subversion.javahl.JNIObject;
 import org.apache.subversion.javahl.ClientException;
+import org.apache.subversion.javahl.NativeResources;
 
 import java.io.InputStream;
 import java.util.Map;
@@ -40,6 +41,14 @@ import java.util.Set;
  */
 public class CommitEditor extends JNIObject implements ISVNEditor
 {
+    /**
+     * Load the required native library.
+     */
+    static
+    {
+        NativeResources.loadNativeLibrary();
+    }
+
     public void dispose()
     {
         session.disposeEditor(this);
@@ -111,9 +120,6 @@ public class CommitEditor extends JNIObj
                             long replacesRevision)
             throws ClientException;
 
-//    public native void rotate(Iterable<RotatePair> elements)
-//            throws ClientException;
-
     public native void complete() throws ClientException;
 
     public native void abort() throws ClientException;

Modified: subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/src/org/apache/subversion/javahl/remote/RemoteFactory.java
URL: http://svn.apache.org/viewvc/subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/src/org/apache/subversion/javahl/remote/RemoteFactory.java?rev=1526487&r1=1526486&r2=1526487&view=diff
==============================================================================
--- subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/src/org/apache/subversion/javahl/remote/RemoteFactory.java (original)
+++ subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/src/org/apache/subversion/javahl/remote/RemoteFactory.java Thu Sep 26 13:47:21 2013
@@ -57,13 +57,11 @@ public class RemoteFactory
      * Initializing constructor. Any or all of its arguments may be null.
      */
     public RemoteFactory(String configDirectory,
-                         ConfigEvent configHandler,
                          String username, String password,
                          UserPasswordCallback prompt,
                          ProgressCallback progress)
     {
         setConfigDirectory(configDirectory);
-        setConfigEventHandler(configHandler);
         setUsername(username);
         setPassword(password);
         setPrompt(prompt);
@@ -127,16 +125,6 @@ public class RemoteFactory
     }
 
     /**
-     * Set an event handler that will be called every time the
-     * configuration is loaded.
-     */
-    public void setConfigEventHandler(ConfigEvent configHandler)
-    {
-        this.configHandler = configHandler;
-    }
-
-
-    /**
      * Open a persistent session to a repository.
      * <p>
      * <b>Note:</b> The URL can point to a subtree of the repository.
@@ -152,8 +140,7 @@ public class RemoteFactory
     public ISVNRemote openRemoteSession(String url)
             throws ClientException, SubversionException
     {
-        return open(1, url, null,
-                    configDirectory, configHandler,
+        return open(1, url, null, configDirectory,
                     username, password, prompt, progress);
     }
 
@@ -180,8 +167,7 @@ public class RemoteFactory
         if (retryAttempts <= 0)
             throw new IllegalArgumentException(
                 "retryAttempts must be positive");
-        return open(retryAttempts, url, null,
-                    configDirectory, configHandler,
+        return open(retryAttempts, url, null, configDirectory,
                     username, password, prompt, progress);
     }
 
@@ -208,8 +194,7 @@ public class RemoteFactory
     {
         if (reposUUID == null)
             throw new IllegalArgumentException("reposUUID may not be null");
-        return open(1, url, reposUUID,
-                    configDirectory, configHandler,
+        return open(1, url, reposUUID, configDirectory,
                     username, password, prompt, progress);
     }
 
@@ -243,13 +228,11 @@ public class RemoteFactory
         if (retryAttempts <= 0)
             throw new IllegalArgumentException(
                 "retryAttempts must be positive");
-        return open(retryAttempts, url, reposUUID,
-                    configDirectory, configHandler,
+        return open(retryAttempts, url, reposUUID, configDirectory,
                     username, password, prompt, progress);
     }
 
     private String configDirectory;
-    private ConfigEvent configHandler;
     private String username;
     private String password;
     private UserPasswordCallback prompt;
@@ -259,7 +242,6 @@ public class RemoteFactory
     private static native ISVNRemote open(int retryAttempts,
                                           String url, String reposUUID,
                                           String configDirectory,
-                                          ConfigEvent configHandler,
                                           String username, String password,
                                           UserPasswordCallback prompt,
                                           ProgressCallback progress)

Modified: subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/src/org/apache/subversion/javahl/remote/RemoteSession.java
URL: http://svn.apache.org/viewvc/subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/src/org/apache/subversion/javahl/remote/RemoteSession.java?rev=1526487&r1=1526486&r2=1526487&view=diff
==============================================================================
--- subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/src/org/apache/subversion/javahl/remote/RemoteSession.java (original)
+++ subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/src/org/apache/subversion/javahl/remote/RemoteSession.java Thu Sep 26 13:47:21 2013
@@ -32,6 +32,7 @@ import org.apache.subversion.javahl.ISVN
 import org.apache.subversion.javahl.JNIObject;
 import org.apache.subversion.javahl.OperationContext;
 import org.apache.subversion.javahl.ClientException;
+import org.apache.subversion.javahl.NativeResources;
 
 import java.lang.ref.WeakReference;
 import java.util.ArrayList;
@@ -46,6 +47,14 @@ import static java.util.concurrent.TimeU
 
 public class RemoteSession extends JNIObject implements ISVNRemote
 {
+    /**
+     * Load the required native library.
+     */
+    static
+    {
+        NativeResources.loadNativeLibrary();
+    }
+
     public void dispose()
     {
         if (editorReference != null)

Modified: subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/src/org/apache/subversion/javahl/remote/StateReporter.java
URL: http://svn.apache.org/viewvc/subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/src/org/apache/subversion/javahl/remote/StateReporter.java?rev=1526487&r1=1526486&r2=1526487&view=diff
==============================================================================
--- subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/src/org/apache/subversion/javahl/remote/StateReporter.java (original)
+++ subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/src/org/apache/subversion/javahl/remote/StateReporter.java Thu Sep 26 13:47:21 2013
@@ -29,6 +29,7 @@ import org.apache.subversion.javahl.call
 import org.apache.subversion.javahl.JNIObject;
 import org.apache.subversion.javahl.ISVNReporter;
 import org.apache.subversion.javahl.ClientException;
+import org.apache.subversion.javahl.NativeResources;
 
 /**
  * Implementation of ISVNReporter.
@@ -36,6 +37,14 @@ import org.apache.subversion.javahl.Clie
  */
 public class StateReporter extends JNIObject implements ISVNReporter
 {
+    /**
+     * Load the required native library.
+     */
+    static
+    {
+        NativeResources.loadNativeLibrary();
+    }
+
     public void dispose()
     {
         session.disposeReporter(this);

Modified: subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/RevisionRangeList.java
URL: http://svn.apache.org/viewvc/subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/RevisionRangeList.java?rev=1526487&r1=1526486&r2=1526487&view=diff
==============================================================================
--- subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/RevisionRangeList.java (original)
+++ subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/RevisionRangeList.java Thu Sep 26 13:47:21 2013
@@ -24,6 +24,7 @@
 package org.apache.subversion.javahl.types;
 
 import org.apache.subversion.javahl.ClientException;
+import org.apache.subversion.javahl.NativeResources;
 
 import java.util.List;
 
@@ -39,6 +40,14 @@ public class RevisionRangeList implement
     // the Java release.
     private static final long serialVersionUID = 1L;
 
+    /**
+     * Load the required native library.
+     */
+    static
+    {
+        NativeResources.loadNativeLibrary();
+    }
+
     private List<RevisionRange> ranges;
 
     /**

Modified: subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/Version.java
URL: http://svn.apache.org/viewvc/subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/Version.java?rev=1526487&r1=1526486&r2=1526487&view=diff
==============================================================================
--- subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/Version.java (original)
+++ subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/Version.java Thu Sep 26 13:47:21 2013
@@ -23,6 +23,8 @@
 
 package org.apache.subversion.javahl.types;
 
+import org.apache.subversion.javahl.NativeResources;
+
 /**
  * Encapsulates version information about the underlying native
  * libraries.  Basically a wrapper for <a
@@ -31,6 +33,14 @@ package org.apache.subversion.javahl.typ
 public class Version
 {
     /**
+     * Load the required native library.
+     */
+    static
+    {
+        NativeResources.loadNativeLibrary();
+    }
+
+    /**
      * @return The full version string for the loaded JavaHL library,
      * as defined by <code>MAJOR.MINOR.PATCH INFO</code>.
      */

Modified: subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/VersionExtended.java
URL: http://svn.apache.org/viewvc/subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/VersionExtended.java?rev=1526487&r1=1526486&r2=1526487&view=diff
==============================================================================
--- subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/VersionExtended.java (original)
+++ subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/VersionExtended.java Thu Sep 26 13:47:21 2013
@@ -23,6 +23,8 @@
 
 package org.apache.subversion.javahl.types;
 
+import org.apache.subversion.javahl.NativeResources;
+
 /**
  * Encapsulates information about the compile-time and run-time
  * properties of the Subversion libraries.
@@ -31,6 +33,14 @@ package org.apache.subversion.javahl.typ
 public class VersionExtended
 {
     /**
+     * Load the required native library.
+     */
+    static
+    {
+        NativeResources.loadNativeLibrary();
+    }
+
+    /**
      * @return The date when the libsvn_subr library was compiled, in
      * the format defined by the C standard macro #__DATE__.
      */

Modified: subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/src/org/apache/subversion/javahl/util/DiffLib.java
URL: http://svn.apache.org/viewvc/subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/src/org/apache/subversion/javahl/util/DiffLib.java?rev=1526487&r1=1526486&r2=1526487&view=diff
==============================================================================
--- subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/src/org/apache/subversion/javahl/util/DiffLib.java (original)
+++ subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/src/org/apache/subversion/javahl/util/DiffLib.java Thu Sep 26 13:47:21 2013
@@ -43,42 +43,10 @@ public class DiffLib
         NativeResources.loadNativeLibrary();
     }
 
-    /** @see ISVNUtil.FileDiff */
-    public void FileDiff(String originalFile,
-                         String modifiedFile,
-                         SVNUtil.DiffOptions diffOptions,
-
-                         String originalHeader,
-                         String modifiedHeader,
-                         String headerEncoding,
-                         String relativeToDir,
-
-                         OutputStream resultStream)
-        throws ClientException
-    {
-        nativeFileDiff(originalFile, modifiedFile,
-
-                       // Interpret the diff options
-                       (diffOptions == null
-                        ? SVNUtil.DiffOptions.IgnoreSpace.none.ordinal()
-                        : diffOptions.ignoreSpace.ordinal()),
-                       (diffOptions == null ? false
-                        : diffOptions.ignoreEolStyle),
-                       (diffOptions == null ? false
-                        : diffOptions.showCFunction),
-
-                       originalHeader, modifiedHeader, headerEncoding,
-                       relativeToDir, resultStream);
-    }
-
-    private native
-        void nativeFileDiff(String originalFile,
+    /** @see ISVNUtil.fileDiff */
+    public boolean fileDiff(String originalFile,
                             String modifiedFile,
-
-                            // Interpreted diff options
-                            int ignoreSpace,
-                            boolean ignoreEolStyle,
-                            boolean showCFunction,
+                            SVNUtil.DiffOptions diffOptions,
 
                             String originalHeader,
                             String modifiedHeader,
@@ -86,61 +54,93 @@ public class DiffLib
                             String relativeToDir,
 
                             OutputStream resultStream)
-        throws ClientException;
-
-    /** @see ISVNUtil.FileMerge */
-    public void FileMerge(String originalFile,
-                          String modifiedFile,
-                          String latestFile,
-                          SVNUtil.DiffOptions diffOptions,
-
-                          String conflictOriginal,
-                          String conflictModified,
-                          String conflictLatest,
-                          String conflistSeparator,
-                          SVNUtil.ConflictDisplayStyle conflictStyle,
-
-                          OutputStream resultStream)
         throws ClientException
     {
-        nativeFileMerge(originalFile, modifiedFile, latestFile,
+        return nativeFileDiff(originalFile, modifiedFile,
 
-                        // Interpret the diff options
-                        (diffOptions == null
-                         ? SVNUtil.DiffOptions.IgnoreSpace.none.ordinal()
-                         : diffOptions.ignoreSpace.ordinal()),
-                        (diffOptions == null ? false
-                         : diffOptions.ignoreEolStyle),
-                        (diffOptions == null ? false
-                         : diffOptions.showCFunction),
+                              // Interpret the diff options
+                              (diffOptions == null
+                               ? SVNUtil.DiffOptions.IgnoreSpace.none.ordinal()
+                               : diffOptions.ignoreSpace.ordinal()),
+                              (diffOptions == null ? false
+                               : diffOptions.ignoreEolStyle),
+                              (diffOptions == null ? false
+                               : diffOptions.showCFunction),
 
-                        conflictOriginal, conflictModified, conflictLatest,
-                        conflistSeparator,
-
-                        // Interpret the conflict style
-                        conflictStyle.ordinal(),
-
-                        resultStream);
+                              originalHeader, modifiedHeader, headerEncoding,
+                              relativeToDir, resultStream);
     }
 
     private native
-        void nativeFileMerge(String originalFile,
+        boolean nativeFileDiff(String originalFile,
+                               String modifiedFile,
+
+                               // Interpreted diff options
+                               int ignoreSpace,
+                               boolean ignoreEolStyle,
+                               boolean showCFunction,
+
+                               String originalHeader,
+                               String modifiedHeader,
+                               String headerEncoding,
+                               String relativeToDir,
+
+                               OutputStream resultStream)
+        throws ClientException;
+
+    /** @see ISVNUtil.fileMerge */
+    public boolean fileMerge(String originalFile,
                              String modifiedFile,
                              String latestFile,
-
-                             // Interpreted diff options
-                             int ignoreSpace,
-                             boolean ignoreEolStyle,
-                             boolean showCFunction,
+                             SVNUtil.DiffOptions diffOptions,
 
                              String conflictOriginal,
                              String conflictModified,
                              String conflictLatest,
                              String conflistSeparator,
-
-                             // Interpreted conflict display style
-                             int conflictStyle,
+                             SVNUtil.ConflictDisplayStyle conflictStyle,
 
                              OutputStream resultStream)
+        throws ClientException
+    {
+        return nativeFileMerge(originalFile, modifiedFile, latestFile,
+
+                               // Interpret the diff options
+                               (diffOptions == null
+                                ? SVNUtil.DiffOptions.IgnoreSpace.none.ordinal()
+                                : diffOptions.ignoreSpace.ordinal()),
+                               (diffOptions == null ? false
+                                : diffOptions.ignoreEolStyle),
+                               (diffOptions == null ? false
+                                : diffOptions.showCFunction),
+
+                               conflictOriginal, conflictModified,
+                               conflictLatest, conflistSeparator,
+
+                               // Interpret the conflict style
+                               conflictStyle.ordinal(),
+
+                               resultStream);
+    }
+
+    private native
+        boolean nativeFileMerge(String originalFile,
+                                String modifiedFile,
+                                String latestFile,
+
+                                // Interpreted diff options
+                                int ignoreSpace,
+                                boolean ignoreEolStyle,
+                                boolean showCFunction,
+
+                                String conflictOriginal,
+                                String conflictModified,
+                                String conflictLatest,
+                                String conflistSeparator,
+
+                                // Interpreted conflict display style
+                                int conflictStyle,
+
+                                OutputStream resultStream)
         throws ClientException;
 }

Modified: subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/src/org/tigris/subversion/javahl/Path.java
URL: http://svn.apache.org/viewvc/subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/src/org/tigris/subversion/javahl/Path.java?rev=1526487&r1=1526486&r2=1526487&view=diff
==============================================================================
--- subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/src/org/tigris/subversion/javahl/Path.java (original)
+++ subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/src/org/tigris/subversion/javahl/Path.java Thu Sep 26 13:47:21 2013
@@ -31,14 +31,6 @@ package org.tigris.subversion.javahl;
 public class Path
 {
     /**
-     * Load the required native library.
-     */
-    static
-    {
-        org.apache.subversion.javahl.NativeResources.loadNativeLibrary();
-    }
-
-    /**
      * A valid path is a UTF-8 string without any control characters.
      *
      * @return Whether Subversion can store the path in a repository.

Modified: subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/tests/org/apache/subversion/javahl/SVNRemoteTests.java
URL: http://svn.apache.org/viewvc/subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/tests/org/apache/subversion/javahl/SVNRemoteTests.java?rev=1526487&r1=1526486&r2=1526487&view=diff
==============================================================================
--- subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/tests/org/apache/subversion/javahl/SVNRemoteTests.java (original)
+++ subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/tests/org/apache/subversion/javahl/SVNRemoteTests.java Thu Sep 26 13:47:21 2013
@@ -68,14 +68,12 @@ public class SVNRemoteTests extends SVNT
         thisTest = new OneTest();
     }
 
-    public static ISVNRemote getSession(String url, String configDirectory,
-                                        ConfigEvent configHandler)
+    public static ISVNRemote getSession(String url, String configDirectory)
     {
         try
         {
             RemoteFactory factory = new RemoteFactory();
             factory.setConfigDirectory(configDirectory);
-            factory.setConfigEventHandler(configHandler);
             factory.setUsername(USERNAME);
             factory.setPassword(PASSWORD);
             factory.setPrompt(new DefaultPromptUserPassword());
@@ -92,7 +90,7 @@ public class SVNRemoteTests extends SVNT
 
     private ISVNRemote getSession()
     {
-        return getSession(getTestRepoUrl(), super.conf.getAbsolutePath(), null);
+        return getSession(getTestRepoUrl(), super.conf.getAbsolutePath());
     }
 
     /**
@@ -111,7 +109,7 @@ public class SVNRemoteTests extends SVNT
         try
         {
             session = new RemoteFactory(
-                super.conf.getAbsolutePath(), null,
+                super.conf.getAbsolutePath(),
                 USERNAME, PASSWORD,
                 new DefaultPromptUserPassword(), null)
                 .openRemoteSession(getTestRepoUrl());
@@ -633,48 +631,6 @@ public class SVNRemoteTests extends SVNT
         assertTrue(Arrays.equals(contents, checkcontents.toByteArray()));
     }
 
-    // public void testEditorRotate() throws Exception
-    // {
-    //     ISVNRemote session = getSession();
-    //
-    //     ArrayList<ISVNEditor.RotatePair> rotation =
-    //         new ArrayList<ISVNEditor.RotatePair>(3);
-    //     rotation.add(new ISVNEditor.RotatePair("A/B", 1));
-    //     rotation.add(new ISVNEditor.RotatePair("A/C", 1));
-    //     rotation.add(new ISVNEditor.RotatePair("A/D", 1));
-    //
-    //     CommitContext cc =
-    //         new CommitContext(session, "Rotate A/B -> A/C -> A/D");
-    //     try {
-    //         // No alter-dir of A is needed, children remain the same.
-    //         cc.editor.rotate(rotation);
-    //         cc.editor.complete();
-    //     } finally {
-    //         cc.editor.dispose();
-    //     }
-    //
-    //     assertEquals(2, cc.getRevision());
-    //     assertEquals(2, session.getLatestRevision());
-    //
-    //     HashMap<String, DirEntry> dirents = new HashMap<String, DirEntry>();
-    //     HashMap<String, byte[]> properties = new HashMap<String, byte[]>();
-    //
-    //     // A/B is now what used to be A/D, so A/B/H must exist
-    //     session.getDirectory(Revision.SVN_INVALID_REVNUM, "A/B",
-    //                          DirEntry.Fields.all, dirents, properties);
-    //     assertEquals(dirents.get("H").getPath(), "H");
-    //
-    //     // A/C is now what used to be A/B, so A/C/F must exist
-    //     session.getDirectory(Revision.SVN_INVALID_REVNUM, "A/C",
-    //                          DirEntry.Fields.all, dirents, properties);
-    //     assertEquals(dirents.get("F").getPath(), "F");
-    //
-    //     // A/D is now what used to be A/C and must be empty
-    //     session.getDirectory(Revision.SVN_INVALID_REVNUM, "A/D",
-    //                          DirEntry.Fields.all, dirents, properties);
-    //     assertTrue(dirents.isEmpty());
-    // }
-
     // Sanity check so that we don't forget about unimplemented methods.
     public void testEditorNotImplemented() throws Exception
     {
@@ -704,13 +660,6 @@ public class SVNRemoteTests extends SVNT
             }
             assertEquals("Not implemented: CommitEditor.alterSymlink", exmsg);
 
-            // try {
-            //     exmsg = "";
-            //     cc.editor.rotate(rotation);
-            // } catch (RuntimeException ex) {
-            //     exmsg = ex.getMessage();
-            // }
-            // assertEquals("Not implemented: CommitEditor.rotate", exmsg);
         } finally {
             cc.editor.dispose();
         }
@@ -810,10 +759,13 @@ public class SVNRemoteTests extends SVNT
                 }
             };
 
-        ISVNRemote session = getSession(getTestRepoUrl(),
-                                        super.conf.getAbsolutePath(),
-                                        handler);
-        session.getLatestRevision(); // Make sure the configuration gets loaded
+        try {
+            SVNUtil.setConfigEventHandler(handler);
+            ISVNRemote session = getSession();
+            session.getLatestRevision();
+        } finally {
+            SVNUtil.setConfigEventHandler(null);
+        }
     }
 
     private static class RemoteStatusReceiver implements RemoteStatus

Modified: subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/tests/org/apache/subversion/javahl/SVNTests.java
URL: http://svn.apache.org/viewvc/subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/tests/org/apache/subversion/javahl/SVNTests.java?rev=1526487&r1=1526486&r2=1526487&view=diff
==============================================================================
--- subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/tests/org/apache/subversion/javahl/SVNTests.java (original)
+++ subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/tests/org/apache/subversion/javahl/SVNTests.java Thu Sep 26 13:47:21 2013
@@ -173,6 +173,17 @@ class SVNTests extends TestCase
 
     private void init()
     {
+        String disableCredStore = System.getProperty("test.disablecredstore");
+        if (disableCredStore != null)
+        {
+            try {
+                SVNUtil.disableNativeCredentialsStore();
+            } catch(Throwable ex) {
+                System.err.println("*** ERROR: Could not disable" +
+                                   " the native credentials store");
+            }
+        }
+
         // if not already set, get a usefull value for rootDir
         if (rootDirectoryName == null)
             rootDirectoryName = System.getProperty("test.rootdir");

Modified: subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/tests/org/apache/subversion/javahl/UtilTests.java
URL: http://svn.apache.org/viewvc/subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/tests/org/apache/subversion/javahl/UtilTests.java?rev=1526487&r1=1526486&r2=1526487&view=diff
==============================================================================
--- subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/tests/org/apache/subversion/javahl/UtilTests.java (original)
+++ subversion/branches/invoke-diff-cmd-feature/subversion/bindings/javahl/tests/org/apache/subversion/javahl/UtilTests.java Thu Sep 26 13:47:21 2013
@@ -35,6 +35,8 @@ import org.junit.Assert;
  */
 public class UtilTests extends SVNTests
 {
+    private final static String NL = System.getProperty("line.separator");
+
     /**
      * Base name of all our tests.
      */
@@ -85,14 +87,15 @@ public class UtilTests extends SVNTests
         writeFileContents(modified, "\nmodified\n\n");
 
         ByteArrayOutputStream result = new ByteArrayOutputStream();
-        SVNUtil.FileDiff(original.getAbsolutePath(),
-                         modified.getAbsolutePath(),
-                         null, "original", "modified", "UTF-8", null,
-                         result);
-
-        final byte[] expected = ("--- original\n" +
-                                 "+++ modified\n" +
-                                 "@@ -3,7 +3,7 @@\n" +
+        boolean diffs =  SVNUtil.fileDiff(original.getAbsolutePath(),
+                                          modified.getAbsolutePath(),
+                                          null, "original", "modified", "UTF-8",
+                                          null, result);
+        assertTrue(diffs);
+
+        final byte[] expected = ("--- original" + NL +
+                                 "+++ modified" + NL +
+                                 "@@ -3,7 +3,7 @@" + NL +
                                  " 3\n 4\n \n" +
                                  "-original\n" +
                                  "+modified\n" +
@@ -111,16 +114,17 @@ public class UtilTests extends SVNTests
         writeFileContents(latest, "\nlatest\n\n");
 
         ByteArrayOutputStream result = new ByteArrayOutputStream();
-        SVNUtil.FileMerge(original.getAbsolutePath(),
-                          modified.getAbsolutePath(),
-                          latest.getAbsolutePath(),
-                          null,
-                          "||||||| base",
-                          "<<<<<<< branch",
-                          ">>>>>>> local",
-                          "=======",
-                          SVNUtil.ConflictDisplayStyle.modified_original_latest,
-                          result);
+        boolean conflicts = SVNUtil.fileMerge(original.getAbsolutePath(),
+                                              modified.getAbsolutePath(),
+                                              latest.getAbsolutePath(),
+                                              null,
+                                              "||||||| base",
+                                              "<<<<<<< branch",
+                                              ">>>>>>> local",
+                                              "=======",
+                                              SVNUtil.ConflictDisplayStyle.modified_original_latest,
+                                              result);
+        assertTrue(conflicts);
 
         final byte[] expected = ("1\n2\n3\n4\n\n" +
                                  "<<<<<<< branch\n" +
@@ -129,8 +133,8 @@ public class UtilTests extends SVNTests
                                  "original\n" +
                                  "=======\n" +
                                  "latest\n" +
-                                 ">>>>>>> local\n\n" +
-                                 "N-3\nN-2\nN-1\nN\n").getBytes();
+                                 ">>>>>>> local\n" +
+                                 "\nN-3\nN-2\nN-1\nN\n").getBytes();
         Assert.assertArrayEquals(expected, result.toByteArray());
     }
 }

Modified: subversion/branches/invoke-diff-cmd-feature/subversion/bindings/swig/ruby/test/test_fs.rb
URL: http://svn.apache.org/viewvc/subversion/branches/invoke-diff-cmd-feature/subversion/bindings/swig/ruby/test/test_fs.rb?rev=1526487&r1=1526486&r2=1526487&view=diff
==============================================================================
--- subversion/branches/invoke-diff-cmd-feature/subversion/bindings/swig/ruby/test/test_fs.rb (original)
+++ subversion/branches/invoke-diff-cmd-feature/subversion/bindings/swig/ruby/test/test_fs.rb Thu Sep 26 13:47:21 2013
@@ -209,10 +209,14 @@ class SvnFsTest < Test::Unit::TestCase
       ctx.commit(@wc_path)
     end
 
-    assert_raises(Svn::Error::FsNoSuchTransaction) do
+    assert_raises(Svn::Error::FsMalformedTxnId) do
       @fs.open_txn("NOT-EXIST")
     end
 
+    assert_raises(Svn::Error::FsNoSuchTransaction) do
+      @fs.open_txn("9-9")
+    end
+
     start_time = Time.now
     txn1 = @fs.transaction
     assert_equal([Svn::Core::PROP_REVISION_DATE], txn1.proplist.keys)

Modified: subversion/branches/invoke-diff-cmd-feature/subversion/bindings/swig/ruby/test/util.rb
URL: http://svn.apache.org/viewvc/subversion/branches/invoke-diff-cmd-feature/subversion/bindings/swig/ruby/test/util.rb?rev=1526487&r1=1526486&r2=1526487&view=diff
==============================================================================
--- subversion/branches/invoke-diff-cmd-feature/subversion/bindings/swig/ruby/test/util.rb (original)
+++ subversion/branches/invoke-diff-cmd-feature/subversion/bindings/swig/ruby/test/util.rb Thu Sep 26 13:47:21 2013
@@ -79,6 +79,7 @@ module SvnTestUtil
     @wc_path = File.join(@tmp_path, "wc")
     @import_path = File.join(@tmp_path, "import")
     @repos_path = File.join(@tmp_path, "repos")
+    @svnserve_pid_file = File.join(@tmp_path, "svnserve.pid")
     @full_repos_path = File.expand_path(@repos_path)
     @repos_uri = "file://#{@full_repos_path.sub(/^\/?/, '/')}"
 

Modified: subversion/branches/invoke-diff-cmd-feature/subversion/bindings/swig/ruby/test/windows_util.rb
URL: http://svn.apache.org/viewvc/subversion/branches/invoke-diff-cmd-feature/subversion/bindings/swig/ruby/test/windows_util.rb?rev=1526487&r1=1526486&r2=1526487&view=diff
==============================================================================
--- subversion/branches/invoke-diff-cmd-feature/subversion/bindings/swig/ruby/test/windows_util.rb (original)
+++ subversion/branches/invoke-diff-cmd-feature/subversion/bindings/swig/ruby/test/windows_util.rb Thu Sep 26 13:47:21 2013
@@ -34,149 +34,31 @@ module SvnTestUtil
         end
       end
 
-      def service_control(command, args={})
-        args = args.collect do |key, value|
-          "#{key}= #{Svnserve.escape_value(value)}"
-        end.join(" ")
-        result = `sc #{command} #{service_name} #{args}`
-        if result.match(/FAILED/)
-          raise "Failed to #{command} #{service_name}: #{args}"
-        end
-        /^\s*STATE\s*:\s\d+\s*(.*?)\s*$/ =~ result
-        $1
-      end
-
-      def grant_everyone_full_access(dir)
-        dir = dir.tr(File::SEPARATOR, File::ALT_SEPARATOR)
-        `cacls #{Svnserve.escape_value(dir)} /T /E /P Everyone:F`
-      end
-
-      def service_exists?
-        begin
-          service_control("query")
-          true
-        rescue
-          false
-        end
-      end
-
-      def service_stopped?
-        "STOPPED" == service_control("query") rescue true
-      end
-
       def setup_svnserve
         @svnserve_port = @svnserve_ports.last
         @repos_svnserve_uri = "svn://#{@svnserve_host}:#{@svnserve_port}"
-        grant_everyone_full_access(@full_repos_path)
 
         @@service_created ||= begin
           @@service_created = true
-          service_control('stop') unless service_stopped?
-          service_control('delete') if service_exists?
-
-          svnserve_dir = File.expand_path("svnserve")
-          FileUtils.mkdir_p(svnserve_dir)
-          at_exit do
-            service_control('stop') unless service_stopped?
-            service_control('delete') if service_exists?
-            FileUtils.rm_rf(svnserve_dir)
-          end
-          trap("INT") do
-            service_control('stop') unless service_stopped?
-            service_control('delete') if service_exists?
-            FileUtils.rm_rf(svnserve_dir)
-          end
-
-          config = SetupEnvironment.gen_make_opts
-          apr_version_include = Pathname.new(config["--with-apr"])  +
-              'include' + 'apr_version.h'
-          %r'^\s*#define\s+APR_MAJOR_VERSION\s+(\d+)' =~ apr_version_include.read
-          apr_major_version = $1 == '0' ? '' : "-#{$1}"
-
-          cwd = Dir.getwd
-          targets = %W(svnserve.exe libsvn_subr-1.dll libsvn_repos-1.dll
-                       libsvn_fs-1.dll libsvn_delta-1.dll
-                       libaprutil#{apr_major_version}.dll
-                       libapr#{apr_major_version}.dll
-                       libapriconv#{apr_major_version}.dll
-                       libdb??.dll libdb??d.dll)
-          ENV["PATH"].split(";").each do |path|
-
-            # Change the cwd to path, but ignore non-existent paths.
-            begin
-              Dir.chdir(path)
-            rescue Errno::ENOENT
-              next
-            end
-
-            found_targets = []
-            targets.each do |target|
-              matching_paths = Dir.glob(target)
-              matching_paths.each do |target_path|
-                target_path = File.join(path.tr('\\', '/'), target_path)
-                if File.exists?(target_path)
-                  found_targets << target
-                  retried = 0
-                  begin
-                    FileUtils.cp(target_path, svnserve_dir)
-                  rescue Errno::EACCES
-                    # On Windows the tests frequently fail spuriously with a
-                    # 'Errno::EACCES: Permission denied - svnserve.exe' error.
-                    # Sleeping for a few seconds avoids this.
-                    if retried > 5
-                      # Give up!
-                      raise
-                    else
-                      # Wait a sec...
-                      sleep(1)
-                      retried += 1
-                      retry
-                    end
-                  end
-                end
-              end
-            end
-            targets -= found_targets
-            break if targets.empty?
-          end
-          Dir.chdir(cwd)
-          # Remove optional targets instead of raising below.  If they are really
-          # needed, svnserve won't start anyway.
-          targets -= %W[libapriconv#{apr_major_version}.dll]
-          # Ditto these four, since svnserve.exe might be a static build.
-          targets -= %W[libsvn_subr-1.dll]
-          targets -= %W[libsvn_repos-1.dll]
-          targets -= %W[libsvn_fs-1.dll]
-          targets -= %W[libsvn_delta-1.dll]
-
-          unless targets.empty?
-            raise "can't find libraries to work svnserve: #{targets.join(' ')}"
-          end
-
-          grant_everyone_full_access(svnserve_dir)
 
-          svnserve_path = File.join(svnserve_dir, "svnserve.exe")
-          svnserve_path = svnserve_path.tr(File::SEPARATOR,
-                                           File::ALT_SEPARATOR)
+          top_directory = File.join(File.dirname(__FILE__), "..", "..", "..", "..", "..")
+          build_type = ENV["BUILD_TYPE"] || "Release"
+          svnserve_path = File.join(top_directory, build_type, 'subversion', 'svnserve', 'svnserve.exe')
           svnserve_path = Svnserve.escape_value(svnserve_path)
 
           root = @full_repos_path.tr(File::SEPARATOR, File::ALT_SEPARATOR)
+          FileUtils.mkdir_p(root)
 
-          args = ["--service", "--root", Svnserve.escape_value(root),
-                  "--listen-host", @svnserve_host,
-                  "--listen-port", @svnserve_port]
+          IO.popen("#{svnserve_path} -d -r #{Svnserve.escape_value(root)} --listen-host #{@svnserve_host} --listen-port #{@svnserve_port} --pid-file #{@svnserve_pid_file}")
           user = ENV["USERNAME"] || Etc.getlogin
-          service_control('create',
-                          [["binPath", "#{svnserve_path} #{args.join(' ')}"],
-                           ["DisplayName", service_name],
-                           ["type", "own"]])
         end
-        service_control('start')
         true
       end
 
       def teardown_svnserve
-        service_control('stop') unless service_stopped?
+        # TODO:
+        #   Load @svnserve_pid_file
+        #   Kill process
       end
 
       def add_pre_revprop_change_hook

Modified: subversion/branches/invoke-diff-cmd-feature/subversion/include/private/svn_editor.h
URL: http://svn.apache.org/viewvc/subversion/branches/invoke-diff-cmd-feature/subversion/include/private/svn_editor.h?rev=1526487&r1=1526486&r2=1526487&view=diff
==============================================================================
--- subversion/branches/invoke-diff-cmd-feature/subversion/include/private/svn_editor.h (original)
+++ subversion/branches/invoke-diff-cmd-feature/subversion/include/private/svn_editor.h Thu Sep 26 13:47:21 2013
@@ -270,7 +270,6 @@ svn_delta_shim_callbacks_default(apr_poo
  *      svn_editor_setcb_delete() \n
  *      svn_editor_setcb_copy() \n
  *      svn_editor_setcb_move() \n
- *      svn_editor_setcb_rotate() \n
  *      svn_editor_setcb_complete() \n
  *      svn_editor_setcb_abort()
  *
@@ -293,7 +292,6 @@ svn_delta_shim_callbacks_default(apr_poo
  *      svn_editor_delete() \n
  *      svn_editor_copy() \n
  *      svn_editor_move() \n
- *      svn_editor_rotate()
  *    \n\n
  *    Just before each callback invocation is carried out, the @a cancel_func
  *    that was passed to svn_editor_create() is invoked to poll any
@@ -325,7 +323,7 @@ svn_delta_shim_callbacks_default(apr_poo
  * In order to reduce complexity of callback receivers, the editor callbacks
  * must be driven in adherence to these rules:
  *
- * - If any path is added (with add_*) or deleted/moved/rotated, then
+ * - If any path is added (with add_*) or deleted/moved, then
  *   an svn_editor_alter_directory() call must be made for its parent
  *   directory with the target/eventual set of children.
  *
@@ -344,15 +342,13 @@ svn_delta_shim_callbacks_default(apr_poo
  *   its children, if a directory) may be copied many times, and are
  *   otherwise subject to the Once Rule. The destination path of a copy
  *   or move may have alter_* operations applied, but not add_* or delete.
- *   If the destination path of a copy, move, or rotate is a directory,
+ *   If the destination path of a copy or move is a directory,
  *   then its children are subject to the Once Rule. The source path of
  *   a move (and its child paths) may be referenced in add_*, or as the
  *   destination of a copy (where these new or copied nodes are subject
- *   to the Once Rule). Paths listed in a rotation are both sources and
- *   destinations, so they may not be referenced again in an add_* or a
- *   deletion; these paths may have alter_* operations applied.
+ *   to the Once Rule).
  *
- * - The ancestor of an added, copied-here, moved-here, rotated, or
+ * - The ancestor of an added, copied-here, moved-here, or
  *   modified node may not be deleted. The ancestor may not be moved
  *   (instead: perform the move, *then* the edits).
  *
@@ -375,10 +371,6 @@ svn_delta_shim_callbacks_default(apr_poo
  *   by a delete... that is fine. It is simply that svn_editor_move()
  *   should be used to describe a semantic move.
  *
- * - Paths mentioned in svn_editor_rotate() may have their properties
- *   and contents edited (via alter_* calls) by a previous or later call,
- *   but they may not be subject to a later move, rotate, or deletion.
- *
  * - One of svn_editor_complete() or svn_editor_abort() must be called
  *   exactly once, which must be the final call the driver invokes.
  *   Invoking svn_editor_complete() must imply that the set of changes has
@@ -620,15 +612,6 @@ typedef svn_error_t *(*svn_editor_cb_mov
   svn_revnum_t replaces_rev,
   apr_pool_t *scratch_pool);
 
-/** @see svn_editor_rotate(), svn_editor_t.
- * @since New in 1.8.
- */
-typedef svn_error_t *(*svn_editor_cb_rotate_t)(
-  void *baton,
-  const apr_array_header_t *relpaths,
-  const apr_array_header_t *revisions,
-  apr_pool_t *scratch_pool);
-
 /** @see svn_editor_complete(), svn_editor_t.
  * @since New in 1.8.
  */
@@ -790,17 +773,6 @@ svn_editor_setcb_move(svn_editor_t *edit
                       svn_editor_cb_move_t callback,
                       apr_pool_t *scratch_pool);
 
-/** Sets the #svn_editor_cb_rotate_t callback in @a editor
- * to @a callback.
- * @a scratch_pool is used for temporary allocations (if any).
- * @see also svn_editor_setcb_many().
- * @since New in 1.8.
- */
-svn_error_t *
-svn_editor_setcb_rotate(svn_editor_t *editor,
-                        svn_editor_cb_rotate_t callback,
-                        apr_pool_t *scratch_pool);
-
 /** Sets the #svn_editor_cb_complete_t callback in @a editor
  * to @a callback.
  * @a scratch_pool is used for temporary allocations (if any).
@@ -841,7 +813,6 @@ typedef struct svn_editor_cb_many_t
   svn_editor_cb_delete_t cb_delete;
   svn_editor_cb_copy_t cb_copy;
   svn_editor_cb_move_t cb_move;
-  svn_editor_cb_rotate_t cb_rotate;
   svn_editor_cb_complete_t cb_complete;
   svn_editor_cb_abort_t cb_abort;
 
@@ -1093,7 +1064,7 @@ svn_editor_copy(svn_editor_t *editor,
  * expect to find this node.  That is, @a src_relpath at the start of
  * the whole edit and @a src_relpath at @a src_revision must lie within
  * the same node-rev (aka history-segment).  This is just like the
- * revisions specified to svn_editor_delete() and svn_editor_rotate().
+ * revisions specified to svn_editor_delete().
  *
  * For a description of @a replaces_rev, see svn_editor_add_file().
  *
@@ -1110,36 +1081,6 @@ svn_editor_move(svn_editor_t *editor,
                 const char *dst_relpath,
                 svn_revnum_t replaces_rev);
 
-/** Drive @a editor's #svn_editor_cb_rotate_t callback.
- *
- * Perform a rotation among multiple nodes in the target tree.
- *
- * The @a relpaths and @a revisions arrays (pair-wise) specify nodes in the
- * tree which are located at a path and expected to be at a specific
- * revision. These nodes are simultaneously moved in a rotation pattern.
- * For example, the node at index 0 of @a relpaths and @a revisions will
- * be moved to the relpath specified at index 1 of @a relpaths. The node
- * at index 1 will be moved to the location at index 2. The node at index
- * N-1 will be moved to the relpath specified at index 0.
- *
- * The simplest form of this operation is to swap nodes A and B. One may
- * think to move A to a temporary location T, then move B to A, then move
- * T to B. However, this last move violations the Once Rule by moving T
- * (which had already by edited by the move from A). In order to keep the
- * restrictions against multiple moves of a single node, the rotation
- * operation is needed for certain types of tree edits.
- *
- * ### what happens if one of the paths of the rotation is not "within" the
- * ### receiver's set of paths?
- *
- * For all restrictions on driving the editor, see #svn_editor_t.
- * @since New in 1.8.
- */
-svn_error_t *
-svn_editor_rotate(svn_editor_t *editor,
-                  const apr_array_header_t *relpaths,
-                  const apr_array_header_t *revisions);
-
 /** Drive @a editor's #svn_editor_cb_complete_t callback.
  *
  * Send word that the edit has been completed successfully.