You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by st...@apache.org on 2013/11/27 12:52:46 UTC

svn commit: r1546002 [6/39] - in /subversion/branches/verify-keep-going: ./ build/ build/ac-macros/ build/generator/ build/generator/swig/ build/generator/templates/ build/win32/ contrib/client-side/emacs/ contrib/server-side/ contrib/server-side/svncu...

Modified: subversion/branches/verify-keep-going/subversion/bindings/javahl/native/SVNClient.cpp
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/bindings/javahl/native/SVNClient.cpp?rev=1546002&r1=1546001&r2=1546002&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/bindings/javahl/native/SVNClient.cpp (original)
+++ subversion/branches/verify-keep-going/subversion/bindings/javahl/native/SVNClient.cpp Wed Nov 27 11:52:35 2013
@@ -449,12 +449,7 @@ void SVNClient::copy(CopySources &copySo
     SVN::Pool subPool(pool);
 
     apr_array_header_t *srcs = copySources.array(subPool);
-    if (srcs == NULL)
-    {
-        JNIUtil::throwNativeException(JAVA_PACKAGE "/ClientException",
-                                      "Invalid copy sources");
-        return;
-    }
+    SVN_JNI_NULL_PTR_EX(srcs, "sources", );
     SVN_JNI_NULL_PTR_EX(destPath, "destPath", );
     Path destinationPath(destPath, subPool);
     SVN_JNI_ERR(destinationPath.error_occurred(), );
@@ -1120,7 +1115,7 @@ void SVNClient::streamFileContent(const 
         return;
 
     SVN_JNI_ERR(svn_client_cat2(outputStream.getStream(subPool),
-                                path, pegRevision.revision(),
+                                intPath.c_str(), pegRevision.revision(),
                                 revision.revision(), ctx, subPool.getPool()),
                 );
 }
@@ -1343,10 +1338,10 @@ jstring SVNClient::getVersionInfo(const 
         }
         else
         {
-            char *message = JNIUtil::getFormatBuffer();
-            apr_snprintf(message, JNIUtil::formatBufferSize,
+            char buffer[2048];
+            apr_snprintf(buffer, sizeof(buffer),
                          _("'%s' not versioned, and not exported\n"), path);
-            return JNIUtil::makeJString(message);
+            return JNIUtil::makeJString(buffer);
         }
     }
 
@@ -1419,16 +1414,11 @@ jobject SVNClient::revProperties(const c
     return CreateJ::PropertyMap(props, subPool.getPool());
 }
 
-struct info_baton
-{
-    std::vector<info_entry> infoVect;
-    apr_pool_t *pool;
-};
-
 void
-SVNClient::info2(const char *path, Revision &revision, Revision &pegRevision,
-                 svn_depth_t depth, StringArray &changelists,
-                 InfoCallback *callback)
+SVNClient::info2(const char *path,
+                 Revision &revision, Revision &pegRevision, svn_depth_t depth,
+                 svn_boolean_t fetchExcluded, svn_boolean_t fetchActualOnly,
+                 StringArray &changelists, InfoCallback *callback)
 {
     SVN_JNI_NULL_PTR_EX(path, "path", );
 
@@ -1443,7 +1433,7 @@ SVNClient::info2(const char *path, Revis
     SVN_JNI_ERR(svn_client_info3(checkedPath.c_str(),
                                  pegRevision.revision(),
                                  revision.revision(),
-                                 depth, FALSE, TRUE,
+                                 depth, fetchExcluded, fetchActualOnly,
                                  changelists.array(subPool),
                                  InfoCallback::callback, callback,
                                  ctx, subPool.getPool()), );
@@ -1516,10 +1506,6 @@ SVNClient::openRemoteSession(const char*
                     ctx, subPool.getPool()),
                 NULL);
 
-    jobject jctx = context.getSelf();
-    if (JNIUtil::isJavaExceptionThrown())
-        return NULL;
-
     /* Decouple the RemoteSession's context from SVNClient's context
        by creating a copy of the prompter here. */
     Prompter* prompter = new Prompter(context.getPrompter());
@@ -1529,9 +1515,9 @@ SVNClient::openRemoteSession(const char*
     jobject jremoteSession = RemoteSession::open(
         retryAttempts, path_info.url.c_str(), path_info.uuid.c_str(),
         context.getConfigDirectory(),
-        context.getConfigCallback(),
         context.getUsername(), context.getPassword(),
-        prompter, jctx);
+        prompter, context.getSelf(),
+        context.getConfigEventHandler(), context.getTunnelCallback());
     if (JNIUtil::isJavaExceptionThrown())
       delete prompter;
 

Modified: subversion/branches/verify-keep-going/subversion/bindings/javahl/native/SVNClient.h
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/bindings/javahl/native/SVNClient.h?rev=1546002&r1=1546001&r2=1546002&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/bindings/javahl/native/SVNClient.h (original)
+++ subversion/branches/verify-keep-going/subversion/bindings/javahl/native/SVNClient.h Wed Nov 27 11:52:35 2013
@@ -66,9 +66,10 @@ class SVNClient :public SVNBase
   void patch(const char *patchPath, const char *targetPath, bool dryRun,
              int stripCount, bool reverse, bool ignoreWhitespace,
              bool removeTempfiles, PatchCallback *callback);
-  void info2(const char *path, Revision &revision, Revision &pegRevision,
-             svn_depth_t depth, StringArray &changelists,
-             InfoCallback *callback);
+  void info2(const char *path,
+             Revision &revision, Revision &pegRevision, svn_depth_t depth,
+             svn_boolean_t fetchExcluded, svn_boolean_t fetchActualOnly,
+             StringArray &changelists, InfoCallback *callback);
   void unlock(Targets &targets, bool force);
   void lock(Targets &targets, const char *comment, bool force);
   jobject revProperties(const char *path, Revision &revision);

Propchange: subversion/branches/verify-keep-going/subversion/bindings/javahl/native/StateReporter.cpp
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: subversion/branches/verify-keep-going/subversion/bindings/javahl/native/StateReporter.h
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: subversion/branches/verify-keep-going/subversion/bindings/javahl/native/org_apache_subversion_javahl_NativeResources.cpp
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/bindings/javahl/native/org_apache_subversion_javahl_NativeResources.cpp?rev=1546002&r1=1546001&r2=1546002&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/bindings/javahl/native/org_apache_subversion_javahl_NativeResources.cpp (original)
+++ subversion/branches/verify-keep-going/subversion/bindings/javahl/native/org_apache_subversion_javahl_NativeResources.cpp Wed Nov 27 11:52:35 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/verify-keep-going/subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNClient.cpp
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNClient.cpp?rev=1546002&r1=1546001&r2=1546002&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNClient.cpp (original)
+++ subversion/branches/verify-keep-going/subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNClient.cpp Wed Nov 27 11:52:35 2013
@@ -275,6 +275,21 @@ Java_org_apache_subversion_javahl_SVNCli
 }
 
 JNIEXPORT void JNICALL
+Java_org_apache_subversion_javahl_SVNClient_setTunnelAgent
+(JNIEnv *env, jobject jthis, jobject jtunnelcb)
+{
+  JNIEntry(SVNClient, setPrompt);
+  SVNClient *cl = SVNClient::getCppObject(jthis);
+  if (cl == NULL)
+    {
+      JNIUtil::throwError(_("bad C++ this"));
+      return;
+    }
+
+  cl->getClientContext().setTunnelCallback(jtunnelcb);
+}
+
+JNIEXPORT void JNICALL
 Java_org_apache_subversion_javahl_SVNClient_logMessages
 (JNIEnv *env, jobject jthis, jstring jpath, jobject jpegRevision,
  jobject jranges, jboolean jstopOnCopy, jboolean jdisoverPaths,
@@ -384,7 +399,7 @@ Java_org_apache_subversion_javahl_SVNCli
   if (JNIUtil::isExceptionThrown())
     return;
 
-  PropertyTable revprops(jrevpropTable);
+  PropertyTable revprops(jrevpropTable, false, false);
   if (JNIUtil::isExceptionThrown())
     return;
 
@@ -498,7 +513,7 @@ Java_org_apache_subversion_javahl_SVNCli
   if (JNIUtil::isExceptionThrown())
     return;
 
-  PropertyTable revprops(jrevpropTable);
+  PropertyTable revprops(jrevpropTable, false, false);
   if (JNIUtil::isExceptionThrown())
     return;
 
@@ -539,7 +554,7 @@ Java_org_apache_subversion_javahl_SVNCli
   if (JNIUtil::isExceptionThrown())
     return;
 
-  PropertyTable revprops(jrevpropTable);
+  PropertyTable revprops(jrevpropTable, false, false);
   if (JNIUtil::isExceptionThrown())
     return;
 
@@ -577,7 +592,7 @@ Java_org_apache_subversion_javahl_SVNCli
   if (JNIUtil::isExceptionThrown())
     return;
 
-  PropertyTable revprops(jrevpropTable);
+  PropertyTable revprops(jrevpropTable, false, false);
   if (JNIUtil::isExceptionThrown())
     return;
 
@@ -610,7 +625,7 @@ Java_org_apache_subversion_javahl_SVNCli
   if (JNIUtil::isExceptionThrown())
     return;
 
-  PropertyTable revprops(jrevpropTable);
+  PropertyTable revprops(jrevpropTable, false, false);
   if (JNIUtil::isExceptionThrown())
     return;
 
@@ -761,7 +776,7 @@ Java_org_apache_subversion_javahl_SVNCli
   if (JNIUtil::isExceptionThrown())
     return;
 
-  PropertyTable revprops(jrevpropTable);
+  PropertyTable revprops(jrevpropTable, false, false);
   if (JNIUtil::isExceptionThrown())
     return;
 
@@ -1012,7 +1027,7 @@ Java_org_apache_subversion_javahl_SVNCli
   if (JNIUtil::isExceptionThrown())
     return;
 
-  PropertyTable revprops(jrevpropTable);
+  PropertyTable revprops(jrevpropTable, false, false);
   if (JNIUtil::isExceptionThrown())
     return;
 
@@ -1634,11 +1649,27 @@ Java_org_apache_subversion_javahl_SVNCli
   cl->getClientContext().setConfigDirectory(configDir);
 }
 
+JNIEXPORT jstring JNICALL
+Java_org_apache_subversion_javahl_SVNClient_getConfigDirectory
+(JNIEnv *env, jobject jthis)
+{
+  JNIEntry(SVNClient, getConfigDirectory);
+  SVNClient *cl = SVNClient::getCppObject(jthis);
+  if (cl == NULL)
+    {
+      JNIUtil::throwError(_("bad C++ this"));
+      return NULL;
+    }
+
+  const char *configDir = cl->getClientContext().getConfigDirectory();
+  return JNIUtil::makeJString(configDir);
+}
+
 JNIEXPORT void JNICALL
-Java_org_apache_subversion_javahl_SVNClient_setConfigEventHandler
-(JNIEnv *env, jobject jthis, jobject jconfigHandler)
+Java_org_apache_subversion_javahl_SVNClient_setConfigEventHandler(
+    JNIEnv* env, jobject jthis, jobject jcallback)
 {
-  JNIEntry(SVNClient, setConfigDirectory);
+  JNIEntry(SVNClient, setConfigEventHandler);
   SVNClient *cl = SVNClient::getCppObject(jthis);
   if (cl == NULL)
     {
@@ -1646,14 +1677,14 @@ Java_org_apache_subversion_javahl_SVNCli
       return;
     }
 
-  cl->getClientContext().setConfigCallback(jconfigHandler);
+  cl->getClientContext().setConfigEventHandler(jcallback);
 }
 
-JNIEXPORT jstring JNICALL
-Java_org_apache_subversion_javahl_SVNClient_getConfigDirectory
-(JNIEnv *env, jobject jthis)
+JNIEXPORT jobject JNICALL
+Java_org_apache_subversion_javahl_SVNClient_getConfigEventHandler(
+    JNIEnv* env, jobject jthis)
 {
-  JNIEntry(SVNClient, getConfigDirectory);
+  JNIEntry(SVNClient, getConfigEventHandler);
   SVNClient *cl = SVNClient::getCppObject(jthis);
   if (cl == NULL)
     {
@@ -1661,8 +1692,7 @@ Java_org_apache_subversion_javahl_SVNCli
       return NULL;
     }
 
-  const char *configDir = cl->getClientContext().getConfigDirectory();
-  return JNIUtil::makeJString(configDir);
+  return cl->getClientContext().getConfigEventHandler();
 }
 
 JNIEXPORT void JNICALL
@@ -1810,8 +1840,9 @@ Java_org_apache_subversion_javahl_SVNCli
 JNIEXPORT void JNICALL
 Java_org_apache_subversion_javahl_SVNClient_info2
 (JNIEnv *env, jobject jthis, jstring jpath, jobject jrevision,
- jobject jpegRevision, jobject jdepth, jobject jchangelists,
- jobject jinfoCallback)
+ jobject jpegRevision, jobject jdepth,
+ jboolean jfetchExcluded, jboolean jfetchActualOnly,
+ jobject jchangelists, jobject jinfoCallback)
 {
   JNIEntry(SVNClient, info2);
   SVNClient *cl = SVNClient::getCppObject(jthis);
@@ -1838,6 +1869,7 @@ Java_org_apache_subversion_javahl_SVNCli
 
   InfoCallback callback(jinfoCallback);
   cl->info2(path, revision, pegRevision, EnumMapper::toDepth(jdepth),
+            svn_boolean_t(jfetchExcluded), svn_boolean_t(jfetchActualOnly),
             changelists, &callback);
 }
 

Modified: subversion/branches/verify-keep-going/subversion/bindings/javahl/native/org_apache_subversion_javahl_remote_CommitEditor.cpp
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/bindings/javahl/native/org_apache_subversion_javahl_remote_CommitEditor.cpp?rev=1546002&r1=1546001&r2=1546002&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/bindings/javahl/native/org_apache_subversion_javahl_remote_CommitEditor.cpp (original)
+++ subversion/branches/verify-keep-going/subversion/bindings/javahl/native/org_apache_subversion_javahl_remote_CommitEditor.cpp Wed Nov 27 11:52:35 2013
@@ -56,13 +56,15 @@ Java_org_apache_subversion_javahl_remote
 JNIEXPORT jlong JNICALL
 Java_org_apache_subversion_javahl_remote_CommitEditor_nativeCreateInstance(
     JNIEnv *env, jclass thisclass, jobject jsession, jobject jrevprops,
-    jobject jcommit_callback, jobject jlock_tokens, jboolean jkeep_locks)
+    jobject jcommit_callback, jobject jlock_tokens, jboolean jkeep_locks,
+    jobject jget_base_cb, jobject jget_props_cb, jobject jget_kind_cb)
 {
   jobject jthis = NULL;         // Placeholder -- this is a static method
   JNIEntry(CommitEditor, nativeCreateInstance);
 
-  return CommitEditor::createInstance(jsession, jrevprops, jcommit_callback,
-                                      jlock_tokens, jkeep_locks);
+  return CommitEditor::createInstance(
+      jsession, jrevprops, jcommit_callback, jlock_tokens, jkeep_locks,
+      jget_base_cb, jget_props_cb, jget_kind_cb);
 }
 
 JNIEXPORT void JNICALL
@@ -182,16 +184,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/verify-keep-going/subversion/bindings/javahl/native/org_apache_subversion_javahl_remote_CommitEditor.cpp
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: subversion/branches/verify-keep-going/subversion/bindings/javahl/native/org_apache_subversion_javahl_remote_RemoteFactory.cpp
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/bindings/javahl/native/org_apache_subversion_javahl_remote_RemoteFactory.cpp?rev=1546002&r1=1546001&r2=1546002&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/bindings/javahl/native/org_apache_subversion_javahl_remote_RemoteFactory.cpp (original)
+++ subversion/branches/verify-keep-going/subversion/bindings/javahl/native/org_apache_subversion_javahl_remote_RemoteFactory.cpp Wed Nov 27 11:52:35 2013
@@ -36,23 +36,23 @@
 
 JNIEXPORT jobject JNICALL
 Java_org_apache_subversion_javahl_remote_RemoteFactory_open(
-    JNIEnv *env, jclass jclass, jint jretryAttempts,
+    JNIEnv *env, jclass jclazz, jint jretryAttempts,
     jstring jurl, jstring juuid,
-    jstring jconfigDirectory, jobject jconfigHandler,
+    jstring jconfigDirectory,
     jstring jusername, jstring jpassword,
-    jobject jprompter, jobject jprogress)
+    jobject jprompter, jobject jprogress,
+    jobject jcfgcb, jobject jtunnelcb)
 {
   //JNI macros need jthis but this is a static call
-  jobject jthis = NULL;
-  JNIEntry(Remotefactory, open);
+  JNIEntryStatic(RemoteFactory, open);
 
   /*
    * Create RemoteSession C++ object and return its java wrapper to the caller
    */
   jobject jremoteSession = RemoteSession::open(
       jretryAttempts, jurl, juuid,
-      jconfigDirectory, jconfigHandler,
-      jusername, jpassword, jprompter, jprogress);
+      jconfigDirectory, jusername, jpassword, jprompter, jprogress,
+      jcfgcb, jtunnelcb);
   if (JNIUtil::isJavaExceptionThrown())
     return NULL;
 

Propchange: subversion/branches/verify-keep-going/subversion/bindings/javahl/native/org_apache_subversion_javahl_remote_RemoteFactory.cpp
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: subversion/branches/verify-keep-going/subversion/bindings/javahl/native/org_apache_subversion_javahl_remote_RemoteSession.cpp
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/bindings/javahl/native/org_apache_subversion_javahl_remote_RemoteSession.cpp?rev=1546002&r1=1546001&r2=1546002&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/bindings/javahl/native/org_apache_subversion_javahl_remote_RemoteSession.cpp (original)
+++ subversion/branches/verify-keep-going/subversion/bindings/javahl/native/org_apache_subversion_javahl_remote_RemoteSession.cpp Wed Nov 27 11:52:35 2013
@@ -272,10 +272,61 @@ Java_org_apache_subversion_javahl_remote
   return ras->checkPath(jpath, jrevision);
 }
 
-// TODO: stat
-// TODO: getLocations
-// TODO: getLocationSegments
-// TODO: getFileRevisions
+JNIEXPORT jobject JNICALL
+Java_org_apache_subversion_javahl_remote_RemoteSession_stat(
+    JNIEnv *env, jobject jthis, jstring jpath, jlong jrevision)
+{
+  JNIEntry(SVNReposAccess, stat);
+  RemoteSession *ras = RemoteSession::getCppObject(jthis);
+  CPPADDR_NULL_PTR(ras, NULL);
+
+  return ras->stat(jpath, jrevision);
+}
+
+JNIEXPORT jobject JNICALL
+Java_org_apache_subversion_javahl_remote_RemoteSession_getLocations(
+    JNIEnv *env, jobject jthis, jstring jpath, jlong jpeg_revision,
+    jobject jlocation_revisions)
+{
+  JNIEntry(SVNReposAccess, getLocations);
+  RemoteSession *ras = RemoteSession::getCppObject(jthis);
+  CPPADDR_NULL_PTR(ras, NULL);
+
+  return ras->getLocations(jpath, jpeg_revision, jlocation_revisions);
+}
+
+JNIEXPORT void JNICALL
+Java_org_apache_subversion_javahl_remote_RemoteSession_getLocationSegments(
+    JNIEnv *env, jobject jthis, jstring jpath, jlong jpeg_revision,
+    jlong jstart_revision, jlong jend_revision, jobject jcallback)
+{
+  JNIEntry(SVNReposAccess, getLocationSegments);
+  RemoteSession *ras = RemoteSession::getCppObject(jthis);
+  CPPADDR_NULL_PTR(ras, );
+
+  if (jcallback == NULL)
+    JNIUtil::throwNullPointerException("handler");
+  ras->getLocationSegments(jpath, jpeg_revision,
+                           jstart_revision, jend_revision,
+                           jcallback);
+}
+
+JNIEXPORT void JNICALL
+Java_org_apache_subversion_javahl_remote_RemoteSession_getFileRevisions(
+    JNIEnv *env, jobject jthis, jstring jpath,
+    jlong jstart_revision, jlong jend_revision,
+    jboolean jinclude_merged_revisions, jobject jcallback)
+{
+  JNIEntry(SVNReposAccess, getFileRevisions);
+  RemoteSession *ras = RemoteSession::getCppObject(jthis);
+  CPPADDR_NULL_PTR(ras, );
+
+  if (jcallback == NULL)
+    JNIUtil::throwNullPointerException("handler");
+  ras->getFileRevisions(jpath, jstart_revision, jend_revision,
+                        jinclude_merged_revisions, jcallback);
+}
+
 // TODO: lock
 // TODO: unlock
 // TODO: getLock

Propchange: subversion/branches/verify-keep-going/subversion/bindings/javahl/native/org_apache_subversion_javahl_remote_RemoteSession.cpp
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: subversion/branches/verify-keep-going/subversion/bindings/javahl/native/org_apache_subversion_javahl_remote_StateReporter.cpp
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: subversion/branches/verify-keep-going/subversion/bindings/javahl/src/org/apache/subversion/javahl/ClientException.java
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/bindings/javahl/src/org/apache/subversion/javahl/ClientException.java?rev=1546002&r1=1546001&r2=1546002&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/bindings/javahl/src/org/apache/subversion/javahl/ClientException.java (original)
+++ subversion/branches/verify-keep-going/subversion/bindings/javahl/src/org/apache/subversion/javahl/ClientException.java Wed Nov 27 11:52:35 2013
@@ -30,13 +30,9 @@ import java.util.List;
  */
 public class ClientException extends NativeException
 {
-    // Update the serialVersionUID when there is a incompatible change
-    // made to this class.  See any of the following, depending upon
-    // the Java release.
-    // http://java.sun.com/j2se/1.3/docs/guide/serialization/spec/version.doc7.html
-    // http://java.sun.com/j2se/1.4/pdf/serial-spec.pdf
-    // http://java.sun.com/j2se/1.5.0/docs/guide/serialization/spec/version.html#6678
-    // http://java.sun.com/javase/6/docs/platform/serialization/spec/version.html#6678
+    // Update the serialVersionUID when there is a incompatible change made to
+    // this class.  See the java documentation for when a change is incompatible.
+    // http://java.sun.com/javase/7/docs/platform/serialization/spec/version.html#6678
     private static final long serialVersionUID = 2L;
 
     /**
@@ -79,10 +75,10 @@ public class ClientException extends Nat
      * @param messageStack The whole stack of error messages
      * @since 1.9
      */
-    ClientException(String message, String source, int aprError,
-                    List<ErrorMessage> messageStack)
+    ClientException(String message, Throwable cause, String source,
+                    int aprError, List<ErrorMessage> messageStack)
     {
-        super(message, source, aprError);
+        super(message, source, cause, aprError);
         this.messageStack = messageStack;
     }
 
@@ -96,7 +92,7 @@ public class ClientException extends Nat
      */
     ClientException(String message, String source, int aprError)
     {
-        this(message, source, aprError, null);
+        this(message, null, source, aprError, null);
     }
 
     public List<ErrorMessage> getAllMessages()

Modified: subversion/branches/verify-keep-going/subversion/bindings/javahl/src/org/apache/subversion/javahl/ClientNotifyInformation.java
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/bindings/javahl/src/org/apache/subversion/javahl/ClientNotifyInformation.java?rev=1546002&r1=1546001&r2=1546002&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/bindings/javahl/src/org/apache/subversion/javahl/ClientNotifyInformation.java (original)
+++ subversion/branches/verify-keep-going/subversion/bindings/javahl/src/org/apache/subversion/javahl/ClientNotifyInformation.java Wed Nov 27 11:52:35 2013
@@ -23,10 +23,12 @@
 
 package org.apache.subversion.javahl;
 
+import org.apache.subversion.javahl.types.*;
+import org.apache.subversion.javahl.callback.ClientNotifyCallback;
+
+import java.util.List;
 import java.util.Map;
 import java.util.EventObject;
-import org.apache.subversion.javahl.callback.ClientNotifyCallback;
-import org.apache.subversion.javahl.types.*;
 
 /**
  * The event passed to the {@link ClientNotifyCallback#onNotify}
@@ -34,14 +36,18 @@ import org.apache.subversion.javahl.type
  */
 public class ClientNotifyInformation extends EventObject
 {
-    // Update the serialVersionUID when there is a incompatible change
-    // made to this class.  See any of the following, depending upon
-    // the Java release.
-    // http://java.sun.com/j2se/1.3/docs/guide/serialization/spec/version.doc7.html
-    // http://java.sun.com/j2se/1.4/pdf/serial-spec.pdf
-    // http://java.sun.com/j2se/1.5.0/docs/guide/serialization/spec/version.html#6678
-    // http://java.sun.com/javase/6/docs/platform/serialization/spec/version.html#6678
-    private static final long serialVersionUID = 1L;
+    // Update the serialVersionUID when there is a incompatible change made to
+    // this class.  See the java documentation for when a change is incompatible.
+    // http://java.sun.com/javase/7/docs/platform/serialization/spec/version.html#6678
+    private static final long serialVersionUID = 2L;
+
+    /**
+     * Path, either absolute or relative to the current working
+     * directory (i.e., not relative to an anchor). <code>path</code>
+     * is <code>null</vode> when the real target is an URL that is
+     * available in {@link #url}.
+     */
+    private String path;
 
     /**
      * The {@link Action} which triggered this event.
@@ -69,6 +75,12 @@ public class ClientNotifyInformation ext
     private String errMsg;
 
     /**
+     * A detailed stack of error messages for the item.
+     * @see ClientException
+     */
+    private List<ClientException.ErrorMessage> errMsgStack;
+
+    /**
      * The {@link Status} of the content of the item.
      */
     private Status contentState;
@@ -99,6 +111,12 @@ public class ClientNotifyInformation ext
     private RevisionRange mergeRange;
 
     /**
+     * Similar to {@link #path}, but when not <code>null</code>, the
+     * notification is about a UR>.
+     */
+    private String url;
+
+    /**
      * A common absolute path prefix that can be subtracted from .path.
      */
     private String pathPrefix;
@@ -139,30 +157,35 @@ public class ClientNotifyInformation ext
      * @param changelistName The name of the changelist.
      * @param mergeRange The range of the merge just beginning to occur.
      * @param pathPrefix A common path prefix.
+     * @since 1.9
      */
     public ClientNotifyInformation(String path, Action action, NodeKind kind,
                              String mimeType, Lock lock, String errMsg,
+                             List<ClientException.ErrorMessage> errMsgStack,
                              Status contentState, Status propState,
                              LockStatus lockState, long revision,
                              String changelistName, RevisionRange mergeRange,
-                             String pathPrefix, String propName,
+                             String url, String pathPrefix, String propName,
                              Map<String, String> revProps, long oldRevision,
                              long hunkOriginalStart, long hunkOriginalLength,
                              long hunkModifiedStart, long hunkModifiedLength,
                              long hunkMatchedLine, int hunkFuzz)
     {
-        super(path == null ? "" : path);
+        super(path != null ? path : (url != null ? url : ""));
+        this.path = path;
         this.action = action;
         this.kind = kind;
         this.mimeType = mimeType;
         this.lock = lock;
         this.errMsg = errMsg;
+        this.errMsgStack = errMsgStack;
         this.contentState = contentState;
         this.propState = propState;
         this.lockState = lockState;
         this.revision = revision;
         this.changelistName = changelistName;
         this.mergeRange = mergeRange;
+        this.url = url;
         this.pathPrefix = pathPrefix;
         this.propName = propName;
         this.revProps = revProps;
@@ -176,7 +199,33 @@ public class ClientNotifyInformation ext
     }
 
     /**
+     * @deprecated Constructor compatible with teh 1.8 API; uses
+     * <code>null</code> URL and errMsgStack values.
+     */
+    @Deprecated
+    public ClientNotifyInformation(String path, Action action, NodeKind kind,
+                             String mimeType, Lock lock, String errMsg,
+                             Status contentState, Status propState,
+                             LockStatus lockState, long revision,
+                             String changelistName, RevisionRange mergeRange,
+                             String pathPrefix, String propName,
+                             Map<String, String> revProps, long oldRevision,
+                             long hunkOriginalStart, long hunkOriginalLength,
+                             long hunkModifiedStart, long hunkModifiedLength,
+                             long hunkMatchedLine, int hunkFuzz)
+    {
+        this(path, action, kind, mimeType, lock, errMsg, null,
+             contentState, propState, lockState, revision,
+             changelistName, mergeRange, null, pathPrefix,
+             propName, revProps, oldRevision,
+             hunkOriginalStart, hunkOriginalLength,
+             hunkModifiedStart, hunkModifiedLength,
+             hunkMatchedLine, hunkFuzz);
+    }
+
+    /**
      * @return The path of the item, which is the source of the event.
+     *         This may actually be a URL.
      */
     public String getPath()
     {
@@ -184,6 +233,15 @@ public class ClientNotifyInformation ext
     }
 
     /**
+     * @return {@link #path}, which may be <code>null</code>.
+     * @since 1.9
+     */
+    public String getNotifiedPath()
+    {
+        return this.path;
+    }
+
+    /**
      * @return The {@link Action} which triggered this event.
      */
     public Action getAction()
@@ -224,6 +282,14 @@ public class ClientNotifyInformation ext
     }
 
     /**
+     * @return Details about the error message for the item.
+     */
+    public List<ClientException.ErrorMessage> getErrMsgDetails()
+    {
+        return errMsgStack;
+    }
+
+    /**
      * @return The {@link Status} of the content of the item.
      */
     public Status getContentState()
@@ -272,6 +338,15 @@ public class ClientNotifyInformation ext
     }
 
     /**
+     * @return {@link #url}, which may be <code>null</code>
+     * @since 1.9
+     */
+    public String getUrl()
+    {
+        return this.url;
+    }
+
+    /**
      * @return The common absolute path prefix.
      */
     public String getPathPrefix()
@@ -567,7 +642,16 @@ public class ClientNotifyInformation ext
 
         /** A move in the working copy has been broken
          * @since New in 1.8. */
-        move_broken ("move broken");
+        move_broken ("move broken"),
+
+        /** Running cleanup on an external module.
+         * @since New in 1.9. */
+        cleanup_external ("cleanup external"),
+
+        /** The operation failed because the operation (E.g. commit)
+         * is only valid if the operation includes this path.
+         * @since New in 1.9. */
+        failed_requires_target ("failed requires target");
 
         /**
          * The description of the action.

Modified: subversion/branches/verify-keep-going/subversion/bindings/javahl/src/org/apache/subversion/javahl/CommitInfo.java
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/bindings/javahl/src/org/apache/subversion/javahl/CommitInfo.java?rev=1546002&r1=1546001&r2=1546002&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/bindings/javahl/src/org/apache/subversion/javahl/CommitInfo.java (original)
+++ subversion/branches/verify-keep-going/subversion/bindings/javahl/src/org/apache/subversion/javahl/CommitInfo.java Wed Nov 27 11:52:35 2013
@@ -32,13 +32,9 @@ import org.apache.subversion.javahl.type
  */
 public class CommitInfo implements java.io.Serializable
 {
-    // Update the serialVersionUID when there is a incompatible change
-    // made to this class.  See any of the following, depending upon
-    // the Java release.
-    // http://java.sun.com/j2se/1.3/docs/guide/serialization/spec/version.doc7.html
-    // http://java.sun.com/j2se/1.4/pdf/serial-spec.pdf
-    // http://java.sun.com/j2se/1.5.0/docs/guide/serialization/spec/version.html#6678
-    // http://java.sun.com/javase/6/docs/platform/serialization/spec/version.html#6678
+    // Update the serialVersionUID when there is a incompatible change made to
+    // this class.  See the java documentation for when a change is incompatible.
+    // http://java.sun.com/javase/7/docs/platform/serialization/spec/version.html#6678
     private static final long serialVersionUID = 1L;
 
     /** the revision committed */

Modified: subversion/branches/verify-keep-going/subversion/bindings/javahl/src/org/apache/subversion/javahl/CommitItem.java
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/bindings/javahl/src/org/apache/subversion/javahl/CommitItem.java?rev=1546002&r1=1546001&r2=1546002&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/bindings/javahl/src/org/apache/subversion/javahl/CommitItem.java (original)
+++ subversion/branches/verify-keep-going/subversion/bindings/javahl/src/org/apache/subversion/javahl/CommitItem.java Wed Nov 27 11:52:35 2013
@@ -30,13 +30,9 @@ import org.apache.subversion.javahl.type
  */
 public class CommitItem implements java.io.Serializable
 {
-    // Update the serialVersionUID when there is a incompatible change
-    // made to this class.  See any of the following, depending upon
-    // the Java release.
-    // http://java.sun.com/j2se/1.3/docs/guide/serialization/spec/version.doc7.html
-    // http://java.sun.com/j2se/1.4/pdf/serial-spec.pdf
-    // http://java.sun.com/j2se/1.5.0/docs/guide/serialization/spec/version.html#6678
-    // http://java.sun.com/javase/6/docs/platform/serialization/spec/version.html#6678
+    // Update the serialVersionUID when there is a incompatible change made to
+    // this class.  See the java documentation for when a change is incompatible.
+    // http://java.sun.com/javase/7/docs/platform/serialization/spec/version.html#6678
     private static final long serialVersionUID = 1L;
 
     /**

Modified: subversion/branches/verify-keep-going/subversion/bindings/javahl/src/org/apache/subversion/javahl/DiffSummary.java
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/bindings/javahl/src/org/apache/subversion/javahl/DiffSummary.java?rev=1546002&r1=1546001&r2=1546002&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/bindings/javahl/src/org/apache/subversion/javahl/DiffSummary.java (original)
+++ subversion/branches/verify-keep-going/subversion/bindings/javahl/src/org/apache/subversion/javahl/DiffSummary.java Wed Nov 27 11:52:35 2013
@@ -33,13 +33,9 @@ import org.apache.subversion.javahl.type
  */
 public class DiffSummary extends EventObject
 {
-    // Update the serialVersionUID when there is a incompatible change
-    // made to this class.  See any of the following, depending upon
-    // the Java release.
-    // http://java.sun.com/j2se/1.3/docs/guide/serialization/spec/version.doc7.html
-    // http://java.sun.com/j2se/1.4/pdf/serial-spec.pdf
-    // http://java.sun.com/j2se/1.5.0/docs/guide/serialization/spec/version.html#6678
-    // http://java.sun.com/javase/6/docs/platform/serialization/spec/version.html#6678
+    // Update the serialVersionUID when there is a incompatible change made to
+    // this class.  See the java documentation for when a change is incompatible.
+    // http://java.sun.com/javase/7/docs/platform/serialization/spec/version.html#6678
     private static final long serialVersionUID = 1L;
 
     private DiffKind diffKind;

Modified: subversion/branches/verify-keep-going/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNClient.java
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNClient.java?rev=1546002&r1=1546001&r2=1546002&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNClient.java (original)
+++ subversion/branches/verify-keep-going/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNClient.java Wed Nov 27 11:52:35 2013
@@ -51,6 +51,11 @@ public interface ISVNClient
     public Version getVersion();
 
     /**
+     * @return Runtime version information about the loaded libsvn_client.
+     */
+    public RuntimeVersion getRuntimeVersion();
+
+    /**
      * @return Extended version information about the underlying
      * native libraries and operating system.
      */
@@ -134,6 +139,12 @@ public interface ISVNClient
     void setPrompt(UserPasswordCallback prompt);
 
     /**
+     * Set callbacks for ra_svn tunnel handling.
+     * @since 1.9
+     */
+    void setTunnelAgent(TunnelAgent tunnelAgent);
+
+    /**
      * Retrieve the log messages for an item.
      * @param path          path or url to get the log message for.
      * @param pegRevision   revision to interpret path
@@ -308,6 +319,7 @@ public interface ISVNClient
      * @param handler   the commit message callback, may be <code>null</code>
      *                  if <code>destPath</code> is not a URL
      * @throws ClientException If the copy operation fails.
+     * @throws NullPointerException if the <code>sources</code> list is empty.
      */
     void copy(List<CopySource> sources, String destPath,
               boolean copyAsChild, boolean makeParents,
@@ -347,6 +359,7 @@ public interface ISVNClient
      * @deprecated Provided for backward compatibility with 1.7. Passes
      *             metadataOnly false and allowMixRev true.
      */
+    @Deprecated
     void move(Set<String> srcPaths, String destPath, boolean force,
               boolean moveAsChild, boolean makeParents,
               Map<String, String> revpropTable,
@@ -590,7 +603,7 @@ public interface ISVNClient
      * Merge set of revisions into a new local path.
      * <p>
      * <b>Note:</b> Behaves like the 1.8 version where ignoreAncestry
-     * maps to both ignoreMergeinfo and diffIgnoreAncestry
+     * maps to both ignoreMergeinfo and diffIgnoreAncestry.
      *
      * @param path          path or url
      * @param pegRevision   revision to interpret path
@@ -627,6 +640,7 @@ public interface ISVNClient
      * @throws ClientException
      * @deprecated Will be removed in a future release
      */
+    @Deprecated
     void mergeReintegrate(String path, Revision pegRevision,
                           String localPath, boolean dryRun)
              throws ClientException;
@@ -649,7 +663,7 @@ public interface ISVNClient
      * @param pegRevision            peg rev for pathOrUrl
      * @param mergeSourceUrl         the source of the merge
      * @param srcPegRevision         peg rev for mergeSourceUrl
-     * @param srcStartRevieion       lower bound of the source revision range
+     * @param srcStartRevision       lower bound of the source revision range
      * @param srcEndRevision         upper bound of the source revision range
      * @param discoverChangedPaths   return paths of changed items
      * @param depth                  the depth to recurse to
@@ -696,7 +710,7 @@ public interface ISVNClient
      * @param target2       second path or url
      * @param revision2     second revision
      * @param relativeToDir index path is relative to this path
-     * @param outFileName   file name where difference are written
+     * @param outStream     the stream to which difference are written
      * @param depth         how deep to traverse into subdirectories
      * @param ignoreAncestry ignore if files are not related
      * @param noDiffDeleted no output on deleted files
@@ -717,6 +731,26 @@ public interface ISVNClient
               DiffOptions options)
             throws ClientException;
 
+    /**
+     * Display the differences between two paths
+     * @param target1       first path or url
+     * @param revision1     first revision
+     * @param target2       second path or url
+     * @param revision2     second revision
+     * @param relativeToDir index path is relative to this path
+     * @param outFileName   file name where difference are written
+     * @param depth         how deep to traverse into subdirectories
+     * @param ignoreAncestry ignore if files are not related
+     * @param noDiffDeleted no output on deleted files
+     * @param force         diff even on binary files
+     * @param copiesAsAdds  if set, copied files will be shown in their
+     *                      entirety, not as diffs from their sources
+     * @param ignoreProps   don't show property diffs
+     * @param propsOnly     show property changes only
+     * @param options       additional options for controlling the output
+     * @throws ClientException
+     * @since 1.8
+     */
     void diff(String target1, Revision revision1, String target2,
               Revision revision2, String relativeToDir, String outFileName,
               Depth depth, Collection<String> changelists,
@@ -732,7 +766,7 @@ public interface ISVNClient
      * @param target2       second path or url
      * @param revision2     second revision
      * @param relativeToDir index path is relative to this path
-     * @param outFileName   file name where difference are written
+     * @param outStream     the stream to which difference are written
      * @param depth         how deep to traverse into subdirectories
      * @param ignoreAncestry ignore if files are not related
      * @param noDiffDeleted no output on deleted files
@@ -750,6 +784,24 @@ public interface ISVNClient
               boolean copiesAsAdds, boolean ignoreProps, boolean propsOnly)
             throws ClientException;
 
+    /**
+     * Display the differences between two paths
+     * @param target1       first path or url
+     * @param revision1     first revision
+     * @param target2       second path or url
+     * @param revision2     second revision
+     * @param relativeToDir index path is relative to this path
+     * @param outFileName   file name where difference are written
+     * @param depth         how deep to traverse into subdirectories
+     * @param ignoreAncestry ignore if files are not related
+     * @param noDiffDeleted no output on deleted files
+     * @param force         diff even on binary files
+     * @param copiesAsAdds  if set, copied files will be shown in their
+     *                      entirety, not as diffs from their sources
+     * @param ignoreProps   don't show property diffs
+     * @param propsOnly     show property changes only
+     * @throws ClientException
+     */
     void diff(String target1, Revision revision1, String target2,
               Revision revision2, String relativeToDir, String outFileName,
               Depth depth, Collection<String> changelists,
@@ -764,7 +816,7 @@ public interface ISVNClient
      * @param startRevision first Revision to compare
      * @param endRevision   second Revision to compare
      * @param relativeToDir index path is relative to this path
-     * @param outFileName   file name where difference are written
+     * @param outStream     the stream to which difference are written
      * @param depth         how deep to traverse into subdirectories
      * @param changelists  if non-null, filter paths using changelists
      * @param ignoreAncestry ignore if files are not related
@@ -786,6 +838,27 @@ public interface ISVNClient
               DiffOptions options)
             throws ClientException;
 
+    /**
+     * Display the differences between two paths.
+     * @param target        path or url
+     * @param pegRevision   revision tointerpret target
+     * @param startRevision first Revision to compare
+     * @param endRevision   second Revision to compare
+     * @param relativeToDir index path is relative to this path
+     * @param outFileName   file name where difference are written
+     * @param depth         how deep to traverse into subdirectories
+     * @param changelists  if non-null, filter paths using changelists
+     * @param ignoreAncestry ignore if files are not related
+     * @param noDiffDeleted no output on deleted files
+     * @param force         diff even on binary files
+     * @param copiesAsAdds  if set, copied files will be shown in their
+     *                      entirety, not as diffs from their sources
+     * @param ignoreProps   don't show property diffs
+     * @param propsOnly     show property changes only
+     * @param options       additional options for controlling the output
+     * @throws ClientException
+     * @since 1.8
+     */
     void diff(String target, Revision pegRevision, Revision startRevision,
               Revision endRevision, String relativeToDir, String outFileName,
               Depth depth, Collection<String> changelists,
@@ -801,7 +874,7 @@ public interface ISVNClient
      * @param startRevision first Revision to compare
      * @param endRevision   second Revision to compare
      * @param relativeToDir index path is relative to this path
-     * @param outFileName   file name where difference are written
+     * @param outStream     the stream to which difference are written
      * @param depth         how deep to traverse into subdirectories
      * @param changelists  if non-null, filter paths using changelists
      * @param ignoreAncestry ignore if files are not related
@@ -821,6 +894,25 @@ public interface ISVNClient
               boolean copiesAsAdds, boolean ignoreProps, boolean propsOnly)
             throws ClientException;
 
+    /**
+     * Display the differences between two paths.
+     * @param target        path or url
+     * @param pegRevision   revision tointerpret target
+     * @param startRevision first Revision to compare
+     * @param endRevision   second Revision to compare
+     * @param relativeToDir index path is relative to this path
+     * @param outFileName   file name where difference are written
+     * @param depth         how deep to traverse into subdirectories
+     * @param changelists  if non-null, filter paths using changelists
+     * @param ignoreAncestry ignore if files are not related
+     * @param noDiffDeleted no output on deleted files
+     * @param force         diff even on binary files
+     * @param copiesAsAdds  if set, copied files will be shown in their
+     *                      entirety, not as diffs from their sources
+     * @param ignoreProps   don't show property diffs
+     * @param propsOnly     show property changes only
+     * @throws ClientException
+     */
     void diff(String target, Revision pegRevision, Revision startRevision,
               Revision endRevision, String relativeToDir, String outFileName,
               Depth depth, Collection<String> changelists,
@@ -860,7 +952,7 @@ public interface ISVNClient
      *
      * @param target Path or URL.
      * @param pegRevision Revision at which to interpret
-     * <code>target</code>.  If {@link Revision.Kind#unspecified} or
+     * <code>target</code>.  If {@link Revision#UNSPECIFIED} or
      * <code>null</code>, behave identically to {@link
      * #diffSummarize(String, Revision, String, Revision, Depth,
      * Collection, boolean, DiffSummaryCallback)}, using
@@ -925,14 +1017,11 @@ public interface ISVNClient
      *
      * @param paths   paths of the items
      * @param name    name of the property
-     * @param value   new value of the property. Set value to <code>
-     * null</code> to delete a property
+     * @param value   new value of the property. Set value to
+     * <code>null</code> to delete a property
      * @param depth   the depth to recurse into subdirectories
      * @param changelists changelists to filter by
      * @param force   do not check if the value is valid
-     * @param revpropTable A string-to-string mapping of revision properties
-     *                     to values which will be set if this operation
-     *                     results in a commit.
      * @throws ClientException
      */
     void propertySetLocal(Set<String> paths, String name, byte[] value,
@@ -940,6 +1029,21 @@ public interface ISVNClient
                           boolean force)
             throws ClientException;
 
+    /**
+     * Sets one property of an item with a String value
+     *
+     * @param paths   paths of the items
+     * @param name    name of the property
+     * @param value   new value of the property. Set value to <code>
+     * null</code> to delete a property
+     * @param depth   the depth to recurse into subdirectories
+     * @param changelists changelists to filter by
+     * @param force   do not check if the value is valid
+     * @param revpropTable A string-to-string mapping of revision properties
+     *                     to values which will be set if this operation
+     *                     results in a commit.
+     * @throws ClientException
+     */
     void propertySetRemote(String path, long baseRev, String name,
                            byte[] value, CommitMessageCallback handler,
                            boolean force, Map<String, String> revpropTable,
@@ -1069,12 +1173,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
@@ -1082,6 +1180,19 @@ public interface ISVNClient
     String getConfigDirectory() throws ClientException;
 
     /**
+     * Set an event handler that will be called every time the
+     * configuration is loaded by this client object.
+     */
+    void setConfigEventHandler(ConfigEvent configHandler)
+            throws ClientException;
+
+    /**
+     * Return a reference to the installed configuration event
+     * handler. The returned value may be <code>null</code>.
+     */
+    ConfigEvent getConfigEventHandler() throws ClientException;
+
+    /**
      * cancel the active operation
      * @throws ClientException
      */
@@ -1139,7 +1250,56 @@ public interface ISVNClient
             throws ClientException;
 
     /**
+     * Invoke <code>callback</code> to return information
+     * <code>pathOrUrl</code> in <code>revision</code>.  The
+     * information returned is system-generated metadata, not the sort
+     * of "property" metadata created by users.
+     * <p>
+     * If both revision arguments are either <code>null</code> or
+     * {@link Revision#START}, then information will be pulled solely
+     * from the working copy; no network connections will be made.
+     * <p>
+     * Otherwise, information will be pulled from a repository.  The
+     * actual node revision selected is determined by the
+     * <code>pathOrUrl</code> as it exists in
+     * <code>pegRevision</code>.  If <code>pegRevision</code> is
+     * {@link Revision#START}, then it defaults to {@link
+     * Revision#HEAD} for URLs or {@link Revision#WORKING} for WC
+     * targets.
+     * <p>
+     * If <code>pathOrUrl</code> is not a local path, then if
+     * <code>revision</code> is {@link Revision#PREVIOUS} (or some
+     * other kind that requires a local path), an error will be
+     * returned, because the desired revision cannot be determined.
+     * <p>
+     * If <code>pathOrUrl</code> is a file, just invoke the callback on it.  If it
+     * is a directory, then descend according to <code>depth</code>.
+     * <p>
+     * @param pathOrUrl     the path or the url of the item
+     * @param revision      the revision of the item to return
+     * @param pegRevision   the revision to interpret pathOrUrl
+     * @param depth         the depth to recurse
+     * @param fetchExcluded when <code>true</code>, retreive
+     * information about nodes that are excluded from the working copy
+     * @param fetchActualOnly when <code>true</code>, retreive
+     * information about node that are not versioned, but are still
+     * tree conflicted.
+     * @param changelists   if non-null, filter paths using changelists
+     * @param callback      a callback to receive the infos retrieved
+     * @since 1.9
+     */
+    void info2(String pathOrUrl,
+               Revision revision, Revision pegRevision, Depth depth,
+               boolean fetchExcluded, boolean fetchActualOnly,
+               Collection<String> changelists, InfoCallback callback)
+        throws ClientException;
+
+    /**
      * Retrieve information about repository or working copy items.
+     * <p>
+     * Behaves like the 1.9 version, with <code>fetchExcluded</code>
+     * set to <code>false</code> and <code>fetchActualOnly</code> set
+     * to <code>true</code>.
      * @param pathOrUrl     the path or the url of the item
      * @param revision      the revision of the item to return
      * @param pegRevision   the revision to interpret pathOrUrl

Modified: subversion/branches/verify-keep-going/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNConfig.java
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNConfig.java?rev=1546002&r1=1546001&r2=1546002&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNConfig.java (original)
+++ subversion/branches/verify-keep-going/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNConfig.java Wed Nov 27 11:52:35 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";
@@ -132,7 +132,7 @@ public interface ISVNConfig
     /**
      * Interface for reading and modifying configuration
      * categories. Returned by {@link #config()} and
-     * {@link servers()}.
+     * {@link #servers()}.
      */
     public interface Category
     {
@@ -160,7 +160,7 @@ public interface ISVNConfig
 
         /**
          * Returns the long integer value of a configuration option.
-         * @see #get(String,String,Boolean)
+         * @see #get(String,String,boolean)
          */
         long get(String section,
                  String option,
@@ -169,8 +169,8 @@ public interface ISVNConfig
 
         /**
          * Returns the {@link Tristate} value of a configuration option.
-         * @param unknown The value used for {@link Tristate.Unknown}.
-         * @see #get(String,String,Boolean)
+         * @param unknown The value used for {@link Tristate#Unknown}.
+         * @see #get(String,String,boolean)
          */
         Tristate get(String section,
                      String option,
@@ -181,7 +181,7 @@ public interface ISVNConfig
         /**
          * Check that the configuration option's value is true, false
          * or "ask". The boolean representations are the same as those
-         * understood by {@link #get(String,String,Boolean)}. If the
+         * understood by {@link #get(String,String,boolean)}. If the
          * option is not found, the default value will be parsed
          * instead.
          * @return {@link ISVNConfig#TRUE}, {@link ISVNConfig#FALSE}
@@ -207,7 +207,7 @@ public interface ISVNConfig
 
         /**
          * Set the value of a configuration option to represent a boolean.
-         * @see @set(String,String,String)
+         * @see #set(String,String,String)
          */
         void set(String section,
                  String option,
@@ -215,7 +215,7 @@ public interface ISVNConfig
 
         /**
          * Set the value of a configuration option to represent a long integer.
-         * @see @set(String,String,String)
+         * @see #set(String,String,String)
          */
         void set(String section,
                  String option,

Modified: subversion/branches/verify-keep-going/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNEditor.java
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNEditor.java?rev=1546002&r1=1546001&r2=1546002&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNEditor.java (original)
+++ subversion/branches/verify-keep-going/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNEditor.java Wed Nov 27 11:52:35 2013
@@ -31,8 +31,8 @@ import java.util.Map;
 
 /**
  * Editor interface (implements the EV2 abstraction).
- * @see <a href="http://svn.apache.org/repos/asf/subversion/trunk/subversion/include/private/svn_editor.h"
- *      >svn_editor.h</a> for all restrictions on driving an editor.
+ * @see <a href="http://svn.apache.org/repos/asf/subversion/trunk/subversion/include/private/svn_editor.h">svn_editor.h</a>
+ *      for all restrictions on driving an editor.
  * @since 1.9
  */
 public interface ISVNEditor
@@ -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.
@@ -325,4 +288,86 @@ public interface ISVNEditor
      * @throws ClientException
      */
     void abort() throws ClientException;
+
+
+    /**
+     * Callback interface for providing the base contents of a file
+     * that is being modified.
+     * @see ISVNRemote.getCommitEditor(Map,CommitCallback,Set,boolean,ISVNEditor.ProvideBaseCallback,ISVNEditor.ProvidePropsCallback,ISVNEditor.GetNodeKindCallback)
+     */
+    public interface ProvideBaseCallback
+    {
+        public static class ReturnValue
+        {
+            /**
+             * @param contents The base ({@link Revision#BASE}) contents
+             *         of the file.
+             * @param revision The base revision number.
+             */
+            public ReturnValue(InputStream contents, long revision)
+            {
+                this.contents = contents;
+                this.revision = revision;
+            }
+
+            final InputStream contents;
+            final long revision;
+        }
+
+        /**
+         * Returns the base contents and revision number of the file.
+         * @param reposRelpath The repository path of the file,
+         *        relative to the session base URL.
+         */
+        ReturnValue getContents(String reposRelpath);
+    }
+
+    /**
+     * Callback interface for providing the base properties of a file
+     * or directory that is being modified.
+     * @see ISVNRemote.getCommitEditor(Map,CommitCallback,Set,boolean,ISVNEditor.ProvideBaseCallback,ISVNEditor.ProvidePropsCallback,ISVNEditor.GetNodeKindCallback)
+     */
+    public interface ProvidePropsCallback
+    {
+        public static class ReturnValue
+        {
+            /**
+             * @param properties The base ({@link Revision#BASE}) properties
+             *         of the file or directory.
+             * @param revision The base revision number.
+             */
+            public ReturnValue(Map<String, byte[]> properties, long revision)
+            {
+                this.properties = properties;
+                this.revision = revision;
+            }
+
+            final Map<String, byte[]> properties;
+            final long revision;
+        }
+
+        /**
+         * Returns the base properties and revision number of the file
+         * or directory.
+         * @param reposRelpath The repository path of the file or directory,
+         *        relative to the session base URL.
+         */
+        ReturnValue getProperties(String reposRelpath);
+    }
+
+    /**
+     * Callback interface for providing the kind of the node that was
+     * the source of a copy.
+     * @see ISVNRemote.getCommitEditor(Map,CommitCallback,Set,boolean,ISVNEditor.ProvideBaseCallback,ISVNEditor.ProvidePropsCallback,ISVNEditor.GetNodeKindCallback)
+     */
+    public interface GetNodeKindCallback
+    {
+        /**
+         * Returns the kind of the node that was the source of a copy.
+         * @param reposRelpath The repository path of the node,
+         *        relative to the session base URL.
+         * @param revision The copy-from revision.
+         */
+        NodeKind getKind(String reposRelpath, long revision);
+    }
 }

Modified: subversion/branches/verify-keep-going/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNRemote.java
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNRemote.java?rev=1546002&r1=1546001&r2=1546002&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNRemote.java (original)
+++ subversion/branches/verify-keep-going/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNRemote.java Wed Nov 27 11:52:35 2013
@@ -27,13 +27,15 @@ import org.apache.subversion.javahl.type
 import org.apache.subversion.javahl.callback.*;
 
 import java.util.Date;
+import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import java.io.OutputStream;
 
 /**
  * Encapsulates an RA session object and related operations.
- * @see subversion/include/svn_ra.h#svn_ra_open
+ * @see <a href="http://svn.apache.org/repos/asf/subversion/trunk/subversion/include/svn_ra.h">svn_ra.h</a>,
+ *      the documentation of the <code>svn_ra_open</code> function.
  * @since 1.9
  */
 public interface ISVNRemote
@@ -52,9 +54,11 @@ public interface ISVNRemote
 
     /** Change the URL of the session to point to a new path in the
      * same repository.
+     *<p>
+     * <b>Note:</b> The operation fails if the URL has a different
+     * repository root than the current session URL.
+     *<p>
      * @throws ClientException
-     * @note The operation fails if the URL has a different repository
-     *       root than the current session URL.
      */
     void reparent(String url) throws ClientException;
 
@@ -114,20 +118,22 @@ public interface ISVNRemote
 
     /**
      * Change the value of an unversioned property.
+     *<p>
+     * <b>Note:</b> If the server has Capability.atomic_revprops and
+     * <code>oldValue</code> is not <code>null</code>, and the present
+     * value of the propery is not <code>oldValue</code> (e.g., if
+     * another client changed the property), then the operation will
+     * fail.
+     *<p>
+     * <b>Note:</b> If the server does not adveritse
+     * Capability.atomic_revprops, then <code>oldValue</code>
+     * <em>must</em> be <code>null</code>.
+     *<p>
      * @param revision The revision to which the propery is attached
      * @param propertyName The name of the propery
      * @param oldValue The previous value of the property (see note below)
      * @param newValue The new value of the property. If <code>newValue</code>
      *        is <code>null</code>, the property will be deleted.
-     *
-     * @node If the server has Capability.atomic_revprops and
-     *       <code>oldValue</code> is not <code>null</code>, and the
-     *       present value of the propery is not <code>oldValue</code>
-     *       (e.g., if another client changed the property), then
-     *       the operation will fail.
-     * @note If the server does not adveritse Capability.atomic_revprops,
-     *       then <code>oldValue</code> <em>must</em> be <code>null</code>.
-     *
      * @throws IllegalArgumentException if <code>oldValue</code> is not
      *         <code>null</code> and the server does not advertise the
      *         atomic_revprops capability.
@@ -189,14 +195,35 @@ public interface ISVNRemote
      * locks on committed objects.  Else, automatically release such
      * locks.
      * <p>
+     * The callbacks <code>getBase</code>, <code>getProps</code> and
+     * <code>getCopyfromKind</code> are invoked by the editor to fetch
+     * the contents, preoprties and copyfrom kind of an entry during
+     * the commit drive. They may be <code>null</code>; in that case,
+     * the commit may be less efficient because the client will not be
+     * able to delta-compress the data sent to the server, and more
+     * server connections may have to be opened.
+     * <p>
      * The caller may not perform any remote operations using this session
      * before finishing the edit.
      * @throws ClientException
      */
     ISVNEditor getCommitEditor(Map<String, byte[]> revisionProperties,
                                CommitCallback commitCallback,
-                               Set<Lock> lockTokens,
-                               boolean keepLocks)
+                               Set<Lock> lockTokens, boolean keepLocks,
+                               ISVNEditor.ProvideBaseCallback getBase,
+                               ISVNEditor.ProvidePropsCallback getProps,
+                               ISVNEditor.GetNodeKindCallback getCopyfromKind)
+            throws ClientException;
+
+    /**
+     * Like {@link #getCommitEditor(Map,CommitCallback<Set,boolean,
+     * ISVNEditor.ProvideBaseCallback,ISVNEditor.ProvidePropsCallback,
+     * ISVNEditor.GetNodeKindCallback)}, but with all callbacks set to
+     * <code>null</code>.
+     */
+    ISVNEditor getCommitEditor(Map<String, byte[]> revisionProperties,
+                               CommitCallback commitCallback,
+                               Set<Lock> lockTokens, boolean keepLocks)
             throws ClientException;
 
     /**
@@ -291,7 +318,7 @@ public interface ISVNRemote
      *
      * @param revision The revision to look for <code>paths</code>
      *                 in. Defaults to the youngest revision when
-     *                 {@link Revision.SVN_INVALID_REVNUM}.
+     *                 {@link Revision#SVN_INVALID_REVNUM}.
      * @param inherit Indicates whether explicit, explicit or
      *                inherited, or only inherited mergeinfo for
      *                <code>paths</code> is retrieved.
@@ -433,28 +460,276 @@ public interface ISVNRemote
             throws ClientException;
 
     /**
-     * Return the kind of the node in path at revision.
+     * Return the kind of the node in <code>path</code> at
+     * <code>revision</code>.
      * @param path A path relative to the sessionn URL
      * @throws ClientException
      */
     NodeKind checkPath(String path, long revision)
             throws ClientException;
 
-    // TODO: stat
-    // TODO: getLocations
-    // TODO: getLocationSegments
-    // TODO: getFileRevisions
+    /**
+     * Return the directory entry object for <code>path</code> at
+     * <code>revision</code>.
+     * @param path A path relative to the sessionn URL
+     * @return A directory entry obeject, or <code>null</code> if
+     * <code>path</code> at <code>revision</code> does not exist.
+     * @throws ClientException
+     */
+    DirEntry stat(String path, long revision)
+            throws ClientException;
+
+    /**
+     * Find the locations of the object identified by
+     * <code>path</code> and <code>pegRevision</code> in the
+     * repository at the given revisions. If the object does not exist
+     * in a given revision, that revision will be ignored.
+     * <p>
+     * <b>Note:</b> None of the parameters may be NULL.
+     * @param path A path relative to the session URL
+     * @param pegRevision The peg revision to use for locating the object
+     * @param locationRevisions The set of revisions to find locations for
+     * @throws ClientException
+     */
+    Map<Long, String> getLocations(String path, long pegRevision,
+                                   Iterable<Long> locationRevisions)
+            throws ClientException;
+
+    /**
+     * The object returned from {@link #getLocationSegments}.
+     */
+    public static class LocationSegment implements java.io.Serializable
+    {
+        // Update the serialVersionUID when there is a incompatible change
+        // made to this class.
+        private static final long serialVersionUID = 1L;
+
+        /**
+         * Private constructor called by the native implementation.
+         */
+        private LocationSegment(String path,
+                                long startRevision,
+                                long endRevision)
+        {
+            this.path = path;
+            this.startRevision = startRevision;
+            this.endRevision = endRevision;
+        }
+
+        /**
+         * @return The repository-relative path of the obejct in this
+         * history segment.
+         */
+        public String getPath() { return path; }
+
+        /**
+         * @return The start revision of the history segment.
+         */
+        public long getStartRevision() { return startRevision; }
+
+        /**
+         * @return The end revision of the history segment.
+         */
+        public long getEndRevision() { return endRevision; }
+
+        private String path;
+        private long startRevision;
+        private long endRevision;
+    }
+
+    /**
+     * Call <code>handler</code> for every segment in the location
+     * history of <code>path</code> at <code>pegRevision</code>,
+     * working backwards in time from <code>startRevision</code> to
+     * <code>endRevision</code>.
+     *
+     * @param path A session-relative path.
+     * @param pegRevision The peg revision to find <code>path</code> in.
+     * @param startRevision The upper bound of the revision range. Use
+     * {@link org.apache.subversion.javahl.types.Revision#SVN_INVALID_REVNUM}
+     *        to indicate HEAD.
+     * @param endRevision The lower bound of the revision range. Use
+     * {@link org.apache.subversion.javahl.types.Revision#SVN_INVALID_REVNUM}
+     *        to trace the history of the object to its origin.
+     * @param handler The callback handler.
+     * @throws ClientException
+     */
+    void getLocationSegments(String path,
+                             long pegRevision,
+                             long startRevision,
+                             long endRevision,
+                             RemoteLocationSegmentsCallback handler)
+            throws ClientException;
+
+    /**
+     * Return a list of segments in the location history of <code>path</code>
+     * at <code>pegRevision</code>, working backwards in time from
+     * <code>startRevision</code> to <code>endRevision</code>.
+     *
+     * @param path A session-relative path.
+     * @param pegRevision The peg revision to find <code>path</code> in.
+     * @param startRevision The upper bound of the revision range. Use
+     * {@link org.apache.subversion.javahl.types.Revision#SVN_INVALID_REVNUM}
+     *        to indicate HEAD.
+     * @param endRevision The lower bound of the revision range. Use
+     * {@link org.apache.subversion.javahl.types.Revision#SVN_INVALID_REVNUM}
+     *        to trace the history of the object to its origin.
+     * @throws ClientException
+     */
+    List<LocationSegment> getLocationSegments(String path,
+                                              long pegRevision,
+                                              long startRevision,
+                                              long endRevision)
+            throws ClientException;
+
+    /**
+     * The object returned by {@link #getFileRevisions}.
+     */
+    public final class FileRevision  implements java.io.Serializable
+    {
+        // Update the serialVersionUID when there is a incompatible change
+        // made to this class.
+        private static final long serialVersionUID = 1L;
+
+        /**
+         * Private constructor called by the native implementation.
+         */
+        private FileRevision(String path, long revision,
+                             boolean resultOfMerge,
+                             Map<String, byte[]> revisionProperties,
+                             Map<String, byte[]> propertiesDelta)
+        {
+            this.path = path;
+            this.revision = revision;
+            this.resultOfMerge = resultOfMerge;
+            this.revisionProperties = revisionProperties;
+            this.propertiesDelta = propertiesDelta;
+        }
+
+        /**
+         * @return The path of the file in this revision.
+         */
+        public String getPath() { return path; }
+
+        /**
+         * @return The revision associated with the path.
+         */
+        public long getRevision() { return revision; }
+
+        /**
+         * @return A flag indicating that this revision was the result
+         * of a merge.
+         */
+        public boolean isResultOfMerge() { return resultOfMerge; }
+
+        /**
+         * @return The list of revision properties.
+         */
+        public Map<String, byte[]> getRevisionProperties()
+        {
+            return revisionProperties;
+        }
+
+        /**
+         * @return The changes that were made to the file's properties
+         * in this revision. This map will contain only added,
+         * modified and deleted properties. Deleted properties will
+         * have <code>null</code> values.
+         */
+        public Map<String, byte[]> getPropertiesDelta()
+        {
+            return propertiesDelta;
+        }
+
+        private String path;
+        private long revision;
+        private boolean resultOfMerge;
+        private Map<String, byte[]> revisionProperties;
+        private Map<String, byte[]> propertiesDelta;
+    }
+
+    /**
+     * Call <code>handler</code> for each of a subset of the
+     * interesting revisions of a file <code>path</code> as seen in
+     * revision <code>endRevision</code>.
+     * <p>
+     * If there is an interesting revision of the file that is less
+     * than or equal to <code>startRevision</code>, the iteration will
+     * begin at that revision.  Otherwise the iteration will begin at
+     * the first revision of the file in the repository, which has to
+     * be less than or equal to <code>endRevision</code>.  Note that
+     * if the function succeeds, <code>handler</code> will be called
+     * at least once.
+     * <p>
+     * <b>Note:</b> This functionality is not available in pre-1.1
+     * servers.  If the server doesn't implement it, an alternative
+     * (but much slower) implementation based on {@link #getLog} is
+     * used.
+     * <p>
+     * <b>Note:</b> With Subversion 1.8 and newer servers this
+     * function supports reversion of the revision range for when
+     * <code>includeMergedRevisions</code> is <code>false</code>.
+     *
+     * @param path A path relative to the session URL.
+     * @param startRevision The lower bound of the revision interval.
+     * @param endRevision the upper bound of the revision interval.
+     * @param includeMergedRevisions When <code>true</code>, revisions that
+     *    contributed to a merge are included in the result.
+     * @throws ClientException
+     */
+    void getFileRevisions(String path,
+                          long startRevision, long endRevision,
+                          boolean includeMergedRevisions,
+                          RemoteFileRevisionsCallback handler)
+            throws ClientException;
+
+    /**
+     * Retrieve a subset of the interesting revisions of a file
+     * <code>path</code> as seen in revision <code>endRevision</code>.
+     * <p>
+     * If there is an interesting revision of the file that is less
+     * than or equal to <code>startRevision</code>, the iteration will
+     * begin at that revision.  Otherwise the iteration will begin at
+     * the first revision of the file in the repository, which has to
+     * be less than or equal to <code>endRevision</code>.  Note that
+     * if the function succeeds, the returned list will contain at
+     * least one element.
+     * <p>
+     * <b>Note:</b> This functionality is not available in pre-1.1
+     * servers.  If the server doesn't implement it, an alternative
+     * (but much slower) implementation based on {@link #getLog} is
+     * used.
+     * <p>
+     * <b>Note:</b> With Subversion 1.8 and newer servers this
+     * function supports reversion of the revision range for when
+     * <code>includeMergedRevisions</code> is <code>false</code>.
+     *
+     * @param path A path relative to the session URL.
+     * @param startRevision The lower bound of the revision interval.
+     * @param endRevision the upper bound of the revision interval.
+     * @param includeMergedRevisions When <code>true</code>, revisions that
+     *    contributed to a merge are included in the result.
+     * @throws ClientException
+     */
+    List<FileRevision> getFileRevisions(String path,
+                                        long startRevision, long endRevision,
+                                        boolean includeMergedRevisions)
+            throws ClientException;
+
+
     // TODO: lock
     // TODO: unlock
     // TODO: getLock
 
     /**
      * Return a dictionary containing all locks on or below the given path.
+     * <p>
+     * <b>Note:</b> It is not considered an error if <code>path</code> does
+     * not exist in HEAD. Such a search will simply return no locks.
+     * <p>
+     * <b>Note:</b>This functionality is not available in pre-1.2 servers.
      * @param path A path relative to the sessionn URL
      * @param depth The recursion depth
-     * @note It is not considered an error for the path to not exist in HEAD.
-     *       Such a search will simply return no locks.
-     * @note This functionality is not available in pre-1.2 servers.
      * @throws ClientException
      */
     Map<String, Lock> getLocks(String path, Depth depth)

Modified: subversion/branches/verify-keep-going/subversion/bindings/javahl/src/org/apache/subversion/javahl/JNIError.java
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/bindings/javahl/src/org/apache/subversion/javahl/JNIError.java?rev=1546002&r1=1546001&r2=1546002&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/bindings/javahl/src/org/apache/subversion/javahl/JNIError.java (original)
+++ subversion/branches/verify-keep-going/subversion/bindings/javahl/src/org/apache/subversion/javahl/JNIError.java Wed Nov 27 11:52:35 2013
@@ -28,13 +28,9 @@ package org.apache.subversion.javahl;
  */
 public class JNIError extends Error
 {
-    // Update the serialVersionUID when there is a incompatible change
-    // made to this class.  See any of the following, depending upon
-    // the Java release.
-    // http://java.sun.com/j2se/1.3/docs/guide/serialization/spec/version.doc7.html
-    // http://java.sun.com/j2se/1.4/pdf/serial-spec.pdf
-    // http://java.sun.com/j2se/1.5.0/docs/guide/serialization/spec/version.html#6678
-    // http://java.sun.com/javase/6/docs/platform/serialization/spec/version.html#6678
+    // Update the serialVersionUID when there is a incompatible change made to
+    // this class.  See the java documentation for when a change is incompatible.
+    // http://java.sun.com/javase/7/docs/platform/serialization/spec/version.html#6678
     private static final long serialVersionUID = 1L;
 
     /**

Modified: subversion/branches/verify-keep-going/subversion/bindings/javahl/src/org/apache/subversion/javahl/NativeException.java
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/bindings/javahl/src/org/apache/subversion/javahl/NativeException.java?rev=1546002&r1=1546001&r2=1546002&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/bindings/javahl/src/org/apache/subversion/javahl/NativeException.java (original)
+++ subversion/branches/verify-keep-going/subversion/bindings/javahl/src/org/apache/subversion/javahl/NativeException.java Wed Nov 27 11:52:35 2013
@@ -29,13 +29,9 @@ package org.apache.subversion.javahl;
  */
 class NativeException extends SubversionException
 {
-    // Update the serialVersionUID when there is a incompatible change
-    // made to this class.  See any of the following, depending upon
-    // the Java release.
-    // http://java.sun.com/j2se/1.3/docs/guide/serialization/spec/version.doc7.html
-    // http://java.sun.com/j2se/1.4/pdf/serial-spec.pdf
-    // http://java.sun.com/j2se/1.5.0/docs/guide/serialization/spec/version.html#6678
-    // http://java.sun.com/javase/6/docs/platform/serialization/spec/version.html#6678
+    // Update the serialVersionUID when there is a incompatible change made to
+    // this class.  See the java documentation for when a change is incompatible.
+    // http://java.sun.com/javase/7/docs/platform/serialization/spec/version.html#6678
     private static final long serialVersionUID = 1L;
 
     /**
@@ -58,9 +54,10 @@ class NativeException extends Subversion
      * @param aprError Any associated APR error code for a wrapped
      * <code>svn_error_t</code>.
      */
-    NativeException(String message, String source, int aprError)
+    NativeException(String message, String source, Throwable cause,
+                    int aprError)
     {
-        super(message);
+        super(message, cause);
         this.source = source;
         this.aprError = aprError;
     }

Modified: subversion/branches/verify-keep-going/subversion/bindings/javahl/src/org/apache/subversion/javahl/NativeResources.java
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/bindings/javahl/src/org/apache/subversion/javahl/NativeResources.java?rev=1546002&r1=1546001&r2=1546002&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/bindings/javahl/src/org/apache/subversion/javahl/NativeResources.java (original)
+++ subversion/branches/verify-keep-going/subversion/bindings/javahl/src/org/apache/subversion/javahl/NativeResources.java Wed Nov 27 11:52:35 2013
@@ -24,6 +24,7 @@
 package org.apache.subversion.javahl;
 
 import org.apache.subversion.javahl.types.Version;
+import org.apache.subversion.javahl.types.RuntimeVersion;
 
 /**
  * Handles activities related to management of native resouces
@@ -35,21 +36,32 @@ import org.apache.subversion.javahl.type
 public class NativeResources
 {
     /**
-     * @return Version information about the underlying native libraries.
+     * Version information about the underlying native libraries.
      */
     private static Version version;
 
     /**
-     * Returns version information about the underlying native libraries.
-     *
-     * @return version
-     *
+     * Runtime version information about the loaded libsvn_client.
      */
-    public static Version getVersion() {
+    private static RuntimeVersion runtimeVersion;
+
+    /**
+     * @return Version information about the underlying native libraries.
+     */
+    public static Version getVersion()
+    {
         return version;
     }
 
     /**
+     * @return Runtime version information about the loaded libsvn_client.
+     */
+    public static RuntimeVersion getRuntimeVersion()
+    {
+        return runtimeVersion;
+    }
+
+    /**
      * Load the required native library whose path is specified by the
      * system property <code>subversion.native.library</code> (which
      * can be passed to the JVM on start-up using an argument like
@@ -129,17 +141,29 @@ 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))
         {
             throw new LinkageError("Native library version must be at least " +
                                    "1.9.0, but is only " + version);
         }
+
+        runtimeVersion = new RuntimeVersion();
+        if (runtimeVersion.getMajor() < version.getMajor()
+            || (runtimeVersion.getMajor() == version.getMajor()
+                && runtimeVersion.getMinor() < version.getMinor()))
+        {
+            throw new LinkageError(
+                "Compile-time Native library version is " + version +
+                " but the run-time version is " + runtimeVersion);
+        }
     }
 
     /**
      * Initialize the native library layer.
      */
-    private static native void initNativeLibrary();
+    private static native boolean initNativeLibrary();
 }