Modified: 
subversion/branches/fsx-1.10/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNRepos.java
URL: 
http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNRepos.java?rev=1685464&r1=1685463&r2=1685464&view=diff
==============================================================================
--- 
subversion/branches/fsx-1.10/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNRepos.java
 (original)
+++ 
subversion/branches/fsx-1.10/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNRepos.java
 Sun Jun 14 20:58:10 2015
@@ -34,138 +34,138 @@ import org.apache.subversion.javahl.type
 
 public interface ISVNRepos {
 
-       /**
-        * interface to receive the messages
-        */
-       public static interface MessageReceiver
-       {
-           /**
-            * receive one message line
-            * @param message   one line of message
-            */
-           public void receiveMessageLine(String message);
-       }
-
-       /**
-        * release the native peer (should not depend on finalize)
-        */
-       public abstract void dispose();
-
-       /**
-        * Filesystem in a Berkeley DB
-        */
-       public static final String BDB = "bdb";
-       /**
-        * Filesystem in the filesystem
-        */
-       public static final String FSFS = "fsfs";
-
-       /**
-        * @return Version information about the underlying native libraries.
-        */
-       public abstract Version getVersion();
-
-       /**
-        * create a subversion repository.
-        * @param path                  the path where the repository will been
-        *                              created.
-        * @param disableFsyncCommit    disable to fsync at the commit (BDB).
-        * @param keepLog               keep the log files (BDB).
-        * @param configPath            optional path for user configuration 
files.
-        * @param fstype                the type of the filesystem (BDB or FSFS)
-        * @throws ClientException  throw in case of problem
-        */
-       public abstract void create(File path, boolean disableFsyncCommit,
-                       boolean keepLog, File configPath, String fstype)
-                       throws ClientException;
-
-       /**
-        * deltify the revisions in the repository
-        * @param path              the path to the repository
-        * @param start             start revision
-        * @param end               end revision
-        * @throws ClientException  throw in case of problem
-        */
-       public abstract void deltify(File path, Revision start, Revision end)
-                       throws ClientException;
-
-       /**
-        * dump the data in a repository
-        * @param path              the path to the repository
-        * @param dataOut           the data will be outputed here
-        * @param start             the first revision to be dumped
-        * @param end               the last revision to be dumped
-        * @param incremental       the dump will be incremantal
-        * @param useDeltas         the dump will contain deltas between nodes
+    /**
+     * interface to receive the messages
+     */
+    public static interface MessageReceiver
+    {
+        /**
+         * receive one message line
+         * @param message   one line of message
+         */
+        public void receiveMessageLine(String message);
+    }
+
+    /**
+     * release the native peer (should not depend on finalize)
+     */
+    public abstract void dispose();
+
+    /**
+     * Filesystem in a Berkeley DB
+     */
+    public static final String BDB = "bdb";
+    /**
+     * Filesystem in the filesystem
+     */
+    public static final String FSFS = "fsfs";
+
+    /**
+     * @return Version information about the underlying native libraries.
+     */
+    public abstract Version getVersion();
+
+    /**
+     * create a subversion repository.
+     * @param path                  the path where the repository will been
+     *                              created.
+     * @param disableFsyncCommit    disable to fsync at the commit (BDB).
+     * @param keepLog               keep the log files (BDB).
+     * @param configPath            optional path for user configuration files.
+     * @param fstype                the type of the filesystem (BDB or FSFS)
+     * @throws ClientException  throw in case of problem
+     */
+    public abstract void create(File path, boolean disableFsyncCommit,
+            boolean keepLog, File configPath, String fstype)
+            throws ClientException;
+
+    /**
+     * deltify the revisions in the repository
+     * @param path              the path to the repository
+     * @param start             start revision
+     * @param end               end revision
+     * @throws ClientException  throw in case of problem
+     */
+    public abstract void deltify(File path, Revision start, Revision end)
+            throws ClientException;
+
+    /**
+     * dump the data in a repository
+     * @param path              the path to the repository
+     * @param dataOut           the data will be outputed here
+     * @param start             the first revision to be dumped
+     * @param end               the last revision to be dumped
+     * @param incremental       the dump will be incremantal
+     * @param useDeltas         the dump will contain deltas between nodes
          * @param callback          the callback to receive notifications
-        * @throws ClientException  throw in case of problem
-        */
-       public abstract void dump(File path, OutputStream dataOut,
+     * @throws ClientException  throw in case of problem
+     */
+    public abstract void dump(File path, OutputStream dataOut,
                 Revision start, Revision end, boolean incremental,
                 boolean useDeltas, ReposNotifyCallback callback)
-                       throws ClientException;
+            throws ClientException;
 
-       /**
-        * make a hot copy of the repository
-        * @param path              the path to the source repository
-        * @param targetPath        the path to the target repository
-        * @param cleanLogs         clean the unused log files in the source
-        *                          repository
+    /**
+     * make a hot copy of the repository
+     * @param path              the path to the source repository
+     * @param targetPath        the path to the target repository
+     * @param cleanLogs         clean the unused log files in the source
+     *                          repository
          * @param callback          the callback to receive notifications
-        * @throws ClientException  throw in case of problem
+     * @throws ClientException  throw in case of problem
          * @since 1.9
-        */
-       public abstract void hotcopy(File path, File targetPath,
+     */
+    public abstract void hotcopy(File path, File targetPath,
                         boolean cleanLogs, boolean incremental,
                         ReposNotifyCallback callback)
                         throws ClientException;
 
-       public abstract void hotcopy(File path, File targetPath,
-                       boolean cleanLogs, boolean incremental)
+    public abstract void hotcopy(File path, File targetPath,
+            boolean cleanLogs, boolean incremental)
                         throws ClientException;
 
-       public abstract void hotcopy(File path, File targetPath,
-                       boolean cleanLogs) throws ClientException;
+    public abstract void hotcopy(File path, File targetPath,
+            boolean cleanLogs) throws ClientException;
 
-       /**
-        * list all logfiles (BDB) in use or not)
-        * @param path              the path to the repository
-        * @param receiver          interface to receive the logfile names
-        * @throws ClientException  throw in case of problem
-        */
-       public abstract void listDBLogs(File path, MessageReceiver receiver)
-                       throws ClientException;
-
-       /**
-        * list unused logfiles
-        * @param path              the path to the repository
-        * @param receiver          interface to receive the logfile names
-        * @throws ClientException  throw in case of problem
-        */
-       public abstract void listUnusedDBLogs(File path, MessageReceiver 
receiver)
-                       throws ClientException;
-
-
-       /**
-        * load the data of a dump into a repository
-        * @param path              the path to the repository
-        * @param dataInput         the data input source
+    /**
+     * list all logfiles (BDB) in use or not)
+     * @param path              the path to the repository
+     * @param receiver          interface to receive the logfile names
+     * @throws ClientException  throw in case of problem
+     */
+    public abstract void listDBLogs(File path, MessageReceiver receiver)
+            throws ClientException;
+
+    /**
+     * list unused logfiles
+     * @param path              the path to the repository
+     * @param receiver          interface to receive the logfile names
+     * @throws ClientException  throw in case of problem
+     */
+    public abstract void listUnusedDBLogs(File path, MessageReceiver receiver)
+            throws ClientException;
+
+
+    /**
+     * load the data of a dump into a repository
+     * @param path              the path to the repository
+     * @param dataInput         the data input source
          * @param start             the first revision to load
          * @param end               the last revision to load
-        * @param ignoreUUID        ignore any UUID found in the input stream
-        * @param forceUUID         set the repository UUID to any found in the
-        *                          stream
-        * @param usePreCommitHook  use the pre-commit hook when processing 
commits
-        * @param usePostCommitHook use the post-commit hook when processing 
commits
+     * @param ignoreUUID        ignore any UUID found in the input stream
+     * @param forceUUID         set the repository UUID to any found in the
+     *                          stream
+     * @param usePreCommitHook  use the pre-commit hook when processing commits
+     * @param usePostCommitHook use the post-commit hook when processing 
commits
          * @param validateProps     validate "svn:" revision and node 
properties
          * @param ignoreDates       ignore revision datestamps in the dump 
stream
-        * @param relativePath      the directory in the repository, where the 
data
-        *                          in put optional.
-        * @param callback          the target for processing messages
-        * @throws ClientException  throw in case of problem
+     * @param relativePath      the directory in the repository, where the data
+     *                          in put optional.
+     * @param callback          the target for processing messages
+     * @throws ClientException  throw in case of problem
          * @since 1.9
-        */
-       public abstract void load(File path, InputStream dataInput,
+     */
+    public abstract void load(File path, InputStream dataInput,
                                   Revision start, Revision end,
                                   boolean ignoreUUID, boolean forceUUID,
                                   boolean usePreCommitHook,
@@ -176,27 +176,27 @@ public interface ISVNRepos {
                                   ReposNotifyCallback callback)
         throws ClientException;
 
-       /**
-        * Load the data of a dump into a repository.  Sets
+    /**
+     * Load the data of a dump into a repository.  Sets
          * <code>validateProps</code> and <code>ignoreDates</code> to
          * <code>false</code>.
          *
-        * @param path              the path to the repository
-        * @param dataInput         the data input source
+     * @param path              the path to the repository
+     * @param dataInput         the data input source
          * @param start             the first revision to load
          * @param end               the last revision to load
-        * @param ignoreUUID        ignore any UUID found in the input stream
-        * @param forceUUID         set the repository UUID to any found in the
-        *                          stream
-        * @param usePreCommitHook  use the pre-commit hook when processing 
commits
-        * @param usePostCommitHook use the post-commit hook when processing 
commits
-        * @param relativePath      the directory in the repository, where the 
data
-        *                          in put optional.
-        * @param callback          the target for processing messages
-        * @throws ClientException  throw in case of problem
+     * @param ignoreUUID        ignore any UUID found in the input stream
+     * @param forceUUID         set the repository UUID to any found in the
+     *                          stream
+     * @param usePreCommitHook  use the pre-commit hook when processing commits
+     * @param usePostCommitHook use the post-commit hook when processing 
commits
+     * @param relativePath      the directory in the repository, where the data
+     *                          in put optional.
+     * @param callback          the target for processing messages
+     * @throws ClientException  throw in case of problem
          * @since 1.8
-        */
-       public abstract void load(File path, InputStream dataInput,
+     */
+    public abstract void load(File path, InputStream dataInput,
                                   Revision start, Revision end,
                                   boolean ignoreUUID, boolean forceUUID,
                                   boolean usePreCommitHook,
@@ -205,163 +205,163 @@ public interface ISVNRepos {
                                   ReposNotifyCallback callback)
         throws ClientException;
 
-       /**
-        * load the data of a dump into a repository
-        * @param path              the path to the repository
-        * @param dataInput         the data input source
-        * @param ignoreUUID        ignore any UUID found in the input stream
-        * @param forceUUID         set the repository UUID to any found in the
-        *                          stream
-        * @param usePreCommitHook  use the pre-commit hook when processing 
commits
-        * @param usePostCommitHook use the post-commit hook when processing 
commits
-        * @param relativePath      the directory in the repository, where the 
data
-        *                          in put optional.
-        * @param callback          the target for processing messages
-        * @throws ClientException  throw in case of problem
+    /**
+     * load the data of a dump into a repository
+     * @param path              the path to the repository
+     * @param dataInput         the data input source
+     * @param ignoreUUID        ignore any UUID found in the input stream
+     * @param forceUUID         set the repository UUID to any found in the
+     *                          stream
+     * @param usePreCommitHook  use the pre-commit hook when processing commits
+     * @param usePostCommitHook use the post-commit hook when processing 
commits
+     * @param relativePath      the directory in the repository, where the data
+     *                          in put optional.
+     * @param callback          the target for processing messages
+     * @throws ClientException  throw in case of problem
          * @note behaves like the 1.8 vesion with the revision
          *       parameters set to Revision.START and Revision.HEAD.
-        */
-       public abstract void load(File path, InputStream dataInput,
-                       boolean ignoreUUID, boolean forceUUID, boolean 
usePreCommitHook,
+     */
+    public abstract void load(File path, InputStream dataInput,
+            boolean ignoreUUID, boolean forceUUID, boolean usePreCommitHook,
             boolean usePostCommitHook, String relativePath,
             ReposNotifyCallback callback)
         throws ClientException;
 
-       /**
-        * list all open transactions in a repository
-        * @param path              the path to the repository
-        * @param receiver          receives one transaction name per call
-        * @throws ClientException  throw in case of problem
-        */
-       public abstract void lstxns(File path, MessageReceiver receiver)
-                       throws ClientException;
-
-       /**
-        * recover the filesystem backend of a repository
-        * @param path              the path to the repository
+    /**
+     * list all open transactions in a repository
+     * @param path              the path to the repository
+     * @param receiver          receives one transaction name per call
+     * @throws ClientException  throw in case of problem
+     */
+    public abstract void lstxns(File path, MessageReceiver receiver)
+            throws ClientException;
+
+    /**
+     * recover the filesystem backend of a repository
+     * @param path              the path to the repository
          * @return youngest revision
-        * @throws ClientException  throw in case of problem
-        */
-       public abstract long recover(File path, ReposNotifyCallback callback)
-            throws ClientException;
-
-       /**
-        * Take an exclusive lock on each of the listed repositories
-        * to prevent commits; then, while holding all the locks, call
-        * the action.invoke().
-        *
-        * The repositories may or may not be readable by Subversion
-        * while frozen, depending on implementation details of the
-        * repository's filesystem backend.
-        *
-        * Repositories are locked in the listed order.
-        * @param action     describes the action to perform
-        * @param paths      the set of repository paths
-        * @throws ClientException
+     * @throws ClientException  throw in case of problem
+     */
+    public abstract long recover(File path, ReposNotifyCallback callback)
+            throws ClientException;
+
+    /**
+     * Take an exclusive lock on each of the listed repositories
+     * to prevent commits; then, while holding all the locks, call
+     * the action.invoke().
+     *
+     * The repositories may or may not be readable by Subversion
+     * while frozen, depending on implementation details of the
+     * repository's filesystem backend.
+     *
+     * Repositories are locked in the listed order.
+     * @param action     describes the action to perform
+     * @param paths         the set of repository paths
+     * @throws ClientException
          * @since 1.8
-        */
-       public abstract void freeze(ReposFreezeAction action,
-                                   File... paths)
-           throws ClientException;
-
-       /**
-        * remove open transaction in a repository
-        * @param path              the path to the repository
-        * @param transactions      the transactions to be removed
-        * @throws ClientException  throw in case of problem
-        */
-       public abstract void rmtxns(File path, String[] transactions)
-                       throws ClientException;
-
-       /**
-        * Change the value of the revision property <code>propName</code>
-        * to <code>propValue</code>.  By default, does not run
-        * pre-/post-revprop-change hook scripts.
-        *
-        * @param path The path to the repository.
-        * @param rev The revision for which to change a property value.
-        * @param propName The name of the property to change.
-        * @param propValue The new value to set for the property.
-        * @param usePreRevPropChangeHook Whether to run the
-        * <i>pre-revprop-change</i> hook script.
-        * @param usePostRevPropChangeHook Whether to run the
-        * <i>post-revprop-change</i> hook script.
-        * @throws SubversionException If a problem occurs.
-        */
-       public abstract void setRevProp(File path, Revision rev, String 
propName,
-                       String propValue, boolean usePreRevPropChangeHook,
-                       boolean usePostRevPropChangeHook) throws 
SubversionException;
-
-       /**
-        * Verify the repository at <code>path</code> between revisions
-        * <code>start</code> and <code>end</code>.
-        *
-        * @param path              the path to the repository
-        * @param start             the first revision
-        * @param end               the last revision
+     */
+    public abstract void freeze(ReposFreezeAction action,
+                    File... paths)
+        throws ClientException;
+
+    /**
+     * remove open transaction in a repository
+     * @param path              the path to the repository
+     * @param transactions      the transactions to be removed
+     * @throws ClientException  throw in case of problem
+     */
+    public abstract void rmtxns(File path, String[] transactions)
+            throws ClientException;
+
+    /**
+     * Change the value of the revision property <code>propName</code>
+     * to <code>propValue</code>.  By default, does not run
+     * pre-/post-revprop-change hook scripts.
+     *
+     * @param path The path to the repository.
+     * @param rev The revision for which to change a property value.
+     * @param propName The name of the property to change.
+     * @param propValue The new value to set for the property.
+     * @param usePreRevPropChangeHook Whether to run the
+     * <i>pre-revprop-change</i> hook script.
+     * @param usePostRevPropChangeHook Whether to run the
+     * <i>post-revprop-change</i> hook script.
+     * @throws SubversionException If a problem occurs.
+     */
+    public abstract void setRevProp(File path, Revision rev, String propName,
+            String propValue, boolean usePreRevPropChangeHook,
+            boolean usePostRevPropChangeHook) throws SubversionException;
+
+    /**
+     * Verify the repository at <code>path</code> between revisions
+     * <code>start</code> and <code>end</code>.
+     *
+     * @param path              the path to the repository
+     * @param start             the first revision
+     * @param end               the last revision
          * @param keepGoing         continue verification even if a revision 
is bad
          * @param checkNormalization report directory entry and mergeinfo name 
collisions
          *                           caused by denormalized Unicode 
representations
          * @param metadataOnly      check only metadata, not file contents
          * @param callback          the callback to receive notifications
-        * @throws ClientException If an error occurred.
+     * @throws ClientException If an error occurred.
          * @since 1.9
-        */
-       public abstract void verify(File path, Revision start, Revision end,
+     */
+    public abstract void verify(File path, Revision start, Revision end,
                 boolean keepGoing, boolean checkNormalization,
                 boolean metadataOnly,
                 ReposNotifyCallback callback)
             throws ClientException;
 
-       /**
-        * Verify the repository at <code>path</code> between revisions
-        * <code>start</code> and <code>end</code>.
-        *
-        * @param path              the path to the repository
-        * @param start             the first revision
-        * @param end               the last revision
+    /**
+     * Verify the repository at <code>path</code> between revisions
+     * <code>start</code> and <code>end</code>.
+     *
+     * @param path              the path to the repository
+     * @param start             the first revision
+     * @param end               the last revision
          * @param callback          the callback to receive notifications
-        * @throws ClientException If an error occurred.
-        */
-       public abstract void verify(File path, Revision start, Revision end,
+     * @throws ClientException If an error occurred.
+     */
+    public abstract void verify(File path, Revision start, Revision end,
                 ReposNotifyCallback callback)
             throws ClientException;
 
-       /**
-        * list all locks in the repository
-        * @param path              the path to the repository
+    /**
+     * list all locks in the repository
+     * @param path              the path to the repository
      * @param depth             the depth to recurse
-        * @throws ClientException  throw in case of problem
-        */
-       public abstract Set<Lock> lslocks(File path, Depth depth)
+     * @throws ClientException  throw in case of problem
+     */
+    public abstract Set<Lock> lslocks(File path, Depth depth)
             throws ClientException;
 
-       /**
-        * remove multiple locks from the repository
-        * @param path              the path to the repository
-        * @param locks             the name of the locked items
-        * @throws ClientException  throw in case of problem
-        */
-       public abstract void rmlocks(File path, String[] locks)
-                       throws ClientException;
+    /**
+     * remove multiple locks from the repository
+     * @param path              the path to the repository
+     * @param locks             the name of the locked items
+     * @throws ClientException  throw in case of problem
+     */
+    public abstract void rmlocks(File path, String[] locks)
+            throws ClientException;
 
     /**
      * upgrade the repository format
      * @param path              the path to the repository
      * @param callback          for notification
-        * @throws ClientException  throw in case of problem
+     * @throws ClientException  throw in case of problem
      */
     public abstract void upgrade(File path, ReposNotifyCallback callback)
-                       throws ClientException;
+            throws ClientException;
 
     /**
      * pack the repository
      * @param path              the path to the repository
      * @param callback          for notification
-        * @throws ClientException  throw in case of problem
+     * @throws ClientException  throw in case of problem
      */
     public abstract void pack(File path, ReposNotifyCallback callback)
-                       throws ClientException;
+            throws ClientException;
 
     /**
      * cancel the active operation

Modified: 
subversion/branches/fsx-1.10/subversion/bindings/javahl/src/org/apache/subversion/javahl/NativeResources.java
URL: 
http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/bindings/javahl/src/org/apache/subversion/javahl/NativeResources.java?rev=1685464&r1=1685463&r2=1685464&view=diff
==============================================================================
--- 
subversion/branches/fsx-1.10/subversion/bindings/javahl/src/org/apache/subversion/javahl/NativeResources.java
 (original)
+++ 
subversion/branches/fsx-1.10/subversion/bindings/javahl/src/org/apache/subversion/javahl/NativeResources.java
 Sun Jun 14 20:58:10 2015
@@ -142,10 +142,10 @@ public class NativeResources
     private static final void init()
     {
         version = new Version();
-        if (!version.isAtLeast(1, 9, 0))
+        if (!version.isAtLeast(1, 10, 0))
         {
             throw new LinkageError("Native library version must be at least " +
-                                   "1.9.0, but is only " + version);
+                                   "1.10.0, but is only " + version);
         }
 
         runtimeVersion = new RuntimeVersion();

Modified: 
subversion/branches/fsx-1.10/subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNClient.java
URL: 
http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNClient.java?rev=1685464&r1=1685463&r2=1685464&view=diff
==============================================================================
--- 
subversion/branches/fsx-1.10/subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNClient.java
 (original)
+++ 
subversion/branches/fsx-1.10/subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNClient.java
 Sun Jun 14 20:58:10 2015
@@ -240,11 +240,24 @@ public class SVNClient implements ISVNCl
 
     public native void copy(List<CopySource> sources, String destPath,
                             boolean copyAsChild, boolean makeParents,
-                            boolean ignoreExternals,
+                            boolean ignoreExternals, boolean metadataOnly,
+                            boolean pinExternals,
+                            Map<String, List<ExternalItem>> externalsToPin,
                             Map<String, String> revpropTable,
                             CommitMessageCallback handler, CommitCallback 
callback)
             throws ClientException;
 
+    public void copy(List<CopySource> sources, String destPath,
+                     boolean copyAsChild, boolean makeParents,
+                     boolean ignoreExternals,
+                     Map<String, String> revpropTable,
+                     CommitMessageCallback handler, CommitCallback callback)
+            throws ClientException
+    {
+        copy(sources, destPath, copyAsChild, makeParents, ignoreExternals,
+             false, false, null, revpropTable, handler, callback);
+    }
+
     public native void move(Set<String> srcPaths, String destPath,
                             boolean force, boolean moveAsChild,
                             boolean makeParents, boolean metadataOnly,
@@ -281,7 +294,7 @@ public class SVNClient implements ISVNCl
 
     public void cleanup(String path) throws ClientException
     {
-        cleanup(path, false, true, true, true, false);
+        cleanup(path, true, true, true, true, false);
     }
 
     public native void resolve(String path, Depth depth,

Modified: 
subversion/branches/fsx-1.10/subversion/bindings/javahl/src/org/apache/subversion/javahl/remote/StatusEditor.java
URL: 
http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/bindings/javahl/src/org/apache/subversion/javahl/remote/StatusEditor.java?rev=1685464&r1=1685463&r2=1685464&view=diff
==============================================================================
--- 
subversion/branches/fsx-1.10/subversion/bindings/javahl/src/org/apache/subversion/javahl/remote/StatusEditor.java
 (original)
+++ 
subversion/branches/fsx-1.10/subversion/bindings/javahl/src/org/apache/subversion/javahl/remote/StatusEditor.java
 Sun Jun 14 20:58:10 2015
@@ -33,6 +33,7 @@ import java.util.GregorianCalendar;
 import java.util.Locale;
 import java.util.SimpleTimeZone;
 import java.io.InputStream;
+import java.io.IOException;
 import java.nio.charset.Charset;
 
 /**
@@ -78,6 +79,14 @@ class StatusEditor implements ISVNEditor
                         long replacesRevision)
     {
         //DEBUG:System.err.println("  [J] StatusEditor.addFile");
+        if (contents != null) {
+            try {
+                contents.close();
+            } catch (IOException ex) {
+                throw new RuntimeException(ex);
+            }
+        }
+
         checkState();
         receiver.addedFile(relativePath);
     }
@@ -120,6 +129,14 @@ class StatusEditor implements ISVNEditor
                           Map<String, byte[]> properties)
     {
         //DEBUG:System.err.println("  [J] StatusEditor.alterFile");
+        if (contents != null) {
+            try {
+                contents.close();
+            } catch (IOException ex) {
+                throw new RuntimeException(ex);
+            }
+        }
+
         checkState();
         receiver.modifiedFile(relativePath,
                               (checksum != null && contents != null),

Modified: 
subversion/branches/fsx-1.10/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/VersionExtended.java
URL: 
http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/VersionExtended.java?rev=1685464&r1=1685463&r2=1685464&view=diff
==============================================================================
--- 
subversion/branches/fsx-1.10/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/VersionExtended.java
 (original)
+++ 
subversion/branches/fsx-1.10/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/VersionExtended.java
 Sun Jun 14 20:58:10 2015
@@ -41,6 +41,21 @@ public class VersionExtended
     }
 
     /**
+     * Release the native peer. This method must be called to release
+     * the native resources held by this object.
+     * <p>
+     * Once this method is called, all object references obtained from
+     * the iterators returned by {@link #getLinkedLibs()} and
+     * {@link #getLoadedLibs()} become invalid and should no longer be used.
+     */
+    public native void dispose();
+
+    /**
+     * release the native peer (should use dispose instead)
+     */
+    public native void finalize();
+
+    /**
      * @return The date when the libsvn_subr library was compiled, in
      * the format defined by the C standard macro #__DATE__.
      */

Modified: 
subversion/branches/fsx-1.10/subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNClient.java
URL: 
http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNClient.java?rev=1685464&r1=1685463&r2=1685464&view=diff
==============================================================================
--- 
subversion/branches/fsx-1.10/subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNClient.java
 (original)
+++ 
subversion/branches/fsx-1.10/subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNClient.java
 Sun Jun 14 20:58:10 2015
@@ -2418,18 +2418,18 @@ public class SVNClient implements SVNCli
     {
         try
         {
-               final List<org.apache.subversion.javahl.types.Info> infos =
-                       new 
ArrayList<org.apache.subversion.javahl.types.Info>();
-               aSVNClient.info2(path,
-                                               
org.apache.subversion.javahl.types.Revision.HEAD,
-                                               
org.apache.subversion.javahl.types.Revision.HEAD,
-                                               
org.apache.subversion.javahl.types.Depth.empty,
-                                           null, new 
org.apache.subversion.javahl.callback.InfoCallback()
-               {
-                               public void 
singleInfo(org.apache.subversion.javahl.types.Info info) {
-                                       infos.add(info);
-                               }
-               });
+            final List<org.apache.subversion.javahl.types.Info> infos =
+                new ArrayList<org.apache.subversion.javahl.types.Info>();
+            aSVNClient.info2(path,
+                            org.apache.subversion.javahl.types.Revision.HEAD,
+                            org.apache.subversion.javahl.types.Revision.HEAD,
+                            org.apache.subversion.javahl.types.Depth.empty,
+                            null, new 
org.apache.subversion.javahl.callback.InfoCallback()
+            {
+                public void singleInfo(org.apache.subversion.javahl.types.Info 
info) {
+                    infos.add(info);
+                }
+            });
             return new Info(infos.get(0));
         }
         catch (org.apache.subversion.javahl.ClientException ex)

Modified: 
subversion/branches/fsx-1.10/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java
URL: 
http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java?rev=1685464&r1=1685463&r2=1685464&view=diff
==============================================================================
--- 
subversion/branches/fsx-1.10/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java
 (original)
+++ 
subversion/branches/fsx-1.10/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java
 Sun Jun 14 20:58:10 2015
@@ -139,9 +139,10 @@ public class BasicTests extends SVNTests
      */
     public void testVersionExtendedQuiet() throws Throwable
     {
+        VersionExtended vx = null;
         try
         {
-            VersionExtended vx = client.getVersionExtended(false);
+            vx = client.getVersionExtended(false);
             String result = vx.getBuildDate();
             if (result == null || result.trim().length() == 0)
                 throw new Exception("Build date empty");
@@ -160,6 +161,11 @@ public class BasicTests extends SVNTests
             fail("VersionExtended should always be available unless the " +
                  "native libraries failed to initialize: " + e);
         }
+        finally
+        {
+            if (vx != null)
+                vx.dispose();
+        }
     }
 
     /**
@@ -168,9 +174,10 @@ public class BasicTests extends SVNTests
      */
     public void testVersionExtendedVerbose() throws Throwable
     {
+        VersionExtended vx = null;
         try
         {
-            VersionExtended vx = client.getVersionExtended(true);
+            vx = client.getVersionExtended(true);
             String result = vx.getRuntimeHost();
             if (result == null || result.trim().length() == 0)
                 throw new Exception("Runtime host empty");
@@ -216,6 +223,11 @@ public class BasicTests extends SVNTests
             fail("VersionExtended should always be available unless the " +
                  "native libraries failed to initialize: " + e);
         }
+        finally
+        {
+            if (vx != null)
+                vx.dispose();
+        }
     }
 
     /**
@@ -269,7 +281,7 @@ public class BasicTests extends SVNTests
         }
         catch(JNIError e)
         {
-               return; // Test passes!
+            return; // Test passes!
         }
         fail("A JNIError should have been thrown here.");
     }
@@ -1060,7 +1072,7 @@ public class BasicTests extends SVNTests
         }
         client.copy(sources,
                     new File(thisTest.getWorkingCopy(), "A/B/F").getPath(),
-                    true, false, false, null, null, null);
+                    true, false, false, false, false, null, null, null, null);
 
         // Commit the changes, and check the state of the WC.
         checkCommitRevision(thisTest,
@@ -1077,7 +1089,7 @@ public class BasicTests extends SVNTests
                                         "A/B").getPath(), Revision.WORKING,
                                     Revision.WORKING));
         client.copy(wcSource, thisTest.getUrl() + "/parent/A/B",
-                    true, true, false, null,
+                    true, true, false, false, false, null, null,
                     new ConstMsg("Copy WC to URL"), null);
 
         // update the WC to get new folder and confirm the copy
@@ -1085,6 +1097,221 @@ public class BasicTests extends SVNTests
                      update(thisTest), 3);
     }
 
+
+    // Set up externals references in the working copy for the
+    // pin-externals tests.
+    private void setupPinExternalsTest(OneTest thisTest) throws Throwable
+    {
+        byte[] extref = ("^/A/D/H ADHext\n" +
+                         "^/A/D/H ADHext2\n" +
+                         "^/A/D/H@1 peggedADHext\n" +
+                         "-r1 ^/A/D/H revvedADHext\n").getBytes();
+        Set<String> paths = new HashSet<String>();
+        paths.add(thisTest.getWCPath() + "/A/B");
+
+        // Add an externals reference to the working copy.
+        client.propertySetLocal(paths, "svn:externals", extref,
+                                Depth.empty, null, false);
+
+        // Commit the externals definition
+        client.commit(thisTest.getWCPathSet(), Depth.infinity,
+                      false, false, null, null,
+                      new ConstMsg("Set svn:externals"), null);
+
+        // Update the working copy to bring in the external subtree.
+        client.update(thisTest.getWCPathSet(), Revision.HEAD,
+                      Depth.unknown, false, false, false, false);
+    }
+
+    /**
+     * Test WC-to-WC copy with implicit pinned externals
+     * @throws Throwable
+     */
+    public void testCopyPinExternals_wc2wc() throws Throwable
+    {
+        // build the test setup
+        OneTest thisTest = new OneTest();
+        setupPinExternalsTest(thisTest);
+
+        List<CopySource> sources = new ArrayList<CopySource>(1);
+        sources.add(new CopySource(thisTest.getWCPath() + "/A/B", null, null));
+        String target = thisTest.getWCPath() + "/A/Bcopy";
+        client.copy(sources, target, true, false, false, false,
+                    true,       // pinExternals
+                    null,       // externalsToPin
+                    null, null, null);
+
+        // Verification
+        String expected = ("^/A/D/H@2 ADHext\n" +
+                           "^/A/D/H@2 ADHext2\n" +
+                           "^/A/D/H@1 peggedADHext\n" +
+                           "-r1 ^/A/D/H@2 revvedADHext\n");
+        String actual =
+            new String(client.propertyGet(target, "svn:externals", null, 
null));
+
+        assertEquals(expected, actual);
+    }
+
+    /**
+     * Test WC-to-REPO copy with implicit pinned externals
+     * @throws Throwable
+     */
+    public void testCopyPinExternals_wc2repo() throws Throwable
+    {
+        // build the test setup
+        OneTest thisTest = new OneTest();
+        setupPinExternalsTest(thisTest);
+
+        List<CopySource> sources = new ArrayList<CopySource>(1);
+        sources.add(new CopySource(thisTest.getWCPath() + "/A/B", null, null));
+        String target = thisTest.getUrl() + "/A/Bcopy";
+        client.copy(sources, target, true, false, false, false,
+                    true,       // pinExternals
+                    null,       // externalsToPin
+                    null, new ConstMsg("Copy WC to REPO"), null);
+
+        // Verification
+        String expected = ("^/A/D/H@2 ADHext\n" +
+                           "^/A/D/H@2 ADHext2\n" +
+                           "^/A/D/H@1 peggedADHext\n" +
+                           "-r1 ^/A/D/H@2 revvedADHext\n");
+        String actual =
+            new String(client.propertyGet(target, "svn:externals", null, 
null));
+
+        assertEquals(expected, actual);
+    }
+
+    /**
+     * Test REPO-to-WC copy with implicit pinned externals
+     * @throws Throwable
+     */
+    public void testCopyPinExternals_repo2wc() throws Throwable
+    {
+        // build the test setup
+        OneTest thisTest = new OneTest();
+        setupPinExternalsTest(thisTest);
+
+        List<CopySource> sources = new ArrayList<CopySource>(1);
+        sources.add(new CopySource(thisTest.getUrl() + "/A/B", null, null));
+        String target = thisTest.getWCPath() + "/A/Bcopy";
+        client.copy(sources, target, true, false, false, false,
+                    true,       // pinExternals
+                    null,       // externalsToPin
+                    null, null, null);
+
+        // Verification
+        String expected = ("^/A/D/H@2 ADHext\n" +
+                           "^/A/D/H@2 ADHext2\n" +
+                           "^/A/D/H@1 peggedADHext\n" +
+                           "-r1 ^/A/D/H@2 revvedADHext\n");
+        String actual =
+            new String(client.propertyGet(target, "svn:externals", null, 
null));
+
+        assertEquals(expected, actual);
+    }
+
+    /**
+     * Test REPO-to-REPO copy with implicit pinned externals
+     * @throws Throwable
+     */
+    public void testCopyPinExternals_repo2repo() throws Throwable
+    {
+        // build the test setup
+        OneTest thisTest = new OneTest();
+        setupPinExternalsTest(thisTest);
+
+        List<CopySource> sources = new ArrayList<CopySource>(1);
+        sources.add(new CopySource(thisTest.getUrl() + "/A/B", null, null));
+        String target = thisTest.getUrl() + "/A/Bcopy";
+        client.copy(sources, target, true, false, false, false,
+                    true,       // pinExternals
+                    null,       // externalsToPin
+                    null, new ConstMsg("Copy WC to REPO"), null);
+
+        // Verification
+        String expected = ("^/A/D/H@2 ADHext\n" +
+                           "^/A/D/H@2 ADHext2\n" +
+                           "^/A/D/H@1 peggedADHext\n" +
+                           "-r1 ^/A/D/H@2 revvedADHext\n");
+        String actual =
+            new String(client.propertyGet(target, "svn:externals", null, 
null));
+
+        assertEquals(expected, actual);
+    }
+
+    /**
+     * Test REPO-to-REPO copy with eplicit pinned externals
+     * @throws Throwable
+     */
+    public void testCopyPinExternals_repo2repo_explicit() throws Throwable
+    {
+        // build the test setup
+        OneTest thisTest = new OneTest();
+        setupPinExternalsTest(thisTest);
+
+        String sourceUrl = thisTest.getUrl() + "/A/B";
+        Map<String, List<ExternalItem>> externalsToPin =
+            new HashMap<String, List<ExternalItem>>();
+        List<ExternalItem> items = new ArrayList<ExternalItem>(1);
+        items.add(new ExternalItem("ADHext", "^/A/D/H", null, null));
+        externalsToPin.put(sourceUrl, items);
+
+        List<CopySource> sources = new ArrayList<CopySource>(1);
+        sources.add(new CopySource(sourceUrl, null, null));
+        String target = thisTest.getUrl() + "/A/Bcopy";
+        client.copy(sources, target, true, false, false, false,
+                    true,       // pinExternals
+                    externalsToPin,
+                    null, new ConstMsg("Copy WC to REPO"), null);
+
+        // Verification
+        String expected = ("^/A/D/H@2 ADHext\n" +
+                           "^/A/D/H ADHext2\n" +
+                           "^/A/D/H@1 peggedADHext\n" +
+                           "-r1 ^/A/D/H revvedADHext\n");
+        String actual =
+            new String(client.propertyGet(target, "svn:externals", null, 
null));
+
+        assertEquals(expected, actual);
+    }
+
+    /**
+     * Test REPO-to-REPO copy with explicit pinned externals that
+     * don't correspond to actual externals
+     * @throws Throwable
+     */
+    public void testCopyPinExternals_repo2repo_corkscrew() throws Throwable
+    {
+        // build the test setup
+        OneTest thisTest = new OneTest();
+        setupPinExternalsTest(thisTest);
+
+        String sourceUrl = thisTest.getUrl() + "/A/B";
+        Map<String, List<ExternalItem>> externalsToPin =
+            new HashMap<String, List<ExternalItem>>();
+        List<ExternalItem> items = new ArrayList<ExternalItem>(1);
+        items.add(new ExternalItem("ADHext", "^/A/D/H", null, null));
+        externalsToPin.put(sourceUrl + "/A", items);
+
+        List<CopySource> sources = new ArrayList<CopySource>(1);
+        sources.add(new CopySource(sourceUrl, null, null));
+        String target = thisTest.getUrl() + "/A/Bcopy";
+        client.copy(sources, target, true, false, false, false,
+                    true,       // pinExternals
+                    externalsToPin,
+                    null, new ConstMsg("Copy WC to REPO"), null);
+
+        // Verification
+        String expected = ("^/A/D/H ADHext\n" +
+                           "^/A/D/H ADHext2\n" +
+                           "^/A/D/H@1 peggedADHext\n" +
+                           "-r1 ^/A/D/H revvedADHext\n");
+        String actual =
+            new String(client.propertyGet(target, "svn:externals", null, 
null));
+
+        assertEquals(expected, actual);
+    }
+
     /**
      * Test the {@link SVNClientInterface.move()} API.
      * @since 1.5
@@ -3003,7 +3230,7 @@ public class BasicTests extends SVNTests
         srcs.add(new CopySource(thisTest.getUrl() + "/A", Revision.HEAD,
                                 Revision.HEAD));
         client.copy(srcs, thisTest.getUrl() + "/branches/A",
-                    true, false, false, null,
+                    true, false, false, false, false, null, null,
                     new ConstMsg("create A branch"), null);
 
         // update the WC (to r3) so that it has the branches folder
@@ -3046,7 +3273,7 @@ public class BasicTests extends SVNTests
                              // Do nothing, right now.
                             return false;
                          }
-       });
+        });
     }
 
     /**

Modified: 
subversion/branches/fsx-1.10/subversion/bindings/javahl/tests/org/apache/subversion/javahl/RunTests.java
URL: 
http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/bindings/javahl/tests/org/apache/subversion/javahl/RunTests.java?rev=1685464&r1=1685463&r2=1685464&view=diff
==============================================================================
--- 
subversion/branches/fsx-1.10/subversion/bindings/javahl/tests/org/apache/subversion/javahl/RunTests.java
 (original)
+++ 
subversion/branches/fsx-1.10/subversion/bindings/javahl/tests/org/apache/subversion/javahl/RunTests.java
 Sun Jun 14 20:58:10 2015
@@ -95,6 +95,7 @@ public class RunTests
                 suite.addTestSuite(UtilTests.class);
                 suite.addTestSuite(SVNRemoteTests.class);
                 suite.addTestSuite(SVNReposTests.class);
+                suite.addTestSuite(ExceptionTests.class);
             }
             else
             {

Modified: 
subversion/branches/fsx-1.10/subversion/bindings/javahl/tests/org/apache/subversion/javahl/SVNRemoteTests.java
URL: 
http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/bindings/javahl/tests/org/apache/subversion/javahl/SVNRemoteTests.java?rev=1685464&r1=1685463&r2=1685464&view=diff
==============================================================================
--- 
subversion/branches/fsx-1.10/subversion/bindings/javahl/tests/org/apache/subversion/javahl/SVNRemoteTests.java
 (original)
+++ 
subversion/branches/fsx-1.10/subversion/bindings/javahl/tests/org/apache/subversion/javahl/SVNRemoteTests.java
 Sun Jun 14 20:58:10 2015
@@ -53,15 +53,35 @@ import java.security.NoSuchAlgorithmExce
  */
 public class SVNRemoteTests extends SVNTests
 {
+    /**
+     * Base name of all our tests.
+     */
+    public final static String testName = "remote_test";
+
     protected OneTest thisTest;
 
     public SVNRemoteTests()
     {
+        init();
     }
 
     public SVNRemoteTests(String name)
     {
         super(name);
+        init();
+    }
+
+    /**
+     * Initialize the testBaseName and the testCounter, if this is the
+     * first test of this class.
+     */
+    private void init()
+    {
+        if (!testName.equals(testBaseName))
+        {
+            testCounter = 0;
+            testBaseName = testName;
+        }
     }
 
     protected void setUp() throws Exception
@@ -937,6 +957,7 @@ public class SVNRemoteTests extends SVNT
                        0, false, false, false, null,
                        receiver);
         assertEquals(1, receiver.logs.size());
+        assertTrue(receiver.logs.get(0).revprops.size() > 0);
 
         receiver.logs.clear();
         session.reparent(getTestRepoUrl() + "/A");
@@ -945,6 +966,7 @@ public class SVNRemoteTests extends SVNT
                        0, 0, false, false, false, null,
                        receiver);
         assertEquals(2, receiver.logs.size());
+        assertTrue(receiver.logs.get(0).revprops.size() > 0);
     }
 
     public void testGetLogMissing() throws Exception

Modified: 
subversion/branches/fsx-1.10/subversion/bindings/javahl/tests/org/apache/subversion/javahl/SVNReposTests.java
URL: 
http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/bindings/javahl/tests/org/apache/subversion/javahl/SVNReposTests.java?rev=1685464&r1=1685463&r2=1685464&view=diff
==============================================================================
--- 
subversion/branches/fsx-1.10/subversion/bindings/javahl/tests/org/apache/subversion/javahl/SVNReposTests.java
 (original)
+++ 
subversion/branches/fsx-1.10/subversion/bindings/javahl/tests/org/apache/subversion/javahl/SVNReposTests.java
 Sun Jun 14 20:58:10 2015
@@ -40,13 +40,33 @@ import java.util.Map;
  */
 public class SVNReposTests extends SVNTests
 {
+    /**
+     * Base name of all our tests.
+     */
+    public final static String testName = "repos_test";
+
     public SVNReposTests()
     {
+        init();
     }
 
     public SVNReposTests(String name)
     {
         super(name);
+        init();
+    }
+
+    /**
+     * Initialize the testBaseName and the testCounter, if this is the
+     * first test of this class.
+     */
+    private void init()
+    {
+        if (!testName.equals(testBaseName))
+        {
+            testCounter = 0;
+            testBaseName = testName;
+        }
     }
 
     /**

Modified: 
subversion/branches/fsx-1.10/subversion/bindings/javahl/tests/org/apache/subversion/javahl/SVNTests.java
URL: 
http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/bindings/javahl/tests/org/apache/subversion/javahl/SVNTests.java?rev=1685464&r1=1685463&r2=1685464&view=diff
==============================================================================
--- 
subversion/branches/fsx-1.10/subversion/bindings/javahl/tests/org/apache/subversion/javahl/SVNTests.java
 (original)
+++ 
subversion/branches/fsx-1.10/subversion/bindings/javahl/tests/org/apache/subversion/javahl/SVNTests.java
 Sun Jun 14 20:58:10 2015
@@ -80,6 +80,17 @@ class SVNTests extends TestCase
     protected static int testCounter;
 
     /**
+     * Set to true if tests should clean up after themselves.
+     */
+    protected boolean cleanupAfterTests = false;
+
+    /**
+     * this list contains the names of all repository and working copy
+     * directories created by one test case.
+     */
+    protected static List<File> testDirs;
+
+    /**
      * the file in which the sample repository has been dumped.
      */
     protected File greekDump;
@@ -173,6 +184,10 @@ class SVNTests extends TestCase
 
     private void init()
     {
+        String cleanupProp = System.getProperty("test.cleanup");
+        if (cleanupProp != null)
+            cleanupAfterTests = (0 < cleanupProp.trim().length());
+
         String disableCredStore = System.getProperty("test.disablecredstore");
         if (disableCredStore != null)
         {
@@ -510,6 +525,16 @@ class SVNTests extends TestCase
         client.dispose();
         // remove the temporary directory
         removeDirOrFile(localTmp);
+
+        // optionally remove the test directories
+        List<File> td = testDirs;
+        testDirs = null;
+        if (cleanupAfterTests && td != null)
+        {
+            for(File f: td)
+                removeDirOrFile(f);
+        }
+
         super.tearDown();
     }
 
@@ -788,6 +813,13 @@ class SVNTests extends TestCase
             return wc;
         }
 
+        private void trackDir(File dir)
+        {
+            if (testDirs == null)
+                testDirs = new ArrayList<File>();
+            testDirs.add(dir);
+        }
+
         /**
          * Create the repository for the beginning of the test.
          * Assumes that {@link #testName} has been set.
@@ -804,6 +836,7 @@ class SVNTests extends TestCase
             // build a clean repository directory
             File repos = new File(repositories, this.testName);
             removeDirOrFile(repos);
+            trackDir(repos);
             // create and load the repository from the default repository dump
             admin.create(repos, true, false, conf, fsType);
             if (loadGreek)
@@ -829,6 +862,7 @@ class SVNTests extends TestCase
             URI uri = makeReposUrl(repos);
             workingCopy = new File(workingCopies, this.testName);
             removeDirOrFile(workingCopy);
+            trackDir(workingCopy);
             // checkout the repository
             client.checkout(uri.toString(), workingCopy.getAbsolutePath(),
                    null, null, Depth.infinity, false, false);

Modified: 
subversion/branches/fsx-1.10/subversion/bindings/javahl/tests/org/tigris/subversion/javahl/SVNAdminTests.java
URL: 
http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/bindings/javahl/tests/org/tigris/subversion/javahl/SVNAdminTests.java?rev=1685464&r1=1685463&r2=1685464&view=diff
==============================================================================
--- 
subversion/branches/fsx-1.10/subversion/bindings/javahl/tests/org/tigris/subversion/javahl/SVNAdminTests.java
 (original)
+++ 
subversion/branches/fsx-1.10/subversion/bindings/javahl/tests/org/tigris/subversion/javahl/SVNAdminTests.java
 Sun Jun 14 20:58:10 2015
@@ -35,13 +35,33 @@ import org.tigris.subversion.javahl.Subv
  */
 public class SVNAdminTests extends SVNTests
 {
+    /**
+     * Base name of all our tests.
+     */
+    public final static String testName = "admin_test";
+
     public SVNAdminTests()
     {
+        init();
     }
 
     public SVNAdminTests(String name)
     {
         super(name);
+        init();
+    }
+
+    /**
+     * Initialize the testBaseName and the testCounter, if this is the
+     * first test of this class.
+     */
+    private void init()
+    {
+        if (!testName.equals(testBaseName))
+        {
+            testCounter = 0;
+            testBaseName = testName;
+        }
     }
 
     /**

Modified: subversion/branches/fsx-1.10/subversion/bindings/swig/INSTALL
URL: 
http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/bindings/swig/INSTALL?rev=1685464&r1=1685463&r2=1685464&view=diff
==============================================================================
--- subversion/branches/fsx-1.10/subversion/bindings/swig/INSTALL (original)
+++ subversion/branches/fsx-1.10/subversion/bindings/swig/INSTALL Sun Jun 14 
20:58:10 2015
@@ -65,7 +65,7 @@ BUILDING SWIG BINDINGS FOR SVN ON UNIX
 
 
 Step 1:  Install a suitable version of SWIG (which is
-         currently SWIG version 1.3.24 or later).
+         currently SWIG version 1.3.24 or later, but not SWIG 3.0.0 or newer).
 
     * Perhaps your distribution packages a suitable version - if it does
       install it, and skip to the last bullet point in this section.

Modified: subversion/branches/fsx-1.10/subversion/bindings/swig/core.i
URL: 
http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/bindings/swig/core.i?rev=1685464&r1=1685463&r2=1685464&view=diff
==============================================================================
--- subversion/branches/fsx-1.10/subversion/bindings/swig/core.i (original)
+++ subversion/branches/fsx-1.10/subversion/bindings/swig/core.i Sun Jun 14 
20:58:10 2015
@@ -532,8 +532,10 @@
         $1 = NULL;
     }
     else if (SvPOK($input)) {
-        if (_global_pool == NULL)
+        if (_global_pool == NULL) {
             _global_pool = svn_swig_pl_make_pool((SV *)NULL);
+            SPAGAIN;
+        }
         $1 = apr_pstrdup(_global_pool, SvPV_nolen($input));
     }
     else {

Modified: subversion/branches/fsx-1.10/subversion/bindings/swig/include/apr.swg
URL: 
http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/bindings/swig/include/apr.swg?rev=1685464&r1=1685463&r2=1685464&view=diff
==============================================================================
--- subversion/branches/fsx-1.10/subversion/bindings/swig/include/apr.swg 
(original)
+++ subversion/branches/fsx-1.10/subversion/bindings/swig/include/apr.swg Sun 
Jun 14 20:58:10 2015
@@ -31,23 +31,21 @@
 */
 #ifdef SWIGPERL
 %typemap(out) long long {
-    char temp[256];
+    char temp[30];
     sprintf(temp, "%" APR_INT64_T_FMT, (apr_int64_t) $1);
-    ST(argvi) = sv_newmortal();
-    sv_setpv((SV*)ST(argvi++), temp);
+    %append_output(sv_2mortal(newSVpv(temp, 0)));
 }
 
 %typemap(out) unsigned long long {
-    char temp[256];
+    char temp[30];
     sprintf(temp, "%" APR_UINT64_T_FMT, (apr_uint64_t) $1);
-    ST(argvi) = sv_newmortal();
-    sv_setpv((SV*)ST(argvi++), temp);
+    %append_output(sv_2mortal(newSVpv(temp, 0)));
 }
 
 %typemap(in, numinputs=0) long long *OUTPUT (apr_int64_t temp)
     "$1 = &temp;";
 %typemap(argout) long long *OUTPUT {
-  char temp[256];
+  char temp[30];
   sprintf(temp, "%" APR_INT64_T_FMT, (apr_int64_t)*($1));
   %append_output(sv_2mortal(newSVpv(temp, 0)));
 }
@@ -55,7 +53,7 @@
 %typemap(in, numinputs=0) unsigned long long *OUTPUT (apr_uint64_t temp)
     "$1 = &temp;";
 %typemap(argout) unsigned long long *OUTPUT {
-  char temp[256];
+  char temp[30];
   sprintf(temp, "%" APR_UINT64_T_FMT, (apr_uint64_t)*($1));
   %append_output(sv_2mortal(newSVpv(temp, 0)));
 }

Modified: 
subversion/branches/fsx-1.10/subversion/bindings/swig/include/svn_containers.swg
URL: 
http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/bindings/swig/include/svn_containers.swg?rev=1685464&r1=1685463&r2=1685464&view=diff
==============================================================================
--- 
subversion/branches/fsx-1.10/subversion/bindings/swig/include/svn_containers.swg
 (original)
+++ 
subversion/branches/fsx-1.10/subversion/bindings/swig/include/svn_containers.swg
 Sun Jun 14 20:58:10 2015
@@ -269,8 +269,10 @@
 %typemap(in) apr_hash_t *PROPHASH
   (apr_pool_t *_global_pool = NULL)
 {
-  if (_global_pool == NULL)
+  if (_global_pool == NULL) {
     _global_pool = svn_swig_pl_make_pool((SV *)NULL);
+    SPAGAIN;
+  }
   $1 = svn_swig_pl_hash_to_prophash($input, _global_pool);  
 }
 %typemap(out) apr_hash_t *PROPHASH
@@ -426,6 +428,25 @@
 {
   $1 = svn_swig_py_path_revs_hash_from_dict($input, _global_pool);
 }
+%typemap(in) apr_hash_t *unlock_targets
+{
+  $1 = svn_swig_py_stringhash_from_dict($input, _global_pool);
+}
+%typemap(in) apr_hash_t *lock_targets
+  (apr_pool_t *_global_pool, PyObject *_global_pool = NULL)
+{
+  if (_global_pool == NULL)
+  {
+    if (svn_swig_py_get_parent_pool(args, $descriptor(apr_pool_t *),
+                                    &_global_py_pool, &_global_pool))
+      SWIG_fail;
+  }
+  $1 = svn_swig_py_struct_ptr_hash_from_dict($input,
+     $descriptor(svn_fs_lock_target_t *), _global_pool);
+  if (PyErr_Occurred()) {
+    SWIG_fail;
+  }
+}
 #endif
 
 #ifdef SWIGPERL

Modified: 
subversion/branches/fsx-1.10/subversion/bindings/swig/include/svn_string.swg
URL: 
http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/bindings/swig/include/svn_string.swg?rev=1685464&r1=1685463&r2=1685464&view=diff
==============================================================================
--- 
subversion/branches/fsx-1.10/subversion/bindings/swig/include/svn_string.swg 
(original)
+++ 
subversion/branches/fsx-1.10/subversion/bindings/swig/include/svn_string.swg 
Sun Jun 14 20:58:10 2015
@@ -90,6 +90,7 @@ typedef struct svn_string_t svn_string_t
 %typemap(in) svn_stringbuf_t * {
     apr_size_t len;
     char *buf;
+    apr_pool_t *pool;
 
     if (!SvOK($input)) {
         $1 = NULL;
@@ -97,8 +98,9 @@ typedef struct svn_string_t svn_string_t
         buf = SvPV($input, len);
         /* Another case of ugly pool handling, this should use the current
            default pool, or make a new one if it doesn't exist yet */
-        $1 = svn_stringbuf_ncreate(buf,len,
-                                   svn_swig_pl_make_pool ((SV *)NULL));
+        pool = svn_swig_pl_make_pool ((SV *)NULL);
+        SPAGAIN;
+        $1 = svn_stringbuf_ncreate(buf,len, pool);
     } else {
         croak("Not a string");
     }

Modified: 
subversion/branches/fsx-1.10/subversion/bindings/swig/include/svn_types.swg
URL: 
http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/bindings/swig/include/svn_types.swg?rev=1685464&r1=1685463&r2=1685464&view=diff
==============================================================================
--- subversion/branches/fsx-1.10/subversion/bindings/swig/include/svn_types.swg 
(original)
+++ subversion/branches/fsx-1.10/subversion/bindings/swig/include/svn_types.swg 
Sun Jun 14 20:58:10 2015
@@ -423,9 +423,11 @@ svn_ ## TYPE ## _swig_rb_closed(VALUE se
         if (SvOK(exception_handler)) {
             SV *callback_result;
 
+            PUTBACK;
             svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
                                         &callback_result, "S", $1,
                                         $1_descriptor);
+            SPAGAIN;
         } else {
             $result = SWIG_NewPointerObj($1, $1_descriptor, 0);
             argvi++;
@@ -548,6 +550,7 @@ svn_ ## TYPE ## _swig_rb_closed(VALUE se
 %typemap(in) apr_pool_t *pool "";
 %typemap(default) apr_pool_t *pool(apr_pool_t *_global_pool) {
     _global_pool = $1 = svn_swig_pl_make_pool (ST(items-1));
+    SPAGAIN;
 }
 #endif
 #ifdef SWIGRUBY
@@ -935,15 +938,24 @@ svn_ ## TYPE ## _swig_rb_closed(VALUE se
 #ifdef SWIGPERL
 %typemap(in) svn_stream_t * {
     svn_swig_pl_make_stream (&$1, $input);
+    SPAGAIN;
 }
 
 %typemap(out) svn_stream_t * {
-    $result = svn_swig_pl_from_stream ($1);
+    SV* tmp;
+    PUTBACK;
+    tmp = svn_swig_pl_from_stream ($1);
+    SPAGAIN;
+    $result = tmp;
     argvi++;
 }
 
 %typemap(argout) svn_stream_t ** {
-  %append_output(svn_swig_pl_from_stream(*$1));
+    SV *tmp;
+    PUTBACK;
+    tmp = svn_swig_pl_from_stream(*$1);
+    SPAGAIN;
+    %append_output(tmp);
 }
 #endif
 
@@ -1116,11 +1128,11 @@ svn_ ## TYPE ## _swig_rb_closed(VALUE se
 }
 
 %typemap(argout) unsigned char *result_digest {
-  /* FIXME: This code is clearly buggy. The return value of sv_newmortal()
-     is immediately overwritten by the return value
-     of svn_swig_pl_from_md5(). */
-    ST(argvi) = sv_newmortal();
-    ST(argvi++) = svn_swig_pl_from_md5($1);
+    SV *tmp;
+    PUTBACK;
+    tmp = svn_swig_pl_from_md5($1);
+    SPAGAIN;
+    %append_output(tmp);
 }
 #endif
 
@@ -1174,8 +1186,10 @@ svn_ ## TYPE ## _swig_rb_closed(VALUE se
 %typemap(in) svn_opt_revision_t * 
   (svn_opt_revision_t rev, apr_pool_t *_global_pool = NULL)
 {
-  if (_global_pool == NULL)
+  if (_global_pool == NULL) {
     _global_pool = svn_swig_pl_make_pool((SV *)NULL);
+    SPAGAIN;
+  }
   $1 = svn_swig_pl_set_revision(&rev, $input, TRUE, _global_pool);
 }
 #endif

Modified: 
subversion/branches/fsx-1.10/subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.c
URL: 
http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.c?rev=1685464&r1=1685463&r2=1685464&view=diff
==============================================================================
--- 
subversion/branches/fsx-1.10/subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.c
 (original)
+++ 
subversion/branches/fsx-1.10/subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.c
 Sun Jun 14 20:58:10 2015
@@ -130,11 +130,11 @@ static void *convert_pl_revision_range(S
         /* this will assign to range */
         SWIG_ConvertPtr(value, (void **)&range, 
_SWIG_TYPE("svn_opt_revision_range_t *"), 0);
         return range;
-    } 
+    }
 
-    if (SvROK(value) 
+    if (SvROK(value)
         && SvTYPE(SvRV(value)) == SVt_PVAV
-        && av_len((AV *)SvRV(value)) == 1) {    
+        && av_len((AV *)SvRV(value)) == 1) {
         /* value is a two-element ARRAY */
         AV* array = (AV *)SvRV(value);
         svn_opt_revision_t temp_start, temp_end;
@@ -143,17 +143,17 @@ static void *convert_pl_revision_range(S
 
         /* Note: Due to how svn_swig_pl_set_revision works,
          * either the passed in svn_opt_revision_t is modified
-         * (and the original pointer returned) or a different pointer 
+         * (and the original pointer returned) or a different pointer
          * is returned. svn_swig_pl_set_revision may return NULL
          * only if croak_on_error is FALSE.
          */
-        start = svn_swig_pl_set_revision(&temp_start, 
-                                         *av_fetch(array, 0, 0), 
+        start = svn_swig_pl_set_revision(&temp_start,
+                                         *av_fetch(array, 0, 0),
                                          croak_on_error, pool);
         if (start == NULL)
             return NULL;
-        end = svn_swig_pl_set_revision(&temp_end, 
-                                       *av_fetch(array, 1, 0), 
+        end = svn_swig_pl_set_revision(&temp_end,
+                                       *av_fetch(array, 1, 0),
                                        croak_on_error, pool);
         if (end == NULL)
             return NULL;
@@ -163,7 +163,7 @@ static void *convert_pl_revision_range(S
         range->start = *start;
         range->end = *end;
         return range;
-    } 
+    }
 
     if (croak_on_error)
         croak("unknown revision range: "
@@ -283,7 +283,7 @@ apr_array_header_t *svn_swig_pl_objs_to_
 }
 
 /* Convert a single revision range or an array of revisions ranges
- * Note: We can't simply use svn_swig_pl_to_array() as is, since 
+ * Note: We can't simply use svn_swig_pl_to_array() as is, since
  * it immediatley checks whether source is an array reference and then
  * proceeds to treat this as the "array of ..." case. But a revision range
  * may be specified as a (two-element) array. Hence we first try to
@@ -297,7 +297,7 @@ apr_array_header_t *svn_swig_pl_array_to
     svn_opt_revision_range_t *range;
 
     if ((range = convert_pl_revision_range(source, &croak_on_error, pool))) {
-        apr_array_header_t *temp = apr_array_make(pool, 1, 
+        apr_array_header_t *temp = apr_array_make(pool, 1,
                                                   
sizeof(svn_opt_revision_range_t *));
         temp->nelts = 1;
         APR_ARRAY_IDX(temp, 0, svn_opt_revision_range_t *) = range;
@@ -306,7 +306,7 @@ apr_array_header_t *svn_swig_pl_array_to
 
     if (SvROK(source) && SvTYPE(SvRV(source)) == SVt_PVAV) {
         croak_on_error = TRUE;
-        return svn_swig_pl_to_array(source, convert_pl_revision_range, 
+        return svn_swig_pl_to_array(source, convert_pl_revision_range,
                                     &croak_on_error, pool);
     }
 
@@ -314,7 +314,7 @@ apr_array_header_t *svn_swig_pl_array_to
 
     /* This return is actually unreachable because of the croak above,
      * however, Visual Studio's compiler doesn't like if all paths don't have
-     * a return and errors out otherwise. */ 
+     * a return and errors out otherwise. */
     return NULL;
 }
 
@@ -430,8 +430,8 @@ SV *svn_swig_pl_revnums_to_list(const ap
 }
 
 /* perl -> c svn_opt_revision_t conversion */
-svn_opt_revision_t *svn_swig_pl_set_revision(svn_opt_revision_t *rev, 
-                                             SV *source, 
+svn_opt_revision_t *svn_swig_pl_set_revision(svn_opt_revision_t *rev,
+                                             SV *source,
                                              svn_boolean_t croak_on_error,
                                              apr_pool_t *pool)
 {
@@ -471,7 +471,7 @@ svn_opt_revision_t *svn_swig_pl_set_revi
                 maybe_croak(("unknown opt_revision_t string \"%s\": "
                              "missing closing brace for \"{DATE}\"", input));
             *end = '\0';
-            err = svn_parse_date (&matched, &tm, 
+            err = svn_parse_date (&matched, &tm,
                                   input + 1, apr_time_now(), pool);
             if (err) {
                 svn_error_clear (err);
@@ -520,6 +520,7 @@ svn_opt_revision_t *svn_swig_pl_set_revi
    put returned value in result if result is not NULL
 */
 
+/* NOTE: calls back into Perl (directly) */
 svn_error_t *svn_swig_pl_callback_thunk(perl_func_invoker_t caller_func,
                                         void *func,
                                         SV **result,
@@ -670,6 +671,7 @@ static item_baton * make_baton(apr_pool_
     return newb;
 }
 
+/* NOTE: calls back into Perl (by calling svn_swig_pl_callback_thunk) */
 static svn_error_t * close_baton(void *baton, const char *method, apr_pool_t 
*pool)
 {
     item_baton *ib = baton;
@@ -690,6 +692,7 @@ static svn_error_t * close_baton(void *b
     return SVN_NO_ERROR;
 }
 
+/* NOTE: calls back into Perl (by calling svn_swig_pl_callback_thunk) */
 static svn_error_t * thunk_set_target_revision(void *edit_baton,
                                                svn_revnum_t target_revision,
                                                apr_pool_t *pool)
@@ -703,6 +706,7 @@ static svn_error_t * thunk_set_target_re
     return SVN_NO_ERROR;
 }
 
+/* NOTE: calls back into Perl (by calling svn_swig_pl_callback_thunk) */
 static svn_error_t * thunk_open_root(void *edit_baton,
                                      svn_revnum_t base_revision,
                                      apr_pool_t *dir_pool,
@@ -720,6 +724,7 @@ static svn_error_t * thunk_open_root(voi
     return SVN_NO_ERROR;
 }
 
+/* NOTE: calls back into Perl (by calling svn_swig_pl_callback_thunk) */
 static svn_error_t * thunk_delete_entry(const char *path,
                                         svn_revnum_t revision,
                                         void *parent_baton,
@@ -734,6 +739,7 @@ static svn_error_t * thunk_delete_entry(
     return SVN_NO_ERROR;
 }
 
+/* NOTE: calls back into Perl (by calling svn_swig_pl_callback_thunk) */
 static svn_error_t * thunk_add_directory(const char *path,
                                          void *parent_baton,
                                          const char *copyfrom_path,
@@ -753,6 +759,7 @@ static svn_error_t * thunk_add_directory
     return SVN_NO_ERROR;
 }
 
+/* NOTE: calls back into Perl (by calling svn_swig_pl_callback_thunk) */
 static svn_error_t * thunk_open_directory(const char *path,
                                           void *parent_baton,
                                           svn_revnum_t base_revision,
@@ -772,6 +779,7 @@ static svn_error_t * thunk_open_director
     return SVN_NO_ERROR;
 }
 
+/* NOTE: calls back into Perl (by calling svn_swig_pl_callback_thunk) */
 static svn_error_t * thunk_change_dir_prop(void *dir_baton,
                                            const char *name,
                                            const svn_string_t *value,
@@ -787,12 +795,14 @@ static svn_error_t * thunk_change_dir_pr
     return SVN_NO_ERROR;
 }
 
+/* NOTE: calls back into Perl (by calling close_baton) */
 static svn_error_t * thunk_close_directory(void *dir_baton,
                                            apr_pool_t *pool)
 {
     return close_baton(dir_baton, "close_directory", pool);
 }
 
+/* NOTE: calls back into Perl (by calling svn_swig_pl_callback_thunk) */
 static svn_error_t * thunk_absent_directory(const char *path,
                                             void *parent_baton,
                                             apr_pool_t *pool)
@@ -807,6 +817,7 @@ static svn_error_t * thunk_absent_direct
     return SVN_NO_ERROR;
 }
 
+/* NOTE: calls back into Perl (by calling svn_swig_pl_callback_thunk) */
 static svn_error_t * thunk_add_file(const char *path,
                                     void *parent_baton,
                                     const char *copyfrom_path,
@@ -827,6 +838,7 @@ static svn_error_t * thunk_add_file(cons
     return SVN_NO_ERROR;
 }
 
+/* NOTE: calls back into Perl (by calling svn_swig_pl_callback_thunk) */
 static svn_error_t * thunk_open_file(const char *path,
                                      void *parent_baton,
                                      svn_revnum_t base_revision,
@@ -845,6 +857,7 @@ static svn_error_t * thunk_open_file(con
     return SVN_NO_ERROR;
 }
 
+/* NOTE: calls back into Perl (by calling svn_swig_pl_callback_thunk) */
 static svn_error_t * thunk_window_handler(svn_txdelta_window_t *window,
                                           void *baton)
 {
@@ -865,6 +878,7 @@ static svn_error_t * thunk_window_handle
     return SVN_NO_ERROR;
 }
 
+/* NOTE: calls back into Perl (by calling svn_swig_pl_callback_thunk) */
 static svn_error_t *
 thunk_apply_textdelta(void *file_baton,
                       const char *base_checksum,
@@ -909,6 +923,7 @@ thunk_apply_textdelta(void *file_baton,
     return SVN_NO_ERROR;
 }
 
+/* NOTE: calls back into Perl (by calling svn_swig_pl_callback_thunk) */
 static svn_error_t * thunk_change_file_prop(void *file_baton,
                                             const char *name,
                                             const svn_string_t *value,
@@ -924,6 +939,7 @@ static svn_error_t * thunk_change_file_p
     return SVN_NO_ERROR;
 }
 
+/* NOTE: calls back into Perl (by calling svn_swig_pl_callback_thunk) */
 static svn_error_t * thunk_close_file(void *file_baton,
                                       const char *text_checksum,
                                       apr_pool_t *pool)
@@ -940,6 +956,7 @@ static svn_error_t * thunk_close_file(vo
     return SVN_NO_ERROR;
 }
 
+/* NOTE: calls back into Perl (by calling svn_swig_pl_callback_thunk) */
 static svn_error_t * thunk_absent_file(const char *path,
                                        void *parent_baton,
                                        apr_pool_t *pool)
@@ -954,12 +971,14 @@ static svn_error_t * thunk_absent_file(c
     return SVN_NO_ERROR;
 }
 
+/* NOTE: calls back into Perl (by calling close_baton) */
 static svn_error_t * thunk_close_edit(void *edit_baton,
                                       apr_pool_t *pool)
 {
     return close_baton(edit_baton, "close_edit", pool);
 }
 
+/* NOTE: calls back into Perl (by calling close_baton) */
 static svn_error_t * thunk_abort_edit(void *edit_baton,
                                       apr_pool_t *pool)
 {
@@ -967,18 +986,6 @@ static svn_error_t * thunk_abort_edit(vo
 }
 
 
-void
-svn_swig_pl_wrap_window_handler(svn_txdelta_window_handler_t *handler,
-                                void **h_baton,
-                                SV *callback,
-                                apr_pool_t *pool)
-{
-    *handler = thunk_window_handler;
-    *h_baton = callback;
-    SvREFCNT_inc(callback);
-    svn_swig_pl_hold_ref_in_pool(pool, callback);
-}
-
 void svn_swig_pl_make_editor(svn_delta_editor_t **editor,
                              void **edit_baton,
                              SV *perl_editor,
@@ -1008,6 +1015,7 @@ void svn_swig_pl_make_editor(svn_delta_e
     svn_swig_pl_hold_ref_in_pool(pool, perl_editor);
 }
 
+/* NOTE: calls back into Perl (by calling svn_swig_pl_callback_thunk) */
 svn_error_t *svn_swig_pl_thunk_log_receiver(void *baton,
                                             apr_hash_t *changed_paths,
                                             svn_revnum_t rev,
@@ -1032,6 +1040,7 @@ svn_error_t *svn_swig_pl_thunk_log_recei
     return SVN_NO_ERROR;
 }
 
+/* NOTE: calls back into Perl (by calling svn_swig_pl_callback_thunk) */
 svn_error_t *svn_swig_pl_thunk_log_entry_receiver(void *baton,
                                                   svn_log_entry_t *log_entry,
                                                   apr_pool_t *pool)
@@ -1043,13 +1052,14 @@ svn_error_t *svn_swig_pl_thunk_log_entry
 
     svn_swig_pl_callback_thunk(CALL_SV,
                                receiver, NULL,
-                               "SS", 
+                               "SS",
                                log_entry, _SWIG_TYPE("svn_log_entry_t *"),
                                pool, POOLINFO);
 
     return SVN_NO_ERROR;
 }
 
+/* NOTE: calls back into Perl (by calling svn_swig_pl_callback_thunk) */
 svn_error_t * svn_swig_pl_thunk_client_diff_summarize_func(
                      const svn_client_diff_summarize_t *diff,
                      void *baton,
@@ -1069,6 +1079,7 @@ svn_error_t * svn_swig_pl_thunk_client_d
     return SVN_NO_ERROR;
 }
 
+/* NOTE: calls back into Perl (by calling svn_swig_pl_callback_thunk) */
 svn_error_t *svn_swig_pl_thunk_history_func(void *baton,
                                             const char *path,
                                             svn_revnum_t revision,
@@ -1086,6 +1097,7 @@ svn_error_t *svn_swig_pl_thunk_history_f
     return SVN_NO_ERROR;
 }
 
+/* NOTE: calls back into Perl (by calling svn_swig_pl_callback_thunk) */
 svn_error_t *svn_swig_pl_thunk_authz_func(svn_boolean_t *allowed,
                                           svn_fs_root_t *root,
                                           const char *path,
@@ -1108,6 +1120,7 @@ svn_error_t *svn_swig_pl_thunk_authz_fun
     return SVN_NO_ERROR;
 }
 
+/* NOTE: calls back into Perl (by calling svn_swig_pl_callback_thunk) */
 svn_error_t *svn_swig_pl_thunk_commit_callback(svn_revnum_t new_revision,
                                                const char *date,
                                                const char *author,
@@ -1122,6 +1135,7 @@ svn_error_t *svn_swig_pl_thunk_commit_ca
     return SVN_NO_ERROR;
 }
 
+/* NOTE: calls back into Perl (by calling svn_swig_pl_callback_thunk) */
 svn_error_t *svn_swig_pl_thunk_commit_callback2(const svn_commit_info_t 
*commit_info,
                                                 void *baton,
                                                 apr_pool_t *pool)
@@ -1140,6 +1154,7 @@ svn_error_t *svn_swig_pl_thunk_commit_ca
 
 /* Wrap RA */
 
+/* NOTE: calls back into Perl (by calling svn_swig_pl_callback_thunk) */
 static svn_error_t * thunk_open_tmp_file(apr_file_t **fp,
                                          void *callback_baton,
                                          apr_pool_t *pool)
@@ -1158,11 +1173,12 @@ static svn_error_t * thunk_open_tmp_file
     return SVN_NO_ERROR;
 }
 
-svn_error_t *thunk_get_wc_prop(void *baton,
-                               const char *relpath,
-                               const char *name,
-                               const svn_string_t **value,
-                               apr_pool_t *pool)
+/* NOTE: calls back into Perl (by calling svn_swig_pl_callback_thunk) */
+static svn_error_t *thunk_get_wc_prop(void *baton,
+                                      const char *relpath,
+                                      const char *name,
+                                      const svn_string_t **value,
+                                      apr_pool_t *pool)
 {
     SV *result;
     char *data;
@@ -1215,6 +1231,7 @@ svn_error_t *svn_swig_pl_make_callbacks(
     return SVN_NO_ERROR;
 }
 
+/* NOTE: calls back into Perl (by calling svn_swig_pl_callback_thunk) */
 svn_error_t *svn_swig_pl_thunk_gnome_keyring_unlock_prompt(char 
**keyring_password,
                                                            const char 
*keyring_name,
                                                            void *baton,
@@ -1243,6 +1260,7 @@ svn_error_t *svn_swig_pl_thunk_gnome_key
     return SVN_NO_ERROR;
 }
 
+/* NOTE: calls back into Perl (by calling svn_swig_pl_callback_thunk) */
 svn_error_t *svn_swig_pl_thunk_simple_prompt(svn_auth_cred_simple_t **cred,
                                              void *baton,
                                              const char *realm,
@@ -1264,6 +1282,7 @@ svn_error_t *svn_swig_pl_thunk_simple_pr
     return SVN_NO_ERROR;
 }
 
+/* NOTE: calls back into Perl (by calling svn_swig_pl_callback_thunk) */
 svn_error_t *svn_swig_pl_thunk_username_prompt(svn_auth_cred_username_t **cred,
                                                void *baton,
                                                const char *realm,
@@ -1284,6 +1303,7 @@ svn_error_t *svn_swig_pl_thunk_username_
     return SVN_NO_ERROR;
 }
 
+/* NOTE: calls back into Perl (by calling svn_swig_pl_callback_thunk) */
 svn_error_t *svn_swig_pl_thunk_ssl_server_trust_prompt(
                               svn_auth_cred_ssl_server_trust_t **cred,
                               void *baton,
@@ -1318,6 +1338,7 @@ svn_error_t *svn_swig_pl_thunk_ssl_serve
     return SVN_NO_ERROR;
 }
 
+/* NOTE: calls back into Perl (by calling svn_swig_pl_callback_thunk) */
 svn_error_t *svn_swig_pl_thunk_ssl_client_cert_prompt(
                 svn_auth_cred_ssl_client_cert_t **cred,
                 void *baton,
@@ -1339,6 +1360,7 @@ svn_error_t *svn_swig_pl_thunk_ssl_clien
     return SVN_NO_ERROR;
 }
 
+/* NOTE: calls back into Perl (by calling svn_swig_pl_callback_thunk) */
 svn_error_t *svn_swig_pl_thunk_ssl_client_cert_pw_prompt(
                                      svn_auth_cred_ssl_client_cert_pw_t **cred,
                                      void *baton,
@@ -1361,6 +1383,7 @@ svn_error_t *svn_swig_pl_thunk_ssl_clien
 }
 
 /* Thunked version of svn_wc_notify_func_t callback type */
+/* NOTE: calls back into Perl (by calling svn_swig_pl_callback_thunk) */
 void svn_swig_pl_notify_func(void * baton,
                              const char *path,
                              svn_wc_notify_action_t action,
@@ -1382,6 +1405,7 @@ void svn_swig_pl_notify_func(void * bato
 }
 
 /* Thunked version of svn_client_get_commit_log3_t callback type. */
+/* NOTE: calls back into Perl (by calling svn_swig_pl_callback_thunk) */
 svn_error_t *svn_swig_pl_get_commit_log_func(const char **log_msg,
                                              const char **tmp_file,
                                              const apr_array_header_t *
@@ -1444,6 +1468,7 @@ svn_error_t *svn_swig_pl_get_commit_log_
 }
 
 /* Thunked version of svn_client_info_t callback type. */
+/* NOTE: calls back into Perl (by calling svn_swig_pl_callback_thunk) */
 svn_error_t *svn_swig_pl_info_receiver(void *baton,
                                        const char *path,
                                        const svn_info_t *info,
@@ -1475,6 +1500,7 @@ svn_error_t *svn_swig_pl_info_receiver(v
 
 
 /* Thunked version of svn_wc_cancel_func_t callback type. */
+/* NOTE: calls back into Perl (by calling svn_swig_pl_callback_thunk) */
 svn_error_t *svn_swig_pl_cancel_func(void *cancel_baton) {
     SV *result;
     svn_error_t *ret_val;
@@ -1504,6 +1530,7 @@ svn_error_t *svn_swig_pl_cancel_func(voi
 }
 
 /* Thunked version of svn_wc_status_func_t callback type. */
+/* NOTE: calls back into Perl (by calling svn_swig_pl_callback_thunk) */
 void svn_swig_pl_status_func(void *baton,
                              const char *path,
                              svn_wc_status_t *status)
@@ -1520,6 +1547,7 @@ void svn_swig_pl_status_func(void *baton
 }
 
 /* Thunked version of svn_wc_status_func2_t callback type. */
+/* NOTE: calls back into Perl (by calling svn_swig_pl_callback_thunk) */
 void svn_swig_pl_status_func2(void *baton,
                               const char *path,
                               svn_wc_status2_t *status)
@@ -1536,6 +1564,7 @@ void svn_swig_pl_status_func2(void *bato
 }
 
 /* Thunked version of svn_wc_status_func3_t callback type. */
+/* NOTE: calls back into Perl (by calling svn_swig_pl_callback_thunk) */
 svn_error_t *svn_swig_pl_status_func3(void *baton,
                                       const char *path,
                                       svn_wc_status2_t *status,
@@ -1568,6 +1597,7 @@ svn_error_t *svn_swig_pl_status_func3(vo
 
 
 /* Thunked version of svn_client_blame_receiver_t callback type. */
+/* NOTE: calls back into Perl (by calling svn_swig_pl_callback_thunk) */
 svn_error_t *svn_swig_pl_blame_func(void *baton,
                                     apr_int64_t line_no,
                                     svn_revnum_t revision,
@@ -1596,6 +1626,7 @@ svn_error_t *svn_swig_pl_blame_func(void
 }
 
 /* Thunked config enumerator */
+/* NOTE: calls back into Perl (by calling svn_swig_pl_callback_thunk) */
 svn_boolean_t svn_swig_pl_thunk_config_enumerator(const char *name, const char 
*value, void *baton)
 {
     SV *result;
@@ -1639,6 +1670,7 @@ void svn_swig_pl_set_current_pool(apr_po
   set_current_pool_cb(pool);
 }
 
+/* NOTE: calls back into Perl (by calling svn_swig_pl_callback_thunk) */
 apr_pool_t *svn_swig_pl_make_pool(SV *obj)
 {
     apr_pool_t *pool;
@@ -1667,6 +1699,7 @@ typedef struct io_baton_t {
     IO *io;
 } io_baton_t;
 
+/* NOTE: calls back into Perl (by calling svn_swig_pl_callback_thunk) */
 static svn_error_t *io_handle_read(void *baton,
                                    char *buffer,
                                    apr_size_t *len)
@@ -1690,6 +1723,7 @@ static svn_error_t *io_handle_read(void
     return SVN_NO_ERROR;
 }
 
+/* NOTE: calls back into Perl (by calling svn_swig_pl_callback_thunk) */
 static svn_error_t *io_handle_write(void *baton,
                                     const char *data,
                                     apr_size_t *len)
@@ -1710,6 +1744,7 @@ static svn_error_t *io_handle_write(void
     return SVN_NO_ERROR;
 }
 
+/* NOTE: calls back into Perl (by calling svn_swig_pl_callback_thunk) */
 static svn_error_t *io_handle_close(void *baton)
 {
     io_baton_t *io = baton;
@@ -1733,6 +1768,7 @@ static apr_status_t io_handle_cleanup(vo
     return APR_SUCCESS;
 }
 
+/* NOTE: calls back into Perl (by calling svn_swig_pl_callback_thunk) */
 svn_error_t *svn_swig_pl_make_stream(svn_stream_t **stream, SV *obj)
 {
     IO *io;
@@ -1778,6 +1814,7 @@ svn_error_t *svn_swig_pl_make_stream(svn
     return SVN_NO_ERROR;
 }
 
+/* NOTE: calls back into Perl (by calling svn_swig_pl_callback_thunk) */
 svn_error_t *svn_swig_pl_ra_lock_callback(
                     void *baton,
                     const char *path,
@@ -1797,6 +1834,7 @@ svn_error_t *svn_swig_pl_ra_lock_callbac
   return SVN_NO_ERROR;
 }
 
+/* NOTE: calls back into Perl (by calling svn_swig_pl_callback_thunk) */
 SV *svn_swig_pl_from_stream(svn_stream_t *stream)
 {
     SV *ret;
@@ -1848,6 +1886,7 @@ void svn_swig_pl_hold_ref_in_pool(apr_po
     apr_pool_cleanup_register(pool, sv, cleanup_refcnt, apr_pool_cleanup_null);
 }
 
+/* NOTE: calls back into Perl (by calling svn_swig_pl_callback_thunk) */
 SV *svn_swig_pl_from_md5(unsigned char *digest)
 {
     SV *ret;


Reply via email to