You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by hw...@apache.org on 2010/11/04 21:48:30 UTC

svn commit: r1031230 [2/21] - in /subversion/branches/py-tests-as-modules: ./ build/ build/ac-macros/ build/win32/ contrib/client-side/ notes/ notes/http-and-webdav/ notes/wc-ng/ subversion/bindings/ctypes-python/csvn/ subversion/bindings/javahl/native...

Modified: subversion/branches/py-tests-as-modules/subversion/bindings/javahl/native/SVNBase.h
URL: http://svn.apache.org/viewvc/subversion/branches/py-tests-as-modules/subversion/bindings/javahl/native/SVNBase.h?rev=1031230&r1=1031229&r2=1031230&view=diff
==============================================================================
--- subversion/branches/py-tests-as-modules/subversion/bindings/javahl/native/SVNBase.h (original)
+++ subversion/branches/py-tests-as-modules/subversion/bindings/javahl/native/SVNBase.h Thu Nov  4 20:48:21 2010
@@ -40,7 +40,7 @@ class SVNBase
    *
    * @since 1.4.0
    */
-  jlong getCppAddr();
+  jlong getCppAddr() const;
 
   /**
    * Deletes this C++ peer object, and clears the memory address of

Modified: subversion/branches/py-tests-as-modules/subversion/bindings/javahl/native/SVNClient.cpp
URL: http://svn.apache.org/viewvc/subversion/branches/py-tests-as-modules/subversion/bindings/javahl/native/SVNClient.cpp?rev=1031230&r1=1031229&r2=1031230&view=diff
==============================================================================
--- subversion/branches/py-tests-as-modules/subversion/bindings/javahl/native/SVNClient.cpp (original)
+++ subversion/branches/py-tests-as-modules/subversion/bindings/javahl/native/SVNClient.cpp Thu Nov  4 20:48:21 2010
@@ -33,6 +33,7 @@
 #include "Pool.h"
 #include "Targets.h"
 #include "Revision.h"
+#include "OutputStream.h"
 #include "RevisionRange.h"
 #include "BlameCallback.h"
 #include "ProplistCallback.h"
@@ -427,7 +428,7 @@ void SVNClient::move(Targets &srcPaths, 
         return;
 
     SVN_JNI_ERR(svn_client_move6((apr_array_header_t *) srcs,
-                                 destinationPath.c_str(), force, moveAsChild,
+                                 destinationPath.c_str(), moveAsChild,
                                  makeParents, revprops.hash(requestPool),
                                  CommitCallback::callback, callback, ctx,
                                  requestPool.pool()), );
@@ -1093,145 +1094,23 @@ SVNClient::diffSummarize(const char *tar
                                                requestPool.pool()), );
 }
 
-jbyteArray SVNClient::fileContent(const char *path, Revision &revision,
-                                  Revision &pegRevision)
-{
-    SVN::Pool requestPool;
-    SVN_JNI_NULL_PTR_EX(path, "path", NULL);
-    Path intPath(path);
-    SVN_JNI_ERR(intPath.error_occured(), NULL);
-
-    size_t size = 0;
-    svn_stream_t *read_stream = createReadStream(requestPool.pool(),
-                                                 intPath.c_str(), revision,
-                                                 pegRevision, size);
-    if (read_stream == NULL)
-        return NULL;
-
-    JNIEnv *env = JNIUtil::getEnv();
-    // size will be set to the number of bytes available.
-    jbyteArray jcontent = env->NewByteArray(size);
-    if (JNIUtil::isJavaExceptionThrown())
-        return NULL;
-
-    jbyte *jbytes = env->GetByteArrayElements(jcontent, NULL);
-    if (JNIUtil::isJavaExceptionThrown())
-        return NULL;
-
-    svn_error_t *err = svn_stream_read(read_stream, (char *) jbytes, &size);
-    env->ReleaseByteArrayElements(jcontent, jbytes, 0);
-    SVN_JNI_ERR(err, NULL);
-    if (JNIUtil::isJavaExceptionThrown())
-        return NULL;
-
-    return jcontent;
-}
-
 void SVNClient::streamFileContent(const char *path, Revision &revision,
-                                  Revision &pegRevision, jobject outputStream,
-                                  size_t bufSize)
+                                  Revision &pegRevision,
+                                  OutputStream &outputStream)
 {
     SVN::Pool requestPool;
     SVN_JNI_NULL_PTR_EX(path, "path", );
     Path intPath(path);
     SVN_JNI_ERR(intPath.error_occured(), );
 
-    JNIEnv *env = JNIUtil::getEnv();
-    jclass outputStreamClass = env->FindClass("java/io/OutputStream");
-    if (outputStreamClass == NULL)
-        return;
-
-    jmethodID writeMethod = env->GetMethodID(outputStreamClass, "write",
-                                             "([BII)V");
-    if (writeMethod == NULL)
-        return;
-
-    // Create the buffer.
-    jbyteArray buffer = env->NewByteArray(bufSize);
-    if (JNIUtil::isJavaExceptionThrown())
-        return;
-
-    jbyte *bufData = env->GetByteArrayElements(buffer, NULL);
-    if (JNIUtil::isJavaExceptionThrown())
-        return;
-
-    size_t contentSize = 0;
-    svn_stream_t *read_stream = createReadStream(requestPool.pool(), path,
-                                                 revision, pegRevision,
-                                                 contentSize);
-    if (read_stream == NULL)
+    svn_client_ctx_t *ctx = context.getContext(NULL);
+    if (ctx == NULL)
         return;
 
-    while (contentSize > 0)
-    {
-        size_t readSize = bufSize > contentSize ? contentSize : bufSize;
-        svn_error_t *err;
-
-        err = svn_stream_read(read_stream, (char *)bufData, &readSize);
-        if (err != NULL)
-        {
-            env->ReleaseByteArrayElements(buffer, bufData, 0);
-            svn_stream_close(read_stream);
-            SVN_JNI_ERR(err, );
-        }
-
-        env->ReleaseByteArrayElements(buffer, bufData, JNI_COMMIT);
-        env->CallVoidMethod(outputStream, writeMethod, buffer, 0, readSize);
-        if (JNIUtil::isJavaExceptionThrown())
-        {
-            env->ReleaseByteArrayElements(buffer, bufData, 0);
-            svn_stream_close(read_stream);
-            return;
-        }
-        contentSize -= readSize;
-    }
-
-    env->ReleaseByteArrayElements(buffer, bufData, 0);
-    return;
-}
-
-svn_stream_t *SVNClient::createReadStream(apr_pool_t *pool, const char *path,
-                                          Revision &revision,
-                                          Revision &pegRevision, size_t &size)
-{
-    svn_stream_t *read_stream = NULL;
-
-    if (revision.revision()->kind == svn_opt_revision_working)
-    {
-        // We want the working copy. Going back to the server returns
-        // base instead (which is not what we want).
-        apr_file_t *file = NULL;
-        apr_finfo_t finfo;
-        apr_status_t apr_err = apr_stat(&finfo, path, APR_FINFO_MIN, pool);
-        if (apr_err)
-        {
-            JNIUtil::handleAPRError(apr_err, _("open file"));
-            return NULL;
-        }
-        apr_err = apr_file_open(&file, path, APR_READ, 0, pool);
-        if (apr_err)
-        {
-            JNIUtil::handleAPRError(apr_err, _("open file"));
-            return NULL;
-        }
-        read_stream = svn_stream_from_aprfile2(file, TRUE, pool);
-        size = finfo.size;
-    }
-    else
-    {
-        svn_client_ctx_t *ctx = context.getContext(NULL);
-        if (ctx == NULL)
-            return NULL;
-
-        svn_stringbuf_t *buf = svn_stringbuf_create("", pool);
-        read_stream = svn_stream_from_stringbuf(buf, pool);
-        SVN_JNI_ERR(svn_client_cat2(read_stream, path, pegRevision.revision(),
-                                    revision.revision(), ctx, pool),
-                    NULL);
-        size = buf->len;
-    }
-
-    return read_stream;
+    SVN_JNI_ERR(svn_client_cat2(outputStream.getStream(requestPool),
+                                path, pegRevision.revision(),
+                                revision.revision(), ctx, requestPool.pool()),
+                );
 }
 
 jbyteArray SVNClient::revProperty(const char *path,
@@ -1273,7 +1152,7 @@ jbyteArray SVNClient::revProperty(const 
                                    propval->len);
 }
 void SVNClient::relocate(const char *from, const char *to, const char *path,
-                         bool recurse)
+                         bool ignoreExternals)
 {
     SVN::Pool requestPool;
     SVN_JNI_NULL_PTR_EX(path, "path", );
@@ -1292,9 +1171,9 @@ void SVNClient::relocate(const char *fro
     if (ctx == NULL)
         return;
 
-    SVN_JNI_ERR(svn_client_relocate(intPath.c_str(), intFrom.c_str(),
-                                    intTo.c_str(), recurse, ctx,
-                                    requestPool.pool()), );
+    SVN_JNI_ERR(svn_client_relocate2(intPath.c_str(), intFrom.c_str(),
+                                     intTo.c_str(), ignoreExternals, ctx,
+                                     requestPool.pool()), );
 }
 
 void SVNClient::blame(const char *path, Revision &pegRevision,
@@ -1528,13 +1407,12 @@ jobject SVNClient::revProperties(const c
                                         &set_rev, ctx, requestPool.pool()),
                 NULL);
 
-    return CreateJ::PropertyMap(props, requestPool.pool());
+    return CreateJ::PropertyMap(props);
 }
 
 struct info_baton
 {
     std::vector<info_entry> infoVect;
-    int info_ver;
     apr_pool_t *pool;
 };
 
@@ -1583,7 +1461,7 @@ SVNClient::patch(const char *patchPath, 
     // Should parameterize the following, instead of defaulting to FALSE
     SVN_JNI_ERR(svn_client_patch(checkedPatchPath.c_str(),
                                  checkedTargetPath.c_str(),
-                                 dryRun, stripCount, FALSE, reverse,
+                                 dryRun, stripCount, reverse,
                                  ignoreWhitespace, removeTempfiles,
                                  PatchCallback::callback, callback,
                                  ctx, requestPool.pool(),

Modified: subversion/branches/py-tests-as-modules/subversion/bindings/javahl/native/SVNClient.h
URL: http://svn.apache.org/viewvc/subversion/branches/py-tests-as-modules/subversion/bindings/javahl/native/SVNClient.h?rev=1031230&r1=1031229&r2=1031230&view=diff
==============================================================================
--- subversion/branches/py-tests-as-modules/subversion/bindings/javahl/native/SVNClient.h (original)
+++ subversion/branches/py-tests-as-modules/subversion/bindings/javahl/native/SVNClient.h Thu Nov  4 20:48:21 2010
@@ -47,6 +47,7 @@ class InfoCallback;
 class CommitCallback;
 class ListCallback;
 class StatusCallback;
+class OutputStream;
 class PatchCallback;
 class ChangelistCallback;
 class CommitMessage;
@@ -74,12 +75,9 @@ class SVNClient :public SVNBase
              bool ignoreMimeType, bool includeMergedRevisions,
              BlameCallback *callback);
   void relocate(const char *from, const char *to, const char *path,
-                bool recurse);
-  jbyteArray fileContent(const char *path, Revision &revision,
-                         Revision &pegRevision);
+                bool ignoreExternals);
   void streamFileContent(const char *path, Revision &revision,
-                         Revision &pegRevision, jobject outputStream,
-                         size_t bufSize);
+                         Revision &pegRevision, OutputStream &outputStream);
   void propertySet(const char *path, const char *name, const char *value,
                    svn_depth_t depth, StringArray &changelists, bool force,
                    RevpropTable &revprops, CommitCallback *callback);
@@ -199,9 +197,6 @@ class SVNClient :public SVNBase
   SVNClient(jobject jthis_in);
   virtual ~SVNClient();
  private:
-  svn_stream_t *createReadStream(apr_pool_t *pool, const char *path,
-                                 Revision &revision, Revision &pegRevision,
-                                 size_t &size);
   /**
    * Shared implementation for diff() APIs. When pegRevision is
    * provided, revision1 and revision2 equate to startRevision and

Modified: subversion/branches/py-tests-as-modules/subversion/bindings/javahl/native/SVNRepos.cpp
URL: http://svn.apache.org/viewvc/subversion/branches/py-tests-as-modules/subversion/bindings/javahl/native/SVNRepos.cpp?rev=1031230&r1=1031229&r2=1031230&view=diff
==============================================================================
--- subversion/branches/py-tests-as-modules/subversion/bindings/javahl/native/SVNRepos.cpp (original)
+++ subversion/branches/py-tests-as-modules/subversion/bindings/javahl/native/SVNRepos.cpp Thu Nov  4 20:48:21 2010
@@ -470,9 +470,9 @@ void SVNRepos::setRevProp(File &path, Re
                                                requestPool.pool());
   if (usePreRevPropChangeHook || usePostRevPropChangeHook)
     {
-      err = svn_repos_fs_change_rev_prop3(repos,
+      err = svn_repos_fs_change_rev_prop4(repos,
                                           revision.revision()->value.number,
-                                          NULL, propName, propValStr,
+                                          NULL, propName, NULL, propValStr,
                                           usePreRevPropChangeHook,
                                           usePostRevPropChangeHook, NULL,
                                           NULL, requestPool.pool());
@@ -617,7 +617,6 @@ jobject SVNRepos::lslocks(File &path, sv
 {
   SVN::Pool requestPool;
   svn_repos_t *repos;
-  svn_fs_t *fs;
   apr_hash_t *locks;
   apr_hash_index_t *hi;
 
@@ -629,7 +628,6 @@ jobject SVNRepos::lslocks(File &path, sv
 
   SVN_JNI_ERR(svn_repos_open(&repos, path.getInternalStyle(requestPool),
                              requestPool.pool()), NULL);
-  fs = svn_repos_fs (repos);
   /* Fetch all locks on or below the root directory. */
   SVN_JNI_ERR(svn_repos_fs_get_locks2(&locks, repos, "/", depth, NULL, NULL,
                                       requestPool.pool()),

Modified: subversion/branches/py-tests-as-modules/subversion/bindings/javahl/native/Targets.cpp
URL: http://svn.apache.org/viewvc/subversion/branches/py-tests-as-modules/subversion/bindings/javahl/native/Targets.cpp?rev=1031230&r1=1031229&r2=1031230&view=diff
==============================================================================
--- subversion/branches/py-tests-as-modules/subversion/bindings/javahl/native/Targets.cpp (original)
+++ subversion/branches/py-tests-as-modules/subversion/bindings/javahl/native/Targets.cpp Thu Nov  4 20:48:21 2010
@@ -52,8 +52,6 @@ const apr_array_header_t *Targets::array
 {
   if (m_strArray != NULL)
     {
-      JNIEnv *env = JNIUtil::getEnv();
-
       const std::vector<std::string> &vec = m_strArray->vector();
 
       std::vector<std::string>::const_iterator it;

Modified: subversion/branches/py-tests-as-modules/subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNClient.cpp
URL: http://svn.apache.org/viewvc/subversion/branches/py-tests-as-modules/subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNClient.cpp?rev=1031230&r1=1031229&r2=1031230&view=diff
==============================================================================
--- subversion/branches/py-tests-as-modules/subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNClient.cpp (original)
+++ subversion/branches/py-tests-as-modules/subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNClient.cpp Thu Nov  4 20:48:21 2010
@@ -32,6 +32,7 @@
 #include "SVNClient.h"
 #include "Revision.h"
 #include "RevisionRange.h"
+#include "OutputStream.h"
 #include "EnumMapper.h"
 #include "CommitMessage.h"
 #include "Prompter.h"
@@ -1309,37 +1310,10 @@ Java_org_apache_subversion_javahl_SVNCli
                     jignoreAncestry ? true : false, receiver);
 }
 
-JNIEXPORT jbyteArray JNICALL
-Java_org_apache_subversion_javahl_SVNClient_fileContent
-(JNIEnv *env, jobject jthis, jstring jpath, jobject jrevision,
- jobject jpegRevision)
-{
-  JNIEntry(SVNClient, fileContent);
-  SVNClient *cl = SVNClient::getCppObject(jthis);
-  if (cl == NULL)
-    {
-      JNIUtil::throwError(_("bad C++ this"));
-      return NULL;
-    }
-  JNIStringHolder path(jpath);
-  if (JNIUtil::isExceptionThrown())
-    return NULL;
-
-  Revision revision(jrevision);
-  if (JNIUtil::isExceptionThrown())
-    return NULL;
-
-  Revision pegRevision(jpegRevision);
-  if (JNIUtil::isExceptionThrown())
-    return NULL;
-
-  return cl->fileContent(path, revision, pegRevision);
-}
-
 JNIEXPORT void JNICALL
 Java_org_apache_subversion_javahl_SVNClient_streamFileContent
 (JNIEnv *env, jobject jthis, jstring jpath, jobject jrevision,
- jobject jpegRevision, jint bufSize, jobject jstream)
+ jobject jpegRevision, jobject jstream)
 {
   JNIEntry(SVNClient, streamFileContent);
   SVNClient *cl = SVNClient::getCppObject(jthis);
@@ -1360,7 +1334,11 @@ Java_org_apache_subversion_javahl_SVNCli
   if (JNIUtil::isExceptionThrown())
     return;
 
-  cl->streamFileContent(path, revision, pegRevision, jstream, bufSize);
+  OutputStream dataOut(jstream);
+  if (JNIUtil::isExceptionThrown())
+    return;
+
+  cl->streamFileContent(path, revision, pegRevision, dataOut);
 }
 
 JNIEXPORT jstring JNICALL
@@ -1445,7 +1423,7 @@ Java_org_apache_subversion_javahl_SVNCli
 JNIEXPORT void JNICALL
 Java_org_apache_subversion_javahl_SVNClient_relocate
 (JNIEnv *env, jobject jthis, jstring jfrom, jstring jto, jstring jpath,
- jboolean jrecurse)
+ jboolean jignoreExternals)
 {
   JNIEntry(SVNClient, relocate);
   SVNClient *cl = SVNClient::getCppObject(jthis);
@@ -1466,7 +1444,7 @@ Java_org_apache_subversion_javahl_SVNCli
   if (JNIUtil::isExceptionThrown())
     return;
 
-  cl->relocate(from, to, path, jrecurse ? true: false);
+  cl->relocate(from, to, path, jignoreExternals ? true : false);
   return;
 }
 

Modified: subversion/branches/py-tests-as-modules/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNClient.java
URL: http://svn.apache.org/viewvc/subversion/branches/py-tests-as-modules/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNClient.java?rev=1031230&r1=1031229&r2=1031230&view=diff
==============================================================================
--- subversion/branches/py-tests-as-modules/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNClient.java (original)
+++ subversion/branches/py-tests-as-modules/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNClient.java Thu Nov  4 20:48:21 2010
@@ -790,7 +790,7 @@ public interface ISVNClient
      * @since 1.0
      */
     void streamFileContent(String path, Revision revision, Revision pegRevision,
-                           int bufferSize, OutputStream stream)
+                           OutputStream stream)
         throws ClientException;
 
     /**
@@ -798,11 +798,11 @@ public interface ISVNClient
      * @param from      old url
      * @param to        new url
      * @param path      working copy path
-     * @param recurse   recurse into subdirectories
+     * @param ignoreExternals if externals are ignored during relocate
      * @throws ClientException
      * @since 1.0
      */
-    void relocate(String from, String to, String path, boolean recurse)
+    void relocate(String from, String to, String path, boolean ignoreExternals)
             throws ClientException;
 
     /**

Modified: subversion/branches/py-tests-as-modules/subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNClient.java
URL: http://svn.apache.org/viewvc/subversion/branches/py-tests-as-modules/subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNClient.java?rev=1031230&r1=1031229&r2=1031230&view=diff
==============================================================================
--- subversion/branches/py-tests-as-modules/subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNClient.java (original)
+++ subversion/branches/py-tests-as-modules/subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNClient.java Thu Nov  4 20:48:21 2010
@@ -26,6 +26,7 @@ package org.apache.subversion.javahl;
 import org.apache.subversion.javahl.callback.*;
 
 import java.io.OutputStream;
+import java.io.ByteArrayOutputStream;
 
 import java.util.Collection;
 import java.util.Set;
@@ -473,15 +474,21 @@ public class SVNClient implements ISVNCl
     /**
      * @since 1.2
      */
-    public native byte[] fileContent(String path, Revision revision,
-                                     Revision pegRevision)
-            throws ClientException;
+    public byte[] fileContent(String path, Revision revision,
+                              Revision pegRevision)
+            throws ClientException
+    {
+        ByteArrayOutputStream stream = new ByteArrayOutputStream();
+
+        streamFileContent(path, revision, pegRevision, stream);
+        return stream.toByteArray();
+    }
 
     /**
      * @since 1.0
      */
     public native void streamFileContent(String path, Revision revision,
-                                         Revision pegRevision, int bufferSize,
+                                         Revision pegRevision,
                                          OutputStream stream)
             throws ClientException;
 
@@ -489,7 +496,7 @@ public class SVNClient implements ISVNCl
      * @since 1.0
      */
     public native void relocate(String from, String to, String path,
-                                boolean recurse)
+                                boolean ignoreExternals)
             throws ClientException;
 
     /**

Modified: subversion/branches/py-tests-as-modules/subversion/bindings/javahl/src/org/apache/subversion/javahl/callback/InfoCallback.java
URL: http://svn.apache.org/viewvc/subversion/branches/py-tests-as-modules/subversion/bindings/javahl/src/org/apache/subversion/javahl/callback/InfoCallback.java?rev=1031230&r1=1031229&r2=1031230&view=diff
==============================================================================
--- subversion/branches/py-tests-as-modules/subversion/bindings/javahl/src/org/apache/subversion/javahl/callback/InfoCallback.java (original)
+++ subversion/branches/py-tests-as-modules/subversion/bindings/javahl/src/org/apache/subversion/javahl/callback/InfoCallback.java Thu Nov  4 20:48:21 2010
@@ -23,7 +23,7 @@
 
 package org.apache.subversion.javahl.callback;
 
-import org.apache.subversion.javahl.Info2;
+import org.apache.subversion.javahl.Info;
 import org.apache.subversion.javahl.ISVNClient;
 
 /**
@@ -36,5 +36,5 @@ public interface InfoCallback
      * the method will be called for every line in a file.
      * @param info      the Info2 object
      */
-    public void singleInfo(Info2 info);
+    public void singleInfo(Info info);
 }

Modified: subversion/branches/py-tests-as-modules/subversion/bindings/javahl/src/org/tigris/subversion/javahl/Info.java
URL: http://svn.apache.org/viewvc/subversion/branches/py-tests-as-modules/subversion/bindings/javahl/src/org/tigris/subversion/javahl/Info.java?rev=1031230&r1=1031229&r2=1031230&view=diff
==============================================================================
--- subversion/branches/py-tests-as-modules/subversion/bindings/javahl/src/org/tigris/subversion/javahl/Info.java (original)
+++ subversion/branches/py-tests-as-modules/subversion/bindings/javahl/src/org/tigris/subversion/javahl/Info.java Thu Nov  4 20:48:21 2010
@@ -144,7 +144,7 @@ public class Info implements java.io.Ser
     /**
      * A backward-compat constructor
      */
-    public Info(org.apache.subversion.javahl.Info2 aInfo)
+    public Info(org.apache.subversion.javahl.Info aInfo)
     {
         this((new File(aInfo.getPath())).getName(), aInfo.getUrl(),
              aInfo.getReposUUID(), aInfo.getReposRootUrl(),
@@ -153,7 +153,7 @@ public class Info implements java.io.Ser
              aInfo.getLastChangedAuthor(), aInfo.getRev(),
              aInfo.getLastChangedRev(), aInfo.getLastChangedDate(),
              aInfo.getTextTime(), aInfo.getPropTime(), aInfo.getCopyFromUrl() != null,
-             aInfo.getSchedule() == org.apache.subversion.javahl.Info2.ScheduleKind.delete,
+             aInfo.getSchedule() == org.apache.subversion.javahl.Info.ScheduleKind.delete,
              checkAbsent(aInfo.getPath()), checkIncomplete(aInfo.getPath()),
              aInfo.getCopyFromRev(), aInfo.getCopyFromUrl());
     }

Modified: subversion/branches/py-tests-as-modules/subversion/bindings/javahl/src/org/tigris/subversion/javahl/Info2.java
URL: http://svn.apache.org/viewvc/subversion/branches/py-tests-as-modules/subversion/bindings/javahl/src/org/tigris/subversion/javahl/Info2.java?rev=1031230&r1=1031229&r2=1031230&view=diff
==============================================================================
--- subversion/branches/py-tests-as-modules/subversion/bindings/javahl/src/org/tigris/subversion/javahl/Info2.java (original)
+++ subversion/branches/py-tests-as-modules/subversion/bindings/javahl/src/org/tigris/subversion/javahl/Info2.java Thu Nov  4 20:48:21 2010
@@ -250,7 +250,7 @@ public class Info2 implements java.io.Se
     /**
      * A backward-compat constructor.
      */
-    public Info2(org.apache.subversion.javahl.Info2 aInfo)
+    public Info2(org.apache.subversion.javahl.Info aInfo)
     {
         this(aInfo.getPath(), aInfo.getUrl(), aInfo.getRev(),
              NodeKind.fromApache(aInfo.getKind()),

Modified: subversion/branches/py-tests-as-modules/subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNClient.java
URL: http://svn.apache.org/viewvc/subversion/branches/py-tests-as-modules/subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNClient.java?rev=1031230&r1=1031229&r2=1031230&view=diff
==============================================================================
--- subversion/branches/py-tests-as-modules/subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNClient.java (original)
+++ subversion/branches/py-tests-as-modules/subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNClient.java Thu Nov  4 20:48:21 2010
@@ -2105,7 +2105,7 @@ public class SVNClient implements SVNCli
             aSVNClient.streamFileContent(path,
                           revision == null ? null : revision.toApache(),
                           pegRevision == null ? null : pegRevision.toApache(),
-                          bufferSize, stream);
+                          stream);
         }
         catch (org.apache.subversion.javahl.ClientException ex)
         {
@@ -2119,9 +2119,13 @@ public class SVNClient implements SVNCli
     public void relocate(String from, String to, String path, boolean recurse)
             throws ClientException
     {
+        if (recurse == false)
+          throw new ClientException("relocate only support full recursion",
+                                    null, -1);
+
         try
         {
-            aSVNClient.relocate(from, to, path, recurse);
+            aSVNClient.relocate(from, to, path, true);
         }
         catch (org.apache.subversion.javahl.ClientException ex)
         {
@@ -2344,15 +2348,15 @@ public class SVNClient implements SVNCli
     {
         try
         {
-        	final List<org.apache.subversion.javahl.Info2> infos =
-        		new ArrayList<org.apache.subversion.javahl.Info2>();
+        	final List<org.apache.subversion.javahl.Info> infos =
+        		new ArrayList<org.apache.subversion.javahl.Info>();
         	aSVNClient.info2(path,
         					org.apache.subversion.javahl.Revision.HEAD,
         					org.apache.subversion.javahl.Revision.HEAD,
         					org.apache.subversion.javahl.Depth.empty,
         				    null, new org.apache.subversion.javahl.callback.InfoCallback()
         	{
-				public void singleInfo(org.apache.subversion.javahl.Info2 info) {
+				public void singleInfo(org.apache.subversion.javahl.Info info) {
 					infos.add(info);
 				}
         	});
@@ -2589,7 +2593,7 @@ public class SVNClient implements SVNCli
                           Depth.toADepth(depth), changelists == null ? null
                             : Arrays.asList(changelists),
         new org.apache.subversion.javahl.callback.InfoCallback () {
-            public void singleInfo(org.apache.subversion.javahl.Info2 aInfo)
+            public void singleInfo(org.apache.subversion.javahl.Info aInfo)
             {
                 callback.singleInfo(aInfo == null ? null : new Info2(aInfo));
             }

Modified: subversion/branches/py-tests-as-modules/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java
URL: http://svn.apache.org/viewvc/subversion/branches/py-tests-as-modules/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java?rev=1031230&r1=1031229&r2=1031230&view=diff
==============================================================================
--- subversion/branches/py-tests-as-modules/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java (original)
+++ subversion/branches/py-tests-as-modules/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java Thu Nov  4 20:48:21 2010
@@ -452,7 +452,7 @@ public class BasicTests extends SVNTests
                  client.update(thisTest.getWCPathSet("/A/B"),
                                null, Depth.unknown, false, false, false)[0],
                      rev);
-        Info2 Binfo = collectInfos(thisTest.getWCPath() + "/A/B", null, null,
+        Info Binfo = collectInfos(thisTest.getWCPath() + "/A/B", null, null,
                                    Depth.empty, null)[0];
         long BCommitDate = Binfo.getLastChangedDate().getTime();
         long BCommitRev = rev;
@@ -1827,7 +1827,7 @@ public class BasicTests extends SVNTests
         // get the content from the repository
         ByteArrayOutputStream baos = new ByteArrayOutputStream();
         client.streamFileContent(thisTest.getWCPath() + "/A/mu", null, null,
-                                 100, baos);
+                                 baos);
 
         byte[] content = baos.toByteArray();
         byte[] testContent = thisTest.getWc().getItemContent("A/mu").getBytes();
@@ -1959,12 +1959,12 @@ public class BasicTests extends SVNTests
         OneTest thisTest = new OneTest();
 
         // get the item information and test it
-        Info2 info = collectInfos(thisTest.getWCPath()+"/A/mu", null, null,
+        Info info = collectInfos(thisTest.getWCPath()+"/A/mu", null, null,
                                   Depth.empty, null)[0];
         assertEquals("wrong revision from info", 1,
                      info.getLastChangedRev());
         assertEquals("wrong schedule kind from info",
-                     Info2.ScheduleKind.normal, info.getSchedule());
+                     Info.ScheduleKind.normal, info.getSchedule());
         assertEquals("wrong node kind from info", NodeKind.file,
                      info.getKind());
     }
@@ -2085,13 +2085,13 @@ public class BasicTests extends SVNTests
         OneTest thisTest = new OneTest();
 
         final String failureMsg = "Incorrect number of info objects";
-        Info2[] infos = collectInfos(thisTest.getWCPath(), null, null,
+        Info[] infos = collectInfos(thisTest.getWCPath(), null, null,
                                      Depth.empty, null);
         assertEquals(failureMsg, 1, infos.length);
         infos = collectInfos(thisTest.getWCPath(), null, null, Depth.infinity,
                              null);
         assertEquals(failureMsg, 21, infos.length);
-        for (Info2 info : infos)
+        for (Info info : infos)
         {
             assertNull("Unexpected changelist present",
                        info.getChangelistName());
@@ -3118,10 +3118,9 @@ public class BasicTests extends SVNTests
                 tcTest.getWc().getItemContent("A/B/E/alpha"));
         tcTest.getWc().setItemWorkingCopyRevision("A/B/F/alpha", 2);
         // we expect the tree conflict to turn the existing item into
-        // a scheduled-add with history.  We expect the modifications in
-        // the local file to have been copied to the new file.
+        // a scheduled-add with history.
         tcTest.getWc().setItemTextStatus("A/B/E/alpha", Status.Kind.added);
-        tcTest.getWc().setItemTextStatus("A/B/F/alpha", Status.Kind.modified);
+        tcTest.getWc().setItemTextStatus("A/B/F/alpha", Status.Kind.normal);
 
         // check the status of the working copy of the tc test
         tcTest.checkStatus();
@@ -3487,13 +3486,13 @@ public class BasicTests extends SVNTests
     }
 
     private class MyInfoCallback implements InfoCallback {
-        private Info2 info;
+        private Info info;
 
-        public void singleInfo(Info2 info) {
+        public void singleInfo(Info info) {
             this.info = info;
         }
 
-        public Info2 getInfo() {
+        public Info getInfo() {
             return info;
         }
     }
@@ -3628,19 +3627,19 @@ public class BasicTests extends SVNTests
         return callback.getDirEntryArray();
     }
 
-    private Info2[] collectInfos(String pathOrUrl, Revision revision,
+    private Info[] collectInfos(String pathOrUrl, Revision revision,
                                  Revision pegRevision, Depth depth,
                                  Collection<String> changelists)
         throws ClientException
     {
-       final List<Info2> infos = new ArrayList<Info2>();
+       final List<Info> infos = new ArrayList<Info>();
        
         client.info2(pathOrUrl, revision, pegRevision, depth, changelists,
                      new InfoCallback () {
-            public void singleInfo(Info2 info)
+            public void singleInfo(Info info)
             { infos.add(info); }           
         });
-        return infos.toArray(new Info2[infos.size()]);
+        return infos.toArray(new Info[infos.size()]);
     }
 
     private LogMessage[] collectLogMessages(String path, Revision pegRevision,

Modified: subversion/branches/py-tests-as-modules/subversion/bindings/javahl/tests/org/apache/subversion/javahl/SVNReposTests.java
URL: http://svn.apache.org/viewvc/subversion/branches/py-tests-as-modules/subversion/bindings/javahl/tests/org/apache/subversion/javahl/SVNReposTests.java?rev=1031230&r1=1031229&r2=1031230&view=diff
==============================================================================
--- subversion/branches/py-tests-as-modules/subversion/bindings/javahl/tests/org/apache/subversion/javahl/SVNReposTests.java (original)
+++ subversion/branches/py-tests-as-modules/subversion/bindings/javahl/tests/org/apache/subversion/javahl/SVNReposTests.java Thu Nov  4 20:48:21 2010
@@ -109,10 +109,10 @@ public class SVNReposTests extends SVNTe
         OneTest thisTest = new OneTest(false,false);
         // verify zero revisions in new repos
         URI repoUrl = makeReposUrl(thisTest.getRepository());
-        final Info2[] infoHolder = new Info2[1];
+        final Info[] infoHolder = new Info[1];
         InfoCallback mycallback = new InfoCallback()
         {
-            public void singleInfo(Info2 info)
+            public void singleInfo(Info info)
             {
                 infoHolder[0] = info;
             }

Modified: subversion/branches/py-tests-as-modules/subversion/bindings/javahl/tests/org/tigris/subversion/javahl/BasicTests.java
URL: http://svn.apache.org/viewvc/subversion/branches/py-tests-as-modules/subversion/bindings/javahl/tests/org/tigris/subversion/javahl/BasicTests.java?rev=1031230&r1=1031229&r2=1031230&view=diff
==============================================================================
--- subversion/branches/py-tests-as-modules/subversion/bindings/javahl/tests/org/tigris/subversion/javahl/BasicTests.java (original)
+++ subversion/branches/py-tests-as-modules/subversion/bindings/javahl/tests/org/tigris/subversion/javahl/BasicTests.java Thu Nov  4 20:48:21 2010
@@ -3010,10 +3010,9 @@ public class BasicTests extends SVNTests
                 tcTest.getWc().getItemContent("A/B/E/alpha"));
         tcTest.getWc().setItemWorkingCopyRevision("A/B/F/alpha", 2);
         // we expect the tree conflict to turn the existing item into
-        // a scheduled-add with history.  We expect the modifications in
-        // the local file to have been copied to the new file.
+        // a scheduled-add with history.
         tcTest.getWc().setItemTextStatus("A/B/E/alpha", StatusKind.added);
-        tcTest.getWc().setItemTextStatus("A/B/F/alpha", StatusKind.modified);
+        tcTest.getWc().setItemTextStatus("A/B/F/alpha", StatusKind.normal);
 
         // check the status of the working copy of the tc test
         tcTest.checkStatus();

Modified: subversion/branches/py-tests-as-modules/subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.c
URL: http://svn.apache.org/viewvc/subversion/branches/py-tests-as-modules/subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.c?rev=1031230&r1=1031229&r2=1031230&view=diff
==============================================================================
--- subversion/branches/py-tests-as-modules/subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.c (original)
+++ subversion/branches/py-tests-as-modules/subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.c Thu Nov  4 20:48:21 2010
@@ -1417,7 +1417,6 @@ static apr_status_t io_handle_cleanup(vo
 svn_error_t *svn_swig_pl_make_stream(svn_stream_t **stream, SV *obj)
 {
     IO *io;
-    int simple_type = 1;
 
     if (!SvOK(obj)) {
         *stream = NULL;
@@ -1425,6 +1424,7 @@ svn_error_t *svn_swig_pl_make_stream(svn
     }
 
     if (obj && sv_isobject(obj)) {
+      int simple_type = 1;
       if (sv_derived_from(obj, "SVN::Stream"))
         svn_swig_pl_callback_thunk(CALL_METHOD, (void *)"svn_stream",
                                    &obj, "O", obj);

Modified: subversion/branches/py-tests-as-modules/subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.c
URL: http://svn.apache.org/viewvc/subversion/branches/py-tests-as-modules/subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.c?rev=1031230&r1=1031229&r2=1031230&view=diff
==============================================================================
--- subversion/branches/py-tests-as-modules/subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.c (original)
+++ subversion/branches/py-tests-as-modules/subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.c Thu Nov  4 20:48:21 2010
@@ -1231,10 +1231,10 @@ svn_swig_rb_to_swig_type(VALUE value, vo
 static void
 r2c_swig_type2(VALUE value, const char *type_name, void **result)
 {
+#ifdef SWIG_IsOK
   int res;
   res = SWIG_ConvertPtr(value, result, SWIG_TypeQuery(type_name),
                         SWIG_POINTER_EXCEPTION);
-#ifdef SWIG_IsOK
   if (!SWIG_IsOK(res)) {
     VALUE message = rb_funcall(value, rb_intern("inspect"), 0);
     rb_str_cat2(message, "must be ");

Modified: subversion/branches/py-tests-as-modules/subversion/include/mod_dav_svn.h
URL: http://svn.apache.org/viewvc/subversion/branches/py-tests-as-modules/subversion/include/mod_dav_svn.h?rev=1031230&r1=1031229&r2=1031230&view=diff
==============================================================================
--- subversion/branches/py-tests-as-modules/subversion/include/mod_dav_svn.h (original)
+++ subversion/branches/py-tests-as-modules/subversion/include/mod_dav_svn.h Thu Nov  4 20:48:21 2010
@@ -48,8 +48,10 @@ extern "C" {
 
    Three special substrings of the uri are returned for convenience:
 
-   * REPOS_NAME:      The single path component that is the directory
-                      which contains the repository.
+   * REPOS_BASENAME:  The single path component that is the directory
+                      which contains the repository.  (Don't confuse
+                      this with the "repository name" as optionally
+                      defined via the SVNReposName directive!)
 
    * RELATIVE_PATH:   The remaining imaginary path components.
 
@@ -68,7 +70,7 @@ extern "C" {
    ROOT_PATH of '/svn/repos'.  But either way, we would get back:
 
      * CLEANED_URI:    /svn/repos/proj1/!svn/blah/13/A/B/alpha
-     * REPOS_NAME:     proj1
+     * REPOS_BASENAME: proj1
      * RELATIVE_PATH:  /!svn/blah/13/A/B/alpha
      * REPOS_PATH:     A/B/alpha
      * TRAILING_SLASH: FALSE
@@ -78,7 +80,7 @@ AP_MODULE_DECLARE(dav_error *) dav_svn_s
                                                  const char *root_path,
                                                  const char **cleaned_uri,
                                                  int *trailing_slash,
-                                                 const char **repos_name,
+                                                 const char **repos_basename,
                                                  const char **relative_path,
                                                  const char **repos_path);
 

Modified: subversion/branches/py-tests-as-modules/subversion/include/private/svn_dav_protocol.h
URL: http://svn.apache.org/viewvc/subversion/branches/py-tests-as-modules/subversion/include/private/svn_dav_protocol.h?rev=1031230&r1=1031229&r2=1031230&view=diff
==============================================================================
--- subversion/branches/py-tests-as-modules/subversion/include/private/svn_dav_protocol.h (original)
+++ subversion/branches/py-tests-as-modules/subversion/include/private/svn_dav_protocol.h Thu Nov  4 20:48:21 2010
@@ -46,6 +46,17 @@ extern "C" {
 #define SVN_DAV__INCLUDE_DESCENDANTS "include-descendants"
 #define SVN_DAV__VERSION_NAME "version-name"
 
+/** Names of XML elements attributes and tags for svn_ra_change_rev_prop2()'s
+    extension of PROPPATCH.  */
+#define SVN_DAV__OLD_VALUE "old-value"
+#define SVN_DAV__OLD_VALUE__ABSENT "absent"
+
+/** Helper typedef for svn_ra_change_rev_prop2() implementation. */
+typedef struct svn_dav__two_props_t {
+  const svn_string_t *const *old_value_p;
+  const svn_string_t *new_value;
+} svn_dav__two_props_t;
+
 #ifdef __cplusplus
 }
 #endif /* __cplusplus */

Modified: subversion/branches/py-tests-as-modules/subversion/include/private/svn_sqlite.h
URL: http://svn.apache.org/viewvc/subversion/branches/py-tests-as-modules/subversion/include/private/svn_sqlite.h?rev=1031230&r1=1031229&r2=1031230&view=diff
==============================================================================
--- subversion/branches/py-tests-as-modules/subversion/include/private/svn_sqlite.h (original)
+++ subversion/branches/py-tests-as-modules/subversion/include/private/svn_sqlite.h Thu Nov  4 20:48:21 2010
@@ -165,7 +165,7 @@ svn_sqlite__prepare(svn_sqlite__stmt_t *
 svn_error_t *
 svn_sqlite__bindf(svn_sqlite__stmt_t *stmt, const char *fmt, ...);
 
-/* Error-handling wrapper around sqlite3_bind_int64. */
+/* Error-handling wrapper around sqlite3_bind_int. */
 svn_error_t *
 svn_sqlite__bind_int(svn_sqlite__stmt_t *stmt, int slot, int val);
 

Modified: subversion/branches/py-tests-as-modules/subversion/include/svn_client.h
URL: http://svn.apache.org/viewvc/subversion/branches/py-tests-as-modules/subversion/include/svn_client.h?rev=1031230&r1=1031229&r2=1031230&view=diff
==============================================================================
--- subversion/branches/py-tests-as-modules/subversion/include/svn_client.h (original)
+++ subversion/branches/py-tests-as-modules/subversion/include/svn_client.h Thu Nov  4 20:48:21 2010
@@ -316,6 +316,22 @@ svn_client_get_ssl_client_cert_pw_prompt
 /** @} */
 
 /**
+ * Revisions and Peg Revisions
+ *
+ * @defgroup clnt_revisions Revisions and Peg Revisions
+ *
+ * A brief word on operative and peg revisions.
+ *
+ * If the kind of the peg revision is #svn_opt_revision_unspecified, then it
+ * defaults to #svn_opt_revision_head for URLs and #svn_opt_revision_working
+ * for local paths.
+ *
+ * For deeper insight, please see the
+ * <a href="http://svnbook.red-bean.com/nightly/en/svn.advanced.pegrevs.html">
+ * Peg and Operative Revisions</a> section of the Subversion Book.
+ */
+
+/**
  * Commit operations
  *
  * @defgroup clnt_commit Client commit subsystem
@@ -461,7 +477,7 @@ typedef struct svn_client_commit_item3_t
 
 /** The commit candidate structure.
  *
- * @deprecated Provided for backward compatibility with the 1.3 API.
+ * @deprecated Provided for backward compatibility with the 1.4 API.
  */
 typedef struct svn_client_commit_item2_t
 {
@@ -560,7 +576,7 @@ svn_client_commit_item3_dup(const svn_cl
  * Return a duplicate of @a item, allocated in @a pool. No part of the new
  * structure will be shared with @a item.
  *
- * @deprecated Provided for backward compatibility with the 1.3 API.
+ * @deprecated Provided for backward compatibility with the 1.4 API.
  */
 SVN_DEPRECATED
 svn_client_commit_item2_t *
@@ -881,7 +897,7 @@ typedef struct svn_client_ctx_t
   void *cancel_baton;
 
   /** notification function, defaulting to a function that forwards
-   * to notify_func().
+   * to notify_func().  If @a NULL, it will not be invoked.
    * @since New in 1.2. */
   svn_wc_notify_func2_t notify_func2;
 
@@ -1028,56 +1044,47 @@ svn_client_args_to_target_array(apr_arra
 
 
 /**
- * Checkout a working copy of @a URL at @a revision, looked up at @a
- * peg_revision, using @a path as the root directory of the newly
- * checked out working copy, and authenticating with the
- * authentication baton cached in @a ctx.  If @a result_rev is not @c
- * NULL, set @a *result_rev to the value of the revision actually
- * checked out from the repository.
- *
- * If @a peg_revision->kind is #svn_opt_revision_unspecified, then it
- * defaults to #svn_opt_revision_head.
- *
- * @a revision must be of kind #svn_opt_revision_number,
- * #svn_opt_revision_head, or #svn_opt_revision_date.  If
- * @a revision does not meet these requirements, return the error
- * #SVN_ERR_CLIENT_BAD_REVISION.
+ * Checkout a working copy from a repository.
  *
- * If @a depth is #svn_depth_infinity, check out fully recursively.
- * Else if it is #svn_depth_immediates, check out @a URL and its
- * immediate entries (subdirectories will be present, but will be at
- * depth #svn_depth_empty themselves); else #svn_depth_files,
- * check out @a URL and its file entries, but no subdirectories; else
- * if #svn_depth_empty, check out @a URL as an empty directory at
- * that depth, with no entries present.
- *
- * If @a depth is #svn_depth_unknown, then behave as if for
- * #svn_depth_infinity, except in the case of resuming a previous
- * checkout of @a path (i.e., updating), in which case use the depth
- * of the existing working copy.
- *
- * If @a ignore_externals is set, don't process externals definitions
- * as part of this operation.
- *
- * If @a ctx->notify_func2 is non-NULL, invoke @a ctx->notify_func2 with
- * @a ctx->notify_baton2 as the checkout progresses.
- *
- * If @a allow_unver_obstructions is TRUE then the checkout tolerates
- * existing unversioned items that obstruct added paths from @a URL.  Only
- * obstructions of the same type (file or dir) as the added item are
- * tolerated.  The text of obstructing files is left as-is, effectively
- * treating it as a user modification after the checkout.  Working
- * properties of obstructing items are set equal to the base properties.
- * If @a allow_unver_obstructions is FALSE then the checkout will abort
- * if there are any unversioned obstructing items.
- *
- * If @a URL refers to a file rather than a directory, return the
- * error #SVN_ERR_UNSUPPORTED_FEATURE.  If @a URL does not exist,
- * return the error #SVN_ERR_RA_ILLEGAL_URL.
- *
- * Use @a pool for any temporary allocation.
+ * @param[out] result_rev   If non-NULL, the value of the revision checked
+ *              out form the repository.
+ * @param[in] URL       The repository URL of the checkout source.
+ * @param[in] path      The root of the new working copy.
+ * @param[in] peg_revision  The peg revision.
+ * @param[in] revision  The operative revision.
+ * @param[in] depth     The depth of the operation.  If #svn_depth_unknown,
+ *              then behave as if for #svn_depth_infinity, except in the case
+ *              of resuming a previous checkout of @a path (i.e., updating),
+ *              in which case use the depth of the existing working copy.
+ * @param[in] ignore_externals  If @c TRUE, don't process externals
+ *              definitions as part of this operation.
+ * @param[in] allow_unver_obstructions  If @c TRUE, then tolerate existing
+ *              unversioned items that obstruct incoming paths.  Only
+ *              obstructions of the same type (file or dir) as the added
+ *              item are tolerated.  The text of obstructing files is left
+ *              as-is, effectively treating it as a user modification after
+ *              the checkout.  Working properties of obstructing items are
+ *              set equal to the base properties. <br>
+ *              If @c FALSE, then abort if there are any unversioned
+ *              obstructing items.
+ * @param[in] ctx   The standard client context, used for authentication and
+ *              notification.
+ * @param[in] pool  Used for any temporary allocation.
+ *
+ * @return A pointer to an #svn_error_t of the type (this list is not
+ *         exhaustive): <br>
+ *         #SVN_ERR_UNSUPPORTED_FEATURE if @a URL refers to a file rather
+ *         than a directory; <br>
+ *         #SVN_ERR_RA_ILLEGAL_URL if @a URL does not exist; <br>
+ *         #SVN_ERR_CLIENT_BAD_REVISION if @a revision is not one of
+ *         #svn_opt_revision_number, #svn_opt_revision_head, or
+ *         #svn_opt_revision_date. <br>
+ *         If no error occurred, return #SVN_NO_ERROR.
  *
  * @since New in 1.5.
+ *
+ * @see #svn_depth_t <br> #svn_client_ctx_t <br> @ref clnt_revisions for
+ *      a discussion of operative and peg revisions.
  */
 svn_error_t *
 svn_client_checkout3(svn_revnum_t *result_rev,
@@ -1494,7 +1501,7 @@ svn_client_mkdir4(const apr_array_header
  * rather than through @a commit_callback.
  *
  * @since New in 1.5.
- * @deprecated Provided for backward compatibility with the 1.4 API.
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  */
 SVN_DEPRECATED
 svn_error_t *
@@ -2413,7 +2420,7 @@ svn_client_log2(const apr_array_header_t
  * revision 1.  That works fine, except when there are no commits in
  * the repository, hence this special case.
  *
- * @deprecated Provided for backward compatibility with the 1.0 API.
+ * @deprecated Provided for backward compatibility with the 1.1 API.
  */
 SVN_DEPRECATED
 svn_error_t *
@@ -2743,7 +2750,7 @@ svn_client_diff2(const apr_array_header_
  * Similar to svn_client_diff2(), but with @a ignore_content_type
  * always set to FALSE.
  *
- * @deprecated Provided for backward compatibility with the 1.0 API.
+ * @deprecated Provided for backward compatibility with the 1.1 API.
  */
 SVN_DEPRECATED
 svn_error_t *
@@ -2799,6 +2806,7 @@ svn_client_diff_peg5(const apr_array_hea
  * @c FALSE and @a use_git_diff_format set to @c FALSE.
  *
  * @since New in 1.5.
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  */
 SVN_DEPRECATED
 svn_error_t *
@@ -3060,9 +3068,39 @@ svn_client_diff_summarize_peg(const char
  * If @a dry_run is TRUE, the merge is carried out, and full notification
  * feedback is provided, but the working copy is not modified.
  *
+ * If allow_mixed_rev is @c FALSE, and @a merge_target is a mixed-revision
+ * working copy, raise @c SVN_ERR_CLIENT_NOT_READY_TO_MERGE.
+ * Because users rarely intend to merge into mixed-revision working copies,
+ * it is recommended to set this parameter to FALSE by default unless the
+ * user has explicitly requested a merge into a mixed-revision working copy.
+ *
  * The authentication baton cached in @a ctx is used to communicate with the
  * repository.
  *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_client_merge4(const char *source1,
+                  const svn_opt_revision_t *revision1,
+                  const char *source2,
+                  const svn_opt_revision_t *revision2,
+                  const char *target_wcpath,
+                  svn_depth_t depth,
+                  svn_boolean_t ignore_ancestry,
+                  svn_boolean_t force,
+                  svn_boolean_t record_only,
+                  svn_boolean_t dry_run,
+                  svn_boolean_t allow_mixed_rev,
+                  const apr_array_header_t *merge_options,
+                  svn_client_ctx_t *ctx,
+                  apr_pool_t *pool);
+
+/**
+ * Similar to svn_client_merge4(), but with @a allow_mixed_rev set to
+ * @c TRUE.
+ *
+ * @deprecated Provided for backward compatibility with the 1.6 API.
+ *
  * @since New in 1.5.
  */
 svn_error_t *
@@ -3164,7 +3202,30 @@ svn_client_merge_reintegrate(const char 
  * list of provided ranges has an `unspecified' or unrecognized
  * `kind', return #SVN_ERR_CLIENT_BAD_REVISION.
  *
- * All other options are handled identically to svn_client_merge3().
+ * All other options are handled identically to svn_client_merge4().
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_client_merge_peg4(const char *source,
+                      const apr_array_header_t *ranges_to_merge,
+                      const svn_opt_revision_t *peg_revision,
+                      const char *target_wcpath,
+                      svn_depth_t depth,
+                      svn_boolean_t ignore_ancestry,
+                      svn_boolean_t force,
+                      svn_boolean_t record_only,
+                      svn_boolean_t dry_run,
+                      svn_boolean_t allow_mixed_rev,
+                      const apr_array_header_t *merge_options,
+                      svn_client_ctx_t *ctx,
+                      apr_pool_t *pool);
+
+/**
+ * Similar to svn_client_merge_peg4(), but with @a allow_mixed_rev set to
+ * @c TRUE.
+ *
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  *
  * @since New in 1.5.
  */
@@ -3188,7 +3249,7 @@ svn_client_merge_peg3(const char *source
  * is TRUE, set @a depth to #svn_depth_infinity, if @a recurse is
  * FALSE, set @a depth to #svn_depth_files.
  *
- * @deprecated Provided for backwards compatibility with the 1.3 API.
+ * @deprecated Provided for backwards compatibility with the 1.4 API.
  *
  * @since New in 1.4.
  */
@@ -3373,8 +3434,6 @@ svn_client_mergeinfo_log_eligible(const 
  * immediately.
  *
  * Use @a scratch_pool for any temporary allocations.
- *
- * @since New in 1.0.
  */
 svn_error_t *
 svn_client_cleanup(const char *dir,
@@ -3411,26 +3470,47 @@ svn_client_upgrade(const char *dir,
  */
 
 /**
- * Modify a working copy directory @a dir, changing any
- * repository URLs that begin with @a from to begin with @a to instead,
- * recursing into subdirectories if @a recurse is TRUE.
- *
- * @param dir Working copy directory
- * @param from Original URL
- * @param to New URL
- * @param recurse Whether to recurse
+ * Recursively modify a working copy rooted at @a wcroot_dir, changing
+ * any repository URLs that begin with @a from_prefix to begin with @a
+ * to_prefix instead.
+ *
+ * @param wcroot_dir Working copy root directory
+ * @param from_prefix Original URL
+ * @param to_prefix New URL
+ * @param ignore_externals If not set, recurse into external working
+ *        copies after relocating the primary working copy
  * @param ctx svn_client_ctx_t
  * @param pool The pool from which to perform memory allocations
+ *
+ * @since New in 1.7
+ */
+svn_error_t *
+svn_client_relocate2(const char *wcroot_dir,
+                     const char *from_prefix,
+                     const char *to_prefix,
+                     svn_boolean_t ignore_externals,
+                     svn_client_ctx_t *ctx,
+                     apr_pool_t *pool);
+
+/**
+ * Similar to svn_client_relocate2(), but with @a ignore_externals
+ * always TRUE.
+ *
+ * @note As of the 1.7 API, @a dir is required to be a working copy
+ * root directory, and @a recurse is required to be TRUE.
+ *
+ * @deprecated Provided for limited backwards compatibility with the
+ * 1.6 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_client_relocate(const char *dir,
-                    const char *from,
-                    const char *to,
+                    const char *from_prefix,
+                    const char *to_prefix,
                     svn_boolean_t recurse,
                     svn_client_ctx_t *ctx,
                     apr_pool_t *pool);
 
-
 /** @} */
 
 /**
@@ -3788,10 +3868,6 @@ svn_client_copy(svn_client_commit_info_t
  *     is a directory it will remain in the working copy but all the files,
  *     and unversioned items, it contains will be removed.
  *
- *   - If one of @a src_paths contains locally modified and/or unversioned
- *     items and @a force is not set, the move will fail. If @a force is set
- *     such items will be removed.
- *
  * The parent of @a dst_path must already exist.
  *
  * If @a src_paths has only one item, attempt to move it to @a dst_path.  If
@@ -3838,7 +3914,6 @@ svn_client_copy(svn_client_commit_info_t
 svn_error_t *
 svn_client_move6(const apr_array_header_t *src_paths,
                  const char *dst_path,
-                 svn_boolean_t force,
                  svn_boolean_t move_as_child,
                  svn_boolean_t make_parents,
                  const apr_hash_t *revprop_table,
@@ -3851,6 +3926,9 @@ svn_client_move6(const apr_array_header_
  * Similar to svn_client_move6(), but returns the @a commit_info_p directly,
  * rather than through @a commit_callback.
  *
+ * A WC-to-WC move will include any modified and/or unversioned children.
+ * @a force is ignored.
+ *
  * @since New in 1.5.
  * @deprecated Provided for backward compatibility with the 1.6 API.
  */
@@ -3871,6 +3949,11 @@ svn_client_move5(svn_commit_info_t **com
  * move_as_child set to @c FALSE, @a revprop_table passed as NULL, and
  * @a make_parents set to @c FALSE.
  *
+ * Note: The behaviour of @a force changed in 1.5 (r860885 and r861421), when
+ * the 'move' semantics were improved to just move the source including any
+ * modified and/or unversioned items in it.  Before that, @a force
+ * controlled what happened to such items, but now @a force is ignored.
+ *
  * @since New in 1.4.
  *
  * @deprecated Provided for backward compatibility with the 1.4 API.
@@ -4093,6 +4176,12 @@ svn_client_propset(const char *propname,
  * new value.  (To check that an old value is still non-existent, set
  * @a original_propval->data to NULL, and @a original_propval->len is
  * ignored.)
+ * If the server advertises #SVN_RA_CAPABILITY_ATOMIC_REVPROPS, the
+ * check of @a original_propval is done atomically.
+ *
+ * Note: the representation of "property is not set" in @a
+ * original_propval differs from the representation in other APIs
+ * (such as svn_fs_change_rev_prop2() and svn_ra_change_rev_prop2()).
  *
  * If @a force is TRUE, allow newlines in the author property.
  *
@@ -4130,7 +4219,7 @@ svn_client_revprop_set2(const char *prop
  * Similar to svn_client_revprop_set2(), but with @a original_propval
  * always @c NULL.
  *
- * @deprecated Provided for backward compatibility with the 1.0 API.
+ * @deprecated Provided for backward compatibility with the 1.5 API.
  */
 SVN_DEPRECATED
 svn_error_t *
@@ -4201,7 +4290,7 @@ svn_client_propget3(apr_hash_t **props,
  * @a recurse: if @a recurse is TRUE, then @a depth is
  * #svn_depth_infinity, else #svn_depth_empty.
  *
- * @deprecated Provided for backward compatibility with the 1.2 API.
+ * @deprecated Provided for backward compatibility with the 1.4 API.
  */
 SVN_DEPRECATED
 svn_error_t *
@@ -4307,7 +4396,7 @@ svn_client_proplist3(const char *target,
  *
  * @since New in 1.2.
  *
- * @deprecated Provided for backward compatiblility with the 1.2 API.
+ * @deprecated Provided for backward compatiblility with the 1.4 API.
  */
 SVN_DEPRECATED
 svn_error_t *
@@ -4370,11 +4459,14 @@ svn_client_revprop_list(apr_hash_t **pro
  * @a *result_rev to the value of the revision actually exported (set
  * it to #SVN_INVALID_REVNUM for local exports).
  *
- * @a from is either the path the working copy on disk, or a URL to the
- * repository you wish to export.
+ * @a from_path_or_url is either the path the working copy on disk, or
+ * a URL to the repository you wish to export.
  *
- * @a to is the path to the directory where you wish to create the exported
- * tree.
+ * When exporting a directory @a to_path is the path to the directory
+ * where you wish to create the exported tree, when exporting a file
+ * it is the path of the file that will be created.  If @a to_path is
+ * the empty path the name of the file/directory in the repository
+ * will be used.
  *
  * @a peg_revision is the revision where the path is first looked up
  * when exporting from a repository.  If @a peg_revision->kind is
@@ -4392,7 +4484,8 @@ svn_client_revprop_list(apr_hash_t **pro
  *
  * @a ctx is a context used for authentication in the repository case.
  *
- * @a overwrite if TRUE will cause the export to overwrite files or directories.
+ * @a overwrite if TRUE will cause the export to overwrite files or
+ * directories.
  *
  * If @a ignore_externals is set, don't process externals definitions
  * as part of this operation.
@@ -4400,17 +4493,18 @@ svn_client_revprop_list(apr_hash_t **pro
  * If @a ignore_keywords is set, don't expand keywords as part of this
  * operation.
  *
- * @a native_eol allows you to override the standard eol marker on the platform
- * you are running on.  Can be either "LF", "CR" or "CRLF" or NULL.  If NULL
- * will use the standard eol marker.  Any other value will cause the
- * #SVN_ERR_IO_UNKNOWN_EOL error to be returned.
- *
- * If @a depth is #svn_depth_infinity, export fully recursively.
- * Else if it is #svn_depth_immediates, export @a from and its immediate
- * children (if any), but with subdirectories empty and at
- * #svn_depth_empty.  Else if #svn_depth_files, export @a from and
- * its immediate file children (if any) only.  If @a depth is
- * #svn_depth_empty, then export exactly @a from and none of its children.
+ * @a native_eol allows you to override the standard eol marker on the
+ * platform you are running on.  Can be either "LF", "CR" or "CRLF" or
+ * NULL.  If NULL will use the standard eol marker.  Any other value
+ * will cause the #SVN_ERR_IO_UNKNOWN_EOL error to be returned.
+ *
+ * If @a depth is #svn_depth_infinity, export fully recursively.  Else
+ * if it is #svn_depth_immediates, export @a from_path_or_url and its
+ * immediate children (if any), but with subdirectories empty and at
+ * #svn_depth_empty.  Else if #svn_depth_files, export @a
+ * from_path_or_url and its immediate file children (if any) only.  If
+ * @a depth is #svn_depth_empty, then export exactly @a
+ * from_path_or_url and none of its children.
  *
  * All allocations are done in @a pool.
  *
@@ -4418,8 +4512,8 @@ svn_client_revprop_list(apr_hash_t **pro
  */
 svn_error_t *
 svn_client_export5(svn_revnum_t *result_rev,
-                   const char *from,
-                   const char *to,
+                   const char *from_path_or_url,
+                   const char *to_path,
                    const svn_opt_revision_t *peg_revision,
                    const svn_opt_revision_t *revision,
                    svn_boolean_t overwrite,
@@ -4440,8 +4534,8 @@ svn_client_export5(svn_revnum_t *result_
  */
 svn_error_t *
 svn_client_export4(svn_revnum_t *result_rev,
-                   const char *from,
-                   const char *to,
+                   const char *from_path_or_url,
+                   const char *to_path,
                    const svn_opt_revision_t *peg_revision,
                    const svn_opt_revision_t *revision,
                    svn_boolean_t overwrite,
@@ -4465,8 +4559,8 @@ svn_client_export4(svn_revnum_t *result_
 SVN_DEPRECATED
 svn_error_t *
 svn_client_export3(svn_revnum_t *result_rev,
-                   const char *from,
-                   const char *to,
+                   const char *from_path_or_url,
+                   const char *to_path,
                    const svn_opt_revision_t *peg_revision,
                    const svn_opt_revision_t *revision,
                    svn_boolean_t overwrite,
@@ -4489,8 +4583,8 @@ svn_client_export3(svn_revnum_t *result_
 SVN_DEPRECATED
 svn_error_t *
 svn_client_export2(svn_revnum_t *result_rev,
-                   const char *from,
-                   const char *to,
+                   const char *from_path_or_url,
+                   const char *to_path,
                    svn_opt_revision_t *revision,
                    svn_boolean_t force,
                    const char *native_eol,
@@ -4507,8 +4601,8 @@ svn_client_export2(svn_revnum_t *result_
 SVN_DEPRECATED
 svn_error_t *
 svn_client_export(svn_revnum_t *result_rev,
-                  const char *from,
-                  const char *to,
+                  const char *from_path_or_url,
+                  const char *to_path,
                   svn_opt_revision_t *revision,
                   svn_boolean_t force,
                   svn_client_ctx_t *ctx,
@@ -4684,26 +4778,30 @@ svn_client_ls(apr_hash_t **dirents,
  */
 
 /**
- * Output the content of file identified by @a path_or_url and @a
- * revision to the stream @a out.  The actual node revision selected
- * is determined by the path as it exists in @a peg_revision.  If @a
- * peg_revision->kind is #svn_opt_revision_unspecified, then it defaults
- * to #svn_opt_revision_head for URLs or #svn_opt_revision_working
- * for WC targets.
+ * Output the content of a file.
  *
- * If @a path_or_url is not a local path, then if @a revision is of
- * kind #svn_opt_revision_previous (or some other kind that requires
- * a local path), an error will be returned, because the desired
- * revision cannot be determined.
- *
- * Use the authentication baton cached in @a ctx to authenticate against the
- * repository.
- *
- * Perform all allocations from @a pool.
- *
- * ### @todo Add an expansion/translation flag?
+ * @param[in] out           The stream to which the content will be written.
+ * @param[in] path_or_url   The path or URL of the file.
+ * @param[in] peg_revision  The peg revision.
+ * @param[in] revision  The operative revision.
+ * @param[in] ctx   The standard client context, used for possible
+ *                  authentication.
+ * @param[in] pool  Used for any temporary allocation.
+ *
+ * @todo Add an expansion/translation flag?
+ *
+ * @return A pointer to an #svn_error_t of the type (this list is not
+ *         exhaustive): <br>
+ *         An unspecified error if @a revision is of kind
+ *         #svn_opt_revision_previous (or some other kind that requires
+ *         a local path), because the desired revision cannot be
+ *         determined. <br>
+ *         If no error occurred, return #SVN_NO_ERROR.
  *
  * @since New in 1.2.
+ *
+ * @see #svn_client_ctx_t <br> @ref clnt_revisions for
+ *      a discussion of operative and peg revisions.
  */
 svn_error_t *
 svn_client_cat2(svn_stream_t *out,
@@ -5031,6 +5129,12 @@ typedef struct svn_info_t
    */
   svn_wc_conflict_description_t *tree_conflict;
 
+  /**
+   * The local absolute path of the working copy root.
+   * @since New in 1.7.
+   */
+  const char *wcroot_abspath;
+
   /** @} */
 
 } svn_info_t;
@@ -5150,7 +5254,7 @@ svn_client_info2(const char *path_or_url
  * NULL, and @a depth set according to @a recurse: if @a recurse is
  * TRUE, @a depth is #svn_depth_infinity, else #svn_depth_empty.
  *
- * @deprecated Provided for backward compatibility with the 1.2 API.
+ * @deprecated Provided for backward compatibility with the 1.4 API.
  */
 SVN_DEPRECATED
 svn_error_t *
@@ -5223,15 +5327,6 @@ typedef svn_error_t *(*svn_client_patch_
  * stripped from paths obtained from the patch. It is an error if a
  * negative strip count is passed.
  *
- * If @a old_patch_target_names is @c TRUE, use target names from the old
- * side of the patch, rather than using target names from the new side of
- * the patch. For instance, if a unidiff header contains
- *   --- foo.c
- *   +++ foo.c.new
- * and @a old_patch_target_names is @c TRUE, the name "foo.c" will be used
- * for the target, and if @a old_patch_target_names is @c FALSE, the target
- * name "foo.c.new" will be used.
- *
  * If @a reverse is @c TRUE, apply patches in reverse, deleting lines
  * the patch would add and adding lines the patch would delete.
  * This is useful when applying a unidiff which was created with the
@@ -5263,7 +5358,6 @@ svn_client_patch(const char *patch_abspa
                  const char *local_abspath,
                  svn_boolean_t dry_run,
                  int strip_count,
-                 svn_boolean_t old_patch_target_names,
                  svn_boolean_t reverse,
                  svn_boolean_t ignore_whitespace,
                  svn_boolean_t remove_tempfiles,

Modified: subversion/branches/py-tests-as-modules/subversion/include/svn_config.h
URL: http://svn.apache.org/viewvc/subversion/branches/py-tests-as-modules/subversion/include/svn_config.h?rev=1031230&r1=1031229&r2=1031230&view=diff
==============================================================================
--- subversion/branches/py-tests-as-modules/subversion/include/svn_config.h (original)
+++ subversion/branches/py-tests-as-modules/subversion/include/svn_config.h Thu Nov  4 20:48:21 2010
@@ -127,6 +127,7 @@ typedef struct svn_config_t svn_config_t
 #define SVN_CONFIG_OPTION_PASSWORD_DB               "password-db"
 #define SVN_CONFIG_OPTION_REALM                     "realm"
 #define SVN_CONFIG_OPTION_AUTHZ_DB                  "authz-db"
+#define SVN_CONFIG_OPTION_FORCE_USERNAME_CASE       "force-username-case"
 #define SVN_CONFIG_SECTION_SASL                 "sasl"
 #define SVN_CONFIG_OPTION_USE_SASL                  "use-sasl"
 #define SVN_CONFIG_OPTION_MIN_SSF                   "min-encryption"

Modified: subversion/branches/py-tests-as-modules/subversion/include/svn_dav.h
URL: http://svn.apache.org/viewvc/subversion/branches/py-tests-as-modules/subversion/include/svn_dav.h?rev=1031230&r1=1031229&r2=1031230&view=diff
==============================================================================
--- subversion/branches/py-tests-as-modules/subversion/include/svn_dav.h (original)
+++ subversion/branches/py-tests-as-modules/subversion/include/svn_dav.h Thu Nov  4 20:48:21 2010
@@ -243,6 +243,12 @@ extern "C" {
 #define SVN_DAV_NS_DAV_SVN_LOG_REVPROPS SVN_DAV_PROP_NS_DAV "svn/log-revprops"
 
 /** Presence of this in a DAV header in an OPTIONS response indicates
+ * that the transmitter (in this case, the server) knows how to enforce
+ * old-value atomicity in PROPPATCH (for editing revprops). */
+#define SVN_DAV_NS_DAV_SVN_ATOMIC_REVPROPS\
+            SVN_DAV_PROP_NS_DAV "svn/atomic-revprops"
+
+/** Presence of this in a DAV header in an OPTIONS response indicates
  * that the transmitter (in this case, the server) knows how to handle
  * a replay of a directory in the repository (not root). */
 #define SVN_DAV_NS_DAV_SVN_PARTIAL_REPLAY\

Modified: subversion/branches/py-tests-as-modules/subversion/include/svn_diff.h
URL: http://svn.apache.org/viewvc/subversion/branches/py-tests-as-modules/subversion/include/svn_diff.h?rev=1031230&r1=1031229&r2=1031230&view=diff
==============================================================================
--- subversion/branches/py-tests-as-modules/subversion/include/svn_diff.h (original)
+++ subversion/branches/py-tests-as-modules/subversion/include/svn_diff.h Thu Nov  4 20:48:21 2010
@@ -537,7 +537,7 @@ svn_diff_file_output_unified3(svn_stream
 /** Similar to svn_diff_file_output_unified3(), but with @a relative_to_dir
  * set to NULL and @a show_c_function to false.
  *
- * @deprecated Provided for backwards compatibility with the 1.3 API.
+ * @deprecated Provided for backwards compatibility with the 1.4 API.
  */
 SVN_DEPRECATED
 svn_error_t *

Modified: subversion/branches/py-tests-as-modules/subversion/include/svn_dirent_uri.h
URL: http://svn.apache.org/viewvc/subversion/branches/py-tests-as-modules/subversion/include/svn_dirent_uri.h?rev=1031230&r1=1031229&r2=1031230&view=diff
==============================================================================
--- subversion/branches/py-tests-as-modules/subversion/include/svn_dirent_uri.h (original)
+++ subversion/branches/py-tests-as-modules/subversion/include/svn_dirent_uri.h Thu Nov  4 20:48:21 2010
@@ -300,7 +300,7 @@ svn_relpath_split(const char **dirpath,
  * @since New in 1.7.
  */
 const char *
-svn_relpath_basename(const char *uri,
+svn_relpath_basename(const char *relpath,
                      apr_pool_t *pool);
 
 /** Get the dirname of the specified canonicalized @a relpath, defined as
@@ -372,7 +372,7 @@ svn_uri_basename(const char *uri,
  * @since New in 1.7.
  */
 char *
-svn_uri_dirname(const char *dirent,
+svn_uri_dirname(const char *uri,
                 apr_pool_t *pool);
 
 
@@ -453,7 +453,7 @@ svn_dirent_canonicalize(const char *dire
  * @since New in 1.7.
  */
 const char *
-svn_relpath_canonicalize(const char *uri,
+svn_relpath_canonicalize(const char *relpath,
                          apr_pool_t *pool);
 
 

Modified: subversion/branches/py-tests-as-modules/subversion/include/svn_error.h
URL: http://svn.apache.org/viewvc/subversion/branches/py-tests-as-modules/subversion/include/svn_error.h?rev=1031230&r1=1031229&r2=1031230&view=diff
==============================================================================
--- subversion/branches/py-tests-as-modules/subversion/include/svn_error.h (original)
+++ subversion/branches/py-tests-as-modules/subversion/include/svn_error.h Thu Nov  4 20:48:21 2010
@@ -193,6 +193,15 @@ svn_error_compose(svn_error_t *chain,
 svn_error_t *
 svn_error_root_cause(svn_error_t *err);
 
+/** Return TRUE if @a err's chain contains the error code @a apr_err.
+ *
+ * If @a err is #SVN_NO_ERROR, return FALSE.
+ *
+ * @since New in 1.7.
+ */
+svn_boolean_t
+svn_error_has_cause(svn_error_t *err, apr_status_t apr_err);
+
 /** Create a new error that is a deep copy of @a err and return it.
  *
  * @since New in 1.2.

Modified: subversion/branches/py-tests-as-modules/subversion/include/svn_error_codes.h
URL: http://svn.apache.org/viewvc/subversion/branches/py-tests-as-modules/subversion/include/svn_error_codes.h?rev=1031230&r1=1031229&r2=1031230&view=diff
==============================================================================
--- subversion/branches/py-tests-as-modules/subversion/include/svn_error_codes.h (original)
+++ subversion/branches/py-tests-as-modules/subversion/include/svn_error_codes.h Thu Nov  4 20:48:21 2010
@@ -738,6 +738,12 @@ SVN_ERROR_START
              SVN_ERR_FS_CATEGORY_START + 48,
              "Filesystem has no such checksum-representation index record")
 
+  /** @since New in 1.7. */
+  SVN_ERRDEF(SVN_ERR_FS_PROP_BASEVALUE_MISMATCH,
+             SVN_ERR_FS_CATEGORY_START + 49,
+             "Property value in filesystem differs from the provided "
+             "base value")
+
   /* repos errors */
 
   SVN_ERRDEF(SVN_ERR_REPOS_LOCKED,
@@ -1328,12 +1334,12 @@ SVN_ERROR_START
              SVN_ERR_MISC_CATEGORY_START + 32,
              "Unsupported schema found in SQLite db")
 
-/** @since New in 1.7. */
+  /** @since New in 1.7. */
   SVN_ERRDEF(SVN_ERR_SQLITE_BUSY,
              SVN_ERR_MISC_CATEGORY_START + 33,
              "The SQLite db is busy")
 
-/** @since New in 1.7. */
+  /** @since New in 1.7. */
   SVN_ERRDEF(SVN_ERR_SQLITE_RESETTING_FOR_ROLLBACK,
              SVN_ERR_MISC_CATEGORY_START + 34,
              "SQLite busy at transaction rollback; "

Modified: subversion/branches/py-tests-as-modules/subversion/include/svn_fs.h
URL: http://svn.apache.org/viewvc/subversion/branches/py-tests-as-modules/subversion/include/svn_fs.h?rev=1031230&r1=1031229&r2=1031230&view=diff
==============================================================================
--- subversion/branches/py-tests-as-modules/subversion/include/svn_fs.h (original)
+++ subversion/branches/py-tests-as-modules/subversion/include/svn_fs.h Thu Nov  4 20:48:21 2010
@@ -530,12 +530,12 @@ svn_error_t *
 svn_fs_access_add_lock_token2(svn_fs_access_t *access_ctx,
                               const char *path,
                               const char *token);
+
 /**
  * Same as svn_fs_access_add_lock_token2(), but with @a path set to value 1.
  *
- * @deprecated Provided for backward compatibility with the 1.1 API.
+ * @deprecated Provided for backward compatibility with the 1.5 API.
  */
-
 SVN_DEPRECATED
 svn_error_t *
 svn_fs_access_add_lock_token(svn_fs_access_t *access_ctx,
@@ -1894,10 +1894,11 @@ svn_fs_revision_proplist(apr_hash_t **ta
  * - @a fs is a filesystem, and @a rev is the revision in that filesystem
  *   whose property should change.
  * - @a name is the name of the property to change.
- * - if @a old_value_p is not @c NULL, then @a *old_value_p is the expected old
- *   value of the property, and changing the value will fail with error
- *   #SVN_ERR_BAD_PROPERTY_VALUE if the present value of the property is not @a
- *   *old_value_p.
+ * - if @a old_value_p is not @c NULL, then changing the property will fail with
+ *   error #SVN_ERR_FS_PROP_BASEVALUE_MISMATCH if the present value of the
+ *   property is not @a *old_value_p.  (This is an atomic test-and-set).
+ *   @a *old_value_p may be @c NULL, representing that the property must be not
+ *   already set.
  * - @a value is the new value of the property, or zero if the property should
  *   be removed altogether.
  *

Modified: subversion/branches/py-tests-as-modules/subversion/include/svn_io.h
URL: http://svn.apache.org/viewvc/subversion/branches/py-tests-as-modules/subversion/include/svn_io.h?rev=1031230&r1=1031229&r2=1031230&view=diff
==============================================================================
--- subversion/branches/py-tests-as-modules/subversion/include/svn_io.h (original)
+++ subversion/branches/py-tests-as-modules/subversion/include/svn_io.h Thu Nov  4 20:48:21 2010
@@ -248,7 +248,10 @@ svn_io_open_uniquely_named(apr_file_t **
  * be possible to atomically rename the resulting file due to cross-device
  * issues.)
  *
- * The file will be deleted according to @a delete_when.
+ * The file will be deleted according to @a delete_when.  If @a delete_when
+ * is @c svn_io_file_del_on_close and @a file is @c NULL, the file will be
+ * deleted before this function returns.
+ *
  * When passing @c svn_io_file_del_none please don't forget to eventually
  * remove the temporary file to avoid filling up the system temp directory.
  * It is often appropriate to bind the lifetime of the temporary file to
@@ -286,7 +289,7 @@ svn_io_open_unique_file2(apr_file_t **f,
 
 /** Like svn_io_open_unique_file2, but can't delete on pool cleanup.
  *
- * @deprecated Provided for backward compatibility with the 1.0 API
+ * @deprecated Provided for backward compatibility with the 1.3 API
  *
  * @note In 1.4 the API was extended to require either @a f or
  *       @a unique_name_p (the other can be NULL).  Before that, both were
@@ -1308,13 +1311,15 @@ svn_stringbuf_from_aprfile(svn_stringbuf
  * converting any error to a Subversion error. If @a ignore_enoent is TRUE, and
  * the file is not present (APR_STATUS_IS_ENOENT returns TRUE), then no
  * error will be returned.
+ *
+ * @since New in 1.7.
  */
 svn_error_t *
 svn_io_remove_file2(const char *path,
-                   svn_boolean_t ignore_enoent,
-                   apr_pool_t *scratch_pool);
+                    svn_boolean_t ignore_enoent,
+                    apr_pool_t *scratch_pool);
 
-/** Similar to svn_io_remove_file2(), except with @a missing_ok set to FALSE.
+/** Similar to svn_io_remove_file2(), except with @a ignore_enoent set to FALSE.
  *
  * @deprecated Provided for backwards compatibility with the 1.6 API.
  */
@@ -1392,6 +1397,7 @@ svn_io_get_dirents3(apr_hash_t **dirents
  * structures instead of svn_io_dirent2_t and with only a single pool.
  *
  * @since New in 1.3.
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  */
 SVN_DEPRECATED
 svn_error_t *
@@ -1839,7 +1845,11 @@ svn_io_stat(apr_finfo_t *finfo,
             apr_pool_t *pool);
 
 
-/** Wrapper for apr_file_rename().  @a from_path and @a to_path are
+/** Rename and/or move the node (not necessarily a regular file) at
+ * @a from_path to a new path @a to_path within the same filesystem.
+ * In some cases, an existing node at @a to_path will be overwritten.
+ *
+ * A wrapper for apr_file_rename().  @a from_path and @a to_path are
  * utf8-encoded.
  */
 svn_error_t *

Modified: subversion/branches/py-tests-as-modules/subversion/include/svn_mergeinfo.h
URL: http://svn.apache.org/viewvc/subversion/branches/py-tests-as-modules/subversion/include/svn_mergeinfo.h?rev=1031230&r1=1031229&r2=1031230&view=diff
==============================================================================
--- subversion/branches/py-tests-as-modules/subversion/include/svn_mergeinfo.h (original)
+++ subversion/branches/py-tests-as-modules/subversion/include/svn_mergeinfo.h Thu Nov  4 20:48:21 2010
@@ -226,7 +226,7 @@ svn_mergeinfo_catalog_merge(svn_mergeinf
 
 /** Like svn_mergeinfo_remove2, but always considers inheritance.
  *
- * @deprecated Provided for backward compatibility with the 1.5 API.
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  */
 SVN_DEPRECATED
 svn_error_t *
@@ -308,17 +308,6 @@ svn_rangelist_remove(apr_array_header_t 
                      svn_boolean_t consider_inheritance,
                      apr_pool_t *pool);
 
-/** Like svn_mergeinfo_intersect2, but always considers inheritance.
- *
- * @deprecated Provided for backward compatibility with the 1.5 API.
- */
-SVN_DEPRECATED
-svn_error_t *
-svn_mergeinfo_intersect(svn_mergeinfo_t *mergeinfo,
-                        svn_mergeinfo_t mergeinfo1,
-                        svn_mergeinfo_t mergeinfo2,
-                        apr_pool_t *pool);
-
 /** Find the intersection of two mergeinfos, @a mergeinfo1 and @a
  * mergeinfo2, and place the result in @a *mergeinfo, which is (deeply)
  * allocated in @a result_pool.  Temporary allocations will be performed
@@ -338,6 +327,17 @@ svn_mergeinfo_intersect2(svn_mergeinfo_t
                          apr_pool_t *result_pool,
                          apr_pool_t *scratch_pool);
 
+/** Like svn_mergeinfo_intersect2, but always considers inheritance.
+ *
+ * @deprecated Provided for backward compatibility with the 1.6 API.
+ */
+SVN_DEPRECATED
+svn_error_t *
+svn_mergeinfo_intersect(svn_mergeinfo_t *mergeinfo,
+                        svn_mergeinfo_t mergeinfo1,
+                        svn_mergeinfo_t mergeinfo2,
+                        apr_pool_t *pool);
+
 /** Find the intersection of two rangelists consisting of @c
  * svn_merge_range_t * elements, @a rangelist1 and @a rangelist2, and
  * place the result in @a *rangelist (which is never @c NULL).

Modified: subversion/branches/py-tests-as-modules/subversion/include/svn_opt.h
URL: http://svn.apache.org/viewvc/subversion/branches/py-tests-as-modules/subversion/include/svn_opt.h?rev=1031230&r1=1031229&r2=1031230&view=diff
==============================================================================
--- subversion/branches/py-tests-as-modules/subversion/include/svn_opt.h (original)
+++ subversion/branches/py-tests-as-modules/subversion/include/svn_opt.h Thu Nov  4 20:48:21 2010
@@ -292,6 +292,11 @@ svn_opt_format_option(const char **strin
  * command name or an alias.  ### @todo Why does this only print to
  * @c stdout, whereas svn_opt_print_generic_help() gives us a choice?
  *
+ * When printing the description of an option, if the same option code
+ * appears a second time in @a options_table with a different name, then
+ * use that second name as an alias for the first name.  This additional
+ * behaviour is new in 1.7.
+ *
  * @since New in 1.5.
  */
 void

Modified: subversion/branches/py-tests-as-modules/subversion/include/svn_ra.h
URL: http://svn.apache.org/viewvc/subversion/branches/py-tests-as-modules/subversion/include/svn_ra.h?rev=1031230&r1=1031229&r2=1031230&view=diff
==============================================================================
--- subversion/branches/py-tests-as-modules/subversion/include/svn_ra.h (original)
+++ subversion/branches/py-tests-as-modules/subversion/include/svn_ra.h Thu Nov  4 20:48:21 2010
@@ -682,6 +682,8 @@ svn_ra_reparent(svn_ra_session_t *ra_ses
 
 /** Set @a *url to the repository URL to which @a ra_session was
  * opened or most recently reparented.
+ *
+ * @since New in 1.5.
  */
 svn_error_t *
 svn_ra_get_session_url(svn_ra_session_t *ra_session,
@@ -746,12 +748,40 @@ svn_ra_get_dated_revision(svn_ra_session
  *
  * If @a value is @c NULL, delete the named revision property.
  *
+ * If the server advertises the #SVN_RA_CAPABILITY_ATOMIC_REVPROPS capability
+ * and @a old_value_p is not @c NULL, then changing the property will fail with
+ * an error chain that contains #SVN_ERR_FS_PROP_BASEVALUE_MISMATCH if the
+ * present value of the property is not @a *old_value_p.  (This is an atomic
+ * test-and-set).
+ * @a *old_value_p may be @c NULL, representing that the property must be not
+ * already set.
+ *
+ * If the capability is not advertised, then @a old_value_p MUST be @c NULL.
+ *
  * Please note that properties attached to revisions are @em unversioned.
  *
  * Use @a pool for memory allocation.
  *
+ * @see svn_fs_change_rev_prop2(), svn_error_has_cause().
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_ra_change_rev_prop2(svn_ra_session_t *session,
+                        svn_revnum_t rev,
+                        const char *name,
+                        const svn_string_t *const *old_value_p,
+                        const svn_string_t *value,
+                        apr_pool_t *pool);
+
+/**
+ * Similar to svn_ra_change_rev_prop2(), but with @a old_value_p set
+ * to @c NULL.
+ *
  * @since New in 1.2.
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_ra_change_rev_prop(svn_ra_session_t *session,
                        svn_revnum_t rev,
@@ -1913,6 +1943,14 @@ svn_ra_has_capability(svn_ra_session_t *
  */
 #define SVN_RA_CAPABILITY_COMMIT_REVPROPS "commit-revprops"
 
+/**
+ * The capability of specifying (and atomically verifying) expected
+ * preexisting values when modifying revprops.
+ *
+ * @since New in 1.7.
+ */
+#define SVN_RA_CAPABILITY_ATOMIC_REVPROPS "atomic-revprops"
+
 /*       *** PLEASE READ THIS IF YOU ADD A NEW CAPABILITY ***
  *
  * RA layers generally fetch all capabilities when asked about any

Modified: subversion/branches/py-tests-as-modules/subversion/include/svn_ra_svn.h
URL: http://svn.apache.org/viewvc/subversion/branches/py-tests-as-modules/subversion/include/svn_ra_svn.h?rev=1031230&r1=1031229&r2=1031230&view=diff
==============================================================================
--- subversion/branches/py-tests-as-modules/subversion/include/svn_ra_svn.h (original)
+++ subversion/branches/py-tests-as-modules/subversion/include/svn_ra_svn.h Thu Nov  4 20:48:21 2010
@@ -60,6 +60,8 @@ extern "C" {
 #define SVN_RA_SVN_CAP_LOG_REVPROPS "log-revprops"
 /* maps to SVN_RA_CAPABILITY_PARTIAL_REPLAY */
 #define SVN_RA_SVN_CAP_PARTIAL_REPLAY "partial-replay"
+/* maps to SVN_RA_CAPABILITY_ATOMIC_REVPROPS */
+#define SVN_RA_SVN_CAP_ATOMIC_REVPROPS "atomic-revprops"
 
 /** ra_svn passes @c svn_dirent_t fields over the wire as a list of
  * words, these are the values used to represent each field.