On the diff-callbacks3 branch, merge outstanding changes from trunk.

git-svn-id: https://svn.apache.org/repos/asf/subversion/branches/diff-callbacks3@870757 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/CHANGES b/CHANGES
index 3977b02..822e1df 100644
--- a/CHANGES
+++ b/CHANGES
@@ -42,6 +42,7 @@
     * 'svn merge FILE' now honors '--ignore-ancestry' (issue #2853, r25891)
     * 'svn merge' handles multiple notifications for single items (issue #2828)
     * 'svn merge' handles skipped path better (issue #2829)
+    * 'svn merge' handles merges from foreign repositories more completely
     * 'update', 'checkout', 'switch' now handle obstructions gracefully (r22257)
     * 'svn update' now takes '--force' (issue #2392)
     * 'svn update' now sometimes copies or moves local files, for efficiency
diff --git a/COMMITTERS b/COMMITTERS
index 128f9ee..7fc4523 100644
--- a/COMMITTERS
+++ b/COMMITTERS
@@ -125,7 +125,7 @@
        marcosc   Marcos Chaves <marcos.nospam@gmail.com>     (po: pt_BR)
         pynoos   Hojin Choi <hojin.choi@gmail.com>           (po: ko)
        blueboh   Jeong Seolin <blueboh@ahnlab.com>           (po: ko)
-        cauchy   Dongsheng Song <dongsheng.song@gmail.com>   (po: zh_CN)
+        cauchy   Dongsheng Song <songdongsheng@live.cn>      (po: zh_CN)
         hynnet   YingNing Huang <hyn@bao.hynnet.com>         (po: zh_CN)
           lark   Wang Jian <lark@linux.net.cn>               (po: zh_CN)
 giorgio_valoti   Giorgio Valoti <giorgio_v@mac.com>          (po: it)
diff --git a/INSTALL b/INSTALL
index 5fb3dd1..aa3fc02 100644
--- a/INSTALL
+++ b/INSTALL
@@ -208,20 +208,36 @@
         |     version of APR, but your Apache server is linked to a    | 
         |     different version, things will break and segfault.       |
         |                                                              |
-        | Subversion 1.0 originally shipped with APR 0.9.  Even        |
-        | though APR 1.X has been available for many years, we         |
-        | continue to ship APR 0.9 so as not to accidentally break     |
-        | binary compatibility in Subversion upgrades.                 |
+        | Subversion distribution dependencies:                        |
+        | -------------------------------------                        |
         |                                                              |
-        | However, it's *perfectly* safe to use APR 1.X from the       |
+        | For a long time, Subversion's main distribution contained    |
+        | APR and APR-UTIL (both 0.9.x), plus a few other things that  |
+        | we couldn't count on the installation system having.  But    |
+        | nowadays, Subversion's requirements are no longer exotic,    |
+        | and so our main distribution contains just the Subversion    |
+        | source code itself -- people compiling Subversion are        |
+        | expected to either have the APR libraries already installed  |
+        | on their system, or to be capable of fetching them easily.   |
+        |                                                              |
+        | For convenience, we still offer a "deps" distribution too,   |
+        | containing APR, APR-UTIL, and various other dependencies.    |
+        | The deps dist used to contain APR[-UTIL] 0.9.x, but as of    |
+        | 1.5.0 we are finally upgrading it to APR[-UTIL] 1.X.  This   |
+        | is because we think by now there are very few systems that   |
+        | will have binary compatibility issues, and of those, few are |
+        | likely to build using the "deps" dist.                       |
+        |                                                              |
+        | Note that it's *perfectly* safe to use APR 1.X from the      |
         | beginning.  In fact, we recommend it.  If you're building    |
         | Subversion for the first time, there's no compatibility      |
-        | issue to worry about, so grab the latest version of APR      |
-        | (rather than the 0.9.X version we distribute.)               |
+        | issue to worry about, so grab the latest version of APR (or  |
+        | just use our deps dist).                                     |
         |                                                              |
         | If you already have a Subversion installation using APR      |
         | 0.9.x, it's still possible to move to APR 1.X safely.  Just  |
-        | be sure to recompile Subversion after upgrading APR!         |
+        | be sure to recompile Subversion (and Apache httpd if         |
+        | necessary) after upgrading APR!                              |
         |______________________________________________________________|
 
 
diff --git a/Makefile.in b/Makefile.in
index fd71dea..690aa2e 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -315,7 +315,7 @@
 # clean all but bulky test output, returning to before './configure' was run.
 SVN_CONFIG_SCRIPT_FILES = @SVN_CONFIG_SCRIPT_FILES@
 fast-distclean: fast-clean
-	rm -f Makefile config.cache config.log config.status libtool \
+	rm -f Makefile config.cache config.log config.status libtool mkmf.log \
               subversion/svn_private_config.h \
               $(SVN_CONFIG_SCRIPT_FILES)
 
@@ -359,10 +359,6 @@
 	rm -f $(libsvnjavahl_PATH)/*.o
 
 check-javahl: javahl
-	@if [ -z "@JAVAHL_TESTS_TARGET@" ]; then \
-	  echo "--with-junit flag must be passed to configure"; \
-	  exit 1; \
-	fi
 	@FIX_JAVAHL_LIB@
 	$(JAVA) "-Dtest.rootdir=$(javahl_test_rootdir)" "-Dtest.fstype=$(FS_TYPE)" -Djava.library.path=@JAVAHL_OBJDIR@:$(libdir) -classpath $(javahl_tests_PATH):$(javahl_tests_CLASSPATH) "-Dtest.tests=$(JAVAHL_TESTS)" org.tigris.subversion.javahl.RunTests
 
diff --git a/build/ac-macros/neon.m4 b/build/ac-macros/neon.m4
index ae8ee8d..93c75d7 100644
--- a/build/ac-macros/neon.m4
+++ b/build/ac-macros/neon.m4
@@ -153,7 +153,10 @@
            test "$svn_allowed_neon" = "any"; then
             svn_allowed_neon_on_system="yes"
             SVN_NEON_INCLUDES=[`$neon_config --cflags | sed -e 's/-D[^ ]*//g'`]
-            NEON_LIBS=`$neon_config --la-file`
+            NEON_LIBS=`$neon_config --la-file 2>/dev/null`
+            if test -z "$NEON_LIBS"; then
+              NEON_LIBS=`$neon_config --libs 2>/dev/null`
+            fi
             CFLAGS=["$CFLAGS `$neon_config --cflags | sed -e 's/-I[^ ]*//g'`"]
             svn_lib_neon="yes"
             break
diff --git a/configure.ac b/configure.ac
index 184bf22..39e44ee 100644
--- a/configure.ac
+++ b/configure.ac
@@ -708,9 +708,7 @@
 AS_HELP_STRING([--with-junit=PATH],
                [Specify a path to the junit JAR file.]),
 [
-    if test "$withval" = "yes" ; then
-      AC_MSG_ERROR([--with-junit requires an argument.])
-    else
+    if test "$withval" != "no"; then
       if test -n "$JAVA_CLASSPATH"; then
         JAVA_CLASSPATH="$withval:$JAVA_CLASSPATH"
       else
diff --git a/contrib/server-side/mod_dontdothat/README b/contrib/server-side/mod_dontdothat/README
index e93c405..7bef9eb 100644
--- a/contrib/server-side/mod_dontdothat/README
+++ b/contrib/server-side/mod_dontdothat/README
@@ -20,6 +20,7 @@
   DAV svn
   SVNParentPath /path/to/repositories
   DontDoThatConfigFile /path/to/config.file
+  DontDoThatDisallowReplay off
 </Location>
 
 The file you give to DontDoThatConfigFile is a Subversion configuration file
@@ -47,3 +48,6 @@
 These rules are applied to any recursive action, which basically means any
 Subversion command that goes through the update-report, like update, diff,
 checkout, merge, etc.
+
+The DontDoThatDisallowReplay option makes mod_dontdothat disallow
+replay requests, wihch is on by default.
diff --git a/contrib/server-side/mod_dontdothat/mod_dontdothat.c b/contrib/server-side/mod_dontdothat/mod_dontdothat.c
index 1fd4bb3..b478e15 100644
--- a/contrib/server-side/mod_dontdothat/mod_dontdothat.c
+++ b/contrib/server-side/mod_dontdothat/mod_dontdothat.c
@@ -37,6 +37,7 @@
 typedef struct {
   const char *config_file;
   const char *base_path;
+  int no_replay;
 } dontdothat_config_rec;
 
 static void *create_dontdothat_dir_config(apr_pool_t *pool, char *dir)
@@ -44,6 +45,7 @@
   dontdothat_config_rec *cfg = apr_pcalloc(pool, sizeof(*cfg));
 
   cfg->base_path = dir;
+  cfg->no_replay = 1;
 
   return cfg;
 }
@@ -54,6 +56,9 @@
                 (void *) APR_OFFSETOF(dontdothat_config_rec, config_file),
                 OR_ALL,
                 "Text file containing actions to take for specific requests"),
+  AP_INIT_FLAG("DontDoThatDisallowReplay",  ap_set_flag_slot,
+                (void *) APR_OFFSETOF(dontdothat_config_rec, no_replay),
+                OR_ALL, "Disallow replay requests as if they are other recursive requests."),
   { NULL }
 };
 
@@ -365,7 +370,7 @@
       case STATE_BEGINNING:
         if (strcmp(name, "update-report") == 0)
           ctx->state = STATE_IN_UPDATE;
-        else if (strcmp(name, "replay-report") == 0)
+        else if (strcmp(name, "replay-report") == 0 && ctx->cfg->no_replay)
           {
             /* XXX it would be useful if there was a way to override this
              *     on a per-user basis... */
diff --git a/notes/tree-conflicts/policy.txt b/notes/tree-conflicts/policy.txt
new file mode 100644
index 0000000..1a63280
--- /dev/null
+++ b/notes/tree-conflicts/policy.txt
@@ -0,0 +1,172 @@
+Status of this file: In progress.
+
+
+BACKGROUND AND TERMINOLOGY
+==========================
+
+MERGE TRACKING
+--------------
+
+The merge tracking feature helps the client to determine which changes
+(revisions) to apply to the specified target tree. After that has been
+determined, the application of one change to one target is where conflict
+detection becomes involved. At this level, merge tracking is irrelevant.
+
+MERGE IS DIFF-AND-APPLY
+-----------------------
+
+Subversion's definition of "merging" is to determine the difference between two
+source trees SOURCE-LEFT and SOURCE-RIGHT, and try to apply that difference to
+a TARGET tree. The diff that it tries to apply is an arbitrary low-level
+representation of the overall difference between SOURCE-LEFT and SOURCE-RIGHT,
+not the series of logically meaningful transformations by which the user
+originally transformed SOURCE-LEFT into SOURCE-RIGHT.
+
+Typically, SOURCE-LEFT is an ancestor of SOURCE-RIGHT in a source branch, but
+this need not be so. (One effect of the "--ignore-ancestry" option is to force
+the merge to perform a detailed diff between the sources even if they are not
+so related, where it would otherwise present the diff as "delete SOURCE-LEFT;
+add SOURCE-RIGHT".)
+
+The differences are applied to a working copy of the TARGET tree (which may
+include some local modifications against its base).
+
+The degree of success of a merge depends on the degree to which the TARGET tree
+is similar enough to SOURCE-LEFT for Subversion to be able to match each file
+or directory involved in the diff to a corresponding file or directory in
+TARGET. This matching is done purely by path. Where this matching fails, the
+merge cannot apply that part of the diff. Some of these failures will be
+defined as "tree conflicts".
+
+
+USE CASES
+=========
+
+The use cases (in "use-cases.txt") illustrate some of the cases that are to be
+handled, but are not a complete set of requirements.
+
+The user-level requirements are presented in terms of user-interface actions.
+Note that the design is formulated and presented in terms of lower-level
+operations that do not include a "rename" operation.
+
+
+REQUIREMENTS
+============
+
+These requirements specify what a tree conflict means, how a tree conflict
+behaves, and under exactly what conditions a tree conflict is raised. These
+requirements are intended to apply in all merge, switch and update commands
+unless otherwise stated.
+
+DEFINITION OF A TREE CONFLICT
+-----------------------------
+
+A conflict is the condition that occurs when Subversion cannot apply a source
+change correctly and with certainty to a corresponding target object. A tree
+conflict is a kind of conflict that occurs due to a part of the TARGET tree
+being in some sense "incompatible" with the SOURCE-LEFT tree in kind, name,
+location, absence or presence.
+
+Every tree conflict shall be signaled both by an indication when the conflict
+occurs and by being marked in the WC in a way that shows up as a conflict in
+the "svn status" output.
+
+The state of conflict shall persist until the user confirms that it has been
+resolved. The user shall be able to confirm the resolution of each and every
+conflict individually, and shall also be able to confirm the resolution of all
+conflicts in a tree with a single command.
+
+Confirming the resolution of each and every tree conflict means being
+able to confirm the resolution of a tree conflict with a single tree conflict
+victim, even though there might be more than one tree conflict victim
+in a directory. A tree conflict victim is a file or directory in the tree
+which is affected by a tree conflict. For example, it might be a file
+which is deleted during an update operation while carrying local modifications,
+or it might be a file being blocked during a merge by an unversioned file of
+the same name. Each tree conflict has only a single victim.
+
+Every condition that results in the source diff not being fully applied to the
+target shall result in either a conflict or an error exit, with a strong
+preference for a conflict.
+
+CONSEQUENCES OF A TREE CONFLICT
+-------------------------------
+
+A commit shall be disallowed if any item considered as part of the commit is
+marked with a conflict (a tree conflict or any other conflict).
+
+A merge or switch or update shall be disallowed if it affects a part of the WC
+that is marked with a conflict.
+
+NON-REQUIREMENTS
+----------------
+
+It is desirable for a tree conflict to be resolved automatically (and thus not
+to be signaled as a conflict) when there is a way to do so that is clearly what
+the user wants. This might require some configurable rules. This is not
+presently a requirement.
+
+FAILURE TO GENERATE THE DIFF
+----------------------------
+
+When the diff cannot be completely determined due to read access restrictions
+in the source repository, tree conflicts shall be handled as defined herein for
+those parts of the diff that are determined. Rules for whether and how to
+proceed with an incomplete diff are out of scope of this tree-conflicts
+document.
+
+FAILURE TO APPLY THE DIFF
+-------------------------
+
+When a part of the diff should apply to a part of the WC that is switched, the
+rule for whether to apply the diff to this switched subtree or to the natural
+(unswitched) subtree or to both or to neither is out of scope of this
+tree-conflicts document, but tree conflict handling shall apply wherever the
+diff is applied.
+
+When a part of the diff cannot be applied, due to not finding a corresponding
+object or due to an unversioned item being present in the working copy at this
+path, a conflict is to be signaled. (Previously, in some cases a conflict was
+raised, in some cases a warning was issued, and in some cases the change was
+silently discarded.)
+
+When a part of the diff should apply to a part of the WC that is absent
+(perhaps due to authz restrictions or due to an intentionally sparse WC), a
+conflict shall be signaled. ###? This seems to be use case 4, right?
+
+LOCAL WC MODIFICATIONS
+----------------------
+
+Correct behaviour with local WC mods in TARGET is conceptually the same as if
+that uncommitted revision were just another committed revision. (Any necessary
+differences are to be detailed on delivery.) Correct behaviour with local mods
+is required for "update". For "switch" and "merge", correct behaviour with
+local mods is desired but not required for initial delivery.
+
+If there is already a conflict in a part of the WC that is to be affected by
+the merge, then the application of the merge shall be disallowed and no part of
+the WC shall be altered.
+
+### TODO: How can users use 'svn merge' to resolve a tree conflict?
+
+NON-CONFLICTS
+-------------
+
+When a file is to be deleted or renamed, there shall be a conflict unless the
+target file is identical to the SOURCE-LEFT file. Identical shall mean
+identical text and properties except for "svn:mergeinfo".
+
+When a directory is to be deleted or renamed, there shall be a conflict unless
+the target directory is identical to the SOURCE-LEFT directory. Identical shall
+mean identical properties except for "svn:mergeinfo", and an identical list of
+children (including their types), and recursively identical directory children
+and file children according to these definitions of "identical" for directories
+and for files respectively.
+
+### Is that last test (directory being identical) too expensive/impractical to
+calculate?
+
+### This is something I've also been thinking about - determining equality
+    of directories may turn out to be a major problem. Would requiring only
+    the direct children to be equal be an acceptable compromise?
+
diff --git a/subversion/bindings/javahl/native/EnumMapper.cpp b/subversion/bindings/javahl/native/EnumMapper.cpp
index 452749c..34f7a2d 100644
--- a/subversion/bindings/javahl/native/EnumMapper.cpp
+++ b/subversion/bindings/javahl/native/EnumMapper.cpp
@@ -158,6 +158,10 @@
       /* Got an add in an update. */
       return org_tigris_subversion_javahl_NotifyAction_update_add;
 
+    case svn_wc_notify_update_replace:
+      /* Got a replaced in an update. */
+      return org_tigris_subversion_javahl_NotifyAction_update_replaced;
+
     case svn_wc_notify_update_update:
       /* Got any other action in an update. */
       return org_tigris_subversion_javahl_NotifyAction_update_update;
@@ -223,10 +227,6 @@
       /* Changelist name cleared. */
       return org_tigris_subversion_javahl_NotifyAction_changelist_clear;
 
-    case svn_wc_notify_changelist_failed:
-      /* Changelist operation failed. */
-      return org_tigris_subversion_javahl_NotifyAction_changelist_failed;
-
     case svn_wc_notify_merge_begin:
       /* A merge operation has begun. */
       return org_tigris_subversion_javahl_NotifyAction_merge_begin;
diff --git a/subversion/bindings/javahl/native/SVNClient.cpp b/subversion/bindings/javahl/native/SVNClient.cpp
index 2412281..0579c15 100644
--- a/subversion/bindings/javahl/native/SVNClient.cpp
+++ b/subversion/bindings/javahl/native/SVNClient.cpp
@@ -732,6 +732,80 @@
                                              requestPool.pool()), );
 }
 
+jobject
+SVNClient::getMergeinfo(const char *target, Revision &pegRevision)
+{
+    Pool requestPool;
+    JNIEnv *env = JNIUtil::getEnv();
+
+    svn_client_ctx_t *ctx = getContext(NULL);
+    if (ctx == NULL)
+        return NULL;
+
+    svn_mergeinfo_t mergeinfo;
+    Path intLocalTarget(target);
+    SVN_JNI_ERR(intLocalTarget.error_occured(), NULL);
+    SVN_JNI_ERR(svn_client_mergeinfo_get_merged(&mergeinfo,
+                                                intLocalTarget.c_str(),
+                                                pegRevision.revision(), ctx,
+                                                requestPool.pool()),
+                NULL);
+    if (mergeinfo == NULL)
+        return NULL;
+
+    // Transform mergeinfo into Java Mergeinfo object.
+    jclass clazz = env->FindClass(JAVA_PACKAGE "/Mergeinfo");
+    if (JNIUtil::isJavaExceptionThrown())
+        return NULL;
+
+    static jmethodID ctor = 0;
+    if (ctor == 0)
+    {
+        ctor = env->GetMethodID(clazz, "<init>", "()V");
+        if (JNIUtil::isJavaExceptionThrown())
+            return NULL;
+    }
+
+    static jmethodID addRevisions = 0;
+    if (addRevisions == 0)
+    {
+        addRevisions = env->GetMethodID(clazz, "addRevisions",
+                                        "(Ljava/lang/String;"
+                                        "[L"JAVA_PACKAGE"/RevisionRange;)V");
+        if (JNIUtil::isJavaExceptionThrown())
+            return NULL;
+    }
+
+    jobject jmergeinfo = env->NewObject(clazz, ctor);
+    if (JNIUtil::isJavaExceptionThrown())
+        return NULL;
+
+    apr_hash_index_t *hi;
+    for (hi = apr_hash_first(requestPool.pool(), mergeinfo);
+         hi;
+         hi = apr_hash_next(hi))
+    {
+        const void *path;
+        void *val;
+        apr_hash_this(hi, &path, NULL, &val);
+
+        jstring jpath = JNIUtil::makeJString((const char *) path);
+        jobjectArray jranges =
+            makeJRevisionRangeArray((apr_array_header_t *) val);
+
+        env->CallVoidMethod(jmergeinfo, addRevisions, jpath, jranges);
+
+        env->DeleteLocalRef(jranges);
+        if (JNIUtil::isJavaExceptionThrown())
+            return NULL;
+        env->DeleteLocalRef(jpath);
+        if (JNIUtil::isJavaExceptionThrown())
+            return NULL;
+    }
+
+    return jmergeinfo;
+}
+
 void SVNClient::getMergeinfoLog(int type, const char *pathOrURL,
                                 Revision &pegRevision,
                                 const char *mergeSourceURL,
@@ -2146,3 +2220,34 @@
                                  changelists.array(requestPool), ctx,
                                  requestPool.pool()), );
 }
+
+jobjectArray SVNClient::makeJRevisionRangeArray(apr_array_header_t *ranges)
+{
+    JNIEnv *env = JNIUtil::getEnv();
+
+    jclass clazz = env->FindClass(JAVA_PACKAGE "/RevisionRange");
+    if (JNIUtil::isJavaExceptionThrown())
+        return NULL;
+
+    jobjectArray jranges = env->NewObjectArray(ranges->nelts, clazz, NULL);
+
+    for (int i = 0; i < ranges->nelts; ++i)
+    {
+        // Convert svn_merge_range_t *'s to Java RevisionRange objects.
+        svn_merge_range_t *range =
+            APR_ARRAY_IDX(ranges, i, svn_merge_range_t *);
+        jobject jrange = RevisionRange::makeJRevisionRange(range);
+        if (jrange == NULL)
+            return NULL;
+
+        env->SetObjectArrayElement(jranges, i, jrange);
+        if (JNIUtil::isJavaExceptionThrown())
+            return NULL;
+
+        env->DeleteLocalRef(jrange);
+        if (JNIUtil::isJavaExceptionThrown())
+            return NULL;
+    }
+
+    return jranges;
+}
diff --git a/subversion/bindings/javahl/native/SVNClient.h b/subversion/bindings/javahl/native/SVNClient.h
index 62add53..1d98aa3 100644
--- a/subversion/bindings/javahl/native/SVNClient.h
+++ b/subversion/bindings/javahl/native/SVNClient.h
@@ -88,6 +88,7 @@
   void properties(const char *path, Revision &revision,
                   Revision &pegRevision, svn_depth_t depth,
                   StringArray &changelists, ProplistCallback *callback);
+  jobject getMergeinfo(const char *target, Revision &pegRevision);
   void getMergeinfoLog(int type, const char *pathOrURL,
                        Revision &pegRevision, const char *mergeSourceURL,
                        Revision &srcPegREvision, bool discoverChangedPaths,
@@ -227,6 +228,8 @@
   bool m_cancelOperation;
   CommitMessage *m_commitMessage;
 
+  jobjectArray makeJRevisionRangeArray(apr_array_header_t *ranges);
+
   /**
    * Implements the svn_client_get_commit_log3_t API.
    */
diff --git a/subversion/bindings/javahl/native/org_tigris_subversion_javahl_SVNClient.cpp b/subversion/bindings/javahl/native/org_tigris_subversion_javahl_SVNClient.cpp
index a772671..3f49d1a 100644
--- a/subversion/bindings/javahl/native/org_tigris_subversion_javahl_SVNClient.cpp
+++ b/subversion/bindings/javahl/native/org_tigris_subversion_javahl_SVNClient.cpp
@@ -1077,6 +1077,26 @@
   return cl->propertyGet(jthis, path, name, revision, pegRevision);
 }
 
+JNIEXPORT jobject JNICALL
+Java_org_tigris_subversion_javahl_SVNClient_getMergeinfo
+(JNIEnv *env, jobject jthis, jstring jtarget, jobject jpegRevision)
+{
+  JNIEntry(SVNClient, getMergeinfo);
+  SVNClient *cl = SVNClient::getCppObject(jthis);
+  if (cl == NULL)
+    {
+      JNIUtil::throwError(_("bad C++ this"));
+      return NULL;
+    }
+  JNIStringHolder target(jtarget);
+  if (JNIUtil::isExceptionThrown())
+    return NULL;
+  Revision pegRevision(jpegRevision);
+  if (JNIUtil::isExceptionThrown())
+    return NULL;
+  return cl->getMergeinfo(target, pegRevision);
+}
+
 JNIEXPORT void JNICALL Java_org_tigris_subversion_javahl_SVNClient_getMergeinfoLog
 (JNIEnv *env, jobject jthis, jint jkind, jstring jpathOrUrl,
  jobject jpegRevision, jstring jmergeSourceUrl, jobject jsrcPegRevision,
diff --git a/subversion/bindings/javahl/src/org/tigris/subversion/javahl/Mergeinfo.java b/subversion/bindings/javahl/src/org/tigris/subversion/javahl/Mergeinfo.java
new file mode 100644
index 0000000..b5276a8
--- /dev/null
+++ b/subversion/bindings/javahl/src/org/tigris/subversion/javahl/Mergeinfo.java
@@ -0,0 +1,206 @@
+/**
+ * @copyright
+ * ====================================================================
+ * Copyright (c) 2007 CollabNet.  All rights reserved.
+ *
+ * This software is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution.  The terms
+ * are also available at http://subversion.tigris.org/license-1.html.
+ * If newer versions of this license are posted there, you may use a
+ * newer version instead, at your option.
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals.  For exact contribution history, see the revision
+ * history and logs, available at http://subversion.tigris.org/.
+ * ====================================================================
+ * @endcopyright
+ */
+
+package org.tigris.subversion.javahl;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.StringTokenizer;
+
+/**
+ * Merge history for a path.
+ *
+ * @since 1.5
+ */
+public class Mergeinfo implements java.io.Serializable
+{
+    // Update the serialVersionUID when there is a incompatible change
+    // made to this class.  See any of the following, depending upon
+    // the Java release.
+    // http://java.sun.com/j2se/1.3/docs/guide/serialization/spec/version.doc7.html
+    // http://java.sun.com/j2se/1.4/pdf/serial-spec.pdf
+    // http://java.sun.com/j2se/1.5.0/docs/guide/serialization/spec/version.html#6678
+    // http://java.sun.com/javase/6/docs/platform/serialization/spec/version.html#6678
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * A mapping of repository-relative paths to a list of revision
+     * ranges.
+     */
+    private Map mergeSources;
+
+    public Mergeinfo()
+    {
+        mergeSources = new HashMap();
+    }
+
+    /**
+     * Create and populate an instance using the contents of the
+     * <code>svn:mergeinfo</code> property.
+     * @param mergeinfo <code>svn:mergeinfo</code> property value.
+     */
+    public Mergeinfo(String mergeinfo)
+    {
+        this();
+        this.loadFromMergeinfoProperty(mergeinfo);
+    }
+
+    /**
+     * Add one or more RevisionRange objects to merge info. If the
+     * merge source is already stored, the list of revisions is
+     * replaced.
+     * @param mergeSrc The merge source URL.
+     * @param ranges RevisionRange objects to add.
+     * @throws SubversionException If range list contains objects of
+     * type other than RevisionRange.
+     */
+    public void addRevisions(String mergeSrc, RevisionRange[] ranges)
+    {
+        for (int i = 0; i < ranges.length; i++)
+            addRevisionRange(mergeSrc, ranges[i]);
+    }
+
+    /**
+     * Add a revision range to the merged revisions for a path.  If
+     * the merge source already has associated revision ranges, add
+     * the revision range to the existing list.
+     * @param mergeSrc The merge source URL.
+     * @param range The revision range to add.
+     */
+    public void addRevisionRange(String mergeSrc, RevisionRange range)
+    {
+        List revisions = this.getRevisions(mergeSrc);
+        if (revisions == null)
+            revisions = new ArrayList();
+        revisions.add(range);
+        this.setRevisionList(mergeSrc, revisions);
+    }
+
+    /**
+     * Get the merge source URLs.
+     * @return The merge source URLs.
+     */
+    public String[] getPaths()
+    {
+        Set pathSet = mergeSources.keySet();
+        if (pathSet == null)
+            return null;
+        return (String []) pathSet.toArray(new String[pathSet.size()]);
+    }
+
+    /**
+     * Get the revision ranges for the specified merge source URL.
+     * @param mergeSrc The merge source URL, or <code>null</code>.
+     * @return List of RevisionRange objects, or <code>null</code>.
+     */
+    public List getRevisions(String mergeSrc)
+    {
+        if (mergeSrc == null)
+            return null;
+        return (List) mergeSources.get(mergeSrc);
+    }
+
+    /**
+     * Get the RevisionRange objects for the specified merge source URL
+     * @param mergeSrc The merge source URL, or <code>null</code>.
+     * @return Array of RevisionRange objects, or <code>null</code>.
+     */
+    public RevisionRange[] getRevisionRange(String mergeSrc)
+    {
+        List revisions = this.getRevisions(mergeSrc);
+        if (revisions == null)
+            return null;
+        return (RevisionRange [])
+            revisions.toArray(new RevisionRange[revisions.size()]);
+    }
+
+    /**
+     * Parse the <code>svn:mergeinfo</code> property to populate the
+     * merge source URLs and revision ranges of this instance.
+     * @param mergeinfo <code>svn:mergeinfo</code> property value.
+     */
+    public void loadFromMergeinfoProperty(String mergeinfo)
+    {
+        if (mergeinfo == null)
+            return;
+        StringTokenizer st = new StringTokenizer(mergeinfo, "\n");
+        while (st.hasMoreTokens())
+        {
+            parseMergeinfoLine(st.nextToken());
+        }
+    }
+
+    /**
+     * Parse a merge source line from a <code>svn:mergeinfo</code>
+     * property value (e.g.
+     * <code>"/trunk:1-100,104,108,110-115"</code>).
+     *
+     * @param line A line of merge info for a single merge source.
+     */
+    private void parseMergeinfoLine(String line)
+    {
+        int colon = line.indexOf(':');
+        if (colon > 0)
+        {
+            String pathElement = line.substring(0, colon);
+            String revisions = line.substring(colon + 1);
+            parseRevisions(pathElement, revisions);
+        }
+    }
+
+    /**
+     * Parse the revisions in a merge info line into RevisionRange
+     * objects and adds each of them to the internal Map
+     * (e.g. <code>"1-100,104,108,110-115"</code>)
+     *
+     * @param path The merge source path.
+     * @param revisions A textual representation of the revision ranges.
+     */
+    private void parseRevisions(String path, String revisions)
+    {
+        List rangeList = this.getRevisions(path);
+        StringTokenizer st = new StringTokenizer(revisions, ",");
+        while (st.hasMoreTokens())
+        {
+            String revisionElement = st.nextToken();
+            RevisionRange range = new RevisionRange(revisionElement);
+            if (rangeList == null)
+                rangeList = new ArrayList();
+            rangeList.add(range);
+        }
+        if (rangeList != null)
+            setRevisionList(path, rangeList);
+    }
+
+
+    /**
+     * Add the List object to the map.  This method is only
+     * used internally where we know that List contains a
+     * type-safe set of RevisionRange objects.
+     * @param mergeSrc The merge source URL.
+     * @param range List of RevisionRange objects to add.
+     */
+    private void setRevisionList(String mergeSrc, List range)
+    {
+        mergeSources.put(mergeSrc, range);
+    }
+}
diff --git a/subversion/bindings/javahl/src/org/tigris/subversion/javahl/NotifyAction.java b/subversion/bindings/javahl/src/org/tigris/subversion/javahl/NotifyAction.java
index 688ebce..0ac99de 100644
--- a/subversion/bindings/javahl/src/org/tigris/subversion/javahl/NotifyAction.java
+++ b/subversion/bindings/javahl/src/org/tigris/subversion/javahl/NotifyAction.java
@@ -135,15 +135,15 @@
 
     /**
      * @since 1.5
-     * Changelist operation failed.
+     * A merge operation has begun.
      */
-    public static final int changelist_failed = 28;
+    public static final int merge_begin = 28;
 
     /**
      * @since 1.5
-     * A merge operation has begun.
+     * Got a replaced in an update.
      */
-    public static final int merge_begin = 29;
+    public static final int update_replaced = 29;
 
     /**
      * textual representation of the action types
@@ -178,7 +178,7 @@
         "path exists",
         "changelist set",
         "changelist cleared",
-        "changelist failed",
         "merge begin",
+        "replaced"
     };
 }
diff --git a/subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNClient.java b/subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNClient.java
index 1feefbe..2c4c719 100644
--- a/subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNClient.java
+++ b/subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNClient.java
@@ -772,6 +772,12 @@
     /**
      * @since 1.5
      */
+    public native Mergeinfo getMergeinfo(String path, Revision pegRevision)
+            throws SubversionException;
+
+    /**
+     * @since 1.5
+     */
     public native void getMergeinfoLog(int kind, String pathOrUrl,
                                        Revision pegRevision,
                                        String mergeSourceUrl,
diff --git a/subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNClientInterface.java b/subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNClientInterface.java
index a7ae44e..11251a4 100644
--- a/subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNClientInterface.java
+++ b/subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNClientInterface.java
@@ -1001,6 +1001,18 @@
              throws ClientException;
 
     /**
+     * Get mergeinfo for <code>path</code> at <code>pegRevision</code>.
+     * @param path WC path or URL.
+     * @param pegRevision peg revision at which to get the merge info for
+     * <code>path</code>.
+     * @return The merge history of <code>path</code>.
+     * @throws SubversionException
+     * @since 1.5
+     */
+    Mergeinfo getMergeinfo(String path, Revision pegRevision)
+        throws SubversionException;
+
+    /**
      * Retrieve either merged or eligible-to-be-merged revisions.
      * @param kind                   kind of revisions to receive
      * @param pathOrUrl              target of merge
diff --git a/subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNClientSynchronized.java b/subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNClientSynchronized.java
index f9ac3c6..90ccb44 100644
--- a/subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNClientSynchronized.java
+++ b/subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNClientSynchronized.java
@@ -1007,6 +1007,18 @@
     /**
      * @since 1.5
      */
+    public Mergeinfo getMergeinfo(String path, Revision pegRevision)
+        throws SubversionException
+    {
+        synchronized (clazz)
+        {
+            return worker.getMergeinfo(path, pegRevision);
+        }
+    }
+
+    /**
+     * @since 1.5
+     */
     public void getMergeinfoLog(int kind, String pathOrUrl,
                                 Revision pegRevision, String mergeSourceUrl,
                                 Revision srcPegRevision,
diff --git a/subversion/bindings/javahl/tests/org/tigris/subversion/javahl/BasicTests.java b/subversion/bindings/javahl/tests/org/tigris/subversion/javahl/BasicTests.java
index 8a83dcb..330f753 100644
--- a/subversion/bindings/javahl/tests/org/tigris/subversion/javahl/BasicTests.java
+++ b/subversion/bindings/javahl/tests/org/tigris/subversion/javahl/BasicTests.java
@@ -114,6 +114,28 @@
     }
 
     /**
+     * Tests Mergeinfo and RevisionRange classes.
+     * @since 1.5
+     */
+    public void testMergeinfoParser() throws Throwable
+    {
+        String mergeInfoPropertyValue =
+            "/trunk:1-300,305,307,400-405\n/branches/branch:308-400";
+        Mergeinfo info = new Mergeinfo(mergeInfoPropertyValue);
+        String[] paths = info.getPaths();
+        assertEquals(2, paths.length);
+        RevisionRange[] trunkRange = info.getRevisionRange("/trunk");
+        assertEquals(4, trunkRange.length);
+        assertEquals("1-300", trunkRange[0].toString());
+        assertEquals("305", trunkRange[1].toString());
+        assertEquals("307", trunkRange[2].toString());
+        assertEquals("400-405", trunkRange[3].toString());
+        RevisionRange[] branchRange =
+            info.getRevisionRange("/branches/branch");
+        assertEquals(1, branchRange.length);
+    }
+
+    /**
      * Test the basic SVNClient.status functionality.
      * @throws Throwable
      */
@@ -2111,10 +2133,15 @@
      * Helper method for testing mergeinfo retrieval.  Assumes
      * that <code>targetPath</code> has both merge history and
      * available merges.
-     * @param expectedMergedRevs The expected revision ranges from the
+     * @param expectedMergedStart The expected start revision from the
      * merge history for <code>mergeSrc</code>.
-     * @param expectedAvailableRevs The expected available revision
-     * ranges from the available merges for <code>mergeSrc</code>.
+     * @param expectedMergedEnd The expected end revision from the
+     * merge history for <code>mergeSrc</code>.
+     * @param expectedAvailableStart The expected start available revision
+     * from the merge history for <code>mergeSrc</code>.  Zero if no need
+     * to test the available range.
+     * @param expectedAvailableEnd The expected end available revision
+     * from the merge history for <code>mergeSrc</code>.
      * @param targetPath The path for which to acquire mergeinfo.
      * @param mergeSrc The URL from which to consider merges.
      */
@@ -2127,12 +2154,17 @@
         throws SubversionException
     {
         // Verify expected merge history.
-        long[] revs = getMergeinfoRevisions(MergeinfoLogKind.merged, targetPath,
-                Revision.HEAD, mergeSrc, Revision.HEAD);
+        Mergeinfo mergeInfo = client.getMergeinfo(targetPath, Revision.HEAD);
         assertNotNull("Missing merge info on '" + targetPath + '\'',
-                      revs);
-
-        assertExpectedMergeRange(expectedMergeStart, expectedMergeEnd, revs);
+                      mergeInfo);
+        List ranges = mergeInfo.getRevisions(mergeSrc);
+        assertTrue("Missing merge info for source '" + mergeSrc + "' on '" +
+                   targetPath + '\'', ranges != null && !ranges.isEmpty());
+        RevisionRange range = (RevisionRange) ranges.get(0);
+        String expectedMergedRevs = expectedMergeStart + "-" + expectedMergeEnd;
+        assertEquals("Unexpected first merged revision range for '" +
+                     mergeSrc + "' on '" + targetPath + '\'',
+                     expectedMergedRevs, range.toString());
 
         // Verify expected available merges.
         if (expectedAvailableStart > 0)
@@ -2222,21 +2254,6 @@
     }
 
     /**
-     * Retrieve svn:mergeinfo property from path.  This is used as just
-     * a sanity check for the presence of the property.
-     * @since 1.5
-     */
-    private String getMergeinfo(File path, Revision rev) {
-        try {
-            PropertyData prop = client.propertyGet(fileToSVNPath(path, false), "svn:mergeinfo", rev);
-            if (prop == null) return null;
-            else return prop.getValue();
-        } catch (ClientException e) {
-            return null;
-        }
-    }
-    
-    /**
      * Test the basic functionality of SVNClient.merge().
      * @throws Throwable
      * @since 1.2
@@ -2253,7 +2270,8 @@
         assertEquals(1, suggestedSrcs.length);
 
         // Test that getMergeinfo() returns null.
-        assertNull(getMergeinfo(new File(thisTest.getWCPath(), "A"), Revision.HEAD));
+        assertNull(client.getMergeinfo(new File(thisTest.getWCPath(), "A")
+                                       .toString(), Revision.HEAD));
 
         // Merge and commit some changes (r4).
         appendText(thisTest, "A/mu", "xxx", 4);
@@ -2324,8 +2342,11 @@
         String targetPath =
             new File(thisTest.getWCPath(), "branches/A/mu").getPath();
         final String mergeSrc = thisTest.getUrl() + "/A/mu";
-        acquireMergeinfoAndAssertEquals(4, 4, 6, 6, targetPath, mergeSrc);
+        acquireMergeinfoAndAssertEquals(2, 4, 6, 6, targetPath, mergeSrc);
 
+        // Test retrieval of mergeinfo from the repository.
+        targetPath = thisTest.getUrl() + "/branches/A/mu";
+        acquireMergeinfoAndAssertEquals(2, 4, 6, 6, targetPath, mergeSrc);
     }
 
     /**
@@ -2338,9 +2359,9 @@
     {
         OneTest thisTest = setupAndPerformMerge();
 
-        // Test that svn:mergeinfo returns null.
-        assertNull(getMergeinfo(new File(thisTest.getWCPath(), "A"),
-                                Revision.HEAD));
+        // Test that getMergeinfo() returns null.
+        assertNull(client.getMergeinfo(new File(thisTest.getWCPath(), "A")
+                                       .toString(), Revision.HEAD));
 
         // Merge and commit some changes (r4).
         appendText(thisTest, "A/mu", "xxx", 4);
@@ -2378,8 +2399,9 @@
     {
         OneTest thisTest = setupAndPerformMerge();
 
-        // Test that svn:mergeinfo returns null.
-        assertNull(getMergeinfo(new File(thisTest.getWCPath(), "A"), Revision.HEAD));
+        // Test that getMergeinfo() returns null.
+        assertNull(client.getMergeinfo(new File(thisTest.getWCPath(), "A")
+                                       .toString(), Revision.HEAD));
 
         // Merge and commit some changes to main (r4).
         appendText(thisTest, "A/mu", "xxx", 4);
@@ -2506,8 +2528,9 @@
         assertNotNull(suggestedSrcs);
         assertEquals(1, suggestedSrcs.length);
 
-        // Test that svn:mergeinfo returns null.
-        assertNull(getMergeinfo(new File(thisTest.getWCPath(), "A"), Revision.HEAD));
+        // Test that getMergeinfo() returns null.
+        assertNull(client.getMergeinfo(new File(thisTest.getWCPath(), "A")
+                                       .toString(), Revision.HEAD));
 
         // Merge and commit some changes (r4).
         appendText(thisTest, "A/mu", "xxx", 4);
@@ -2539,7 +2562,7 @@
         String targetPath =
             new File(thisTest.getWCPath(), "branches/A").getPath();
         final String mergeSrc = thisTest.getUrl() + "/A";
-        acquireMergeinfoAndAssertEquals(4, 4, 0, 0, targetPath, mergeSrc);
+        acquireMergeinfoAndAssertEquals(2, 4, 0, 0, targetPath, mergeSrc);
     }
 
     /**
diff --git a/subversion/bindings/swig/core.i b/subversion/bindings/swig/core.i
index 9101170..c97f448 100644
--- a/subversion/bindings/swig/core.i
+++ b/subversion/bindings/swig/core.i
@@ -294,7 +294,6 @@
 #endif
 
 /* -----------------------------------------------------------------------
-/* -----------------------------------------------------------------------
    output mergeinfo hash
 */
 
@@ -430,15 +429,32 @@
 
 /* set */
 #ifdef SWIGPYTHON
-%typemap(in) const void *value {
+%typemap(in) const void *value 
+  (apr_pool_t *_global_pool = NULL, PyObject *_global_py_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;
+    }
+
     if (PyString_Check($input)) {
-        $1 = (void *)PyString_AS_STRING($input);
+        char *value = PyString_AS_STRING($input);
+        $1 = apr_pstrdup(_global_pool, value);
     }
     else if (PyLong_Check($input)) {
-        $1 = (void *)PyLong_AsLong($input);
+        $1 = apr_palloc(_global_pool, sizeof(apr_uint32_t));
+        *((apr_uint32_t *)$1) = PyLong_AsLong($input);
     }
     else if (PyInt_Check($input)) {
-        $1 = (void *)PyInt_AsLong($input);
+        $1 = apr_palloc(_global_pool, sizeof(apr_uint32_t));
+        *((apr_uint32_t *)$1) = PyInt_AsLong($input);
+    }
+    else if ($input == Py_None) {
+        $1 = NULL;
+    }
+    else if (svn_swig_ConvertPtr($input, (void **)&$1, $descriptor(svn_auth_ssl_server_cert_info_t *)) == 0) {
     }
     else {
         PyErr_SetString(PyExc_TypeError, "not a known type");
diff --git a/subversion/bindings/swig/include/svn_containers.swg b/subversion/bindings/swig/include/svn_containers.swg
index 5c148e3..0e3feb4 100644
--- a/subversion/bindings/swig/include/svn_containers.swg
+++ b/subversion/bindings/swig/include/svn_containers.swg
@@ -229,6 +229,11 @@
     svn_swig_rb_pop_pool(_global_svn_swig_rb_pool);
   }
 }
+
+%typemap(out) apr_hash_t *PROPHASH
+{
+  %append_output(svn_swig_rb_apr_hash_to_hash_svn_string($1));
+}
 #endif
 
 #if defined(SWIGPYTHON) || defined(SWIGRUBY)
@@ -242,6 +247,20 @@
 };
 #endif
 
+#ifdef SWIGRUBY
+%typemap(out) apr_hash_t *CHANGED_PATH_HASH
+{
+  VALUE rb_changed_path_hash;
+  rb_changed_path_hash =
+    svn_swig_rb_apr_hash_to_hash_swig_type($1, "svn_log_changed_path_t *");
+  %append_output(rb_changed_path_hash);
+}
+
+%apply apr_hash_t *CHANGED_PATH_HASH {
+  apr_hash_t *changed_paths
+};
+#endif
+
 /* -----------------------------------------------------------------------
    Input of scripting hash/dictionary (string => string)
    converted to apr_hash_t (const char * => const char *)
@@ -500,6 +519,12 @@
   apr_array_header_t *preserved_exts
 };
 
+#ifdef SWIGRUBY
+%apply const apr_array_header_t *STRINGLIST_MAY_BE_NULL {
+  apr_array_header_t *revprops
+};
+#endif
+
 /* -----------------------------------------------------------------------
    auth provider convertors
 */
diff --git a/subversion/bindings/swig/include/svn_types.swg b/subversion/bindings/swig/include/svn_types.swg
index 6bad8c9..7c22d1c 100644
--- a/subversion/bindings/swig/include/svn_types.swg
+++ b/subversion/bindings/swig/include/svn_types.swg
@@ -731,6 +731,14 @@
 }
 #endif
 
+#ifdef SWIGRUBY
+%typemap(in) (svn_log_entry_receiver_t receiver, void *receiver_baton)
+{
+  $1 = svn_swig_rb_log_entry_receiver;
+  $2 = (void *)svn_swig_rb_make_baton($input, _global_svn_swig_rb_pool);
+}
+#endif
+
 /* -----------------------------------------------------------------------
    Callback: svn_commit_callback_t
    svn_ra get_commit_editor()
diff --git a/subversion/bindings/swig/python/svn/core.py b/subversion/bindings/swig/python/svn/core.py
index 7e61534..b70c116 100644
--- a/subversion/bindings/swig/python/svn/core.py
+++ b/subversion/bindings/swig/python/svn/core.py
@@ -37,15 +37,10 @@
     """
     # Be compatible with pre-1.5 .args behavior:
     args = []
-    if message is None:
-      # SubversionException().args => ()
-      pass
-    else:
-      # SubversionException('message').args => ('message',)
-      args.append(message)
-      if apr_err is not None:
-        # SubversionException('message', 123) => ('message', 123)
-        args.append(apr_err)
+    if message is not None or apr_err is not None:
+        args.append(message)
+        if apr_err is not None:
+            args.append(apr_err)
     Exception.__init__(self, *args)
 
     self.apr_err = apr_err
diff --git a/subversion/bindings/swig/python/tests/auth.py b/subversion/bindings/swig/python/tests/auth.py
index cc436b2..ae9a2de 100644
--- a/subversion/bindings/swig/python/tests/auth.py
+++ b/subversion/bindings/swig/python/tests/auth.py
@@ -12,6 +12,10 @@
   def test_set_parameter(self):
     baton = core.svn_auth_open([])
     core.svn_auth_set_parameter(baton, "name", "somedata")
+    core.svn_auth_set_parameter(baton, "name", None)
+    core.svn_auth_set_parameter(baton, "name", 2)
+    core.svn_auth_set_parameter(baton, "name", 
+                                core.svn_auth_ssl_server_cert_info_t())
 
   def test_invalid_cred_kind(self):
     baton = core.svn_auth_open([])
@@ -68,6 +72,23 @@
                 core.SVN_AUTH_CRED_SSL_CLIENT_CERT_PW, "somerealm", baton)
     self.assert_(creds is not None)
 
+  def test_credentials_get_ssl_server_trust(self):
+    def myfunc(realm, failures, cert_info, may_save, pool):
+      self.assertEquals("somerealm", realm)
+      ssl_trust = core.svn_auth_cred_ssl_server_trust_t()
+      ssl_trust.accepted_failures = 0
+      ssl_trust.may_save = False
+      return ssl_trust
+    baton = core.svn_auth_open([core.svn_auth_get_ssl_server_trust_prompt_provider(myfunc)])
+    core.svn_auth_set_parameter(baton, core.SVN_AUTH_PARAM_SSL_SERVER_FAILURES,
+                                "2")
+    cert_info = core.svn_auth_ssl_server_cert_info_t()
+    core.svn_auth_set_parameter(baton, core.SVN_AUTH_PARAM_SSL_SERVER_CERT_INFO,
+                cert_info)
+    creds = core.svn_auth_first_credentials(
+                core.SVN_AUTH_CRED_SSL_SERVER_TRUST, "somerealm", baton)
+    self.assert_(creds is not None)
+
 def suite():
     return unittest.makeSuite(SubversionAuthTestCase, 'test')
 
diff --git a/subversion/bindings/swig/python/tests/core.py b/subversion/bindings/swig/python/tests/core.py
index 620bead..00a2ba2 100644
--- a/subversion/bindings/swig/python/tests/core.py
+++ b/subversion/bindings/swig/python/tests/core.py
@@ -9,6 +9,7 @@
     self.assertEqual(svn.core.SubversionException().args, ())
     self.assertEqual(svn.core.SubversionException('error message').args,
                      ('error message',))
+    self.assertEqual(svn.core.SubversionException(None, 1).args, (None, 1))
     self.assertEqual(svn.core.SubversionException('error message', 1).args,
                      ('error message', 1))
     self.assertEqual(svn.core.SubversionException('error message', 1).apr_err,
diff --git a/subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.c b/subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.c
index 4c5b133..8abbb09 100644
--- a/subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.c
+++ b/subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.c
@@ -1,4 +1,4 @@
-
+/* -*- c-file-style: "ruby" -*- */
 /* Tell swigutil_rb.h that we're inside the implementation */
 #define SVN_SWIG_SWIGUTIL_RB_C
 
@@ -2056,6 +2056,29 @@
   return err;
 }
 
+svn_error_t *
+svn_swig_rb_log_entry_receiver(void *baton,
+                               svn_log_entry_t *entry,
+                               apr_pool_t *pool)
+{
+    svn_error_t *err = SVN_NO_ERROR;
+    VALUE proc, rb_pool;
+
+    svn_swig_rb_from_baton((VALUE)baton, &proc, &rb_pool);
+
+    if (!NIL_P(proc)) {
+        callback_baton_t cbb;
+
+        cbb.receiver = proc;
+        cbb.message = id_call;
+        cbb.args = rb_ary_new3(1,
+                               c2r_swig_type((void *)entry,
+                                             (void *)"svn_log_entry_t *"));
+        invoke_callback_handle_error((VALUE)(&cbb), rb_pool, &err);
+    }
+    return err;
+}
+
 
 svn_error_t *
 svn_swig_rb_repos_authz_func(svn_boolean_t *allowed,
@@ -2188,9 +2211,6 @@
     cbb.args = rb_ary_new3(1, c2r_wc_notify__dup(notify));
   }
 
-  if (notify->err)
-    svn_error_clear(notify->err);
-
   if (!NIL_P(proc))
     invoke_callback((VALUE)(&cbb), rb_pool);
 }
diff --git a/subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.h b/subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.h
index ec58647..f2989cf 100644
--- a/subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.h
+++ b/subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.h
@@ -196,6 +196,11 @@
                                       apr_pool_t *pool);
 
 SVN_RB_SWIG_SWIGUTIL_EXPORT
+svn_error_t *svn_swig_rb_log_entry_receiver(void *baton,
+                                            svn_log_entry_t *entry,
+                                            apr_pool_t *pool);
+
+SVN_RB_SWIG_SWIGUTIL_EXPORT
 svn_error_t *svn_swig_rb_repos_authz_func(svn_boolean_t *allowed,
                                           svn_fs_root_t *root,
                                           const char *path,
diff --git a/subversion/bindings/swig/ruby/svn/client.rb b/subversion/bindings/swig/ruby/svn/client.rb
index c22d546..d5baf3e 100644
--- a/subversion/bindings/swig/ruby/svn/client.rb
+++ b/subversion/bindings/swig/ruby/svn/client.rb
@@ -591,12 +591,24 @@
         Client.get_config(self)
       end
 
-      def mergeinfo(path_or_url, revision=nil)
-        info = Client.mergeinfo_get_merged(path_or_url, revision, self)
+      def merged(path_or_url, peg_revision=nil)
+        info = Client.mergeinfo_get_merged(path_or_url, peg_revision, self)
         return nil if info.nil?
         Core::MergeInfo.new(info)
       end
 
+      def log_merged(path_or_url, peg_revision, merge_source_url,
+                     source_peg_revision, discover_changed_path=true,
+                     interested_revision_prop_names=nil,
+                     &receiver)
+        raise ArgumentError, "Block isn't given" if receiver.nil?
+        Client.mergeinfo_log_merged(path_or_url, peg_revision,
+                                    merge_source_url, source_peg_revision,
+                                    receiver, discover_changed_path,
+                                    interested_revision_prop_names,
+                                    self)
+      end
+
       def add_to_changelist(changelist_name, paths, depth=nil, changelists_names=nil)
         paths = [paths] unless paths.is_a?(Array)
         changelists_names = [changelists_names] unless changelists_names.is_a?(Array) or changelists_names.nil?
diff --git a/subversion/bindings/swig/ruby/svn/core.rb b/subversion/bindings/swig/ruby/svn/core.rb
index 2ef9e60..bab0f14 100644
--- a/subversion/bindings/swig/ruby/svn/core.rb
+++ b/subversion/bindings/swig/ruby/svn/core.rb
@@ -802,5 +802,11 @@
         Core.rangelist_to_string(self)
       end
     end
+
+    class LogEntry
+      alias_method(:revision_properties, :revprops)
+      alias_method(:has_children?, :has_children)
+      undef_method(:has_children)
+    end
   end
 end
diff --git a/subversion/bindings/swig/ruby/test/my-assertions.rb b/subversion/bindings/swig/ruby/test/my-assertions.rb
index d74e456..211b224 100644
--- a/subversion/bindings/swig/ruby/test/my-assertions.rb
+++ b/subversion/bindings/swig/ruby/test/my-assertions.rb
@@ -24,6 +24,25 @@
                        message)
         end
       end
+
+      def assert_equal_log_entries(expected, actual, message=nil)
+        _wrap_assertion do
+          actual = actual.collect do |entry|
+            changed_paths = entry.changed_paths
+            changed_paths.each_key do |path|
+              changed_path = changed_paths[path]
+              changed_paths[path] = [changed_path.action,
+                                     changed_path.copyfrom_path,
+                                     changed_path.copyfrom_rev]
+            end
+            [changed_paths,
+             entry.revision,
+             entry.revision_properties.reject {|key, value| key == "svn:date"},
+             entry.has_children?]
+          end
+          assert_equal(expected, actual, message)
+        end
+      end
     end
   end
 end
diff --git a/subversion/bindings/swig/ruby/test/test_client.rb b/subversion/bindings/swig/ruby/test/test_client.rb
index 2084d37..fb2f9e8 100644
--- a/subversion/bindings/swig/ruby/test/test_client.rb
+++ b/subversion/bindings/swig/ruby/test/test_client.rb
@@ -850,14 +850,19 @@
     assert_equal([[false, true, false, false]], node_kinds)
   end
 
-  def test_merge
+  def assert_merge
     log = "sample log"
     file = "sample.txt"
     src = "sample\n"
     trunk = File.join(@wc_path, "trunk")
     branch = File.join(@wc_path, "branch")
+    branch_relative_uri = "/branch"
+    branch_uri = "#{@repos_uri}#{branch_relative_uri}"
     trunk_path = File.join(trunk, file)
+    trunk_path_uri = "#{@repos_uri}/trunk/#{file}"
     branch_path = File.join(branch, file)
+    branch_path_relative_uri = "#{branch_relative_uri}/#{file}"
+    branch_path_uri = "#{@repos_uri}#{branch_path_relative_uri}"
 
     ctx = make_context(log)
     ctx.mkdir(trunk, branch)
@@ -870,13 +875,36 @@
     File.open(branch_path, "w") {|f| f.print(src)}
     rev2 = ctx.commit(@wc_path).revision
 
-    assert_nil(ctx.mergeinfo(trunk))
-    ctx.merge(branch, rev1, branch, rev2, trunk)
-    mergeinfo = ctx.mergeinfo(trunk)
-    expected_key = ctx.url_from_path(branch)
-    assert_equal([expected_key], mergeinfo.keys)
-    assert_equal([[1, 2, true]],
-                 mergeinfo[expected_key].collect {|range| range.to_a})
+    merged_entries = []
+    ctx.log_merged(trunk, nil, branch_uri, nil) do |entry|
+      merged_entries << entry
+    end
+    assert_equal_log_entries([], merged_entries)
+    assert_nil(ctx.merged(trunk))
+
+    merged_entries = []
+    yield(ctx, branch, rev1, rev2, trunk)
+    ctx.log_merged(trunk, nil, branch_uri, nil) do |entry|
+      merged_entries << entry
+    end
+    assert_equal_log_entries([
+                              [
+                               {branch_path_relative_uri => ["M", nil, -1]},
+                               rev2,
+                               {
+                                 "svn:author" => @author,
+                                 "svn:log" => log,
+                               },
+                               false,
+                              ]
+                             ],
+                             merged_entries)
+    mergeinfo = ctx.merged(trunk)
+    assert_not_nil(mergeinfo)
+    assert_equal([branch_uri], mergeinfo.keys)
+    ranges = mergeinfo[branch_uri].collect {|range| range.to_a}
+    assert_equal([[1, 2, true]], ranges)
+
     rev3 = ctx.commit(@wc_path).revision
 
     assert_equal(normalize_line_break(src), ctx.cat(trunk_path, rev3))
@@ -884,90 +912,64 @@
     ctx.rm(branch_path)
     rev4 = ctx.commit(@wc_path).revision
 
-    ctx.merge(branch, rev3, branch, rev4, trunk)
+    yield(ctx, branch, rev3, rev4, trunk)
     assert(!File.exist?(trunk_path))
 
-    mergeinfo = ctx.mergeinfo(trunk, rev4)
-    assert_equal([expected_key], mergeinfo.keys)
-    assert_equal([[1, 2, true], [3, 4, true]],
-                 mergeinfo[expected_key].collect {|range| range.to_a })
-    ctx.propdel("svn:mergeinfo", trunk)
-    assert_nil ctx.mergeinfo(trunk)
+    merged_entries = []
+    ctx.log_merged(trunk, rev4, branch_uri, rev4) do |entry|
+      merged_entries << entry
+    end
+    assert_equal_log_entries([
+                              [
+                               {branch_path_relative_uri => ["D", nil, -1]},
+                               rev4,
+                               {
+                                 "svn:author" => @author,
+                                 "svn:log" => log,
+                               },
+                               false,
+                              ]
+                             ] * 2, merged_entries)
 
+    ctx.propdel("svn:mergeinfo", trunk)
+    merged_entries = []
+    ctx.log_merged(trunk, rev4, branch_uri, rev4) do |entry|
+      merged_entries << entry
+    end
+    assert_equal_log_entries([], merged_entries)
+
+    ctx.revert(trunk)
     ctx.revert(trunk_path)
     File.open(trunk_path, "a") {|f| f.print(src)}
-    ctx.merge(branch, rev3, branch, rev4, trunk)
-    assert(File.exist?(trunk_path))
+    yield(ctx, branch, rev3, rev4, trunk)
     rev5 = ctx.commit(@wc_path).revision
-
-    File.open(trunk_path, "a") {|f| f.print(src)}
-    ctx.merge(branch, rev3, branch, rev4, trunk, true, false, true, true)
     assert(File.exist?(trunk_path))
 
-    ctx.merge(branch, rev3, branch, rev4, trunk, true, false, true)
-    rev6 = ctx.commit(@wc_path).revision
+    yield(ctx, branch, rev3, rev4, trunk, nil, false, true, true)
+    statuses = []
+    ctx.status(trunk) do |path, status|
+      statuses << status
+    end
+    assert_equal([], statuses)
 
-    assert(!File.exist?(trunk_path))
+    yield(ctx, branch, rev3, rev4, trunk, nil, false, true)
+    statuses = []
+    ctx.status(trunk) do |path, status|
+      statuses << status
+    end
+    assert_not_equal([], statuses)
+  end
+
+  def test_merge
+    assert_merge do |ctx, from, from_rev1, from_rev2, to, *rest|
+      ctx.merge(from, from_rev1, from, from_rev2, to, *rest)
+    end
   end
 
   def test_merge_peg
-    log = "sample log"
-    file = "sample.txt"
-    src = "sample\n"
-    trunk = File.join(@wc_path, "trunk")
-    branch = File.join(@wc_path, "branch")
-    trunk_path = File.join(trunk, file)
-    branch_path = File.join(branch, file)
-
-    ctx = make_context(log)
-    ctx.mkdir(trunk, branch)
-    File.open(trunk_path, "w") {}
-    File.open(branch_path, "w") {}
-    ctx.add(trunk_path)
-    ctx.add(branch_path)
-    rev1 = ctx.commit(@wc_path).revision
-
-    File.open(branch_path, "w") {|f| f.print(src)}
-    rev2 = ctx.commit(@wc_path).revision
-
-    assert_nil(ctx.mergeinfo(trunk))
-    ctx.merge_peg(branch, rev1, rev2, trunk)
-    mergeinfo = ctx.mergeinfo(trunk)
-    expected_key = ctx.url_from_path(branch)
-    assert_equal([expected_key], mergeinfo.keys)
-    assert_equal([[1, 2, true]],
-                 mergeinfo[expected_key].collect {|range| range.to_a})
-    rev3 = ctx.commit(@wc_path).revision
-
-    assert_equal(normalize_line_break(src), ctx.cat(trunk_path, rev3))
-
-    ctx.rm(branch_path)
-    rev4 = ctx.commit(@wc_path).revision
-
-    ctx.merge_peg(branch, rev3, rev4, trunk)
-    assert(!File.exist?(trunk_path))
-
-    mergeinfo = ctx.mergeinfo(trunk, rev4)
-    assert_equal([expected_key], mergeinfo.keys)
-    assert_equal([[1, 2, true], [3, 4, true]],
-                 mergeinfo[expected_key].collect {|range| range.to_a })
-    ctx.propdel("svn:mergeinfo", trunk)
-    assert_nil(ctx.mergeinfo(trunk))
-
-    ctx.revert(trunk_path)
-    File.open(trunk_path, "a") {|f| f.print(src)}
-    ctx.merge_peg(branch, rev3, rev4, trunk)
-    assert(File.exist?(trunk_path))
-    rev5 = ctx.commit(@wc_path).revision
-
-    File.open(trunk_path, "a") {|f| f.print(src)}
-    ctx.merge_peg(branch, rev3, rev4, trunk, nil, true, false, true, true)
-    assert(File.exist?(trunk_path))
-
-    ctx.merge_peg(branch, rev3, rev4, trunk, nil, true, false, true)
-    rev6 = ctx.commit(@wc_path).revision
-
-    assert(!File.exist?(trunk_path))
+    assert_merge do |ctx, from, from_rev1, from_rev2, to, *rest|
+      ctx.merge_peg(from, from_rev1, from_rev2, to, nil, *rest)
+    end
   end
 
   def test_cleanup
diff --git a/subversion/bindings/swig/svn_repos.i b/subversion/bindings/swig/svn_repos.i
index f0f9c5e..6adcd93 100644
--- a/subversion/bindings/swig/svn_repos.i
+++ b/subversion/bindings/swig/svn_repos.i
@@ -70,6 +70,13 @@
                             svn_swig_pl_thunk_authz_func,
                             svn_swig_rb_repos_authz_func)
 
+#ifdef SWIGPYTHON
+%callback_typemap(svn_location_segment_receiver_t receiver, void *receiver_baton,
+                  svn_swig_py_location_segment_receiver_func,
+                  ,
+                  )
+#endif
+
 #ifdef SWIGRUBY
 %typemap(in) (svn_error_t *(*start_callback)(void *), void *start_callback_baton)
 {
diff --git a/subversion/include/svn_client.h b/subversion/include/svn_client.h
index 783e06e..51b6480 100644
--- a/subversion/include/svn_client.h
+++ b/subversion/include/svn_client.h
@@ -2633,6 +2633,34 @@
                                  svn_client_ctx_t *ctx,
                                  apr_pool_t *pool);
 
+
+/**
+ * Set @a *mergeinfo to a hash mapping <tt>const char *</tt> merge
+ * source URLs to <tt>apr_array_header_t *</tt> rangelists (arrays of
+ * <tt>svn_merge_range_t *</tt> ranges) describing the ranges which
+ * have been merged into @a path_or_url as of @a peg_revision, or @c
+ * NULL if there is no mergeinfo.
+ *
+ * Use @a pool for all necessary allocations.
+ *
+ * If the server doesn't support retrieval of mergeinfo (which will
+ * never happen for file:// URLs), return an @c
+ * SVN_ERR_UNSUPPORTED_FEATURE error.
+ *
+ * @note Unlike most APIs which deal with mergeinfo, this one returns
+ * data where the keys of the hash are absolute repository URLs rather
+ * than repository filesystem paths.
+ *
+ * @since New in 1.5.
+ */
+svn_error_t *
+svn_client_mergeinfo_get_merged(apr_hash_t **mergeinfo,
+                                const char *path_or_url,
+                                const svn_opt_revision_t *peg_revision,
+                                svn_client_ctx_t *ctx,
+                                apr_pool_t *pool);
+
+
 /**
  * Drive log entry callbacks @a receiver / @a receiver_baton with the
  * revisions merged from @a merge_source_url (as of @a
diff --git a/subversion/include/svn_ra.h b/subversion/include/svn_ra.h
index eb70224..5cddbaa 100644
--- a/subversion/include/svn_ra.h
+++ b/subversion/include/svn_ra.h
@@ -1749,6 +1749,13 @@
  */
 #define SVN_RA_CAPABILITY_PARTIAL_REPLAY "partial-replay"
 
+/**
+ * The capability of including revision properties in a commit.
+ *
+ * @since New in 1.5.
+ */
+#define SVN_RA_CAPABILITY_COMMIT_REVPROPS "commit-revprops"
+
 /*       *** PLEASE READ THIS IF YOU ADD A NEW CAPABILITY ***
  *
  * RA layers generally fetch all capabilities when asked about any
diff --git a/subversion/include/svn_ra_svn.h b/subversion/include/svn_ra_svn.h
index a6adec0..f3f8025 100644
--- a/subversion/include/svn_ra_svn.h
+++ b/subversion/include/svn_ra_svn.h
@@ -43,6 +43,7 @@
 #define SVN_RA_SVN_CAP_EDIT_PIPELINE "edit-pipeline"
 #define SVN_RA_SVN_CAP_SVNDIFF1 "svndiff1"
 #define SVN_RA_SVN_CAP_ABSENT_ENTRIES "absent-entries"
+/* maps to SVN_RA_CAPABILITY_COMMIT_REVPROPS: */
 #define SVN_RA_SVN_CAP_COMMIT_REVPROPS "commit-revprops"
 /* maps to SVN_RA_CAPABILITY_MERGEINFO: */
 #define SVN_RA_SVN_CAP_MERGEINFO "mergeinfo"
diff --git a/subversion/include/svn_wc.h b/subversion/include/svn_wc.h
index 5fa6d84..bbe18c5 100644
--- a/subversion/include/svn_wc.h
+++ b/subversion/include/svn_wc.h
@@ -782,9 +782,6 @@
   /** Changelist name cleared. @since New in 1.5. */
   svn_wc_notify_changelist_clear,
 
-  /** Failed to update a path's changelist association. @since New in 1.5. */
-  svn_wc_notify_changelist_failed,
-
   /** Warn user that a path has moved from one changelist to another.
       @since New in 1.5. */
   svn_wc_notify_changelist_moved,
@@ -793,6 +790,10 @@
       @c svn_wc_notify_t. @since New in 1.5. */
   svn_wc_notify_merge_begin,
 
+  /** A merge operation (to path) from a foreign repository has begun.
+      See @c merge_range in @c svn_wc_notify_t. @since New in 1.5. */
+  svn_wc_notify_foreign_merge_begin,
+
   /** Replace notification. @since New in 1.5. */
   svn_wc_notify_update_replace,
 
diff --git a/subversion/libsvn_client/merge.c b/subversion/libsvn_client/merge.c
index c56c8d5..28dd7b6 100644
--- a/subversion/libsvn_client/merge.c
+++ b/subversion/libsvn_client/merge.c
@@ -107,7 +107,7 @@
  *  or |        cherrypicking           |    unsupported      |
  *  -r |    (svn_client_merge_peg)      |                     |
  *     +--------------------------------+---------------------+
- *  no |      mergeinfo-driven          |  mergeinfo-oblivious|
+ *  no |      mergeinfo-driven          |   mergeinfo-writing |
  *  -c |        whole-branch            |    diff-and-apply   |
  *  or |       heuristic merge          |  (svn_client_merge) |
  *  -r | (svn_client_merge_reintegrate) |                     |
@@ -283,22 +283,20 @@
    appropriately for MERGE_B.
    One rule is that we shan't record mergeinfo if we're not honoring it. */
 static APR_INLINE void
-mergeinfo_behavior(svn_boolean_t *honor_mergeinfo,
-                   svn_boolean_t *record_mergeinfo,
+mergeinfo_behavior(svn_boolean_t *honor_mergeinfo_p,
+                   svn_boolean_t *record_mergeinfo_p,
                    merge_cmd_baton_t *merge_b)
 {
-  if (honor_mergeinfo)
-    *honor_mergeinfo = (merge_b->mergeinfo_capable
-                        && merge_b->sources_ancestral
-                        && merge_b->same_repos
-                        && (! merge_b->ignore_ancestry));
+  svn_boolean_t honor_mergeinfo = (merge_b->mergeinfo_capable
+                                   && merge_b->sources_ancestral
+                                   && merge_b->same_repos
+                                   && (! merge_b->ignore_ancestry));
 
-  if (record_mergeinfo)
-    *record_mergeinfo = (merge_b->mergeinfo_capable
-                         && merge_b->sources_ancestral
-                         && merge_b->same_repos
-                         && (! merge_b->ignore_ancestry)
-                         && (! merge_b->dry_run));
+  if (honor_mergeinfo_p)
+    *honor_mergeinfo_p = honor_mergeinfo;
+
+  if (record_mergeinfo_p)
+    *record_mergeinfo_p = (honor_mergeinfo && (! merge_b->dry_run));
 }
 
 /* Helper for merge_props_changed().  Filter out mergeinfo property additions
@@ -336,16 +334,20 @@
     {
       svn_prop_t *prop = &APR_ARRAY_IDX((*props), i, svn_prop_t);
 
-      /* If this property isn't mergeinfo or is empty mergeinfo it
-         does not require any special handling. */
+      /* If this property isn't mergeinfo or is NULL valued (i.e. prop removal)
+         or empty mergeinfo it does not require any special handling.  There
+         is nothing to filter out of empty mergeinfo and the concept of
+         filtering doesn't apply if we are trying to remove mergeinfo
+         entirely. */
       if ((strcmp(prop->name, SVN_PROP_MERGEINFO) != 0)
-          || (! prop->value))
+          || (! prop->value)       /* Removal of mergeinfo */
+          || (! prop->value->len)) /* Empty mergeinfo */
         {
           APR_ARRAY_PUSH(adjusted_props, svn_prop_t) = *prop;
         }
       else /* Non-empty mergeinfo; filter self-referential mergeinfo out. */
         {
-          svn_mergeinfo_t mergeinfo;
+          svn_mergeinfo_t mergeinfo, filtered_mergeinfo = NULL;
           apr_hash_index_t *hi;
           const char *target_url, *merge_source_root_url;
           const svn_wc_entry_t *target_entry;
@@ -458,28 +460,34 @@
                     }
                 } /* for (j = 0; j < rangelist->nelts; j++) */
               
-              /* If only some of the ranges mapped from SOURCE_PATH were
-                 filtered then create a new svn_prop_t to represent
-                 this. */
               if (adjusted_rangelist->nelts)
                 {
-                  svn_string_t *adjusted_rangelist_s;
-                  svn_prop_t *adjusted_prop =
-                    apr_pcalloc(pool, sizeof(*adjusted_prop));
-
-                  SVN_ERR(svn_rangelist_to_string(&adjusted_rangelist_s,
-                                                  adjusted_rangelist,
-                                                  pool));
-                  adjusted_prop->name = SVN_PROP_MERGEINFO;
-                  adjusted_prop->value = 
-                    svn_string_create(apr_pstrcat(pool, source_path, ":",
-                                                  adjusted_rangelist_s->data,
-                                                  NULL),
-                                      pool);
-                  APR_ARRAY_PUSH(adjusted_props, svn_prop_t) = *adjusted_prop;
+                  if (!filtered_mergeinfo)
+                    filtered_mergeinfo = apr_hash_make(pool);
+                  apr_hash_set(filtered_mergeinfo, source_path,
+                               APR_HASH_KEY_STRING, adjusted_rangelist);
                 }
             } /* mergeinfo hash iteration */
 
+          /* If only some of the ranges mapped from SOURCE_PATH were
+             filtered then create a new svn_prop_t to represent
+             this.  Otherwise everything was filtered and we can
+             ignore the svn:merginfo props entirely. */
+          if (filtered_mergeinfo)
+            {
+              /* Convert filtered_mergeinfo to a svn_prop_t and put it
+                 back in the array. */
+              svn_string_t *filtered_mergeinfo_str;
+              svn_prop_t *adjusted_prop = apr_pcalloc(pool,
+                                                      sizeof(*adjusted_prop));
+              SVN_ERR(svn_mergeinfo_to_string(&filtered_mergeinfo_str,
+                                              filtered_mergeinfo,
+                                              pool));
+              adjusted_prop->name = SVN_PROP_MERGEINFO;
+              adjusted_prop->value = filtered_mergeinfo_str;
+              APR_ARRAY_PUSH(adjusted_props, svn_prop_t) = *adjusted_prop;
+            }
+
           /* If we reparented MERGE_B->RA_SESSION2 above, put it back
              to the original URL. */
           if (old_url)
@@ -1391,7 +1399,10 @@
                   svn_wc_notify_t *notify_merge_begin;
                   notify_merge_begin =
                     svn_wc_create_notify(child->path,
-                                         svn_wc_notify_merge_begin, pool);
+                                         notify_b->merge_b->same_repos 
+                                           ? svn_wc_notify_merge_begin
+                                           : svn_wc_notify_foreign_merge_begin,
+                                         pool);
                   notify_merge_begin->merge_range =
                     APR_ARRAY_IDX(child->remaining_ranges, 0,
                                   svn_merge_range_t *);
@@ -1457,9 +1468,12 @@
            && is_operative_notification)
     {
       svn_wc_notify_t *notify_merge_begin;
-      notify_merge_begin = svn_wc_create_notify(notify_b->merge_b->target,
-                                                svn_wc_notify_merge_begin,
-                                                pool);
+      notify_merge_begin = 
+        svn_wc_create_notify(notify_b->merge_b->target,
+                             notify_b->merge_b->same_repos 
+                               ? svn_wc_notify_merge_begin
+                               : svn_wc_notify_foreign_merge_begin,
+                             pool);
       if (notify_b->wrapped_func)
         (*notify_b->wrapped_func)(notify_b->wrapped_baton, notify_merge_begin,
                                   pool);
@@ -1822,9 +1836,10 @@
   pool = children_with_mergeinfo->pool;
   iterpool = svn_pool_create(pool);
 
-  /* If we aren't honoring mergeinfo, we'll make quick work of this by
-     simply adding dummy REVISION1:REVISION2 ranges for all children. */
-  if (! honor_mergeinfo)
+  /* If we aren't honoring mergeinfo or this is a --record-only merge,
+     we'll make quick work of this by simply adding dummy REVISION1:REVISION2
+     ranges for all children. */
+  if (! honor_mergeinfo || merge_b->record_only)
     {
       for (i = 0; i < children_with_mergeinfo->nelts; i++)
         {
@@ -2308,26 +2323,27 @@
             APR_ARRAY_IDX(children_with_mergeinfo, i, 
                           svn_client__merge_path_t *);
 
-          if (!child || child->absent || (child->remaining_ranges->nelts == 0))
+          if (!child || child->absent)
             continue;
 
-          range = APR_ARRAY_IDX(child->remaining_ranges, 0,
-                                svn_merge_range_t *);
-          if (range->start == default_start)
+          if (child->remaining_ranges->nelts)
             {
-              continue;
-            }
-          else
-            {
-              /* While we need to describe subtrees requiring different merge
-                 ranges than TARGET_WCPATH will have applied, we don't need to
-                 describe a subtree's subtree if that latter is having the
-                 same range applied as the former. */
               int j;
               svn_client__merge_path_t *parent = NULL;
-              
-              /* Does CHILD have a parent with mergeinfo other
-                 than TARGET_WCPATH? */
+
+              /* While we need to describe subtrees requiring
+                 different merge ranges than TARGET_WCPATH will have
+                 applied, we don't need to describe a subtree's
+                 subtree if that latter has the same range applied as
+                 the former. */
+                  
+              range = APR_ARRAY_IDX(child->remaining_ranges, 0,
+                                    svn_merge_range_t *);
+              if (range->start == default_start)
+                continue;
+
+              /* Does CHILD have a parent with mergeinfo other than
+                 TARGET_WCPATH? */
               for (j = i - 1; j > 0; j--)
                 {
                   svn_client__merge_path_t *potential_parent =
@@ -2341,9 +2357,9 @@
                     }
                 }
 
-              /* CHILD does have a parent with mergeinfo, if CHILD's first
-                 remaining range is the same as its parent there is no need
-                 to describe it separately. */
+              /* CHILD does have a parent with mergeinfo, if CHILD's
+                 first remaining range is the same as its parent there
+                 is no need to describe it separately. */
               if (parent && parent->remaining_ranges->nelts != 0)
                 {
                   svn_merge_range_t *parent_range =
@@ -2360,11 +2376,16 @@
           child_repos_path = child->path +
             (target_wcpath_len ? target_wcpath_len + 1 : 0);
 
-          if ((is_rollback && (range->start < revision2))
+          if ((child->remaining_ranges->nelts == 0)
+              || (is_rollback && (range->start < revision2))
               || (!is_rollback && (range->start > revision2)))
             {
+              /* Nothing to merge to this child.  We'll claim we have
+                 it up to date so the server doesn't send us
+                 anything. */
               SVN_ERR(reporter->set_path(report_baton, child_repos_path,
-                                         revision2, depth, FALSE, NULL, pool));
+                                         revision2, depth, FALSE, 
+                                         NULL, pool));
             }
           else
             {
@@ -2538,54 +2559,6 @@
     }
 }
 
-
-/* Blindly record the range specified by the user (rather than refining it
-   as we do for actual merges) for the merge source URL. */
-static svn_error_t *
-record_mergeinfo_for_record_only_merge(const char *url,
-                                       svn_merge_range_t *range,
-                                       const svn_wc_entry_t *entry,
-                                       svn_wc_adm_access_t *adm_access,
-                                       merge_cmd_baton_t *merge_b,
-                                       apr_pool_t *pool)
-{
-  apr_array_header_t *rangelist;
-  const char *rel_path;
-  svn_mergeinfo_t target_mergeinfo;
-  svn_boolean_t indirect;
-  apr_hash_t *merges = apr_hash_make(pool);
-  const char *old_url = NULL;
-  svn_boolean_t is_rollback = (range->start > range->end);
-  
-  /* Temporarily reparent ra_session to WC target URL. */
-  SVN_ERR(svn_client__ensure_ra_session_url(&old_url, merge_b->ra_session1,
-                                            entry->url, pool));
-  SVN_ERR(svn_client__get_wc_or_repos_mergeinfo(&target_mergeinfo, entry,
-                                                &indirect, FALSE,
-                                                svn_mergeinfo_inherited,
-                                                merge_b->ra_session1,
-                                                merge_b->target,
-                                                adm_access, merge_b->ctx,
-                                                pool));
-  if (old_url)
-    SVN_ERR(svn_ra_reparent(merge_b->ra_session1, url, pool));
-
-  SVN_ERR(svn_client__path_relative_to_root(&rel_path, url, NULL, TRUE,
-                                            merge_b->ra_session1,
-                                            adm_access, pool));
-  rangelist = apr_array_make(pool, 1, sizeof(range));
-  APR_ARRAY_PUSH(rangelist, svn_merge_range_t *) = range;
-  apr_hash_set(merges, merge_b->target, APR_HASH_KEY_STRING, rangelist);
-
-  /* If merge target has indirect mergeinfo set it. */
-  if (indirect)
-    SVN_ERR(svn_client__record_wc_mergeinfo(merge_b->target, target_mergeinfo,
-                                            adm_access, pool));
-
-  return update_wc_mergeinfo(merge_b->target, entry, rel_path, merges,
-                             is_rollback, adm_access, merge_b->ctx, pool);
-}
-
 /* Marks 'inheritable' RANGE to TARGET_WCPATH by wiping off the
    corresponding 'non-inheritable' RANGE from TARGET_MERGEINFO for the
    merge source REL_PATH.  It does such marking only for same URLs
@@ -3920,7 +3893,6 @@
               merge_cmd_baton_t *merge_b,
               apr_pool_t *pool)
 {
-  svn_error_t *err = SVN_NO_ERROR;
   apr_hash_t *props1, *props2;
   const char *tmpfile1, *tmpfile2;
   const char *mimetype1, *mimetype2;
@@ -3933,6 +3905,7 @@
   svn_merge_range_t range;
   svn_mergeinfo_t target_mergeinfo;
   const svn_wc_entry_t *entry;
+  svn_merge_range_t *conflicted_range = NULL;
   int i;
   svn_boolean_t indirect = FALSE;
   apr_pool_t *subpool;
@@ -3963,32 +3936,42 @@
       const char *source_root_url;
       svn_mergeinfo_t implicit_mergeinfo;
 
-      /* Fetch mergeinfo (temporarily reparenting ra_session1 to
-         working copy target URL). */
-      SVN_ERR(svn_ra_reparent(merge_b->ra_session1, entry->url, pool));
-      SVN_ERR(get_full_mergeinfo(&target_mergeinfo, &implicit_mergeinfo, 
-                                 entry, &indirect, svn_mergeinfo_inherited,
-                                 merge_b->ra_session1, target_wcpath, 
-                                 MAX(revision1, revision2),
-                                 MIN(revision1, revision2),
-                                 adm_access, ctx, pool));
-
-      SVN_ERR(svn_ra_reparent(merge_b->ra_session1, url1, pool));
-
-      /* Calculate remaining merges. */
+      
       SVN_ERR(svn_ra_get_repos_root2(merge_b->ra_session1,
                                      &source_root_url, pool));
       SVN_ERR(svn_client__path_relative_to_root(&mergeinfo_path, primary_url,
                                                 source_root_url, TRUE, NULL,
                                                 NULL, pool));
-      SVN_ERR(calculate_remaining_ranges(&remaining_ranges, source_root_url,
-                                         url1, revision1, url2, revision2,
-                                         TRUE, target_mergeinfo, 
-                                         implicit_mergeinfo,
-                                         merge_b->ra_session1,
-                                         entry, ctx, pool));
+
+      /* Calculate remaining merges unless this is a record only merge.
+         In that case the remaining range is the whole range described
+         by REVISION1:REVISION2. */
+      if (!merge_b->record_only)
+        {
+          /* Fetch mergeinfo (temporarily reparenting ra_session1 to
+             working copy target URL). */
+          SVN_ERR(svn_ra_reparent(merge_b->ra_session1, entry->url, pool));
+          SVN_ERR(get_full_mergeinfo(&target_mergeinfo, &implicit_mergeinfo, 
+                                     entry, &indirect, svn_mergeinfo_inherited,
+                                     merge_b->ra_session1, target_wcpath, 
+                                     MAX(revision1, revision2),
+                                     MIN(revision1, revision2),
+                                     adm_access, ctx, pool));
+
+          SVN_ERR(svn_ra_reparent(merge_b->ra_session1, url1, pool));
+
+          SVN_ERR(calculate_remaining_ranges(&remaining_ranges,
+                                             source_root_url,
+                                             url1, revision1, url2, revision2,
+                                             TRUE, target_mergeinfo, 
+                                             implicit_mergeinfo,
+                                             merge_b->ra_session1,
+                                             entry, ctx, pool));
+        }
     }
-  else
+
+  /* The simple cases where our remaining range is REVISION1:REVISION2. */
+  if (!honor_mergeinfo || merge_b->record_only)
     {
       remaining_ranges = apr_array_make(pool, 1, sizeof(&range));
       APR_ARRAY_PUSH(remaining_ranges, svn_merge_range_t *) = &range;
@@ -3996,121 +3979,125 @@
 
   subpool = svn_pool_create(pool);
 
-  for (i = 0; i < remaining_ranges->nelts; i++)
+  if (!merge_b->record_only)
     {
-      svn_wc_notify_t *n;
-      svn_boolean_t header_sent = FALSE;
-
-      /* When using this merge range, account for the exclusivity of
-         its low value (which is indicated by this operation being a
-         merge vs. revert). */
-      svn_merge_range_t *r = APR_ARRAY_IDX(remaining_ranges, i,
-                                           svn_merge_range_t *);
-
-      svn_pool_clear(subpool);
-
-      n = svn_wc_create_notify(target_wcpath,
-                               svn_wc_notify_merge_begin,
-                               subpool);
-      if (merge_b->sources_ancestral)
-        n->merge_range = r;
-
-      /* While we currently don't allow it, in theory we could be
-         fetching two fulltexts from two different repositories here. */
-      SVN_ERR(single_file_merge_get_file(&tmpfile1, merge_b->ra_session1,
-                                         &props1, r->start, target_wcpath,
-                                         subpool));
-      SVN_ERR(single_file_merge_get_file(&tmpfile2, merge_b->ra_session2,
-                                         &props2, r->end, target_wcpath,
-                                         subpool));
-
-      /* Discover any svn:mime-type values in the proplists */
-      pval = apr_hash_get(props1, SVN_PROP_MIME_TYPE,
-                          strlen(SVN_PROP_MIME_TYPE));
-      mimetype1 = pval ? pval->data : NULL;
-
-      pval = apr_hash_get(props2, SVN_PROP_MIME_TYPE,
-                          strlen(SVN_PROP_MIME_TYPE));
-      mimetype2 = pval ? pval->data : NULL;
-
-      /* Deduce property diffs. */
-      SVN_ERR(svn_prop_diffs(&propchanges, props2, props1, subpool));
-
-      /* If we aren't ignoring ancestry, then we've already done
-         ancestry relatedness checks.  If we are ignoring ancestry, or
-         our sources are known to be related, then we can do
-         text-n-props merge; otherwise, we have to do a delete-n-add
-         merge.  */
-      if (! (merge_b->ignore_ancestry || sources_related))
+      for (i = 0; i < remaining_ranges->nelts; i++)
         {
-          /* Delete... */
-          SVN_ERR(merge_file_deleted(adm_access,
-                                     &text_state,
-                                     target_wcpath,
-                                     NULL,
-                                     NULL,
-                                     mimetype1, mimetype2,
-                                     props1,
-                                     merge_b));
-          single_file_merge_notify(notify_b, target_wcpath,
-                                   svn_wc_notify_update_delete, text_state,
-                                   svn_wc_notify_state_unknown, n,
-                                   &header_sent, subpool);
+          svn_wc_notify_t *n;
+          svn_boolean_t header_sent = FALSE;
+          svn_error_t *err = SVN_NO_ERROR;
 
-          /* ...plus add... */
-          SVN_ERR(merge_file_added(adm_access,
-                                   &text_state, &prop_state,
-                                   target_wcpath,
-                                   tmpfile1,
-                                   tmpfile2,
-                                   r->start,
-                                   r->end,
-                                   mimetype1, mimetype2,
-                                   propchanges, props1,
-                                   merge_b));
-          single_file_merge_notify(notify_b, target_wcpath,
-                                   svn_wc_notify_update_add, text_state,
-                                   prop_state, n, &header_sent, subpool);
-          /* ... equals replace. */
-        }
-      else
-        {
-          SVN_ERR(merge_file_changed(adm_access,
-                                     &text_state, &prop_state,
-                                     target_wcpath,
-                                     tmpfile1,
-                                     tmpfile2,
-                                     r->start,
-                                     r->end,
-                                     mimetype1, mimetype2,
-                                     propchanges, props1,
-                                     merge_b));
-          single_file_merge_notify(notify_b, target_wcpath,
-                                   svn_wc_notify_update_update, text_state,
-                                   prop_state, n, &header_sent, subpool);
-        }
+          /* When using this merge range, account for the exclusivity of
+             its low value (which is indicated by this operation being a
+             merge vs. revert). */
+          svn_merge_range_t *r = APR_ARRAY_IDX(remaining_ranges, i,
+                                               svn_merge_range_t *);
 
-      /* Ignore if temporary file not found. It may have been renamed. */
-      /* (This is where we complain about missing Lisp, or better yet,
-         Python...) */
-      err = svn_io_remove_file(tmpfile1, subpool);
-      if (err && ! APR_STATUS_IS_ENOENT(err->apr_err))
-        return err;
-      svn_error_clear(err);
-      err = SVN_NO_ERROR;
-      err = svn_io_remove_file(tmpfile2, subpool);
-      if (err && ! APR_STATUS_IS_ENOENT(err->apr_err))
-        return err;
-      svn_error_clear(err);
-      err = SVN_NO_ERROR;
+          svn_pool_clear(subpool);
 
-      if (i < remaining_ranges->nelts - 1 &&
-          is_path_conflicted_by_merge(merge_b))
-        {
-          err = make_merge_conflict_error(target_wcpath, r, pool);
-          break;
+          n = svn_wc_create_notify(target_wcpath,
+                                   merge_b->same_repos 
+                                     ? svn_wc_notify_merge_begin
+                                     : svn_wc_notify_foreign_merge_begin,
+                                   subpool);
+          if (merge_b->sources_ancestral)
+            n->merge_range = r;
+
+          /* While we currently don't allow it, in theory we could be
+             fetching two fulltexts from two different repositories here. */
+          SVN_ERR(single_file_merge_get_file(&tmpfile1, merge_b->ra_session1,
+                                             &props1, r->start, target_wcpath,
+                                             subpool));
+          SVN_ERR(single_file_merge_get_file(&tmpfile2, merge_b->ra_session2,
+                                             &props2, r->end, target_wcpath,
+                                             subpool));
+
+          /* Discover any svn:mime-type values in the proplists */
+          pval = apr_hash_get(props1, SVN_PROP_MIME_TYPE,
+                              strlen(SVN_PROP_MIME_TYPE));
+          mimetype1 = pval ? pval->data : NULL;
+
+          pval = apr_hash_get(props2, SVN_PROP_MIME_TYPE,
+                              strlen(SVN_PROP_MIME_TYPE));
+          mimetype2 = pval ? pval->data : NULL;
+
+          /* Deduce property diffs. */
+          SVN_ERR(svn_prop_diffs(&propchanges, props2, props1, subpool));
+
+          /* If we aren't ignoring ancestry, then we've already done
+             ancestry relatedness checks.  If we are ignoring ancestry, or
+             our sources are known to be related, then we can do
+             text-n-props merge; otherwise, we have to do a delete-n-add
+             merge.  */
+          if (! (merge_b->ignore_ancestry || sources_related))
+            {
+              /* Delete... */
+              SVN_ERR(merge_file_deleted(adm_access,
+                                         &text_state,
+                                         target_wcpath,
+                                         NULL,
+                                         NULL,
+                                         mimetype1, mimetype2,
+                                         props1,
+                                         merge_b));
+              single_file_merge_notify(notify_b, target_wcpath,
+                                       svn_wc_notify_update_delete, text_state,
+                                       svn_wc_notify_state_unknown, n,
+                                       &header_sent, subpool);
+
+              /* ...plus add... */
+              SVN_ERR(merge_file_added(adm_access,
+                                       &text_state, &prop_state,
+                                       target_wcpath,
+                                       tmpfile1,
+                                       tmpfile2,
+                                       r->start,
+                                       r->end,
+                                       mimetype1, mimetype2,
+                                       propchanges, props1,
+                                       merge_b));
+              single_file_merge_notify(notify_b, target_wcpath,
+                                       svn_wc_notify_update_add, text_state,
+                                       prop_state, n, &header_sent, subpool);
+              /* ... equals replace. */
+            }
+          else
+            {
+              SVN_ERR(merge_file_changed(adm_access,
+                                         &text_state, &prop_state,
+                                         target_wcpath,
+                                         tmpfile1,
+                                         tmpfile2,
+                                         r->start,
+                                         r->end,
+                                         mimetype1, mimetype2,
+                                         propchanges, props1,
+                                         merge_b));
+              single_file_merge_notify(notify_b, target_wcpath,
+                                       svn_wc_notify_update_update, text_state,
+                                       prop_state, n, &header_sent, subpool);
+            }
+
+          /* Ignore if temporary file not found. It may have been renamed. */
+          /* (This is where we complain about missing Lisp, or better yet,
+             Python...) */
+          err = svn_io_remove_file(tmpfile1, subpool);
+          if (err && ! APR_STATUS_IS_ENOENT(err->apr_err))
+            return err;
+          svn_error_clear(err);
+          err = svn_io_remove_file(tmpfile2, subpool);
+          if (err && ! APR_STATUS_IS_ENOENT(err->apr_err))
+            return err;
+          svn_error_clear(err);
+
+          if ((i < (remaining_ranges->nelts - 1))
+              && is_path_conflicted_by_merge(merge_b))
+            {
+              conflicted_range = r;
+              break;
+            }
         }
-    }
+    } /* !merge_b->record_only */
 
   /* Record updated WC mergeinfo to account for our new merges, minus
      any unresolved conflicts and skips. */
@@ -4138,7 +4125,12 @@
   /* Sleep to ensure timestamp integrity. */
   svn_sleep_for_timestamps();
 
-  return err;
+  /* If our multi-pass merge terminated early due to conflicts, return
+     that fact as an error. */
+  if (conflicted_range)
+    return make_merge_conflict_error(target_wcpath, conflicted_range, pool);
+    
+  return SVN_NO_ERROR;
 }
 
 
@@ -4278,7 +4270,7 @@
                                     ra_session, mergeinfo_path,
                                     adm_access, merge_b));
 
-  if (honor_mergeinfo)
+  if (honor_mergeinfo && !merge_b->record_only)
     {
       svn_revnum_t start_rev, end_rev;
 
@@ -4400,17 +4392,20 @@
       range.end = revision2;
       range.inheritable = inheritable;
 
-      /* Reset cur_ancestor_index to -1 so that subsequent cherry
-         picked revision ranges will be notified upon subsequent
-         operative merge. */
-      notify_b->cur_ancestor_index = -1;
+      if (!merge_b->record_only)
+        {
+          /* Reset cur_ancestor_index to -1 so that subsequent cherry
+             picked revision ranges will be notified upon subsequent
+             operative merge. */
+          notify_b->cur_ancestor_index = -1;
 
-      SVN_ERR(drive_merge_report_editor(merge_b->target,
-                                        url1, revision1, url2, revision2,
-                                        NULL, is_rollback, 
-                                        depth, notify_b, adm_access, 
-                                        &merge_callbacks, merge_b, 
-                                        pool));
+          SVN_ERR(drive_merge_report_editor(merge_b->target,
+                                            url1, revision1, url2, revision2,
+                                            NULL, is_rollback, 
+                                            depth, notify_b, adm_access, 
+                                            &merge_callbacks, merge_b, 
+                                            pool));
+        }
     }
 
   /* Record mergeinfo where appropriate.*/
@@ -4772,25 +4767,6 @@
           checked_mergeinfo_capability = TRUE;
         }
 
-      /* If this is a record-only merge and our sources are from the
-         same repository as our target, just do the record and move on. */
-      if (same_repos && record_only)
-        {
-          const char *merge_source_url = (rev1 < rev2) ? url2 : url1;
-          svn_merge_range_t range;
-          range.start = rev1;
-          range.end = rev2;
-          range.inheritable = TRUE;
-          SVN_ERR(record_mergeinfo_for_record_only_merge(merge_source_url,
-                                                         &range,
-                                                         target_entry, 
-                                                         adm_access,
-                                                         &merge_cmd_baton,
-                                                         subpool));
-
-          continue;
-        }
-
       /* Call our merge helpers based on entry kind. */
       if (target_entry->kind == svn_node_file)
         {
diff --git a/subversion/libsvn_client/mergeinfo.c b/subversion/libsvn_client/mergeinfo.c
index 1d5f37c..dd59894 100644
--- a/subversion/libsvn_client/mergeinfo.c
+++ b/subversion/libsvn_client/mergeinfo.c
@@ -846,7 +846,7 @@
                                                    TRUE, ctx, subpool));
       SVN_ERR(svn_client__get_revision_number(&rev, NULL, ra_session,
                                               peg_revision, "", subpool));
-      SVN_ERR(svn_ra_get_repos_root(ra_session, repos_root, pool));
+      SVN_ERR(svn_ra_get_repos_root2(ra_session, repos_root, pool));
       SVN_ERR(svn_client__path_relative_to_root(&repos_rel_path, path_or_url,
                                                 *repos_root, FALSE, NULL, 
                                                 NULL, subpool));
@@ -1207,6 +1207,47 @@
 
 
 svn_error_t *
+svn_client_mergeinfo_get_merged(apr_hash_t **mergeinfo_p,
+                                const char *path_or_url,
+                                const svn_opt_revision_t *peg_revision,
+                                svn_client_ctx_t *ctx,
+                                apr_pool_t *pool)
+{
+  const char *repos_root;
+  apr_hash_t *full_path_mergeinfo;
+  svn_mergeinfo_t mergeinfo;
+  
+  SVN_ERR(get_mergeinfo(&mergeinfo, &repos_root, path_or_url, 
+                        peg_revision, ctx, pool));
+
+  /* Copy the MERGEINFO hash items into another hash, but change
+     the relative paths into full URLs. */
+  *mergeinfo_p = NULL;
+  if (mergeinfo)
+    {
+      apr_hash_index_t *hi;
+
+      full_path_mergeinfo = apr_hash_make(pool);
+      for (hi = apr_hash_first(pool, mergeinfo); hi; hi = apr_hash_next(hi))
+        {
+          const void *key;
+          void *val;
+          const char *source_url;
+
+          apr_hash_this(hi, &key, NULL, &val);
+          source_url = svn_path_uri_encode(key, pool);
+          source_url = svn_path_join(repos_root, source_url + 1, pool);
+          apr_hash_set(full_path_mergeinfo, source_url, 
+                       APR_HASH_KEY_STRING, val);
+        }
+      *mergeinfo_p = full_path_mergeinfo;
+    }
+
+  return SVN_NO_ERROR;
+}
+
+
+svn_error_t *
 svn_client_mergeinfo_log_eligible(const char *path_or_url,
                                   const svn_opt_revision_t *peg_revision,
                                   const char *merge_source_url,
@@ -1346,12 +1387,9 @@
                                       &copyfrom_path, &copyfrom_rev,
                                       ctx, pool));
   if (copyfrom_path)
-    {
-      copyfrom_path = svn_path_join(repos_root,
-                                    svn_path_uri_encode(copyfrom_path + 1,
-                                                        pool),
-                                    pool);
-      APR_ARRAY_PUSH(list, const char *) = copyfrom_path;
+    {   
+      APR_ARRAY_PUSH(list, const char *) = 
+        svn_path_url_add_component(repos_root, copyfrom_path + 1, pool);
     }
 
   if (mergeinfo)
diff --git a/subversion/libsvn_delta/compose_delta.c b/subversion/libsvn_delta/compose_delta.c
index c65c77a..492afb9 100644
--- a/subversion/libsvn_delta/compose_delta.c
+++ b/subversion/libsvn_delta/compose_delta.c
@@ -574,8 +574,10 @@
       else
         {
           /* TODO: (Potential optimization) Investigate if it would
-             make sense to forbid range_from_target lengths shorter
-             than, say, VD_KEY_SIZE (see vdelta.c) */
+             make sense to forbid short range_from_target lengths
+             (this comment originally said "shorter than, say,
+             VD_KEY_SIZE (see vdelta.c)", but Subversion no longer
+             uses vdelta). */
 
           if (offset >= node->limit)
             node = node->next;
diff --git a/subversion/libsvn_delta/delta.h b/subversion/libsvn_delta/delta.h
index 268ac20..2b06110 100644
--- a/subversion/libsvn_delta/delta.h
+++ b/subversion/libsvn_delta/delta.h
@@ -69,13 +69,6 @@
 svn_txdelta__make_window(const svn_txdelta__ops_baton_t *build_baton,
                          apr_pool_t *pool);
 
-/* Create vdelta window data. Allocate temporary data from POOL. */
-void svn_txdelta__vdelta(svn_txdelta__ops_baton_t *build_baton,
-                         const char *start,
-                         apr_size_t source_len,
-                         apr_size_t target_len,
-                         apr_pool_t *pool);
-
 
 /* Create xdelta window data. Allocate temporary data from POOL. */
 void svn_txdelta__xdelta(svn_txdelta__ops_baton_t *build_baton,
diff --git a/subversion/libsvn_delta/text_delta.c b/subversion/libsvn_delta/text_delta.c
index 1c769da..9839c6a 100644
--- a/subversion/libsvn_delta/text_delta.c
+++ b/subversion/libsvn_delta/text_delta.c
@@ -48,7 +48,7 @@
   svn_boolean_t more_source;    /* FALSE if source stream hit EOF. */
   svn_boolean_t more;           /* TRUE if there are more data in the pool. */
   svn_filesize_t pos;           /* Offset of next read in source file. */
-  char *buf;                    /* Buffer for vdelta data. */
+  char *buf;                    /* Buffer for input data. */
 
   apr_md5_ctx_t context;        /* APR's MD5 context container. */
 
@@ -133,7 +133,7 @@
 }
 
 
-/* Compute and return a delta window using the vdelta or xdelta algorithm on
+/* Compute and return a delta window using the xdelta algorithm on
    DATA, which contains SOURCE_LEN bytes of source data and TARGET_LEN
    bytes of target data.  SOURCE_OFFSET gives the offset of the source
    data, and is simply copied into the window's sview_offset field. */
@@ -148,7 +148,8 @@
   build_baton.new_data = svn_stringbuf_create("", pool);
 
   if (source_len == 0)
-    svn_txdelta__vdelta(&build_baton, data, source_len, target_len, pool);
+    svn_txdelta__insert_op(&build_baton, svn_txdelta_new, 0, target_len, data,
+                           pool);
   else
     svn_txdelta__xdelta(&build_baton, data, source_len, target_len, pool);
 
@@ -209,9 +210,9 @@
 {
   svn_txdelta_op_t *op;
 
-  /* Check if this op can be merged with the previous op. The vdelta
-     algorithm will never generate such ops, but the delta combiner
-     can, and this is the obvious place to make the check. */
+  /* Check if this op can be merged with the previous op. The delta
+     combiner sometimes generates such ops, and this is the obvious
+     place to make the check. */
   if (build_baton->num_ops > 0)
     {
       op = &build_baton->ops[build_baton->num_ops - 1];
diff --git a/subversion/libsvn_delta/vdelta.c b/subversion/libsvn_delta/vdelta.c
deleted file mode 100644
index f571454..0000000
--- a/subversion/libsvn_delta/vdelta.c
+++ /dev/null
@@ -1,343 +0,0 @@
-/*
- * vdelta.c:  vdelta generator.
- *
- * ====================================================================
- * Copyright (c) 2000-2004 CollabNet.  All rights reserved.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution.  The terms
- * are also available at http://subversion.tigris.org/license-1.html.
- * If newer versions of this license are posted there, you may use a
- * newer version instead, at your option.
- *
- * This software consists of voluntary contributions made by many
- * individuals.  For exact contribution history, see the revision
- * history and logs, available at http://subversion.tigris.org/.
- * ====================================================================
- */
-
-
-#include <assert.h>
-
-#include <apr_general.h>        /* for APR_INLINE */
-
-#include "svn_delta.h"
-#include "delta.h"
-
-
-/* ==================================================================== */
-/* Hash table for vdelta hashing.
-
-   Each hash bucket is a chain of slots. The index of the slot in
-   the slots array is also the index of the key string in the
-   current window's data stream. The hash table implements a multimap
-   (i.e., hash and key collisions are allowed).
-
-   To store a key->index mapping, just add slot[index] to the slot
-   chain tn key's bucket (see store_mapping).
-
-   For a given key, you can traverse the list of match candidates (some
-   of which may be hash collisions) like this:
-
-   for (slot = buckets[get_bucket(key)]; slot != NULL; slot = slot->next)
-     {
-       index = slot - slots;
-       ...
-     }
-*/
-
-
-/* Size of a vdelta hash key. */
-#define VD_KEY_SIZE 4
-
-
-/* Hash slot. */
-typedef struct hash_slot_t {
-  struct hash_slot_t *next;
-} hash_slot_t;
-
-/* Hash table. */
-typedef struct hash_table_t {
-  int num_buckets;              /* Number of buckets in the table. */
-  hash_slot_t **buckets;        /* Bucket array. */
-  hash_slot_t *slots;           /* Slots array. */
-} hash_table_t;
-
-
-/* Create a hash table with NUM_SLOTS slots. NUM_SLOTS should be the sum
-   of the size of the source and target parts of the delta window.
-   Allocate from POOL. */
-static hash_table_t *
-create_hash_table(apr_size_t num_slots, apr_pool_t *pool)
-{
-  int i;
-  apr_size_t j;
-  hash_table_t* table = apr_palloc(pool, sizeof(*table));
-
-  /* This should be a reasonable number of buckets ... */
-  table->num_buckets = (num_slots / 3) | 1;
-  table->buckets = apr_palloc(pool, (table->num_buckets
-                                     * sizeof(*table->buckets)));
-  for (i = 0; i < table->num_buckets; ++i)
-    table->buckets[i] = NULL;
-
-  table->slots = apr_palloc(pool, num_slots * sizeof(*table->slots));
-  for (j = 0; j < num_slots; ++j)
-    table->slots[j].next = NULL;
-
-  return table;
-}
-
-
-/* Convert a key to a pointer to the key's hash bucket.
-   We use a 2-universal multiplicative hash function. If you're
-   wondering about the selected multiplier, take a look at the
-   comments in apr/tables/apr_hash.c:find_entry for a discussion
-   on fast string hashes; it's very illuminating.
-
-   [ We use 127 instead of 33 here because I happen to like
-     interesting prime numbers, so there. --xbc ] */
-static APR_INLINE apr_uint32_t
-get_bucket(const hash_table_t *table, const char *key)
-{
-  int i;
-  apr_uint32_t hash = 0;
-  for (i = 0; i < VD_KEY_SIZE; ++i)
-    hash = hash * 127 + *key++;
-  return hash % table->num_buckets;
-}
-
-
-/* Store a key->index mapping into the hash table. */
-static APR_INLINE void
-store_mapping(hash_table_t *table, const char* key, apr_size_t idx)
-{
-  apr_uint32_t bucket = get_bucket(table, key);
-  assert(table->slots[idx].next == NULL);
-  table->slots[idx].next = table->buckets[bucket];
-  table->buckets[bucket] = &table->slots[idx];
-}
-
-
-
-/* ==================================================================== */
-/* Vdelta generator.
-
-   The article "Delta Algorithms: An Empirical Analysis" by Hunt,
-   Vo and Tichy contains a description of the vdelta algorithm,
-   but it's incomplete. Here's a detailed description:
-
-     1. Look up the four bytes starting at the current position
-        pointer.  If there are no matches for those four bytes,
-        output an insert, move the position pointer forward by one,
-        and go back to step 1.
-
-     2. Determine which of the candidates yields the longest
-        extension.  This will be called the "current match".
-
-     3. Look up the last three bytes of the current match plus one
-        unmatched byte.  If there is no match for those four bytes,
-        the current match is the best match; go to step 6.
-
-     4. For each candidate, check backwards to see if it matches
-        the entire match so far.  If no candidates satisfy that
-        constraint, the current match is the best match; go to step 6.
-
-     5. Among the candidates which do satisfy the constraint,
-        determine which one yields the longest extension.  This
-        will be the new "current match."  Go back to step 3.
-
-     6. Output a block copy instruction, add indexes for the last
-        three positions of the matched data, advance the position
-        pointer by the length of the match, and go back to step 1.
-
-   Inserts and copies are generated only when the current position
-   is within the target data.
-
-   Note that the vdelta algorithm allows copies that cross the
-   source/target data boundary. Because our internal delta
-   representation has different opcodes for source and target copies,
-   we split them in two. This means that the opcode stream in the
-   delta window can contain copies shorter than VD_KEY_SIZE. These
-   could be represented by insert ops instead, but we'll leave them
-   in, so that we can merge them again when we convert the delta
-   window to an external format like vcdiff that supports cross
-   -boundary copies. */
-
-
-/* Find the length of a match within the data window.
-   Note that (match < from && from <= end) must always be true here. */
-
-static APR_INLINE int
-find_match_len(const char *match, const char *from, const char *end)
-{
-  const char *here = from;
-  while (here < end && *match == *here)
-    {
-      ++match;
-      ++here;
-    }
-  return here - from;
-}
-
-
-/* This is the main vdelta generator. */
-
-static void
-vdelta(svn_txdelta__ops_baton_t *build_baton,
-       const char *data,
-       const char *start,
-       const char *end,
-       svn_boolean_t outputflag,
-       hash_table_t *table,
-       apr_pool_t *pool)
-{
-  const char *here = start;     /* Current position in the buffer. */
-  const char *insert_from = NULL; /* Start of byte range for insertion. */
-
-  for (;;)
-    {
-      const char *current_match, *key;
-      apr_size_t current_match_len = 0;
-      hash_slot_t *slot;
-      svn_boolean_t progress;
-
-      /* If we're near the end, just insert the last few bytes. */
-      if (end - here < VD_KEY_SIZE)
-        {
-          const char *from = ((insert_from != NULL) ? insert_from : here);
-
-          if (outputflag && from < end)
-            svn_txdelta__insert_op(build_baton, svn_txdelta_new, 0,
-                                   end - from, from, pool);
-          return;
-        }
-
-      /* Search for the longest match.  */
-      current_match = NULL;
-      current_match_len = 0;
-      key = here;
-      do
-        {
-          /* Try to extend the current match.  Our key is the last
-             three matched bytes plus one unmatched byte if we already
-             have a current match, or just the four bytes where we are
-             if we don't have a current match yet.  See which mapping
-             yields the longest extension.  */
-          progress = FALSE;
-          for (slot = table->buckets[get_bucket(table, key)];
-               slot != NULL;
-               slot = slot->next)
-            {
-              const char *match;
-              apr_size_t match_len;
-
-              if (slot - table->slots < key - here) /* Too close to start */
-                continue;
-              match = data + (slot - table->slots) - (key - here);
-              match_len = find_match_len(match, here, end);
-
-              /* We can only copy from the source or from the target, so
-                 don't let the match cross START.  */
-              if (match < start && match + match_len > start)
-                match_len = start - match;
-
-              if (match_len >= VD_KEY_SIZE && match_len > current_match_len)
-                {
-                  /* We have a longer match; record it.  */
-                  current_match = match;
-                  current_match_len = match_len;
-                  progress = TRUE;
-                }
-            }
-          if (progress)
-            key = here + current_match_len - (VD_KEY_SIZE - 1);
-        }
-      while (progress && end - key >= VD_KEY_SIZE);
-
-      if (current_match_len < VD_KEY_SIZE)
-        {
-          /* There is no match here; store a mapping and insert this byte. */
-          store_mapping(table, here, here - data);
-          if (insert_from == NULL)
-            insert_from = here;
-          here++;
-          continue;
-        }
-      else if (outputflag)
-        {
-          if (insert_from != NULL)
-            {
-              /* Commit the pending insert. */
-              svn_txdelta__insert_op(build_baton, svn_txdelta_new,
-                                     0, here - insert_from,
-                                     insert_from, pool);
-              insert_from = NULL;
-            }
-          if (current_match < start) /* Copy from source. */
-            svn_txdelta__insert_op(build_baton, svn_txdelta_source,
-                                   current_match - data,
-                                   current_match_len,
-                                   NULL, pool);
-          else                       /* Copy from target */
-            svn_txdelta__insert_op(build_baton, svn_txdelta_target,
-                                   current_match - start,
-                                   current_match_len,
-                                   NULL, pool);
-        }
-
-      /* Adjust the current position and insert mappings for the
-         last three bytes of the match. */
-      here += current_match_len;
-      if (end - here >= VD_KEY_SIZE)
-        {
-          char const *last = here - (VD_KEY_SIZE - 1);
-          for (; last < here; ++last)
-            store_mapping(table, last, last - data);
-        }
-    }
-}
-
-
-void
-svn_txdelta__vdelta(svn_txdelta__ops_baton_t *build_baton,
-                    const char *data,
-                    apr_size_t source_len,
-                    apr_size_t target_len,
-                    apr_pool_t *pool)
-{
-  hash_table_t *table = create_hash_table(source_len + target_len, pool);
-
-  vdelta(build_baton, data, data, data + source_len, FALSE, table, pool);
-  vdelta(build_baton, data, data + source_len, data + source_len + target_len,
-         TRUE, table, pool);
-
-#if 0
-  /* This bit of code calculates the hash load and the
-     number of collisions. Please note that a the number
-     of collisions per bucket is one less than the length
-     of the chain. :-)  --xbc */
-  {
-    int i;
-    int empty = 0;
-    int collisions = 0;
-    for (i = 0; i < table->num_buckets; ++i)
-    {
-      hash_slot_t *slot = table->buckets[i];
-      if (!slot)
-        ++empty;
-      else
-      {
-        slot = slot->next;
-        while (slot != NULL)
-        {
-          ++collisions;
-          slot = slot->next;
-        }
-      }
-    }
-    fprintf(stderr, "Hash stats: load %d, collisions %d\n",
-            100 - 100 * empty / table->num_buckets, collisions);
-  }
-#endif
-}
diff --git a/subversion/libsvn_delta/xdelta.c b/subversion/libsvn_delta/xdelta.c
index 59c61bf..6773718 100644
--- a/subversion/libsvn_delta/xdelta.c
+++ b/subversion/libsvn_delta/xdelta.c
@@ -376,8 +376,9 @@
                     apr_size_t target_len,
                     apr_pool_t *pool)
 {
-  /*  We should never be asked to compute something when the source_len is 0,
-      because it should have asked vdelta or some other compressor.  */
+  /*  We should never be asked to compute something when the source_len is 0;
+      we just use a single insert op there (and rely on zlib for
+      compression). */
   assert(source_len != 0);
   compute_delta(build_baton, data, source_len,
                 data + source_len, target_len,
diff --git a/subversion/libsvn_fs_fs/fs_fs.c b/subversion/libsvn_fs_fs/fs_fs.c
index 02d3a40..b59ef06 100644
--- a/subversion/libsvn_fs_fs/fs_fs.c
+++ b/subversion/libsvn_fs_fs/fs_fs.c
@@ -2616,10 +2616,14 @@
               rs = APR_ARRAY_IDX(rb->rs_list, rb->rs_list->nelts - 1,
                                  struct rep_state *);
               /* Read window from last representation in list. */
-              /* We apply this window directly instead of combining it with the
-                 others.  We do this because vdelta is used for deltas against
-                 the empty stream, which will trigger quadratic behaviour in
-                 the delta combiner. */
+              /* We apply this window directly instead of combining it
+                 with the others.  We do this because vdelta used to
+                 be used for deltas against the empty stream, which
+                 will trigger quadratic behaviour in the delta
+                 combiner.  It's still likely that we'll find such
+                 deltas in an old repository; it may be worth
+                 considering whether or not this special case is still
+                 needed in the future, though. */
               SVN_ERR(read_window(&lwindow, rb->chunk_index, rs, rb->pool));
 
               if (lwindow->src_ops > 0)
diff --git a/subversion/libsvn_ra_local/ra_plugin.c b/subversion/libsvn_ra_local/ra_plugin.c
index fd38657..6d855f4 100644
--- a/subversion/libsvn_ra_local/ra_plugin.c
+++ b/subversion/libsvn_ra_local/ra_plugin.c
@@ -1353,7 +1353,8 @@
 
   if (strcmp(capability, SVN_RA_CAPABILITY_DEPTH) == 0
       || strcmp(capability, SVN_RA_CAPABILITY_LOG_REVPROPS) == 0
-      || strcmp(capability, SVN_RA_CAPABILITY_PARTIAL_REPLAY) == 0)
+      || strcmp(capability, SVN_RA_CAPABILITY_PARTIAL_REPLAY) == 0
+      || strcmp(capability, SVN_RA_CAPABILITY_COMMIT_REVPROPS) == 0)
     {
       *has = TRUE;
     }
diff --git a/subversion/libsvn_ra_neon/commit.c b/subversion/libsvn_ra_neon/commit.c
index c6d8acf..77e7d73 100644
--- a/subversion/libsvn_ra_neon/commit.c
+++ b/subversion/libsvn_ra_neon/commit.c
@@ -1371,7 +1371,7 @@
                                     apr_hash_t *revprop_table,
                                     apr_pool_t *pool)
 {
-  const svn_string_t *vcc;
+  const char *vcc;
   const svn_string_t *baseline_url;
   version_rsrc_t baseline_rsrc = { SVN_INVALID_REVNUM };
   svn_error_t *err = NULL;
@@ -1381,8 +1381,7 @@
      ### REPORT when that is available on the server. */
 
   /* fetch the DAV:version-controlled-configuration from the session's URL */
-  SVN_ERR(svn_ra_neon__get_one_prop(&vcc, cc->ras, cc->ras->root.path,
-                                    NULL, &svn_ra_neon__vcc_prop, pool));
+  SVN_ERR(svn_ra_neon__get_vcc(&vcc, cc->ras, cc->ras->root.path, pool));
 
   /* ### we should use DAV:apply-to-version on the CHECKOUT so we can skip
      ### retrieval of the baseline */
@@ -1394,7 +1393,7 @@
     /* Get the latest baseline from VCC's DAV:checked-in property.
        This should give us the HEAD revision of the moment. */
     SVN_ERR(svn_ra_neon__get_one_prop(&baseline_url, cc->ras,
-                                      vcc->data, NULL,
+                                      vcc, NULL,
                                       &svn_ra_neon__checked_in_prop, pool));
     baseline_rsrc.pool = pool;
     baseline_rsrc.vsn_url = baseline_url->data;
diff --git a/subversion/libsvn_ra_neon/props.c b/subversion/libsvn_ra_neon/props.c
index 7e63e84..1877f0f 100644
--- a/subversion/libsvn_ra_neon/props.c
+++ b/subversion/libsvn_ra_neon/props.c
@@ -638,8 +638,32 @@
                                               const char *label,
                                               apr_pool_t *pool)
 {
-  return svn_ra_neon__get_props_resource(rsrc, sess, url, label, starting_props,
-                                         pool);
+  svn_string_t *propval;
+
+  SVN_ERR(svn_ra_neon__get_props_resource(rsrc, sess, url, label,
+                                          starting_props, pool));
+
+  /* Cache some of the resource information. */
+
+  if (! sess->vcc)
+    {
+      propval = apr_hash_get((*rsrc)->propset,
+                             SVN_RA_NEON__PROP_VCC,
+                             APR_HASH_KEY_STRING);
+      if (propval)
+        sess->vcc = apr_pstrdup(sess->pool, propval->data);
+    }
+
+  if (! sess->uuid)
+    {
+      propval = apr_hash_get((*rsrc)->propset,
+                             SVN_RA_NEON__PROP_REPOSITORY_UUID,
+                             APR_HASH_KEY_STRING);
+      if (propval)
+        sess->uuid = apr_pstrdup(sess->pool, propval->data);
+    }
+
+  return SVN_NO_ERROR;
 }
 
 
@@ -747,9 +771,13 @@
 {
   svn_ra_neon__resource_t *rsrc;
   const char *lopped_path;
-  const svn_string_t *vcc_s;
 
-  /* ### Someday, possibly look for memory-cached VCC in the RA session. */
+  /* Look for memory-cached VCC in the RA session. */
+  if (sess->vcc)
+    {
+      *vcc = sess->vcc;
+      return SVN_NO_ERROR;
+    }
 
   /* ### Someday, possibly look for disk-cached VCC via get_wcprop callback. */
 
@@ -757,14 +785,15 @@
   SVN_ERR(svn_ra_neon__search_for_starting_props(&rsrc, &lopped_path,
                                                  sess, url, pool));
 
-  vcc_s = apr_hash_get(rsrc->propset,
-                       SVN_RA_NEON__PROP_VCC, APR_HASH_KEY_STRING);
-  if (! vcc_s)
-    return svn_error_create(APR_EGENERAL, NULL,
-                             _("The VCC property was not found on the "
-                               "resource"));
+  if (! sess->vcc)
+    {
+      /* ### better error reporting... */
+      return svn_error_create(APR_EGENERAL, NULL,
+                              _("The VCC property was not found on the "
+                                "resource"));
+    }
 
-  *vcc = vcc_s->data;
+  *vcc = sess->vcc;
   return SVN_NO_ERROR;
 }
 
@@ -778,7 +807,7 @@
                                              apr_pool_t *pool)
 {
   svn_ra_neon__resource_t *rsrc;
-  const svn_string_t *vcc;
+  const char *vcc;
   const svn_string_t *relative_path;
   const char *my_bc_relative;
   const char *lopped_path;
@@ -809,7 +838,7 @@
   SVN_ERR(svn_ra_neon__search_for_starting_props(&rsrc, &lopped_path,
                                                  sess, url, pool));
 
-  vcc = apr_hash_get(rsrc->propset, SVN_RA_NEON__PROP_VCC, APR_HASH_KEY_STRING);
+  SVN_ERR(svn_ra_neon__get_vcc(&vcc, sess, url, pool));
   if (vcc == NULL)
     {
       /* ### better error reporting... */
@@ -881,7 +910,7 @@
       /* Get the Baseline from the DAV:checked-in value, then fetch its
          DAV:baseline-collection property. */
       /* ### should wrap this with info about rsrc==VCC */
-      SVN_ERR(svn_ra_neon__get_one_prop(&baseline, sess, vcc->data, NULL,
+      SVN_ERR(svn_ra_neon__get_one_prop(&baseline, sess, vcc, NULL,
                                         &svn_ra_neon__checked_in_prop, pool));
 
       /* ### do we want to optimize the props we fetch, based on what the
@@ -902,7 +931,7 @@
 
       /* ### do we want to optimize the props we fetch, based on what the
          ### user asked for? i.e. omit version-name if latest_rev is NULL */
-      SVN_ERR(svn_ra_neon__get_props_resource(&rsrc, sess, vcc->data, label,
+      SVN_ERR(svn_ra_neon__get_props_resource(&rsrc, sess, vcc, label,
                                               which_props, pool));
     }
 
@@ -982,8 +1011,8 @@
       const char *full_bc_url = svn_path_url_add_component(my_bc_url->data,
                                                            my_bc_rel.data,
                                                            pool);
-      SVN_ERR(svn_ra_neon__get_props_resource(&rsrc, sess, full_bc_url,
-                                              NULL, starting_props, pool));
+      SVN_ERR(svn_ra_neon__get_starting_props(&rsrc, sess, full_bc_url,
+                                              NULL, pool));
       *is_dir = rsrc->is_collection;
     }
 
diff --git a/subversion/libsvn_ra_neon/ra_neon.h b/subversion/libsvn_ra_neon/ra_neon.h
index 0e28703..39ff009 100644
--- a/subversion/libsvn_ra_neon/ra_neon.h
+++ b/subversion/libsvn_ra_neon/ra_neon.h
@@ -98,6 +98,10 @@
   svn_auth_iterstate_t *p11pin_iterstate; /* state of PKCS#11 pin retries */
 
   svn_boolean_t compression;            /* should we use http compression? */
+
+  /* Both of these function as caches, and are NULL when uninitialized
+     or cleared: */
+  const char *vcc;                      /* version-controlled-configuration */
   const char *uuid;                     /* repository UUID */
 
   svn_ra_progress_notify_func_t progress_func;
@@ -423,7 +427,10 @@
                                               const ne_propname *which_props,
                                               apr_pool_t *pool);
 
-/* fetch a single resource's starting props from the server. */
+/* fetch a single resource's starting props from the server.
+
+   Cache the version-controlled-configuration in SESS->vcc, and the
+   repository uuid in SESS->uuid. */
 svn_error_t * svn_ra_neon__get_starting_props(svn_ra_neon__resource_t **rsrc,
                                               svn_ra_neon__session_t *sess,
                                               const char *url,
@@ -437,7 +444,10 @@
 
    Also return *MISSING_PATH (allocated in POOL), which is the
    trailing portion of the URL that did not exist.  If an error
-   occurs, *MISSING_PATH isn't changed. */
+   occurs, *MISSING_PATH isn't changed. 
+
+   Cache the version-controlled-configuration in SESS->vcc, and the
+   repository uuid in SESS->uuid. */
 svn_error_t *
 svn_ra_neon__search_for_starting_props(svn_ra_neon__resource_t **rsrc,
                                        const char **missing_path,
diff --git a/subversion/libsvn_ra_neon/session.c b/subversion/libsvn_ra_neon/session.c
index dac426d..2e48a70 100644
--- a/subversion/libsvn_ra_neon/session.c
+++ b/subversion/libsvn_ra_neon/session.c
@@ -823,9 +823,18 @@
                             apr_pool_t *pool)
 {
   svn_ra_neon__session_t *ras = session->priv;
-  const char *cap_result = apr_hash_get(ras->capabilities,
-                                        capability,
-                                        APR_HASH_KEY_STRING);
+  const char *cap_result;
+
+  /* This capability doesn't rely on anything server side. */
+  if (strcmp(capability, SVN_RA_CAPABILITY_COMMIT_REVPROPS) == 0)
+    {
+      *has = TRUE;
+      return SVN_NO_ERROR;
+    }
+
+ cap_result = apr_hash_get(ras->capabilities,
+                           capability,
+                           APR_HASH_KEY_STRING);
 
   /* If any capability is unknown, they're all unknown, so ask. */
   if (cap_result == NULL)
@@ -1134,6 +1143,8 @@
   ras->progress_baton = callbacks->progress_baton;
   ras->progress_func = callbacks->progress_func;
   ras->capabilities = apr_hash_make(ras->pool);
+  ras->vcc = NULL;
+  ras->uuid = NULL;
   /* save config and server group in the auth parameter hash */
   svn_auth_set_parameter(ras->callbacks->auth_baton,
                          SVN_AUTH_PARAM_CONFIG, cfg);
@@ -1314,31 +1325,24 @@
     {
       svn_ra_neon__resource_t *rsrc;
       const char *lopped_path;
-      const svn_string_t *uuid_propval;
 
       SVN_ERR(svn_ra_neon__search_for_starting_props(&rsrc, &lopped_path,
                                                      ras, ras->url->data,
                                                      pool));
       SVN_ERR(svn_ra_neon__maybe_store_auth_info(ras, pool));
 
-      uuid_propval = apr_hash_get(rsrc->propset,
-                                  SVN_RA_NEON__PROP_REPOSITORY_UUID,
-                                  APR_HASH_KEY_STRING);
-      if (uuid_propval == NULL)
-        /* ### better error reporting... */
-        return svn_error_create(APR_EGENERAL, NULL,
-                                _("The UUID property was not found on the "
-                                  "resource or any of its parents"));
-
-      if (uuid_propval && (uuid_propval->len > 0))
-        ras->uuid = apr_pstrdup(ras->pool, uuid_propval->data); /* cache */
-      else
-        return svn_error_create
-          (SVN_ERR_RA_NO_REPOS_UUID, NULL,
-           _("Please upgrade the server to 0.19 or later"));
+      if (! ras->uuid)
+        {
+          /* ### better error reporting... */
+          return svn_error_create(APR_EGENERAL, NULL,
+                                  _("The UUID property was not found on the "
+                                    "resource or any of its parents"));
+        }
     }
 
+  /* search_for_starting_props() filled it. */
   *uuid = ras->uuid;
+
   return SVN_NO_ERROR;
 }
 
diff --git a/subversion/libsvn_ra_serf/serf.c b/subversion/libsvn_ra_serf/serf.c
index 2a99ae2..4e58a7e 100644
--- a/subversion/libsvn_ra_serf/serf.c
+++ b/subversion/libsvn_ra_serf/serf.c
@@ -203,10 +203,18 @@
                             apr_pool_t *pool)
 {
   svn_ra_serf__session_t *serf_sess = ra_session->priv;
+  const char *cap_result;
 
-  const char *cap_result = apr_hash_get(serf_sess->capabilities,
-                                        capability,
-                                        APR_HASH_KEY_STRING);
+  /* This capability doesn't rely on anything server side. */
+  if (strcmp(capability, SVN_RA_CAPABILITY_COMMIT_REVPROPS) == 0)
+    {
+      *has = TRUE;
+      return SVN_NO_ERROR;
+    }
+
+  cap_result = apr_hash_get(serf_sess->capabilities,
+                            capability,
+                            APR_HASH_KEY_STRING);
 
   /* If any capability is unknown, they're all unknown, so ask. */
   if (cap_result == NULL)
@@ -499,7 +507,8 @@
                                _("Illegal repository URL '%s'"),
                                repos_URL);
     }
-  /* Work around an issue in apr-util 1.2.12 and older */
+  /* Contrary to what the comment for apr_uri_t.path says in apr-util 1.2.12 and
+     older, for root paths url.path will be "", where serf requires "/". */
   if (url.path == NULL || url.path[0] == '\0')
     url.path = apr_pstrdup(serf_sess->pool, "/");
 
diff --git a/subversion/libsvn_ra_svn/client.c b/subversion/libsvn_ra_svn/client.c
index abc4a13..be8287a 100644
--- a/subversion/libsvn_ra_svn/client.c
+++ b/subversion/libsvn_ra_svn/client.c
@@ -2248,6 +2248,9 @@
     *has = svn_ra_svn_has_capability(sess->conn, SVN_RA_SVN_CAP_LOG_REVPROPS);
   else if (strcmp(capability, SVN_RA_CAPABILITY_PARTIAL_REPLAY) == 0)
     *has = svn_ra_svn_has_capability(sess->conn, SVN_RA_SVN_CAP_PARTIAL_REPLAY);
+  else if (strcmp(capability, SVN_RA_CAPABILITY_COMMIT_REVPROPS) == 0)
+    *has = svn_ra_svn_has_capability(sess->conn, 
+                                     SVN_RA_SVN_CAP_COMMIT_REVPROPS);
   else  /* Don't know any other capabilities, so error. */
     {
       return svn_error_createf
diff --git a/subversion/libsvn_repos/log.c b/subversion/libsvn_repos/log.c
index 578b1f4..4aa8c43 100644
--- a/subversion/libsvn_repos/log.c
+++ b/subversion/libsvn_repos/log.c
@@ -558,10 +558,10 @@
         APR_ARRAY_PUSH(query_paths, const char *) = path;
     }
 
-  /* We do not need to call svn_repos_fs_get_mergeinfo() (which performs authz)
-     because we are already doing authz on the changed paths and the log
-     messages when we go to fill the log entry.  See fill_log_entry() for
-     details. */
+  /* We do not need to call svn_repos_fs_get_mergeinfo() (which
+     performs authz) because we are already doing authz on the changed
+     paths and the log messages when we go to fill the log entry.  See
+     fill_log_entry() for details. */
   SVN_ERR(svn_fs_get_mergeinfo(&tree_mergeinfo, root, query_paths,
                                svn_mergeinfo_inherited, TRUE,
                                subpool));
@@ -569,7 +569,8 @@
   *combined_mergeinfo = apr_hash_make(subpool);
 
   /* Merge all the mergeinfos into one mergeinfo */
-  for (hi = apr_hash_first(subpool, tree_mergeinfo); hi; hi = apr_hash_next(hi))
+  for (hi = apr_hash_first(subpool, tree_mergeinfo); 
+       hi; hi = apr_hash_next(hi))
     {
       svn_mergeinfo_t mergeinfo;
 
@@ -605,10 +606,10 @@
     }
 
   subpool = svn_pool_create(pool);
-
-  SVN_ERR(get_combined_mergeinfo(&curr_mergeinfo, fs, rev, paths, subpool));
-  SVN_ERR(get_combined_mergeinfo(&prev_mergeinfo, fs, rev - 1, paths, subpool));
-
+  SVN_ERR(get_combined_mergeinfo(&curr_mergeinfo, fs, rev, 
+                                 paths, subpool));
+  SVN_ERR(get_combined_mergeinfo(&prev_mergeinfo, fs, rev - 1, 
+                                 paths, subpool));
   SVN_ERR(svn_mergeinfo_diff(&deleted, &changed, prev_mergeinfo,
                              curr_mergeinfo, FALSE,
                              subpool));
@@ -796,7 +797,7 @@
      get the next history.
   */
   *histories = apr_array_make(pool, paths->nelts,
-                             sizeof(struct path_info *));
+                              sizeof(struct path_info *));
 
   SVN_ERR(svn_fs_revision_root(&root, fs, hist_end, pool));
 
@@ -945,8 +946,9 @@
         APR_ARRAY_IDX(rp->rangelist, i, svn_merge_range_t *)->start += 1;
     }
 
-  /* Loop over the (revision range, path) tuples, chopping them into 
-     (revision range, paths) tuples, and appending those to the output list. */
+  /* Loop over the (revision range, path) tuples, chopping them into
+     (revision range, paths) tuples, and appending those to the output
+     list. */
   *combined_list = apr_array_make(pool, 0, sizeof(struct path_list_range *));
   while (rangelist_paths->nelts > 1)
     {
@@ -976,17 +978,18 @@
             }
           rp = APR_ARRAY_IDX(rangelist_paths, num_revs,
                              struct rangelist_path *);
-          next_youngest =
-            APR_ARRAY_IDX(rp->rangelist, 0, struct svn_merge_range_t *)->start;
+          next_youngest = APR_ARRAY_IDX(rp->rangelist, 0, 
+                                        struct svn_merge_range_t *)->start;
         }
       num_revs -= 1;
 
       /* The start of the new range will be YOUNGEST, and we now find the end
          of the new range, which should be either one less than the next 
          earliest start of a rangelist, or the end of the first rangelist. */
-      youngest_end = APR_ARRAY_IDX(APR_ARRAY_IDX(rangelist_paths, 0,
-                                          struct rangelist_path *)->rangelist,
-                                   0, svn_merge_range_t *)->end;
+      youngest_end = 
+        APR_ARRAY_IDX(APR_ARRAY_IDX(rangelist_paths, 0,
+                                    struct rangelist_path *)->rangelist,
+                      0, svn_merge_range_t *)->end;
       if ( (next_youngest == youngest) || (youngest_end < next_youngest) )
         tail = youngest_end;
       else
@@ -1040,8 +1043,8 @@
      list. */
   if (rangelist_paths->nelts > 0)
     {
-      struct rangelist_path *first_rp = APR_ARRAY_IDX(rangelist_paths, 0,
-                                                      struct rangelist_path *);
+      struct rangelist_path *first_rp = 
+        APR_ARRAY_IDX(rangelist_paths, 0, struct rangelist_path *);
       while (first_rp->rangelist->nelts > 0)
         {
           struct path_list_range *plr = apr_palloc(pool, sizeof(*plr));
@@ -1119,31 +1122,37 @@
   if (limit == 0)
     use_limit = FALSE;
 
-  /* Find the our oldest revision is using strict node history */
+  /* If using strict node history, find the oldest revision since
+     which the histories of all of our requested paths contain no
+     copies/moves.  This becomes the new lower bound to our revision
+     history search.  */
   iterpool = svn_pool_create(pool);
   if (strict_node_history)
-    for (i = 0; i < paths->nelts; i++)
-      {
-        const char *path = APR_ARRAY_IDX(paths, i, const char *);
-        svn_revnum_t oldest;
-        svn_fs_root_t *copy_root, *rev_root;
-        const char *copy_path;
+    {
+      for (i = 0; i < paths->nelts; i++)
+        {
+          const char *path = APR_ARRAY_IDX(paths, i, const char *);
+          svn_revnum_t oldest;
+          svn_fs_root_t *copy_root, *rev_root;
+          const char *copy_path;
+          
+          svn_pool_clear(iterpool);
+          SVN_ERR(svn_fs_revision_root(&rev_root, fs, hist_end, iterpool));
+          SVN_ERR(svn_fs_closest_copy(&copy_root, &copy_path, rev_root, path,
+                                      iterpool));
+          
+          if (copy_root != NULL)
+            {
+              oldest = svn_fs_revision_root_revision(copy_root) + 1;
+              hist_start = MAX(oldest, hist_start);
+            }
+        }
+    }
 
-        svn_pool_clear(iterpool);
-        SVN_ERR(svn_fs_revision_root(&rev_root, fs, hist_end, iterpool));
-        SVN_ERR(svn_fs_closest_copy(&copy_root, &copy_path, rev_root, path,
-                                    iterpool));
-
-        if (copy_root != NULL)
-          {
-            oldest = svn_fs_revision_root_revision(copy_root) + 1;
-            hist_start = (oldest > hist_start ? oldest : hist_start);
-          }
-      }
-
-  /* We only really care about revisions in which those paths were changed.
-     So we ask the filesystem for all the revisions in which any of the
-     paths was changed.  */
+  /* We have a list of paths and a revision range.  But we don't care
+     about all the revisions in the range -- only the ones in which
+     one of our paths was changed.  So let's go figure out which
+     revisions contain real changes to at least one of our paths.  */
   SVN_ERR(get_path_histories(&histories, fs, paths,
                              (mainline_run ? 0 : hist_start), hist_end,
                              (mainline_run ? FALSE : strict_node_history),
@@ -1226,8 +1235,8 @@
         }
 
       SVN_ERR(send_log(rev, fs, discover_changed_paths, revprops,
-                       has_children, receiver, receiver_baton, authz_read_func,
-                       authz_read_baton, iterpool));
+                       has_children, receiver, receiver_baton, 
+                       authz_read_func, authz_read_baton, iterpool));
 
       if (has_children)
         {
@@ -1252,7 +1261,8 @@
                                      pl_range->range.end,
                                      0, discover_changed_paths,
                                      strict_node_history, revprops, TRUE,
-                                     found_revisions, receiver, receiver_baton,
+                                     found_revisions, 
+                                     receiver, receiver_baton,
                                      authz_read_func, authz_read_baton,
                                      permpool, iterpool2));
             }
diff --git a/subversion/libsvn_subr/cmdline.c b/subversion/libsvn_subr/cmdline.c
index ee829f0..7ca00f9 100644
--- a/subversion/libsvn_subr/cmdline.c
+++ b/subversion/libsvn_subr/cmdline.c
@@ -365,6 +365,7 @@
                              apr_pool_t *pool)
 {
   svn_boolean_t store_password_val = TRUE;
+  svn_boolean_t store_auth_creds_val = TRUE;
   svn_auth_provider_object_t *provider;
 
   /* The whole list of registered providers */
@@ -469,12 +470,12 @@
   /* There are two different ways the user can disable disk caching
      of credentials:  either via --no-auth-cache, or in the config
      file ('store-auth-creds = no'). */
-  SVN_ERR(svn_config_get_bool(cfg, &store_password_val,
+  SVN_ERR(svn_config_get_bool(cfg, &store_auth_creds_val,
                               SVN_CONFIG_SECTION_AUTH,
                               SVN_CONFIG_OPTION_STORE_AUTH_CREDS,
                               TRUE));
 
-  if (no_auth_cache || ! store_password_val)
+  if (no_auth_cache || ! store_auth_creds_val)
     svn_auth_set_parameter(*ab, SVN_AUTH_PARAM_NO_AUTH_CACHE, "");
 
   return SVN_NO_ERROR;
diff --git a/subversion/libsvn_wc/README b/subversion/libsvn_wc/README
index 4caff53..5433e88 100644
--- a/subversion/libsvn_wc/README
+++ b/subversion/libsvn_wc/README
@@ -423,8 +423,9 @@
 
 copied:
    A boolean: true if this entry was added with history; only allowed
-   when schedule is add.  (### Why aren't the copyfrom attributes
-   enough for this?)
+   when schedule is add or for files which are marked as schedule-normal
+   as part of a schedule-add-with-history subtree. (### Why aren't the
+   copyfrom attributes enough for this?)
 
 copyfrom-url:
    If this entry is added with history, the URL of the copy source.
diff --git a/subversion/libsvn_wc/adm_ops.c b/subversion/libsvn_wc/adm_ops.c
index e96337e..7b953df 100644
--- a/subversion/libsvn_wc/adm_ops.c
+++ b/subversion/libsvn_wc/adm_ops.c
@@ -2975,14 +2975,15 @@
      user about this, but still allow the reassignment to happen. */
   if (entry->changelist && changelist && notify_func)
     {
-      svn_error_t *unversioned_err =
+      svn_error_t *reassign_err =
         svn_error_createf(SVN_ERR_WC_CHANGELIST_MOVE, NULL,
                           _("Removing '%s' from changelist '%s'."),
                           path, entry->changelist);
       notify = svn_wc_create_notify(path, svn_wc_notify_changelist_moved, 
                                     pool);
-      notify->err = unversioned_err;
+      notify->err = reassign_err;
       notify_func(notify_baton, notify, pool);
+      svn_error_clear(notify->err);
     }
   
   /* Tweak the entry. */
diff --git a/subversion/mod_dav_svn/lock.c b/subversion/mod_dav_svn/lock.c
index 101c411..581f00a 100644
--- a/subversion/mod_dav_svn/lock.c
+++ b/subversion/mod_dav_svn/lock.c
@@ -760,7 +760,7 @@
   /* Log the locking as a 'high-level' action. */
   dav_svn__operational_log(resource->info,
                            apr_psprintf(resource->info->r->pool,
-                                        "lock %s%s",
+                                        "lock (%s)%s",
                                         svn_path_uri_encode(slock->path,
                                                  resource->info->r->pool),
                                         info->lock_steal ? " steal" : ""));
@@ -848,7 +848,7 @@
       /* Log the unlocking as a 'high-level' action. */
       dav_svn__operational_log(resource->info,
                                apr_psprintf(resource->info->r->pool,
-                                 "unlock %s%s",
+                                 "unlock (%s)%s",
                                  svn_path_uri_encode(resource->info->repos_path,
                                                      resource->info->r->pool),
                                             info->lock_break ? " break" : ""));
diff --git a/subversion/mod_dav_svn/reports/mergeinfo.c b/subversion/mod_dav_svn/reports/mergeinfo.c
index 18efe76..238ac91 100644
--- a/subversion/mod_dav_svn/reports/mergeinfo.c
+++ b/subversion/mod_dav_svn/reports/mergeinfo.c
@@ -220,9 +220,10 @@
  cleanup:
 
   /* We've detected a 'high level' svn action to log. */
-  action = apr_psprintf(resource->pool, "get-mergeinfo (%s) %s",
+  action = apr_psprintf(resource->pool, "get-mergeinfo (%s) %s%s",
                         space_separated_paths->data,
-                        svn_inheritance_to_word(inherit));
+                        svn_inheritance_to_word(inherit),
+                        include_descendants ? " include-descendants" : "");
   dav_svn__operational_log(resource->info, action);
 
   /* We don't flush the brigade unless there's something in it to
diff --git a/subversion/mod_dav_svn/reports/update.c b/subversion/mod_dav_svn/reports/update.c
index bf62a42..cbcc7c8 100644
--- a/subversion/mod_dav_svn/reports/update.c
+++ b/subversion/mod_dav_svn/reports/update.c
@@ -92,6 +92,7 @@
 
   svn_boolean_t text_changed;        /* Did the file's contents change? */
   svn_boolean_t added;               /* File added? (Implies text_changed.) */
+  svn_boolean_t copyfrom;            /* File copied? */
   apr_array_header_t *changed_props; /* array of const char * prop names */
   apr_array_header_t *removed_props; /* array of const char * prop names */
 
@@ -352,6 +353,8 @@
                                " copyfrom-rev=\"%ld\">" DEBUG_CR,
                                DIR_OR_FILE(is_dir),
                                qname, qcopy, copyfrom_revision);
+
+          child->copyfrom = TRUE;
         }
 
       /* Resist the temptation to pass 'elt' as the format string.
@@ -404,7 +407,8 @@
     return SVN_NO_ERROR;
 
   /* ### ack!  binary names won't float here! */
-  if (baton->removed_props && (! baton->added))
+  /* If this is a copied file/dir, we can have removed props. */
+  if (baton->removed_props && (! baton->added || baton->copyfrom))
     {
       const char *qname;
 
@@ -761,7 +765,7 @@
 
 
 /* We have our own window handler and baton as a simple wrapper around
-   the real handler (which converts vdelta windows to base64-encoded
+   the real handler (which converts txdelta windows to base64-encoded
    svndiff data).  The wrapper is responsible for sending the opening
    and closing XML tags around the svndiff data. */
 struct window_handler_baton
@@ -1330,26 +1334,33 @@
     if (dst_path)
       {
         /* diff/merge don't ask for inline text-deltas. */
-        if (!uc.send_all && strcmp(spath, dst_path) == 0)
+        if (uc.send_all)
           action = apr_psprintf(resource->pool,
-                                "diff %s r%ld:%ld%s%s",
+                                "switch %s %s@%ld%s",
                                 svn_path_uri_encode(spath, resource->pool),
-                                from_revnum,
-                                revnum, log_depth,
-                                ignore_ancestry ? " ignore-ancestry" : "");
-        else
-          action = apr_psprintf(resource->pool,
-                                "%s %s@%ld %s@%ld%s%s",
-                                (uc.send_all ? "switch" : "diff"),
-                                svn_path_uri_encode(spath, resource->pool),
-                                from_revnum,
                                 svn_path_uri_encode(dst_path, resource->pool),
-                                revnum, log_depth,
-                                /* ignore-ancestry only applies to merge, and
-                                   we use uc.send_all to know if this is a
-                                   diff/merge or not. */
-                                (!uc.send_all && ignore_ancestry
-                                 ? " ignore-ancestry" : ""));
+                                revnum, log_depth);
+        else
+          {
+            if (strcmp(spath, dst_path) == 0)
+              action = apr_psprintf(resource->pool,
+                                    "diff %s r%ld:%ld%s%s",
+                                    svn_path_uri_encode(spath, resource->pool),
+                                    from_revnum,
+                                    revnum, log_depth,
+                                    ignore_ancestry ? " ignore-ancestry" : "");
+            else
+              action = apr_psprintf(resource->pool,
+                                    "diff %s@%ld %s@%ld%s%s",
+                                    svn_path_uri_encode(spath, resource->pool),
+                                    from_revnum,
+                                    svn_path_uri_encode(dst_path,
+                                                        resource->pool),
+                                    revnum, log_depth,
+                                    (ignore_ancestry
+                                     ? " ignore-ancestry"
+                                     : ""));
+          }
       }
 
     /* Otherwise, it must be checkout, export, update, or status -u. */
diff --git a/subversion/po/fr.po b/subversion/po/fr.po
index 44de186..8941118 100644
--- a/subversion/po/fr.po
+++ b/subversion/po/fr.po
@@ -9,8 +9,8 @@
 msgstr ""
 "Project-Id-Version: subversion 1.5\n"
 "Report-Msgid-Bugs-To: dev@subversion.tigris.org\n"
-"POT-Creation-Date: 2008-03-16 11:11+0100\n"
-"PO-Revision-Date: 2008-03-16 13:11+0100\n"
+"POT-Creation-Date: 2008-04-15 15:30+0200\n"
+"PO-Revision-Date: 2008-04-15 16:54+0200\n"
 "Last-Translator: Subversion Developers <dev@subversion.tigris.org>\n"
 "Language-Team: French <dev@subversion.tigris.org>\n"
 "MIME-Version: 1.0\n"
@@ -733,316 +733,320 @@
 msgid "Initialization of SSPI library failed"
 msgstr "Échec à l'initialisation de la librairie SSPI"
 
-#: ../include/svn_error_codes.h:851
+#: ../include/svn_error_codes.h:847
+msgid "Server SSL certificate untrusted"
+msgstr "Certificat SSL du serveur non reconnu"
+
+#: ../include/svn_error_codes.h:855
 msgid "Credential data unavailable"
 msgstr "Données d'identité (credentials) non disponibles"
 
-#: ../include/svn_error_codes.h:855
+#: ../include/svn_error_codes.h:859
 msgid "No authentication provider available"
 msgstr "Aucun fournisseur d'authentification disponible"
 
-#: ../include/svn_error_codes.h:859 ../include/svn_error_codes.h:863
+#: ../include/svn_error_codes.h:863 ../include/svn_error_codes.h:867
 msgid "All authentication providers exhausted"
 msgstr "Tous les fournisseurs d'authentifications sont épuisés"
 
-#: ../include/svn_error_codes.h:868
+#: ../include/svn_error_codes.h:872
 msgid "Authentication failed"
 msgstr "Échec de l'authentification"
 
-#: ../include/svn_error_codes.h:874
+#: ../include/svn_error_codes.h:878
 msgid "Read access denied for root of edit"
 msgstr "Accès en lecture refusé pour la racine de l'édition"
 
-#: ../include/svn_error_codes.h:879
+#: ../include/svn_error_codes.h:883
 msgid "Item is not readable"
 msgstr "Éléments non accessibles en lecture"
 
-#: ../include/svn_error_codes.h:884
+#: ../include/svn_error_codes.h:888
 msgid "Item is partially readable"
 msgstr "Certains éléments non accessibles en lecture"
 
-#: ../include/svn_error_codes.h:888
+#: ../include/svn_error_codes.h:892
 msgid "Invalid authz configuration"
 msgstr "Configuration de authz invalide"
 
-#: ../include/svn_error_codes.h:893
+#: ../include/svn_error_codes.h:897
 msgid "Item is not writable"
 msgstr "Éléments non accessibles en écriture"
 
-#: ../include/svn_error_codes.h:899
+#: ../include/svn_error_codes.h:903
 msgid "Svndiff data has invalid header"
 msgstr "Les données de svndiff contiennent un en-tête invalide"
 
-#: ../include/svn_error_codes.h:903
+#: ../include/svn_error_codes.h:907
 msgid "Svndiff data contains corrupt window"
 msgstr "Les données de svndiff contiennent une fenêtre corrompue"
 
-#: ../include/svn_error_codes.h:907
+#: ../include/svn_error_codes.h:911
 msgid "Svndiff data contains backward-sliding source view"
 msgstr "Les données de 'svndiff' contiennent une vue source glissant en arrière"
 
-#: ../include/svn_error_codes.h:911
+#: ../include/svn_error_codes.h:915
 msgid "Svndiff data contains invalid instruction"
 msgstr "Les données de svndiff contiennent une instruction invalide"
 
-#: ../include/svn_error_codes.h:915
+#: ../include/svn_error_codes.h:919
 msgid "Svndiff data ends unexpectedly"
 msgstr "Les données de svndiff se terminent de façon inattendue"
 
-#: ../include/svn_error_codes.h:919
+#: ../include/svn_error_codes.h:923
 msgid "Svndiff compressed data is invalid"
 msgstr "Les données compressées de svndiff sont invalides"
 
-#: ../include/svn_error_codes.h:925
+#: ../include/svn_error_codes.h:929
 msgid "Diff data source modified unexpectedly"
 msgstr "Modification des données sources de diff inattendue"
 
-#: ../include/svn_error_codes.h:931
+#: ../include/svn_error_codes.h:935
 msgid "Apache has no path to an SVN filesystem"
 msgstr "Apache n'a pas de chemin vers un système de fichier SVN"
 
-#: ../include/svn_error_codes.h:935
+#: ../include/svn_error_codes.h:939
 msgid "Apache got a malformed URI"
 msgstr "Apache a reçu une URI malformé"
 
-#: ../include/svn_error_codes.h:939
+#: ../include/svn_error_codes.h:943
 msgid "Activity not found"
 msgstr "Activité non trouvée"
 
-#: ../include/svn_error_codes.h:943
+#: ../include/svn_error_codes.h:947
 msgid "Baseline incorrect"
 msgstr "Ligne de base (baseline) incorrecte"
 
-#: ../include/svn_error_codes.h:947
+#: ../include/svn_error_codes.h:951
 msgid "Input/output error"
 msgstr "Erreur d'entrée/sortie"
 
-#: ../include/svn_error_codes.h:953
+#: ../include/svn_error_codes.h:957
 msgid "A path under version control is needed for this operation"
 msgstr "Un objet sous gestionnaire de version est nécessaire à cette opération"
 
-#: ../include/svn_error_codes.h:957
+#: ../include/svn_error_codes.h:961
 msgid "Repository access is needed for this operation"
 msgstr "L'accès au dépôt est nécessaire pour cette opération"
 
-#: ../include/svn_error_codes.h:961
+#: ../include/svn_error_codes.h:965
 msgid "Bogus revision information given"
 msgstr "Fausse information de révision donnée"
 
-#: ../include/svn_error_codes.h:965
+#: ../include/svn_error_codes.h:969
 msgid "Attempting to commit to a URL more than once"
 msgstr "Tentative de propager plus d'une fois à la même URL"
 
-#: ../include/svn_error_codes.h:969
+#: ../include/svn_error_codes.h:973
 msgid "Operation does not apply to binary file"
 msgstr "Opération non applicable à un fichier binaire"
 
-#: ../include/svn_error_codes.h:975
+#: ../include/svn_error_codes.h:979
 msgid "Format of an svn:externals property was invalid"
 msgstr "Format de la propriété svn:externals invalide"
 
-#: ../include/svn_error_codes.h:979
+#: ../include/svn_error_codes.h:983
 msgid "Attempting restricted operation for modified resource"
 msgstr "Tentative d'une opération protégée sur une ressource modifiée"
 
-#: ../include/svn_error_codes.h:983
+#: ../include/svn_error_codes.h:987
 msgid "Operation does not apply to directory"
 msgstr "Opération non applicable sur un répertoire"
 
-#: ../include/svn_error_codes.h:987
+#: ../include/svn_error_codes.h:991
 msgid "Revision range is not allowed"
 msgstr "Intervalle de révision non permise"
 
-#: ../include/svn_error_codes.h:991
+#: ../include/svn_error_codes.h:995
 msgid "Inter-repository relocation not allowed"
 msgstr "Relocalisation entre dépôts différents non permise"
 
-#: ../include/svn_error_codes.h:995
+#: ../include/svn_error_codes.h:999
 msgid "Author name cannot contain a newline"
 msgstr "Le nom d'auteur ne peut contenir un saut de ligne"
 
-#: ../include/svn_error_codes.h:999
+#: ../include/svn_error_codes.h:1003
 msgid "Bad property name"
 msgstr "Mauvais nom de propriété"
 
-#: ../include/svn_error_codes.h:1004
+#: ../include/svn_error_codes.h:1008
 msgid "Two versioned resources are unrelated"
 msgstr "Les deux ressources versionnées ne sont pas apparentées"
 
-#: ../include/svn_error_codes.h:1009
+#: ../include/svn_error_codes.h:1013
 msgid "Path has no lock token"
 msgstr "Chemin sans verrou"
 
-#: ../include/svn_error_codes.h:1014
+#: ../include/svn_error_codes.h:1018
 msgid "Operation does not support multiple sources"
 msgstr "Opération ne supportant pas des sources multiples"
 
-#: ../include/svn_error_codes.h:1019
+#: ../include/svn_error_codes.h:1023
 msgid "No versioned parent directories"
 msgstr "Pas de répertoire parent versionné"
 
-#: ../include/svn_error_codes.h:1024
+#: ../include/svn_error_codes.h:1028
 msgid "Working copy and merge source not ready for reintegration"
 msgstr "Copie de travail et source du merge non prêt pour une réintégration"
 
-#: ../include/svn_error_codes.h:1030
+#: ../include/svn_error_codes.h:1034
 msgid "A problem occurred; see later errors for details"
 msgstr "Une erreur est survenue; voir erreurs suivantes pour plus de détails"
 
-#: ../include/svn_error_codes.h:1034
+#: ../include/svn_error_codes.h:1038
 msgid "Failure loading plugin"
 msgstr "Erreur lors du chargement du plugin"
 
-#: ../include/svn_error_codes.h:1038
+#: ../include/svn_error_codes.h:1042
 msgid "Malformed file"
 msgstr "Fichier malformé"
 
-#: ../include/svn_error_codes.h:1042
+#: ../include/svn_error_codes.h:1046
 msgid "Incomplete data"
 msgstr "Données incomplètes"
 
-#: ../include/svn_error_codes.h:1046
+#: ../include/svn_error_codes.h:1050
 msgid "Incorrect parameters given"
 msgstr "Paramètres fournis incorrects"
 
-#: ../include/svn_error_codes.h:1050
+#: ../include/svn_error_codes.h:1054
 msgid "Tried a versioning operation on an unversioned resource"
 msgstr "Essai d'une opération sur une ressource non versionnée"
 
-#: ../include/svn_error_codes.h:1054
+#: ../include/svn_error_codes.h:1058
 msgid "Test failed"
 msgstr "Test échoué"
 
-#: ../include/svn_error_codes.h:1058
+#: ../include/svn_error_codes.h:1062
 msgid "Trying to use an unsupported feature"
 msgstr "Tentative d'utilisation d'une fonction non supportée"
 
-#: ../include/svn_error_codes.h:1062
+#: ../include/svn_error_codes.h:1066
 msgid "Unexpected or unknown property kind"
 msgstr "Type de propriété inattendu ou inconnu"
 
-#: ../include/svn_error_codes.h:1066
+#: ../include/svn_error_codes.h:1070
 msgid "Illegal target for the requested operation"
 msgstr "Cible illégale pour l'opération demandée"
 
-#: ../include/svn_error_codes.h:1070
+#: ../include/svn_error_codes.h:1074
 msgid "MD5 checksum is missing"
 msgstr "Somme de contrôle MD5 manquante"
 
-#: ../include/svn_error_codes.h:1074
+#: ../include/svn_error_codes.h:1078
 msgid "Directory needs to be empty but is not"
 msgstr "Un répertoire doit être vide mais ne l'est pas"
 
-#: ../include/svn_error_codes.h:1078
+#: ../include/svn_error_codes.h:1082
 msgid "Error calling external program"
 msgstr "Erreur lors de l'appel d'un programme externe"
 
-#: ../include/svn_error_codes.h:1082
+#: ../include/svn_error_codes.h:1086
 msgid "Python exception has been set with the error"
 msgstr "L'exception de Python a été levée avec l'erreur"
 
-#: ../include/svn_error_codes.h:1086
+#: ../include/svn_error_codes.h:1090
 msgid "A checksum mismatch occurred"
 msgstr "Sommes de contrôle différentes"
 
-#: ../include/svn_error_codes.h:1090
+#: ../include/svn_error_codes.h:1094
 msgid "The operation was interrupted"
 msgstr "Opération interrompue"
 
-#: ../include/svn_error_codes.h:1094
+#: ../include/svn_error_codes.h:1098
 msgid "The specified diff option is not supported"
 msgstr "L'option fournie à diff n'est pas supportée"
 
-#: ../include/svn_error_codes.h:1098
+#: ../include/svn_error_codes.h:1102
 msgid "Property not found"
 msgstr "Propriété non trouvée"
 
-#: ../include/svn_error_codes.h:1102
+#: ../include/svn_error_codes.h:1106
 msgid "No auth file path available"
 msgstr "Pas de chemin de fichier d'authentification (auth file) disponible"
 
-#: ../include/svn_error_codes.h:1107
+#: ../include/svn_error_codes.h:1111
 msgid "Incompatible library version"
 msgstr "Version de librairie incompatible"
 
-#: ../include/svn_error_codes.h:1112
+#: ../include/svn_error_codes.h:1116
 msgid "Mergeinfo parse error"
 msgstr "Mergeinfo : erreur de syntaxe"
 
-#: ../include/svn_error_codes.h:1117
+#: ../include/svn_error_codes.h:1121
 msgid "Cease invocation of this API"
 msgstr "Cesse l'invocation de cette API"
 
-#: ../include/svn_error_codes.h:1122
+#: ../include/svn_error_codes.h:1126
 msgid "Error parsing revision number"
 msgstr "Erreur de syntaxe sur le numéro révision"
 
-#: ../include/svn_error_codes.h:1127
+#: ../include/svn_error_codes.h:1131
 msgid "Iteration terminated before completion"
 msgstr "Itérations arrêtées avant la fin"
 
-#: ../include/svn_error_codes.h:1132
+#: ../include/svn_error_codes.h:1136
 msgid "Unknown changelist"
 msgstr "Liste de changements inconnue"
 
-#: ../include/svn_error_codes.h:1137
+#: ../include/svn_error_codes.h:1141
 msgid "Reserved directory name in command line arguments"
 msgstr "Nom de répertoire réservé en argument de la ligne de commande"
 
-#: ../include/svn_error_codes.h:1142
+#: ../include/svn_error_codes.h:1146
 msgid "Inquiry about unknown capability"
 msgstr "Demande concernant une capacité inconnue"
 
-#: ../include/svn_error_codes.h:1148
+#: ../include/svn_error_codes.h:1152
 msgid "Error parsing arguments"
 msgstr "Erreur lors de l'analyse des arguments"
 
-#: ../include/svn_error_codes.h:1152
+#: ../include/svn_error_codes.h:1156
 msgid "Not enough arguments provided"
 msgstr "Nombre d'arguments insuffisant"
 
-#: ../include/svn_error_codes.h:1156
+#: ../include/svn_error_codes.h:1160
 msgid "Mutually exclusive arguments specified"
 msgstr "Arguments mutuellement exclusifs fournis"
 
-#: ../include/svn_error_codes.h:1160
+#: ../include/svn_error_codes.h:1164
 msgid "Attempted command in administrative dir"
 msgstr "Commande essayée sur un répertoire d'administration"
 
-#: ../include/svn_error_codes.h:1164
+#: ../include/svn_error_codes.h:1168
 msgid "The log message file is under version control"
 msgstr "Le fichier pour l'entrée du journal est sous gestionnaire de version"
 
-#: ../include/svn_error_codes.h:1168
+#: ../include/svn_error_codes.h:1172
 msgid "The log message is a pathname"
 msgstr "L'entrée du journal est un chemin de fichier"
 
-#: ../include/svn_error_codes.h:1172
+#: ../include/svn_error_codes.h:1176
 msgid "Committing in directory scheduled for addition"
 msgstr "Propagation dans un répertoire qui doit être ajouté"
 
-#: ../include/svn_error_codes.h:1176
+#: ../include/svn_error_codes.h:1180
 msgid "No external editor available"
 msgstr "Pas d'éditeur externe disponible"
 
-#: ../include/svn_error_codes.h:1180
+#: ../include/svn_error_codes.h:1184
 msgid "Something is wrong with the log message's contents"
 msgstr "Quelque chose ne va pas dans l'entrée du journal"
 
-#: ../include/svn_error_codes.h:1184
+#: ../include/svn_error_codes.h:1188
 msgid "A log message was given where none was necessary"
 msgstr "Message de journal fourni alors qu'aucun n'était nécessaire"
 
-#: ../include/svn_error_codes.h:1188
+#: ../include/svn_error_codes.h:1192
 msgid "No external merge tool available"
 msgstr "Aucun éditeur externe de fusion disponible"
 
-#: ../libsvn_client/add.c:348 ../libsvn_wc/copy.c:188
+#: ../libsvn_client/add.c:350 ../libsvn_wc/copy.c:188
 #, c-format
 msgid "Can't close directory '%s'"
 msgstr "Le répertoire '%s' ne peut être fermé"
 
-#: ../libsvn_client/add.c:356
+#: ../libsvn_client/add.c:358
 #, c-format
 msgid "Error during add of '%s'"
 msgstr "Erreur lors de l'ajout de '%s'"
@@ -1113,15 +1117,15 @@
 msgid "'%s' does not exist"
 msgstr "'%s' n'existe pas"
 
-#: ../libsvn_client/commit.c:634 ../libsvn_client/copy.c:518
+#: ../libsvn_client/commit.c:634 ../libsvn_client/copy.c:513
 #: ../svnlook/main.c:1271
 #, c-format
 msgid "Path '%s' does not exist"
 msgstr "Le chemin '%s' n'existe pas"
 
-#: ../libsvn_client/commit.c:769 ../libsvn_client/copy.c:527
-#: ../libsvn_client/copy.c:917 ../libsvn_client/copy.c:1158
-#: ../libsvn_client/copy.c:1585
+#: ../libsvn_client/commit.c:769 ../libsvn_client/copy.c:522
+#: ../libsvn_client/copy.c:912 ../libsvn_client/copy.c:1153
+#: ../libsvn_client/copy.c:1580
 #, c-format
 msgid "Path '%s' already exists"
 msgstr "Le chemin '%s' existe déjà"
@@ -1131,7 +1135,7 @@
 msgid "'%s' is a reserved name and cannot be imported"
 msgstr "'%s' est un nom réservé et ne peut être importé"
 
-#: ../libsvn_client/commit.c:917 ../libsvn_client/copy.c:1325
+#: ../libsvn_client/commit.c:917 ../libsvn_client/copy.c:1320
 msgid "Commit failed (details follow):"
 msgstr "Échec de la propagation (commit), détails : "
 
@@ -1229,76 +1233,76 @@
 msgid "Standard properties can't be set explicitly as revision properties"
 msgstr "Les propriétés standards ne peuvent être définies explicitement comme des propriétés de révision"
 
-#: ../libsvn_client/copy.c:543 ../libsvn_client/copy.c:1601
+#: ../libsvn_client/copy.c:538 ../libsvn_client/copy.c:1596
 #: ../libsvn_client/update.c:140
 #, c-format
 msgid "Path '%s' is not a directory"
 msgstr "Le chemin '%s' n'est pas un répertoire"
 
-#: ../libsvn_client/copy.c:783
+#: ../libsvn_client/copy.c:778
 #, c-format
 msgid "Source and dest appear not to be in the same repository (src: '%s'; dst: '%s')"
 msgstr "Source et destination ne sont pas dans le même dépôt (src = '%s', dst = '%s')"
 
-#: ../libsvn_client/copy.c:898
+#: ../libsvn_client/copy.c:893
 #, c-format
 msgid "Cannot move URL '%s' into itself"
 msgstr "L'URL '%s' ne peut être déplacée (move) dans elle-même"
 
-#: ../libsvn_client/copy.c:907 ../libsvn_client/prop_commands.c:237
+#: ../libsvn_client/copy.c:902 ../libsvn_client/prop_commands.c:249
 #, c-format
 msgid "Path '%s' does not exist in revision %ld"
 msgstr "Le chemin '%s' n'existe pas à la révision %ld"
 
-#: ../libsvn_client/copy.c:1424
+#: ../libsvn_client/copy.c:1419
 #, c-format
 msgid "Source URL '%s' is from foreign repository; leaving it as a disjoint WC"
 msgstr "L'URL source '%s' est dans un dépôt distant ; laissée comme une copie disjointe"
 
-#: ../libsvn_client/copy.c:1572
+#: ../libsvn_client/copy.c:1567
 #, c-format
 msgid "Path '%s' not found in revision %ld"
 msgstr "Chemin '%s' non trouvé à la révision %ld"
 
-#: ../libsvn_client/copy.c:1577
+#: ../libsvn_client/copy.c:1572
 #, c-format
 msgid "Path '%s' not found in head revision"
 msgstr "Chemin '%s' non trouvé à la révision de tête"
 
-#: ../libsvn_client/copy.c:1627
+#: ../libsvn_client/copy.c:1622
 #, c-format
 msgid "Entry for '%s' exists (though the working file is missing)"
 msgstr "L'entrée pour '%s' existe (mais la copie locale manque)"
 
-#: ../libsvn_client/copy.c:1719 ../libsvn_client/diff.c:1694
-#: ../libsvn_client/log.c:334
+#: ../libsvn_client/copy.c:1712 ../libsvn_client/diff.c:1724
+#: ../libsvn_client/log.c:335
 msgid "Revision type requires a working copy path, not a URL"
 msgstr "Type de révision qui requiert un chemin dans une copie locale, pas une URL"
 
-#: ../libsvn_client/copy.c:1764
+#: ../libsvn_client/copy.c:1757
 msgid "Cannot mix repository and working copy sources"
 msgstr "Impossible de mélanger des sources du dépôt et de la copie de travail"
 
-#: ../libsvn_client/copy.c:1807
+#: ../libsvn_client/copy.c:1800
 #, c-format
 msgid "Cannot copy path '%s' into its own child '%s'"
 msgstr "Le chemin '%s' ne peut être copié dans son propre enfant '%s'"
 
-#: ../libsvn_client/copy.c:1827
+#: ../libsvn_client/copy.c:1820
 #, c-format
 msgid "Cannot move path '%s' into itself"
 msgstr "Le chemin '%s' ne peut être déplacé dans lui-même"
 
-#: ../libsvn_client/copy.c:1836
+#: ../libsvn_client/copy.c:1829
 msgid "Moves between the working copy and the repository are not supported"
 msgstr "Les déplacements (move) entre copie de travail et dépôt ne sont pas supportés"
 
-#: ../libsvn_client/copy.c:1899
+#: ../libsvn_client/copy.c:1892
 #, c-format
 msgid "'%s' does not have a URL associated with it"
 msgstr "'%s' n'a pas d'URL associée"
 
-#: ../libsvn_client/copy.c:2269 ../svn/move-cmd.c:61
+#: ../libsvn_client/copy.c:2262 ../svn/move-cmd.c:61
 msgid "Cannot specify revisions (except HEAD) with move operations"
 msgstr "L'opération 'move' n'accepte d'autre révision que HEAD"
 
@@ -1309,7 +1313,7 @@
 
 #: ../libsvn_client/delete.c:67 ../libsvn_wc/adm_ops.c:2955
 #: ../libsvn_wc/entries.c:1272 ../libsvn_wc/entries.c:2383
-#: ../libsvn_wc/entries.c:3005 ../libsvn_wc/update_editor.c:2375
+#: ../libsvn_wc/entries.c:3005 ../libsvn_wc/update_editor.c:2394
 #, c-format
 msgid "'%s' is not under version control"
 msgstr "'%s' n'est pas versionné"
@@ -1355,12 +1359,12 @@
 msgid "Modified: %s%s"
 msgstr "Modifié : %s%s"
 
-#: ../libsvn_client/diff.c:352
+#: ../libsvn_client/diff.c:366
 #, c-format
 msgid "%s\t(revision %ld)"
 msgstr "%s\t(révision %ld)"
 
-#: ../libsvn_client/diff.c:354
+#: ../libsvn_client/diff.c:368
 #, c-format
 msgid "%s\t(working copy)"
 msgstr "%s\t(copie de travail)"
@@ -1370,34 +1374,34 @@
 msgid "Cannot display: file marked as a binary type.%s"
 msgstr "Impossible d'afficher : fichier considéré comme binaire.%s"
 
-#: ../libsvn_client/diff.c:894 ../libsvn_client/merge.c:3785
-#: ../libsvn_client/merge.c:5123
+#: ../libsvn_client/diff.c:881 ../libsvn_client/merge.c:3703
+#: ../libsvn_client/merge.c:4970
 msgid "Not all required revisions are specified"
 msgstr "Toutes les révisions requises ne sont pas précisées"
 
-#: ../libsvn_client/diff.c:909
+#: ../libsvn_client/diff.c:896
 msgid "At least one revision must be non-local for a pegged diff"
 msgstr "Au moins une révision ne doit pas être locale pour un diff avec révision fixée"
 
-#: ../libsvn_client/diff.c:1021 ../libsvn_client/diff.c:1033
+#: ../libsvn_client/diff.c:1008 ../libsvn_client/diff.c:1020
 #, c-format
 msgid "'%s' was not found in the repository at revision %ld"
 msgstr "'%s' n'existe pas dans le dépôt à la révision %ld"
 
-#: ../libsvn_client/diff.c:1092
+#: ../libsvn_client/diff.c:1079
 msgid "Sorry, svn_client_diff4 was called in a way that is not yet supported"
 msgstr "Désolé, appel de svn_client_diff4 de manière non encore supportée"
 
-#: ../libsvn_client/diff.c:1133
+#: ../libsvn_client/diff.c:1119
 msgid "Only diffs between a path's text-base and its working files are supported at this time"
 msgstr "Seules les différences entre des copies de référence et leurs fichiers de travail sont supportées pour l'instant"
 
-#: ../libsvn_client/diff.c:1279 ../libsvn_client/switch.c:126
+#: ../libsvn_client/diff.c:1264 ../libsvn_client/switch.c:126
 #, c-format
 msgid "Directory '%s' has no URL"
 msgstr "Le répertoire '%s' n'a pas d'URL associée"
 
-#: ../libsvn_client/diff.c:1493
+#: ../libsvn_client/diff.c:1475
 msgid "Summarizing diff can only compare repository to repository"
 msgstr "Le diff résumé compare seulement un dépôt à un autre"
 
@@ -1421,7 +1425,7 @@
 msgstr "'%s' existe déjà"
 
 #: ../libsvn_client/export.c:725 ../libsvn_wc/adm_crawler.c:1092
-#: ../libsvn_wc/update_editor.c:2059 ../libsvn_wc/update_editor.c:2725
+#: ../libsvn_wc/update_editor.c:2078 ../libsvn_wc/update_editor.c:2746
 #, c-format
 msgid "Checksum mismatch for '%s'; expected: '%s', actual: '%s'"
 msgstr "Sommes de contrôle différentes pour '%s' ; '%s' attendu, '%s' obtenu"
@@ -1456,6 +1460,11 @@
 msgid "Traversal of '%s' found no ambient depth"
 msgstr "Traversée de '%s' sans profondeur dans le contexte"
 
+#: ../libsvn_client/externals.c:821
+#, c-format
+msgid "'%s' is not a URL"
+msgstr "'%s' n'est pas une URL"
+
 #: ../libsvn_client/info.c:420
 #, c-format
 msgid "Server does not support retrieving information about the repository root"
@@ -1476,9 +1485,9 @@
 msgid "No common parent found, unable to operate on disjoint arguments"
 msgstr "Aucun parent commun trouvé, impossible de travailler avec des arguments disjoints"
 
-#: ../libsvn_client/locking_commands.c:261 ../libsvn_client/merge.c:5140
-#: ../libsvn_client/merge.c:5146 ../libsvn_client/merge.c:5700
-#: ../libsvn_client/merge.c:5856 ../libsvn_client/ra.c:386
+#: ../libsvn_client/locking_commands.c:261 ../libsvn_client/merge.c:4987
+#: ../libsvn_client/merge.c:4993 ../libsvn_client/merge.c:5564
+#: ../libsvn_client/merge.c:5720 ../libsvn_client/ra.c:386
 #: ../libsvn_client/ra.c:423 ../libsvn_client/ra.c:626
 #, c-format
 msgid "'%s' has no URL"
@@ -1499,7 +1508,7 @@
 msgstr "'%s' n'est pas verrouillé"
 
 #: ../libsvn_client/locking_commands.c:407 ../libsvn_fs/fs-loader.c:1035
-#: ../libsvn_ra/ra_loader.c:1125
+#: ../libsvn_ra/ra_loader.c:1127
 msgid "Lock comment contains illegal characters"
 msgstr "Le commentaire du verrou (lock) contient des caractères incorrects"
 
@@ -1507,17 +1516,17 @@
 msgid "Missing required revision specification"
 msgstr "Précision de la révision obligatoire"
 
-#: ../libsvn_client/log.c:371
+#: ../libsvn_client/log.c:372
 msgid "When specifying working copy paths, only one target may be given"
 msgstr "Une seule cible à préciser pour un chemin dans une copie de travail"
 
-#: ../libsvn_client/log.c:394 ../libsvn_client/status.c:296
+#: ../libsvn_client/log.c:395 ../libsvn_client/status.c:296
 #: ../libsvn_client/update.c:154
 #, c-format
 msgid "Entry '%s' has no URL"
 msgstr "L'entrée '%s' n'a pas d'URL associée"
 
-#: ../libsvn_client/log.c:647
+#: ../libsvn_client/log.c:645
 msgid "No commits in repository"
 msgstr "Pas de propagation dans le dépôt"
 
@@ -1539,25 +1548,25 @@
 #. xgettext: the '.working', '.merge-left.r%ld' and
 #. '.merge-right.r%ld' strings are used to tag onto a file
 #. name in case of a merge conflict
-#: ../libsvn_client/merge.c:758
+#: ../libsvn_client/merge.c:747
 msgid ".working"
 msgstr ".courant"
 
-#: ../libsvn_client/merge.c:760
+#: ../libsvn_client/merge.c:749
 #, c-format
 msgid ".merge-left.r%ld"
 msgstr ".fusion-gauche.r%ld"
 
-#: ../libsvn_client/merge.c:763
+#: ../libsvn_client/merge.c:752
 #, c-format
 msgid ".merge-right.r%ld"
 msgstr ".fusion-droit.r%ld"
 
-#: ../libsvn_client/merge.c:1676
+#: ../libsvn_client/merge.c:1666
 msgid "Cannot reverse-merge a range from a path's own future history; try updating first"
 msgstr "Impossible de fusionner un intervalle inversé à partir du futur du chemin considéré ; essayer une mise à jour d'abord"
 
-#: ../libsvn_client/merge.c:2209
+#: ../libsvn_client/merge.c:2158
 #, c-format
 msgid ""
 "One or more conflicts were produced while merging r%ld:%ld into\n"
@@ -1570,45 +1579,45 @@
 "résoudre tous les conflits et ré-exécuter la fusion (merge) pour \n"
 "appliquer les révisions non-fusionnées restantes"
 
-#: ../libsvn_client/merge.c:4771
+#: ../libsvn_client/merge.c:4666
 msgid "Use of two URLs is not compatible with mergeinfo modification"
 msgstr "L'utilisation de deux URLs n'est pas compatible avec la modification des informations de fusion 'mergeinfo'"
 
-#: ../libsvn_client/merge.c:4778 ../libsvn_client/merge.c:5061
+#: ../libsvn_client/merge.c:4673 ../libsvn_client/merge.c:4908
 msgid "Merge from foreign repository is not compatible with mergeinfo modification"
 msgstr "La fusion à partir d'un autre dépôt n'est pas compatible avec la modification des informations de fusion 'mergeinfo'"
 
-#: ../libsvn_client/merge.c:5367
+#: ../libsvn_client/merge.c:5214
 msgid "Cannot reintegrate into a working copy with a switched subtree"
 msgstr "Impossible de réintégrer dans une copie de travail avec un sous-arbre ré-aiguillé"
 
-#: ../libsvn_client/merge.c:5372
+#: ../libsvn_client/merge.c:5219
 msgid "Cannot reintegrate into a working copy not entirely at infinite depth"
 msgstr "Impossible de reintégrer dans une copie de travail de profondeur partielle"
 
-#: ../libsvn_client/merge.c:5377
+#: ../libsvn_client/merge.c:5224
 msgid "Cannot reintegrate into a working copy that has local modifications"
 msgstr "Impossible de réintégrer dans une copie de travail avec des modifications locales"
 
-#: ../libsvn_client/merge.c:5383
+#: ../libsvn_client/merge.c:5230
 msgid "Cannot determine revision of working copy"
 msgstr "Impossible de déterminer la révision de la copie de travail"
 
-#: ../libsvn_client/merge.c:5387
+#: ../libsvn_client/merge.c:5234
 msgid "Cannot reintegrate into mixed-revision working copy; try updating first"
 msgstr "Impossible de reintégrer dans un copie de travail avec des révisions multiples ; Faire une mise à jour (update) d'abord"
 
-#: ../libsvn_client/merge.c:5454
+#: ../libsvn_client/merge.c:5301
 #, c-format
 msgid "At least one revision (r%ld) not yet merged from '%s'"
 msgstr "Au moins une révision (r%ld) non encore fusionnée à partir de '%s'"
 
-#: ../libsvn_client/merge.c:5595 ../libsvn_client/merge.c:5759
+#: ../libsvn_client/merge.c:5459 ../libsvn_client/merge.c:5623
 #, c-format
 msgid "'%s@%ld' must be ancestrally related to '%s@%ld'"
 msgstr "'%s@%ld' doit un ancêtre de '%s@%ld'"
 
-#: ../libsvn_client/merge.c:5718
+#: ../libsvn_client/merge.c:5582
 #, c-format
 msgid "'%s' must be from the same repository as '%s'"
 msgstr "'%s' doit être dans le même dépôt que '%s'"
@@ -1618,46 +1627,46 @@
 msgid "'%s' is a wcprop, thus not accessible to clients"
 msgstr "'%s' est une propriété de copie de travail donc inaccessible aux clients"
 
-#: ../libsvn_client/prop_commands.c:224
+#: ../libsvn_client/prop_commands.c:236
 #, c-format
 msgid "Property '%s' is not a regular property"
 msgstr "La propriété de révision '%s' n'est pas une propriété connue"
 
-#: ../libsvn_client/prop_commands.c:326
+#: ../libsvn_client/prop_commands.c:338
 #, c-format
 msgid "Revision property '%s' not allowed in this context"
 msgstr "Propriéte de révision '%s' non permise dans ce contexte"
 
-#: ../libsvn_client/prop_commands.c:333 ../libsvn_client/prop_commands.c:472
+#: ../libsvn_client/prop_commands.c:345 ../libsvn_client/prop_commands.c:486
 #, c-format
 msgid "Bad property name: '%s'"
 msgstr "Nom de propriété invalide : '%s'"
 
-#: ../libsvn_client/prop_commands.c:343
+#: ../libsvn_client/prop_commands.c:355
 #, c-format
 msgid "Setting property on non-local target '%s' needs a base revision"
 msgstr "Définir une propriété sur une cible non locale '%s' nécessite une révision de base"
 
-#: ../libsvn_client/prop_commands.c:348
+#: ../libsvn_client/prop_commands.c:360
 #, c-format
 msgid "Setting property recursively on non-local target '%s' is not supported"
 msgstr "Impossible de définir récursivement une propriété pour une cible non locale '%s'"
 
-#: ../libsvn_client/prop_commands.c:363
+#: ../libsvn_client/prop_commands.c:375
 #, c-format
 msgid "Setting property '%s' on non-local target '%s' is not supported"
 msgstr "Impossible de définir la propriété '%s' pour une cible non locale '%s'"
 
-#: ../libsvn_client/prop_commands.c:468
+#: ../libsvn_client/prop_commands.c:482
 msgid "Value will not be set unless forced"
 msgstr "Valeur non utilisée sauf en forçant"
 
-#: ../libsvn_client/prop_commands.c:649
+#: ../libsvn_client/prop_commands.c:663
 #, c-format
 msgid "'%s' does not exist in revision %ld"
 msgstr "'%s' n'existe pas à la révision %ld"
 
-#: ../libsvn_client/prop_commands.c:656 ../libsvn_client/prop_commands.c:995
+#: ../libsvn_client/prop_commands.c:670 ../libsvn_client/prop_commands.c:1009
 #, c-format
 msgid "Unknown node kind for '%s'"
 msgstr "Type de nœud inconnu pour '%s'"
@@ -1698,7 +1707,7 @@
 msgstr "Type de révision demandé inconnu pour '%s'"
 
 #: ../libsvn_client/switch.c:144 ../libsvn_ra_local/ra_plugin.c:196
-#: ../libsvn_ra_local/ra_plugin.c:271 ../libsvn_wc/update_editor.c:3245
+#: ../libsvn_ra_local/ra_plugin.c:271 ../libsvn_wc/update_editor.c:3266
 #, c-format
 msgid ""
 "'%s'\n"
@@ -1912,12 +1921,12 @@
 msgid "reading copy"
 msgstr "lisant la copie"
 
-#: ../libsvn_fs_base/bdb/node-origins-table.c:110
+#: ../libsvn_fs_base/bdb/node-origins-table.c:111
 #, c-format
 msgid "Node origin for '%s' exists in filesystem '%s' with a different value (%s) than what we were about to store (%s)"
 msgstr "Le nœud origine pour '%s' existe dans le système de fichier '%s' avec une valeur (%s) différente de ce que nous allions stocker (%s)"
 
-#: ../libsvn_fs_base/bdb/node-origins-table.c:120
+#: ../libsvn_fs_base/bdb/node-origins-table.c:121
 msgid "storing node-origins record"
 msgstr "sauvegarde des enregistrements d'origines de nœud"
 
@@ -2854,8 +2863,8 @@
 msgid "Mismatched RA version for '%s': found %d.%d.%d%s, expected %d.%d.%d%s"
 msgstr "Problème de version de module RA pour '%s': %d.%d.%d%s trouvé, %d.%d.%d%s attendu"
 
-#: ../libsvn_ra/ra_loader.c:408 ../libsvn_ra_serf/serf.c:481
-#: ../libsvn_ra_serf/serf.c:595
+#: ../libsvn_ra/ra_loader.c:408 ../libsvn_ra_serf/serf.c:507
+#: ../libsvn_ra_serf/serf.c:625
 #, c-format
 msgid "Illegal repository URL '%s'"
 msgstr "URL de dépôt svn illégale '%s'"
@@ -2874,12 +2883,12 @@
 msgid "'%s' isn't in the same repository as '%s'"
 msgstr "'%s' n'est pas dans le même dépôt que '%s'"
 
-#: ../libsvn_ra/ra_loader.c:1284
+#: ../libsvn_ra/ra_loader.c:1286
 #, c-format
 msgid "  - handles '%s' scheme\n"
 msgstr "  - gère le schéma d'URL '%s'\n"
 
-#: ../libsvn_ra/ra_loader.c:1370
+#: ../libsvn_ra/ra_loader.c:1372
 #, c-format
 msgid "Unrecognized URL scheme '%s'"
 msgstr "Schéma d'URL non reconnu '%s'"
@@ -2904,13 +2913,13 @@
 msgid "URL '%s' is not a child of the session's repository root URL '%s'"
 msgstr "l'URL '%s' n'est pas descendante de l'URL du dépôt racine '%s'"
 
-#: ../libsvn_ra_local/ra_plugin.c:1372 ../libsvn_ra_neon/session.c:913
-#: ../libsvn_ra_serf/serf.c:292 ../libsvn_ra_svn/client.c:2246
+#: ../libsvn_ra_local/ra_plugin.c:1373 ../libsvn_ra_neon/session.c:922
+#: ../libsvn_ra_serf/serf.c:300 ../libsvn_ra_svn/client.c:2258
 #, c-format
 msgid "Don't know anything about capability '%s'"
 msgstr "Pas d'information à propos de la capacité '%s'"
 
-#: ../libsvn_ra_local/ra_plugin.c:1450
+#: ../libsvn_ra_local/ra_plugin.c:1451
 #, c-format
 msgid "Unsupported RA loader version (%d) for ra_local"
 msgstr "Version %d du chargeur RA (accès dépôt) non supporté pour ra_local"
@@ -2977,7 +2986,7 @@
 msgid "Could not save file"
 msgstr "Impossible de sauvegarder le fichier"
 
-#: ../libsvn_ra_neon/fetch.c:764 ../libsvn_ra_svn/client.c:960
+#: ../libsvn_ra_neon/fetch.c:764 ../libsvn_ra_svn/client.c:969
 #, c-format
 msgid ""
 "Checksum mismatch for '%s':\n"
@@ -2996,97 +3005,97 @@
 msgid "DAV request failed; it's possible that the repository's pre-revprop-change hook either failed or is non-existent"
 msgstr "Échec de la requête DAV ; il est possible que la procédure automatique du dépôt 'pre-revprop-change' ait échouée ou n'existe pas"
 
-#: ../libsvn_ra_neon/fetch.c:1420
+#: ../libsvn_ra_neon/fetch.c:1422
 #, c-format
 msgid "Missing rev attr in target-revision element"
 msgstr "Attribut révision 'rev' manquant dans un élément 'target-revision'"
 
-#: ../libsvn_ra_neon/fetch.c:1431 ../libsvn_ra_serf/update.c:1466
+#: ../libsvn_ra_neon/fetch.c:1433 ../libsvn_ra_serf/update.c:1466
 #, c-format
 msgid "Missing name attr in absent-directory element"
 msgstr "Attribut nom 'name' manquant dans un élément 'absent-directory'"
 
-#: ../libsvn_ra_neon/fetch.c:1447 ../libsvn_ra_serf/update.c:1489
+#: ../libsvn_ra_neon/fetch.c:1449 ../libsvn_ra_serf/update.c:1489
 #, c-format
 msgid "Missing name attr in absent-file element"
 msgstr "Attribut nom 'name' manquant dans un élément 'absent-directory'"
 
-#: ../libsvn_ra_neon/fetch.c:1462
+#: ../libsvn_ra_neon/fetch.c:1464
 #, c-format
 msgid "Missing path attr in resource element"
 msgstr "Attribut 'path' manquant dans une propriété de révision"
 
-#: ../libsvn_ra_neon/fetch.c:1471
+#: ../libsvn_ra_neon/fetch.c:1473
 #, c-format
 msgid "Missing rev attr in open-directory element"
 msgstr "Attribut révision 'rev' manquant dans un élément 'open-directory'"
 
-#: ../libsvn_ra_neon/fetch.c:1502 ../libsvn_ra_serf/replay.c:255
+#: ../libsvn_ra_neon/fetch.c:1504 ../libsvn_ra_serf/replay.c:255
 #: ../libsvn_ra_serf/update.c:1295
 #, c-format
 msgid "Missing name attr in open-directory element"
 msgstr "Attribut nom 'name' manquant dans un élément 'open-directory'"
 
-#: ../libsvn_ra_neon/fetch.c:1529 ../libsvn_ra_serf/replay.c:281
+#: ../libsvn_ra_neon/fetch.c:1531 ../libsvn_ra_serf/replay.c:281
 #: ../libsvn_ra_serf/update.c:1330
 #, c-format
 msgid "Missing name attr in add-directory element"
 msgstr "Attribut nom 'name' manquant dans un élément 'add-directory'"
 
-#: ../libsvn_ra_neon/fetch.c:1542
+#: ../libsvn_ra_neon/fetch.c:1544
 #, c-format
 msgid "Missing copyfrom-rev attr in add-directory element"
 msgstr "Attribut 'copyfrom-rev' manquant dans un élément 'add-directory'"
 
-#: ../libsvn_ra_neon/fetch.c:1619
+#: ../libsvn_ra_neon/fetch.c:1621
 #, c-format
 msgid "Missing rev attr in open-file element"
 msgstr "Attribut révision 'rev' manquant dans un élément 'open-file'"
 
-#: ../libsvn_ra_neon/fetch.c:1626 ../libsvn_ra_serf/replay.c:316
+#: ../libsvn_ra_neon/fetch.c:1628 ../libsvn_ra_serf/replay.c:316
 #: ../libsvn_ra_serf/update.c:1370
 #, c-format
 msgid "Missing name attr in open-file element"
 msgstr "Attribut nom 'name' manquant dans un élément 'open-file'"
 
-#: ../libsvn_ra_neon/fetch.c:1652 ../libsvn_ra_serf/replay.c:342
+#: ../libsvn_ra_neon/fetch.c:1654 ../libsvn_ra_serf/replay.c:342
 #: ../libsvn_ra_serf/update.c:1405
 #, c-format
 msgid "Missing name attr in add-file element"
 msgstr "Attribut nom 'name' manquant dans un élément 'add-file'"
 
-#: ../libsvn_ra_neon/fetch.c:1665
+#: ../libsvn_ra_neon/fetch.c:1667
 #, c-format
 msgid "Missing copyfrom-rev attr in add-file element"
 msgstr "Attribut 'copyfrom-rev' manquant dans un élément 'add-file'"
 
-#: ../libsvn_ra_neon/fetch.c:1720
+#: ../libsvn_ra_neon/fetch.c:1722
 #, c-format
 msgid "Missing name attr in set-prop element"
 msgstr "Attribut nom 'name' manquant dans un élément 'set-prop'"
 
-#: ../libsvn_ra_neon/fetch.c:1734
+#: ../libsvn_ra_neon/fetch.c:1736
 #, c-format
 msgid "Missing name attr in remove-prop element"
 msgstr "Attribut nom 'name' manquant dans élément 'remove-prop'"
 
-#: ../libsvn_ra_neon/fetch.c:1808 ../libsvn_ra_serf/replay.c:229
+#: ../libsvn_ra_neon/fetch.c:1810 ../libsvn_ra_serf/replay.c:229
 #: ../libsvn_ra_serf/update.c:1435
 #, c-format
 msgid "Missing name attr in delete-entry element"
 msgstr "Attribut nom 'name' manquant dans un élément 'delete-entry'"
 
-#: ../libsvn_ra_neon/fetch.c:1970
+#: ../libsvn_ra_neon/fetch.c:1972
 #, c-format
 msgid "Error writing to '%s': unexpected EOF"
 msgstr "Erreur d'écriture sur '%s' : fin de fichier (EOF) inattendue"
 
-#: ../libsvn_ra_neon/fetch.c:2117
+#: ../libsvn_ra_neon/fetch.c:2119
 #, c-format
 msgid "Unknown XML encoding: '%s'"
 msgstr "Encodage XML inconnu : '%s'"
 
-#: ../libsvn_ra_neon/fetch.c:2416
+#: ../libsvn_ra_neon/fetch.c:2418
 #, c-format
 msgid "REPORT response handling failed to complete the editor drive"
 msgstr "La gestion de la réponse au REPORT n'a pas clos le baton d'édition"
@@ -3112,7 +3121,7 @@
 msgstr "Réponse du serveur invalide pour une requête de révisions basées sur des dates"
 
 #: ../libsvn_ra_neon/get_location_segments.c:118
-#: ../libsvn_ra_serf/getlocationsegments.c:101 ../libsvn_ra_svn/client.c:1575
+#: ../libsvn_ra_serf/getlocationsegments.c:101 ../libsvn_ra_svn/client.c:1584
 msgid "Expected valid revision range"
 msgstr "Attend un intervalle de révision valide"
 
@@ -3171,7 +3180,7 @@
 msgstr "Attribut nom 'name' manquant dans une propriété de révision"
 
 #: ../libsvn_ra_neon/log.c:433 ../libsvn_ra_serf/log.c:533
-#: ../libsvn_ra_svn/client.c:1300
+#: ../libsvn_ra_svn/client.c:1309
 msgid "Server does not support custom revprops via log"
 msgstr "Le serveur n'accepte pas les propriétés de révision personnalisées via le log"
 
@@ -3275,15 +3284,15 @@
 msgid "PIN for token \"%s\" in slot \"%s\""
 msgstr "PIN du signe \"%s\" dans le créneau \"%s\""
 
-#: ../libsvn_ra_neon/session.c:529 ../libsvn_ra_serf/serf.c:405
+#: ../libsvn_ra_neon/session.c:529 ../libsvn_ra_serf/serf.c:431
 msgid "Invalid URL: illegal character in proxy port number"
 msgstr "URL invalide : caractère illégal dans le numéro de port du proxy"
 
-#: ../libsvn_ra_neon/session.c:533 ../libsvn_ra_serf/serf.c:409
+#: ../libsvn_ra_neon/session.c:533 ../libsvn_ra_serf/serf.c:435
 msgid "Invalid URL: negative proxy port number"
 msgstr "URL invalide : numéro de port du proxy négatif"
 
-#: ../libsvn_ra_neon/session.c:536 ../libsvn_ra_serf/serf.c:412
+#: ../libsvn_ra_neon/session.c:536 ../libsvn_ra_serf/serf.c:438
 msgid "Invalid URL: proxy port number greater than maximum TCP port number 65535"
 msgstr "URL invalide : numéro de port du proxy supérieur au numéro de port maximal de TCP (65535)"
 
@@ -3313,47 +3322,47 @@
 msgid "OPTIONS request (for capabilities) got HTTP response code %d"
 msgstr "La requête OPTIONS (pour les capacités) a obtenu le code de réponse HTTP %d"
 
-#: ../libsvn_ra_neon/session.c:896 ../libsvn_ra_serf/serf.c:275
+#: ../libsvn_ra_neon/session.c:905 ../libsvn_ra_serf/serf.c:283
 #, c-format
 msgid "Don't know how to handle '%s' for capability '%s'"
 msgstr "Ne sais pas gérer '%s' pour la capacité '%s'"
 
-#: ../libsvn_ra_neon/session.c:920 ../libsvn_ra_serf/serf.c:299
+#: ../libsvn_ra_neon/session.c:929 ../libsvn_ra_serf/serf.c:307
 #, c-format
 msgid "Attempt to fetch capability '%s' resulted in '%s'"
 msgstr " la tentative de récuperer la capacité '%s' a résulté en '%s'"
 
-#: ../libsvn_ra_neon/session.c:943 ../libsvn_ra_serf/locks.c:548
+#: ../libsvn_ra_neon/session.c:952 ../libsvn_ra_serf/locks.c:548
 msgid "Malformed URL for repository"
 msgstr "URL du dépôt malformée."
 
-#: ../libsvn_ra_neon/session.c:993
+#: ../libsvn_ra_neon/session.c:1002
 msgid "Network socket initialization failed"
 msgstr "Échec de l'initialisation de la 'socket' réseau"
 
-#: ../libsvn_ra_neon/session.c:1012
+#: ../libsvn_ra_neon/session.c:1021
 msgid "SSL is not supported"
 msgstr "SSL n'est pas supporté"
 
-#: ../libsvn_ra_neon/session.c:1177
+#: ../libsvn_ra_neon/session.c:1186 ../libsvn_ra_serf/util.c:211
 #, c-format
 msgid "Invalid config: unable to load certificate file '%s'"
 msgstr "Configuration invalide : impossible de charger le fichier de certificat '%s'"
 
-#: ../libsvn_ra_neon/session.c:1205
+#: ../libsvn_ra_neon/session.c:1214
 #, c-format
 msgid "Invalid config: unable to load PKCS#11 provider '%s'"
 msgstr "Configuration invalide : impossible de charger le fournisseur de PKCS#11 '%s'"
 
-#: ../libsvn_ra_neon/session.c:1330 ../libsvn_ra_serf/serf.c:1107
+#: ../libsvn_ra_neon/session.c:1339 ../libsvn_ra_serf/serf.c:1137
 msgid "The UUID property was not found on the resource or any of its parents"
 msgstr "La propriété UUID n'a pas été trouvée sur la ressource ou sur un de ses parents"
 
-#: ../libsvn_ra_neon/session.c:1338
+#: ../libsvn_ra_neon/session.c:1347
 msgid "Please upgrade the server to 0.19 or later"
 msgstr "Mettre à jour le serveur à la version 0.19 ou mieux"
 
-#: ../libsvn_ra_neon/session.c:1409
+#: ../libsvn_ra_neon/session.c:1418
 #, c-format
 msgid "Unsupported RA loader version (%d) for ra_neon"
 msgstr "Version (%d) du chargeur RA (accès dépôt) non supportée pour ra_neon"
@@ -3376,7 +3385,9 @@
 msgid "%s of '%s'"
 msgstr "%s de '%s'"
 
-#: ../libsvn_ra_neon/util.c:544 ../libsvn_ra_serf/mergeinfo.c:292
+#: ../libsvn_ra_neon/util.c:544 ../libsvn_ra_serf/getlocations.c:280
+#: ../libsvn_ra_serf/getlocationsegments.c:231
+#: ../libsvn_ra_serf/mergeinfo.c:292 ../libsvn_ra_serf/mergeinfo.c:306
 #, c-format
 msgid "'%s' path not found"
 msgstr "Chemin '%s' non trouvé"
@@ -3432,8 +3443,8 @@
 msgid "Missing 'realm' attribute in Authorization header."
 msgstr "Attribut 'realm' manquant dans l'entête 'Authorization'"
 
-#: ../libsvn_ra_serf/blame.c:464 ../libsvn_ra_serf/serf.c:632
-#: ../libsvn_ra_serf/update.c:2222 ../libsvn_ra_serf/util.c:1202
+#: ../libsvn_ra_serf/blame.c:464 ../libsvn_ra_serf/serf.c:662
+#: ../libsvn_ra_serf/update.c:2222 ../libsvn_ra_serf/util.c:1402
 msgid "The OPTIONS response did not include the requested version-controlled-configuration value"
 msgstr "La réponse à OPTIONS n'inclut pas de valeur pour 'version-controlled-configuration'"
 
@@ -3442,14 +3453,14 @@
 msgstr "La réponse à OPTIONS n'inclut pas de valeur pour 'baseline-relative-path'"
 
 #: ../libsvn_ra_serf/blame.c:496 ../libsvn_ra_serf/commit.c:1160
-#: ../libsvn_ra_serf/property.c:930 ../libsvn_ra_serf/serf.c:648
+#: ../libsvn_ra_serf/property.c:930 ../libsvn_ra_serf/serf.c:678
 #: ../libsvn_ra_serf/update.c:1135 ../libsvn_ra_serf/update.c:1680
 msgid "The OPTIONS response did not include the requested checked-in value"
 msgstr "La réponse à OPTIONS n'inclut pas de valeur pour 'checked-in'"
 
 #: ../libsvn_ra_serf/blame.c:523 ../libsvn_ra_serf/commit.c:1389
 #: ../libsvn_ra_serf/commit.c:1779 ../libsvn_ra_serf/property.c:944
-#: ../libsvn_ra_serf/serf.c:770 ../libsvn_ra_serf/serf.c:1006
+#: ../libsvn_ra_serf/serf.c:800 ../libsvn_ra_serf/serf.c:1036
 msgid "The OPTIONS response did not include the requested baseline-collection value"
 msgstr "La réponse à OPTIONS n'inclut pas de valeur pour 'baseline-collection'"
 
@@ -3534,24 +3545,24 @@
 msgid "Error retrieving replay REPORT (%d)"
 msgstr "Erreur à la récupération du REPORT de rejou (%d)"
 
-#: ../libsvn_ra_serf/serf.c:315
+#: ../libsvn_ra_serf/serf.c:323
 msgid "Module for accessing a repository via WebDAV protocol using serf."
 msgstr "Module d'accès à un dépôt via le protocole WebDAV avec serf."
 
-#: ../libsvn_ra_serf/serf.c:521
+#: ../libsvn_ra_serf/serf.c:551
 #, c-format
 msgid "Could not lookup hostname `%s'"
 msgstr "Impossible de résoudre le nom d'hôte : `%s'"
 
-#: ../libsvn_ra_serf/serf.c:665
+#: ../libsvn_ra_serf/serf.c:695
 msgid "The OPTIONS response did not include the requested version-name value"
 msgstr "La réponse à OPTIONS n'inclut pas de valeur pour 'version-name'"
 
-#: ../libsvn_ra_serf/serf.c:829
+#: ../libsvn_ra_serf/serf.c:859
 msgid "The OPTIONS response did not include the requested resourcetype value"
 msgstr "La réponse à OPTIONS n'inclut pas de valeur pour 'resourcetype'"
 
-#: ../libsvn_ra_serf/serf.c:1172
+#: ../libsvn_ra_serf/serf.c:1202
 #, c-format
 msgid "Unsupported RA loader version (%d) for ra_serf"
 msgstr "Version %d du chargeur RA (accès dépôt) non supportée pour ra_serf"
@@ -3561,16 +3572,16 @@
 msgid "GET request failed: %d %s"
 msgstr "Échec de la requête GET : %d %s"
 
-#: ../libsvn_ra_serf/update.c:2304
+#: ../libsvn_ra_serf/update.c:2302
 #, c-format
 msgid "Error retrieving REPORT (%d)"
 msgstr "Erreur à la récupération du REPORT (%d)"
 
-#: ../libsvn_ra_serf/util.c:986
+#: ../libsvn_ra_serf/util.c:1186
 msgid "Premature EOF seen from server"
 msgstr "Fin de fichier (EOF) prématurée rencontrée sur le serveur"
 
-#: ../libsvn_ra_serf/util.c:1037
+#: ../libsvn_ra_serf/util.c:1237
 msgid "Unspecified error message"
 msgstr "Message d'erreur non spécifié"
 
@@ -3579,74 +3590,69 @@
 msgid "Unknown hostname '%s'"
 msgstr "Nom d'hôte inconnu '%s'"
 
-#: ../libsvn_ra_svn/client.c:145
-#, c-format
-msgid "Can't create socket"
-msgstr "Impossible de créer un 'socket'"
-
-#: ../libsvn_ra_svn/client.c:149
+#: ../libsvn_ra_svn/client.c:158
 #, c-format
 msgid "Can't connect to host '%s'"
 msgstr "Impossible de se connecter à l'hôte '%s'"
 
-#: ../libsvn_ra_svn/client.c:172
+#: ../libsvn_ra_svn/client.c:181
 msgid "Prop diffs element not a list"
 msgstr "L'élément 'prop diffs' n'est pas une liste"
 
-#: ../libsvn_ra_svn/client.c:210
+#: ../libsvn_ra_svn/client.c:219
 #, c-format
 msgid "Unrecognized node kind '%s' from server"
 msgstr "Type de nœud '%s' non reconnu retourné par le serveur"
 
-#: ../libsvn_ra_svn/client.c:374
+#: ../libsvn_ra_svn/client.c:383
 #, c-format
 msgid "Undefined tunnel scheme '%s'"
 msgstr "Schéma de tunnel '%s' non définit"
 
-#: ../libsvn_ra_svn/client.c:391
+#: ../libsvn_ra_svn/client.c:400
 #, c-format
 msgid "Tunnel scheme %s requires environment variable %s to be defined"
 msgstr "Le schéma de tunnel '%s' requiert la variable d'environnement %s"
 
-#: ../libsvn_ra_svn/client.c:402
+#: ../libsvn_ra_svn/client.c:411
 #, c-format
 msgid "Can't tokenize command '%s'"
 msgstr "Impossible de découper la commande '%s'"
 
-#: ../libsvn_ra_svn/client.c:433
+#: ../libsvn_ra_svn/client.c:442
 #, c-format
 msgid "Error in child process: %s"
 msgstr "Erreur du processus fils : %s"
 
-#: ../libsvn_ra_svn/client.c:457
+#: ../libsvn_ra_svn/client.c:466
 #, c-format
 msgid "Can't create tunnel"
 msgstr "Impossible de créer le tunnel"
 
-#: ../libsvn_ra_svn/client.c:495
+#: ../libsvn_ra_svn/client.c:504
 #, c-format
 msgid "Illegal svn repository URL '%s'"
 msgstr "URL de dépôt svn illégale '%s'"
 
-#: ../libsvn_ra_svn/client.c:555
+#: ../libsvn_ra_svn/client.c:564
 #, c-format
 msgid "Server requires minimum version %d"
 msgstr "Le serveur requiert au minimum la version %d"
 
-#: ../libsvn_ra_svn/client.c:559
+#: ../libsvn_ra_svn/client.c:568
 #, c-format
 msgid "Server only supports versions up to %d"
 msgstr "Le serveur ne supporte les versions que jusqu'à la %d"
 
-#: ../libsvn_ra_svn/client.c:567
+#: ../libsvn_ra_svn/client.c:576
 msgid "Server does not support edit pipelining"
 msgstr "Le serveur n'accepte pas l'édition en file"
 
-#: ../libsvn_ra_svn/client.c:600
+#: ../libsvn_ra_svn/client.c:609
 msgid "Impossibly long repository root from server"
 msgstr "Racine du dépôt du serveur trop longue"
 
-#: ../libsvn_ra_svn/client.c:612
+#: ../libsvn_ra_svn/client.c:621
 msgid ""
 "Module for accessing a repository using the svn network protocol.\n"
 "  - with Cyrus SASL authentication"
@@ -3654,128 +3660,128 @@
 "Module d'accès à un dépôt avec le protocole réseau propre de svn.\n"
 "  - avec authentification Cyrus SASL"
 
-#: ../libsvn_ra_svn/client.c:616
+#: ../libsvn_ra_svn/client.c:625
 msgid "Module for accessing a repository using the svn network protocol."
 msgstr "Module d'accès à un dépôt avec le protocole réseau propre de svn."
 
-#: ../libsvn_ra_svn/client.c:777
+#: ../libsvn_ra_svn/client.c:786
 msgid "Server did not send repository root"
 msgstr "Le serveur n'a pas envoyé la racine du dépôt"
 
-#: ../libsvn_ra_svn/client.c:850
+#: ../libsvn_ra_svn/client.c:859
 msgid "Server doesn't support setting arbitrary revision properties during commit"
 msgstr "Le serveur ne peut pas définir des propriétés de révision arbitraires lors de la propagation (commit)"
 
-#: ../libsvn_ra_svn/client.c:938
+#: ../libsvn_ra_svn/client.c:947
 msgid "Non-string as part of file contents"
 msgstr "Partie non chaîne comme contenu de fichier"
 
-#: ../libsvn_ra_svn/client.c:1039
+#: ../libsvn_ra_svn/client.c:1048
 msgid "Dirlist element not a list"
 msgstr "L'élément 'dirlist' n'est pas une liste"
 
-#: ../libsvn_ra_svn/client.c:1098
+#: ../libsvn_ra_svn/client.c:1107
 msgid "Mergeinfo element is not a list"
 msgstr "L'élément Mergeinfo n'est pas une liste"
 
-#: ../libsvn_ra_svn/client.c:1289
+#: ../libsvn_ra_svn/client.c:1298
 msgid "Log entry not a list"
 msgstr "L'entrée 'log' n'est pas une liste"
 
-#: ../libsvn_ra_svn/client.c:1324
+#: ../libsvn_ra_svn/client.c:1333
 msgid "Changed-path entry not a list"
 msgstr "L'entrée 'changed-path' n'est pas une liste"
 
-#: ../libsvn_ra_svn/client.c:1440
+#: ../libsvn_ra_svn/client.c:1449
 msgid "'stat' not implemented"
 msgstr "'stat' non implémenté"
 
-#: ../libsvn_ra_svn/client.c:1497
+#: ../libsvn_ra_svn/client.c:1506
 msgid "'get-locations' not implemented"
 msgstr "'get-locations' non implémenté"
 
-#: ../libsvn_ra_svn/client.c:1509
+#: ../libsvn_ra_svn/client.c:1518
 msgid "Location entry not a list"
 msgstr "L'entrée 'location' n'est pas une liste"
 
-#: ../libsvn_ra_svn/client.c:1554
+#: ../libsvn_ra_svn/client.c:1563
 msgid "'get-location-segments' not implemented"
 msgstr "'get-location-segments' non implémenté"
 
-#: ../libsvn_ra_svn/client.c:1566
+#: ../libsvn_ra_svn/client.c:1575
 msgid "Location segment entry not a list"
 msgstr "L'entrée 'location segment' n'est pas une liste"
 
-#: ../libsvn_ra_svn/client.c:1628
+#: ../libsvn_ra_svn/client.c:1637
 msgid "'get-file-revs' not implemented"
 msgstr "'get-file-revs' non implémenté"
 
-#: ../libsvn_ra_svn/client.c:1641
+#: ../libsvn_ra_svn/client.c:1650
 msgid "Revision entry not a list"
 msgstr "L'entrée 'revision' n'est pas une liste"
 
-#: ../libsvn_ra_svn/client.c:1658 ../libsvn_ra_svn/client.c:1683
+#: ../libsvn_ra_svn/client.c:1667 ../libsvn_ra_svn/client.c:1692
 msgid "Text delta chunk not a string"
 msgstr "La différence de texte n'est pas une chaîne de caractères"
 
-#: ../libsvn_ra_svn/client.c:1695
+#: ../libsvn_ra_svn/client.c:1704
 msgid "The get-file-revs command didn't return any revisions"
 msgstr "La commande 'get-file-revs' n'a retourné aucune révision"
 
-#: ../libsvn_ra_svn/client.c:1743
+#: ../libsvn_ra_svn/client.c:1752
 msgid "Server doesn't support the lock command"
 msgstr "Commande lock non supportée par le serveur"
 
-#: ../libsvn_ra_svn/client.c:1807
+#: ../libsvn_ra_svn/client.c:1816
 msgid "Server doesn't support the unlock command"
 msgstr "Commande unlock non supportée par le serveur"
 
-#: ../libsvn_ra_svn/client.c:1904
+#: ../libsvn_ra_svn/client.c:1913
 msgid "Lock response not a list"
 msgstr "La réponse au verrouillage (lock) n'est pas une liste"
 
-#: ../libsvn_ra_svn/client.c:1918
+#: ../libsvn_ra_svn/client.c:1927
 msgid "Unknown status for lock command"
 msgstr "État inconnu pour la commande de verrouillage (lock)"
 
-#: ../libsvn_ra_svn/client.c:1940
+#: ../libsvn_ra_svn/client.c:1949
 msgid "Didn't receive end marker for lock responses"
 msgstr "Aucun marqueur de fin reçu dans les réponses aux verrouillages"
 
-#: ../libsvn_ra_svn/client.c:2027
+#: ../libsvn_ra_svn/client.c:2036
 msgid "Unlock response not a list"
 msgstr "La réponse au déverrouillage n'est pas une liste"
 
-#: ../libsvn_ra_svn/client.c:2041
+#: ../libsvn_ra_svn/client.c:2050
 msgid "Unknown status for unlock command"
 msgstr "État inconnu pour la commande de déverrouillage (unlock)"
 
-#: ../libsvn_ra_svn/client.c:2062
+#: ../libsvn_ra_svn/client.c:2071
 msgid "Didn't receive end marker for unlock responses"
 msgstr "Aucun marqueur de fin reçu dans les réponses aux déverrouillages"
 
-#: ../libsvn_ra_svn/client.c:2086 ../libsvn_ra_svn/client.c:2114
+#: ../libsvn_ra_svn/client.c:2095 ../libsvn_ra_svn/client.c:2123
 msgid "Server doesn't support the get-lock command"
 msgstr "Le serveur ne supporte pas la commande 'get-lock'"
 
-#: ../libsvn_ra_svn/client.c:2127
+#: ../libsvn_ra_svn/client.c:2136
 msgid "Lock element not a list"
 msgstr "L'élément 'lock' n'est pas une liste"
 
-#: ../libsvn_ra_svn/client.c:2150
+#: ../libsvn_ra_svn/client.c:2159
 msgid "Server doesn't support the replay command"
 msgstr "Le serveur ne supporte pas la commande 'replay'"
 
-#: ../libsvn_ra_svn/client.c:2182
+#: ../libsvn_ra_svn/client.c:2191
 msgid "Server doesn't support the replay-range command"
 msgstr "Le serveur ne supporte pas la commande 'replay-range'"
 
-#: ../libsvn_ra_svn/client.c:2200
+#: ../libsvn_ra_svn/client.c:2209
 #, c-format
 msgid "Expected 'revprops', found '%s'"
 msgstr "En attente de 'revprops', mais '%s' a été trouvé"
 
-#: ../libsvn_ra_svn/client.c:2310
+#: ../libsvn_ra_svn/client.c:2322
 #, c-format
 msgid "Unsupported RA loader version (%d) for ra_svn"
 msgstr "Version %d du chargeur RA (accès dépôt) non supporté pour ra_svn"
@@ -4255,24 +4261,24 @@
 msgid "Cannot replace a directory from within"
 msgstr "On ne peut remplacer un répertoire de l'intérieur de ce répertoire"
 
-#: ../libsvn_repos/reporter.c:1211
+#: ../libsvn_repos/reporter.c:1209
 msgid "Invalid report for top level of working copy"
 msgstr "Rapport invalide pour le sommet de la copie de travail"
 
-#: ../libsvn_repos/reporter.c:1226
+#: ../libsvn_repos/reporter.c:1224
 msgid "Two top-level reports with no target"
 msgstr "Deux rapports au sommet sans aucune cible"
 
-#: ../libsvn_repos/reporter.c:1278
+#: ../libsvn_repos/reporter.c:1282
 #, c-format
 msgid "Unsupported report depth '%s'"
 msgstr "Profondeur de rapport non supportée '%s'"
 
-#: ../libsvn_repos/reporter.c:1322
+#: ../libsvn_repos/reporter.c:1326
 msgid "Depth 'exclude' not supported for link"
 msgstr "Profondeur 'exclude' non supportée pour un lien"
 
-#: ../libsvn_repos/reporter.c:1401
+#: ../libsvn_repos/reporter.c:1405
 msgid "Request depth 'exclude' not supported"
 msgstr "Profondeur demandée 'exclude' non supportée"
 
@@ -4321,40 +4327,40 @@
 msgid "Creating conf directory"
 msgstr "Création du répertoire de configuration (conf)"
 
-#: ../libsvn_repos/repos.c:989
+#: ../libsvn_repos/repos.c:986
 msgid "Creating svnserve.conf file"
 msgstr "Création du fichier 'svnserve.conf'"
 
-#: ../libsvn_repos/repos.c:1007
+#: ../libsvn_repos/repos.c:1004
 msgid "Creating passwd file"
 msgstr "Création du fichier de mot de passe 'passwd'"
 
-#: ../libsvn_repos/repos.c:1049
+#: ../libsvn_repos/repos.c:1046
 msgid "Creating authz file"
 msgstr "Création du fichier d'autorisations 'authz'"
 
-#: ../libsvn_repos/repos.c:1084
+#: ../libsvn_repos/repos.c:1081
 msgid "Could not create top-level directory"
 msgstr "Impossible de créer le répertoire de niveau supérieur"
 
-#: ../libsvn_repos/repos.c:1096
+#: ../libsvn_repos/repos.c:1093
 msgid "Creating DAV sandbox dir"
 msgstr "Création du répertoire d'isolation DAV (dav)"
 
-#: ../libsvn_repos/repos.c:1167
+#: ../libsvn_repos/repos.c:1164
 msgid "Error opening db lockfile"
 msgstr "Erreur à l'ouverture du fichier de verrou db"
 
-#: ../libsvn_repos/repos.c:1204
+#: ../libsvn_repos/repos.c:1201
 msgid "Repository creation failed"
 msgstr "Échec de la création du dépôt"
 
-#: ../libsvn_repos/repos.c:1285
+#: ../libsvn_repos/repos.c:1282
 #, c-format
 msgid "Expected repository format '%d' or '%d'; found format '%d'"
 msgstr "Format de stockage attendu '%d' ou '%d'; format trouvé '%d'"
 
-#: ../libsvn_repos/repos.c:1508
+#: ../libsvn_repos/repos.c:1505
 #, c-format
 msgid "unknown capability '%s'"
 msgstr "capacité inconnue '%s'"
@@ -4890,7 +4896,7 @@
 msgid "Could not find end of line in range list line in '%s'"
 msgstr "Impossible de trouver la fin de ligne dans la ligne de révision '%s'"
 
-#: ../libsvn_subr/mergeinfo.c:600
+#: ../libsvn_subr/mergeinfo.c:599
 #, c-format
 msgid "Could not parse mergeinfo string '%s'"
 msgstr "Impossible d'analyse la chaîne 'mergeinfo' '%s'"
@@ -4938,42 +4944,42 @@
 "'%s': Commande inconnue.\n"
 "\n"
 
-#: ../libsvn_subr/opt.c:850
+#: ../libsvn_subr/opt.c:864
 #, c-format
 msgid "Syntax error parsing revision '%s'"
 msgstr "Erreur de syntaxe sur la révision '%s'"
 
-#: ../libsvn_subr/opt.c:978
+#: ../libsvn_subr/opt.c:992
 #, c-format
 msgid "URL '%s' is not properly URI-encoded"
 msgstr "L'URL '%s' n'est pas correctement encodée (URI-encoded)"
 
-#: ../libsvn_subr/opt.c:984
+#: ../libsvn_subr/opt.c:998
 #, c-format
 msgid "URL '%s' contains a '..' element"
 msgstr "L'URL '%s' contient un composant '..'"
 
-#: ../libsvn_subr/opt.c:1013
+#: ../libsvn_subr/opt.c:1027
 #, c-format
 msgid "Error resolving case of '%s'"
 msgstr "Erreur à la résolution de la casse de '%s'"
 
-#: ../libsvn_subr/opt.c:1035
+#: ../libsvn_subr/opt.c:1049
 #, c-format
 msgid "'%s' ends in a reserved name"
 msgstr "'%s' fini comme un mot réservé"
 
-#: ../libsvn_subr/opt.c:1116
+#: ../libsvn_subr/opt.c:1130
 msgid "Revision property pair is empty"
 msgstr "La paire de la propriété de révision est vide"
 
-#: ../libsvn_subr/opt.c:1136 ../svn/propedit-cmd.c:60 ../svn/propget-cmd.c:180
+#: ../libsvn_subr/opt.c:1150 ../svn/propedit-cmd.c:60 ../svn/propget-cmd.c:180
 #: ../svn/propset-cmd.c:64
 #, c-format
 msgid "'%s' is not a valid Subversion property name"
 msgstr "'%s' n'est pas un nom de propriété de Subversion valide"
 
-#: ../libsvn_subr/opt.c:1164
+#: ../libsvn_subr/opt.c:1178
 #, c-format
 msgid ""
 "%s, version %s\n"
@@ -4984,7 +4990,7 @@
 "    compilé %s, %s\n"
 "\n"
 
-#: ../libsvn_subr/opt.c:1167
+#: ../libsvn_subr/opt.c:1181
 msgid ""
 "Copyright (C) 2000-2008 CollabNet.\n"
 "Subversion is open source software, see http://subversion.tigris.org/\n"
@@ -4996,7 +5002,7 @@
 "Il inclut du logiciel développé par CollabNet (http://www.Collab.Net/).\n"
 "\n"
 
-#: ../libsvn_subr/opt.c:1220 ../libsvn_subr/opt.c:1287
+#: ../libsvn_subr/opt.c:1234 ../libsvn_subr/opt.c:1301
 #, c-format
 msgid "Type '%s help' for usage.\n"
 msgstr "Entrer '%s help' pour l'aide.\n"
@@ -5957,72 +5963,72 @@
 msgid "Failed to add directory '%s': object of the same name as the administrative directory"
 msgstr "Échec à l'ajout du répertoire '%s' : objet du même nom que le répertoire d'administration"
 
-#: ../libsvn_wc/update_editor.c:1350
+#: ../libsvn_wc/update_editor.c:1369
 #, c-format
 msgid "Failed to add directory '%s': copyfrom arguments not yet supported"
 msgstr "Échec à l'ajout du répertoire '%s' : copie en provenance (copyfrom) non encore supportée"
 
-#: ../libsvn_wc/update_editor.c:1644
+#: ../libsvn_wc/update_editor.c:1663
 msgid "Couldn't do property merge"
 msgstr "Fusion de propriété impossible"
 
-#: ../libsvn_wc/update_editor.c:1717
+#: ../libsvn_wc/update_editor.c:1736
 #, c-format
 msgid "Failed to mark '%s' absent: item of the same name is already scheduled for addition"
 msgstr "Échec du marquage de '%s' comme absent : un objet de même nom est déjà en attente pour ajout"
 
-#: ../libsvn_wc/update_editor.c:1790
+#: ../libsvn_wc/update_editor.c:1809
 msgid "Bad copyfrom arguments received"
 msgstr "Mauvais arguments pour la source d'une copie"
 
-#: ../libsvn_wc/update_editor.c:1829
+#: ../libsvn_wc/update_editor.c:1848
 #, c-format
 msgid "Failed to add file '%s': a file of the same name is already scheduled for addition with history"
 msgstr "Échec de l'ajout du fichier '%s' : un fichier de même nom est déjà en attente pour ajout"
 
-#: ../libsvn_wc/update_editor.c:1841
+#: ../libsvn_wc/update_editor.c:1860
 #, c-format
 msgid "Failed to add file '%s': a non-file object of the same name already exists"
 msgstr "Échec de l'ajout du fichier '%s' : un objet de même nom existe déjà"
 
-#: ../libsvn_wc/update_editor.c:1856
+#: ../libsvn_wc/update_editor.c:1875
 #, c-format
 msgid "Failed to add file '%s': object of the same name already exists"
 msgstr "Échec à l'ajout du fichier '%s' : un objet de même nom existe déjà"
 
-#: ../libsvn_wc/update_editor.c:1914
+#: ../libsvn_wc/update_editor.c:1933
 #, c-format
 msgid "File '%s' in directory '%s' is not a versioned resource"
 msgstr "Le fichier '%s' du répertoire '%s' n'est pas versionné"
 
-#: ../libsvn_wc/update_editor.c:2068
+#: ../libsvn_wc/update_editor.c:2087
 #, c-format
 msgid "Checksum mismatch for '%s'; recorded: '%s', actual: '%s'"
 msgstr "Somme de contrôle différente pour '%s' ; stocké '%s', actuel '%s'"
 
-#: ../libsvn_wc/update_editor.c:2804
+#: ../libsvn_wc/update_editor.c:2825
 msgid "Destination directory of add-with-history is missing a URL"
 msgstr "Répertoire destination de 'add-with-history' (ajout avec historique) sans URL"
 
-#: ../libsvn_wc/update_editor.c:2819
+#: ../libsvn_wc/update_editor.c:2840
 msgid "Destination URLs are broken"
 msgstr "Les URLs destination sont incorrectes"
 
-#: ../libsvn_wc/update_editor.c:3076
+#: ../libsvn_wc/update_editor.c:3097
 msgid "No fetch_func supplied to update_editor"
 msgstr "Pas de 'fetch_func' fourni à 'update_editor'"
 
-#: ../libsvn_wc/update_editor.c:3317
+#: ../libsvn_wc/update_editor.c:3338
 #, c-format
 msgid "Shallowing of working copy depths is not yet supported"
 msgstr "La superficialisation des profondeurs d'une copie de travail n'est pas encore supporté"
 
-#: ../libsvn_wc/update_editor.c:3718
+#: ../libsvn_wc/update_editor.c:3739
 #, c-format
 msgid "'%s' has no ancestry information"
 msgstr "'%s' n'a pas d'ancêtre"
 
-#: ../libsvn_wc/update_editor.c:3872
+#: ../libsvn_wc/update_editor.c:3893
 #, c-format
 msgid "Copyfrom-url '%s' has different repository root than '%s'"
 msgstr "L'URL source '%s' concerne un dépôt différent de '%s'"
@@ -6060,15 +6066,15 @@
 msgid "'%s' does not appear to be a URL"
 msgstr "'%s' ne semble pas être une URL"
 
-#: ../svn/conflict-callbacks.c:140
+#: ../svn/conflict-callbacks.c:142
 msgid "No editor found."
 msgstr "Aucun éditeur n'a été trouvé."
 
-#: ../svn/conflict-callbacks.c:147
+#: ../svn/conflict-callbacks.c:149
 msgid "Error running editor."
 msgstr "Erreur à l'exécution de l'éditeur."
 
-#: ../svn/conflict-callbacks.c:157
+#: ../svn/conflict-callbacks.c:159
 #, c-format
 msgid ""
 "Invalid option; there's no merged version to edit.\n"
@@ -6077,71 +6083,71 @@
 "Option invalide : il n'y a pas de version fusionnée à éditer.\n"
 "\n"
 
-#: ../svn/conflict-callbacks.c:179
+#: ../svn/conflict-callbacks.c:181
 msgid "No merge tool found.\n"
 msgstr "Aucun outil de fusion n'a été trouvé.\n"
 
-#: ../svn/conflict-callbacks.c:186
+#: ../svn/conflict-callbacks.c:188
 msgid "Error running merge tool."
 msgstr "Erreur à l'exécution de l'outil de fusion."
 
-#: ../svn/conflict-callbacks.c:252
+#: ../svn/conflict-callbacks.c:258
 msgid "No editor found, leaving all conflicts."
 msgstr "Pas d'éditeur, tous les conflits sont laissés en l'état."
 
-#: ../svn/conflict-callbacks.c:261
+#: ../svn/conflict-callbacks.c:267
 msgid "Error running editor, leaving all conflicts."
 msgstr "Erreur à l'exécution de l'éditeur, tous les conflits sont laissés en place."
 
-#: ../svn/conflict-callbacks.c:293
+#: ../svn/conflict-callbacks.c:299
 msgid "No merge tool found, leaving all conflicts."
 msgstr "Pas d'outils de gestion de conflit, les conflits sont laissés en l'état."
 
-#: ../svn/conflict-callbacks.c:302
+#: ../svn/conflict-callbacks.c:308
 msgid "Error running merge tool leaving all conflicts."
 msgstr "Erreur de l'outils de gestion de conflits, les conflits sont laissés en l'état."
 
-#: ../svn/conflict-callbacks.c:338
+#: ../svn/conflict-callbacks.c:344
 #, c-format
 msgid "Conflict discovered in '%s'.\n"
 msgstr "Conflit découvert dans '%s'.\n"
 
-#: ../svn/conflict-callbacks.c:343
+#: ../svn/conflict-callbacks.c:349
 #, c-format
 msgid "Conflict for property '%s' discovered on '%s'.\n"
 msgstr "Conflit sur la propriété '%s' découvert sur '%s'.\n"
 
-#: ../svn/conflict-callbacks.c:360
+#: ../svn/conflict-callbacks.c:366
 #, c-format
 msgid "They want to delete the property, you want to change the value to '%s'.\n"
 msgstr "Ils veulent effacer la propriété, vous voulez en modifier la valeur en '%s'.\n"
 
-#: ../svn/conflict-callbacks.c:369
+#: ../svn/conflict-callbacks.c:375
 #, c-format
 msgid "They want to change the property value to '%s', you want to delete the property.\n"
 msgstr "Ils veulent modifier la valeur de la propriété en '%s, vous voulez l'effacer.\n"
 
-#: ../svn/conflict-callbacks.c:391
+#: ../svn/conflict-callbacks.c:397
 msgid "Select: (p) postpone"
 msgstr "Sélectionner : (p) report"
 
-#: ../svn/conflict-callbacks.c:394
+#: ../svn/conflict-callbacks.c:400
 msgid ", (df) diff-full, (e) edit"
 msgstr ", (df) diff entier, (e) édite"
 
-#: ../svn/conflict-callbacks.c:398
+#: ../svn/conflict-callbacks.c:404
 msgid ", (mf) mine-full, (tf) theirs-full"
 msgstr ", (mf) mien entier, (tf) autre entier"
 
-#: ../svn/conflict-callbacks.c:401
+#: ../svn/conflict-callbacks.c:407
 msgid ", (r) resolved"
 msgstr ", (r) résolu"
 
-#: ../svn/conflict-callbacks.c:405
+#: ../svn/conflict-callbacks.c:411
 msgid "(s) show all options: "
 msgstr "(s) affiche toutes les options : "
 
-#: ../svn/conflict-callbacks.c:413
+#: ../svn/conflict-callbacks.c:419
 #, c-format
 msgid ""
 "  (p)  postpone    - mark the conflict to be resolved later\n"
@@ -6164,7 +6170,7 @@
 "  (s)  aide          - affiche cette liste\n"
 "\n"
 
-#: ../svn/conflict-callbacks.c:436 ../svn/conflict-callbacks.c:577
+#: ../svn/conflict-callbacks.c:442 ../svn/conflict-callbacks.c:583
 #, c-format
 msgid ""
 "Sorry, '(mc) mine for conflicts' is not yet implemented; see\n"
@@ -6175,7 +6181,7 @@
 "voir http://subversion.tigris.org/issues/show_bug.cgi?id=3049\n"
 "\n"
 
-#: ../svn/conflict-callbacks.c:445 ../svn/conflict-callbacks.c:586
+#: ../svn/conflict-callbacks.c:451 ../svn/conflict-callbacks.c:592
 #, c-format
 msgid ""
 "Sorry, '(tc) theirs for conflicts' is not yet implemented; see\n"
@@ -6186,7 +6192,7 @@
 "voir http://subversion.tigris.org/issues/show_bug.cgi?id=3049\n"
 "\n"
 
-#: ../svn/conflict-callbacks.c:464
+#: ../svn/conflict-callbacks.c:470
 #, c-format
 msgid ""
 "Sorry, '(dc) diff of conflicts' is not yet implemented; see\n"
@@ -6197,7 +6203,7 @@
 "voir http://subversion.tigris.org/issues/show_bug.cgi?id=3048\n"
 "\n"
 
-#: ../svn/conflict-callbacks.c:474
+#: ../svn/conflict-callbacks.c:480
 #, c-format
 msgid ""
 "Invalid option; there's no merged version to diff.\n"
@@ -6206,7 +6212,7 @@
 "Option invalide ; il n'y a pas de version fusionnée à différentier.\n"
 "\n"
 
-#: ../svn/conflict-callbacks.c:492 ../svn/conflict-callbacks.c:506
+#: ../svn/conflict-callbacks.c:498 ../svn/conflict-callbacks.c:512
 #, c-format
 msgid ""
 "Invalid option.\n"
@@ -6215,7 +6221,7 @@
 "Option invalide.\n"
 "\n"
 
-#: ../svn/conflict-callbacks.c:536
+#: ../svn/conflict-callbacks.c:542
 #, c-format
 msgid ""
 "Conflict discovered when trying to add '%s'.\n"
@@ -6224,11 +6230,11 @@
 "Conflit découvert en essayant d'ajouter '%s'.\n"
 "Un objet de même nom existe déjà.\n"
 
-#: ../svn/conflict-callbacks.c:539
+#: ../svn/conflict-callbacks.c:545
 msgid "Select: (p) postpone, (mf) mine-full, (tf) theirs-full, (h) help:"
 msgstr "Sélectionner : (p) report, (mf) mien complet, (tf) autre complet, (h) aide :"
 
-#: ../svn/conflict-callbacks.c:551
+#: ../svn/conflict-callbacks.c:557
 #, c-format
 msgid ""
 "  (p)  postpone    - resolve the conflict later\n"
@@ -6311,7 +6317,7 @@
 "Subversion est un outil pour gérer des versions.\n"
 "Pour plus d'informations, voir http://subversion.tigris.org/\n"
 
-#: ../svn/help-cmd.c:65 ../svnsync/main.c:1786
+#: ../svn/help-cmd.c:65 ../svnsync/main.c:1823
 msgid ""
 "The following repository access (RA) modules are available:\n"
 "\n"
@@ -6337,7 +6343,7 @@
 msgid "'%s' has invalid revision"
 msgstr "'%s' a une révision invalide"
 
-#: ../svn/info-cmd.c:239 ../svn/mergeinfo-cmd.c:170 ../svnadmin/main.c:1199
+#: ../svn/info-cmd.c:239 ../svnadmin/main.c:1199
 #, c-format
 msgid "Path: %s\n"
 msgstr "Chemin : %s\n"
@@ -6909,14 +6915,18 @@
 "    ('"
 
 #: ../svn/main.c:274
-msgid "query a particular merge source URL"
-msgstr "interroge une URL source de fusion particulière"
+msgid ""
+"specify which collection of revisions to display\n"
+"                             ('"
+msgstr ""
+"précise quelle collection de révisions afficher\n"
+"                              ('"
 
-#: ../svn/main.c:276
+#: ../svn/main.c:279
 msgid "lump-merge all of source URL's unmerged changes"
 msgstr "Fusionne toutes les modifications non fusionnées des URLs sources"
 
-#: ../svn/main.c:323
+#: ../svn/main.c:326
 msgid ""
 "Put files and directories under version control, scheduling\n"
 "them for addition to repository.  They will be added in next commit.\n"
@@ -6926,11 +6936,11 @@
 "prévoyant leur ajout au dépôt lors de la prochaine propagation (commit).\n"
 "usage : add CHEMIN...\n"
 
-#: ../svn/main.c:328
+#: ../svn/main.c:331
 msgid "add intermediate parents"
 msgstr "ajoute les répertoires intermédiaires"
 
-#: ../svn/main.c:331
+#: ../svn/main.c:334
 msgid ""
 "Output the content of specified files or\n"
 "URLs with revision and author information in-line.\n"
@@ -6945,7 +6955,7 @@
 "\n"
 "  Si précisée, REV détermine quelle révision est d'abord regardée.\n"
 
-#: ../svn/main.c:340
+#: ../svn/main.c:343
 msgid ""
 "Output the content of specified files or URLs.\n"
 "usage: cat TARGET[@REV]...\n"
@@ -6958,7 +6968,7 @@
 "\n"
 "  Si précisée, REV détermine quelle révision est d'abord regardée.\n"
 
-#: ../svn/main.c:348
+#: ../svn/main.c:351
 msgid ""
 "Associate (or dissociate) changelist CLNAME with the named files.\n"
 "usage: 1. changelist CLNAME TARGET...\n"
@@ -6968,7 +6978,7 @@
 "usage : 1. changelist CLNOM CIBLE...\n"
 "        2. changelist --remove CIBLE...\n"
 
-#: ../svn/main.c:354
+#: ../svn/main.c:357
 msgid ""
 "Check out a working copy from a repository.\n"
 "usage: checkout URL[@REV]... [PATH]\n"
@@ -7014,7 +7024,7 @@
 "  modification locale à la copie de travail.\n"
 "  Toutes les propriétés stockées dans le dépôt sont appliquées aux objets.\n"
 
-#: ../svn/main.c:378
+#: ../svn/main.c:381
 msgid ""
 "Recursively clean up the working copy, removing locks, resuming\n"
 "unfinished operations, etc.\n"
@@ -7024,7 +7034,7 @@
 "reprenant les opérations en cours, etc.\n"
 "usage : cleanup [CHEMIN...]\n"
 
-#: ../svn/main.c:385
+#: ../svn/main.c:388
 msgid ""
 "Send changes from your working copy to the repository.\n"
 "usage: commit [PATH...]\n"
@@ -7042,7 +7052,7 @@
 "  Les éléments propagés (commit) qui étaient verrouillés (locked) sont\n"
 "  déverrouillés (unlock) en cas de réussite.\n"
 
-#: ../svn/main.c:393
+#: ../svn/main.c:396
 msgid ""
 "Send changes from your working copy to the repository.\n"
 "usage: commit [PATH...]\n"
@@ -7061,7 +7071,7 @@
 "  (sauf sous OS400). Les éléments propagés (commit) qui étaient verrouillés\n"
 "  (locked) sont déverrouillés (unlock) en cas de réussite.\n"
 
-#: ../svn/main.c:406
+#: ../svn/main.c:409
 msgid ""
 "Duplicate something in working copy or repository, remembering\n"
 "history.\n"
@@ -7102,7 +7112,7 @@
 "dépôt. En conséquence, elles ne peuvent, par défaut, propager les \n"
 "informations de suivi de fusion de la source à la destination.\n"
 
-#: ../svn/main.c:428
+#: ../svn/main.c:431
 msgid ""
 "Remove files and directories from version control.\n"
 "usage: 1. delete PATH...\n"
@@ -7131,7 +7141,7 @@
 "\n"
 "  2. Chaque URL est supprimée du dépôt via une propagation immédiate.\n"
 
-#: ../svn/main.c:444
+#: ../svn/main.c:447
 msgid ""
 "Display the differences between two revisions or paths.\n"
 "usage: 1. diff [-c M | -r N[:M]] [TARGET[@REV]...]\n"
@@ -7188,7 +7198,7 @@
 "  Utiliser simplement 'svn diff' pour afficher les modifications locales\n"
 "  dans la copie de travail.\n"
 
-#: ../svn/main.c:472
+#: ../svn/main.c:475
 msgid ""
 "Create an unversioned copy of a tree.\n"
 "usage: 1. export [-r REV] URL[@PEGREV] [PATH]\n"
@@ -7226,7 +7236,7 @@
 "\n"
 "  Si spécifiée, PEGREV donne la révision de la cible d'abord regardée.\n"
 
-#: ../svn/main.c:493
+#: ../svn/main.c:496
 msgid ""
 "Describe the usage of this program or its subcommands.\n"
 "usage: help [SUBCOMMAND...]\n"
@@ -7234,7 +7244,7 @@
 "Décrit l'usage de ce programme ou de ses sous-commandes.\n"
 "usage : help [SOUS_COMMANDE...]\n"
 
-#: ../svn/main.c:499
+#: ../svn/main.c:502
 msgid ""
 "Commit an unversioned file or tree into the repository.\n"
 "usage: import [PATH] URL\n"
@@ -7257,7 +7267,7 @@
 "  Les objects non versionnables tels les périphériques ou les pipes sont\n"
 "  ignorés si l'option '--force' est spécifiée.\n"
 
-#: ../svn/main.c:513
+#: ../svn/main.c:516
 msgid ""
 "Display information about a local or remote item.\n"
 "usage: info [TARGET[@REV]...]\n"
@@ -7273,7 +7283,7 @@
 "  CIBLE peut être un chemin dans une copie de travail ou une URL.\n"
 "  Si REV est spécifié, cette révision est d'abord regardée.\n"
 
-#: ../svn/main.c:523
+#: ../svn/main.c:526
 msgid ""
 "List directory entries in the repository.\n"
 "usage: list [TARGET[@REV]...]\n"
@@ -7310,7 +7320,7 @@
 "  Taille (en octets)\n"
 "  Date et heure de la dernière propagation\n"
 
-#: ../svn/main.c:544
+#: ../svn/main.c:547
 msgid ""
 "Lock working copy paths or URLs in the repository, so that\n"
 "no other user can commit changes to them.\n"
@@ -7324,19 +7334,19 @@
 "  Utiliser --force pour voler le verrou d'un autre utilisateur ou d'une\n"
 "  autre copie de travail.\n"
 
-#: ../svn/main.c:550
+#: ../svn/main.c:553
 msgid "read lock comment from file ARG"
 msgstr "lit les commentaire de verrouillage à partir du fichier ARG"
 
-#: ../svn/main.c:551
+#: ../svn/main.c:554
 msgid "specify lock comment ARG"
 msgstr "précise le commentaire de verrouillage ARG"
 
-#: ../svn/main.c:552
+#: ../svn/main.c:555
 msgid "force validity of lock comment source"
 msgstr "force la validité de la source du commentaire de verrouillage"
 
-#: ../svn/main.c:555
+#: ../svn/main.c:558
 msgid ""
 "Show the log messages for a set of revision(s) and/or file(s).\n"
 "usage: 1. log [PATH]\n"
@@ -7347,7 +7357,9 @@
 "\n"
 "  2. Print the log messages for the PATHs (default: '.') under URL.\n"
 "     If specified, REV determines in which revision the URL is first\n"
-"     looked up.  The default revision range is HEAD:1.\n"
+"     looked up, and the default revision range is REV:1; otherwise,\n"
+"     the URL is looked up in HEAD, and the default revision range is\n"
+"     HEAD:1.\n"
 "\n"
 "  With -v, also print all affected paths with each log message.\n"
 "  With -q, don't print the log message body itself (note that this is\n"
@@ -7372,8 +7384,10 @@
 "     Les révisions BASE:1 sont prises par défaut.\n"
 "\n"
 "  2. Affiche les entrées du journal pour les CHEMINs sous l'URL.\n"
-"     Si présente, REV détermine la révision d'abord prise en compte.\n"
-"     Les révisions HEAD:1 sont prises par défaut.\n"
+"     Si présente, REV détermine la révision d'abord prise en compte,\n"
+"     et l'intervalle de révision par défaut est REV:1 ; \n"
+"     Sinon, la révision de tête de l'URL est consultée, et\n"
+"     les révisions HEAD:1 sont prises par défaut.\n"
 "\n"
 "  Avec -v, affiche également les chemins concernés par le message.\n"
 "  Avec -q, le corps du message n'est pas affiché (compatible avec -v).\n"
@@ -7389,20 +7403,20 @@
 "    svn log http://www.exemple.fr/depot/projet/truc.c\n"
 "    svn log http://www.exemple.fr/depot/projet truc.c bidule.c\n"
 
-#: ../svn/main.c:582
+#: ../svn/main.c:587
 msgid "retrieve revision property ARG"
 msgstr "Retrouve la propriété de révision ARG"
 
-#: ../svn/main.c:583
+#: ../svn/main.c:588
 msgid "the change made by ARG"
 msgstr "Le changement fait par ARG"
 
-#: ../svn/main.c:586
+#: ../svn/main.c:591
 msgid ""
 "Apply the differences between two sources to a working copy path.\n"
 "usage: 1. merge sourceURL1[@N] sourceURL2[@M] [WCPATH]\n"
 "       2. merge sourceWCPATH1@N sourceWCPATH2@M [WCPATH]\n"
-"       3. merge [[-c M[,N]]... | [-r N:M]...] [SOURCE[@REV] [WCPATH]]\n"
+"       3. merge [-c M[,N...] | -r N:M ...] SOURCE[@REV] [WCPATH]\n"
 "\n"
 "  1. In the first form, the source URLs are specified at revisions\n"
 "     N and M.  These are the two sources to be compared.  The revisions\n"
@@ -7413,25 +7427,26 @@
 "     be specified.\n"
 "\n"
 "  3. In the third form, SOURCE can be either a URL or a working copy\n"
-"     path (in which case its corresponding URL is used).  If not\n"
-"     specified, SOURCE will be the same as WCPATH.  SOURCE in revision\n"
-"     REV is compared as it existed between revisions N and M for each\n"
-"     revision range provided.  If REV is not specified, HEAD is\n"
-"     assumed.  '-c M' is equivalent to '-r <M-1>:M', and '-c -M' does\n"
-"     the reverse: '-r M:<M-1>'.  If no revision ranges are specified,\n"
-"     the default range of 1:HEAD is used.  Multiple '-c' and/or '-r'\n"
-"     instances may be specified, and mixing of forward and reverse\n"
-"     ranges is allowed.\n"
+"     path (in which case its corresponding URL is used).  SOURCE (in\n"
+"     revision REV) is compared as it existed between revisions N and M\n"
+"     for each revision range provided.  If REV is not specified, HEAD\n"
+"     is assumed.  '-c M' is equivalent to '-r <M-1>:M', and '-c -M'\n"
+"     does the reverse: '-r M:<M-1>'.  If no revision ranges are\n"
+"     specified, the default range of 0:REV is used.  Multiple '-c'\n"
+"     and/or '-r' instances may be specified, and mixing of forward\n"
+"     and reverse ranges is allowed.\n"
 "\n"
 "  WCPATH is the working copy path that will receive the changes.\n"
 "  If WCPATH is omitted, a default value of '.' is assumed, unless\n"
 "  the sources have identical basenames that match a file within '.':\n"
 "  in which case, the differences will be applied to that file.\n"
 "\n"
-"  NOTE:  Subversion will only internally track metadata about the\n"
-"  merge operation if the two sources are ancestrally related -- if the\n"
+"  NOTE:  Subversion will only record metadata to track the merge\n"
+"  if the two sources are on the same line of history -- if the\n"
 "  first source is an ancestor of the second, or vice-versa.  This is\n"
 "  guaranteed to be the case when using the third form listed above.\n"
+"  The --ignore-ancestry option overrides this, forcing Subversion to\n"
+"  regard the sources as unrelated and not to track the merge.\n"
 msgstr ""
 "Applique les différences entre deux sources à une copie de travail.\n"
 "usage : 1. merge URL1[@N] URL2[@M] [CHEMIN]\n"
@@ -7447,12 +7462,11 @@
 "\n"
 "  3. Dans cette troisième forme, SOURCE est une URL ou un chemin dans la copie\n"
 "     de travail (auquel cas l'URL correspondante est utilisée). \n"
-"     Si non spécifiée, SOURCE sera identique à CHEMIN.\n"
-"     La SOURCE à la révision REV est comparée telle qu'elle existait entre\n"
-"     les révisions N et M pour chaque intervalle de révision fourni.\n"
+"     La SOURCE à la révision REV est comparée telle qu'elle existait entre les\n"
+"     révisions N et M pour chaque intervalle de révision fourni.\n"
 "     Si REV n'est pas précisée, HEAD est utilisée. '-c M' est équivalent\n"
 "     à '-r <M-1>:M' et '-c -M' à l'inverse, '-r M:<M-1>'. Si aucun intervalle\n"
-"     de révision n'est précisé, 1:HEAD est utilisé. Des intervalles multiples\n"
+"     de révision n'est précisé, 0:REV est utilisé. Des intervalles multiples\n"
 "     avec '-c' et/ou '-r' peuvent être utilisé, et il est possible de mélanger\n"
 "     des intervalles avant et arrière.\n"
 "\n"
@@ -7463,16 +7477,29 @@
 "  NOTE : Subversion garde trace en interne des fusions opérées si les deux\n"
 "  sources sont parentes l'une de l'autre, dans un sens ou dans l'autre. Cela\n"
 "  est garanti si la troisième forme ci-dessus est utilisée.\n"
+"  L'option '--ignore-ancestry' permet de forcer Subversion à considérer les\n"
+"  sources comme non parentes et de ne pas garder trace des fusions.\n"
 
-#: ../svn/main.c:623
+#: ../svn/main.c:629
 msgid ""
 "Query merge-related information.\n"
-"usage: mergeinfo [TARGET[@REV]...]\n"
+"usage: mergeinfo SOURCE-URL[@REV] [TARGET[@REV]]\n"
+"\n"
+"  Query information related to merges (or potential merges) between\n"
+"  SOURCE-URL and TARGET.  If the --show-revs option is not provided,\n"
+"  display revisions which have been merged from SOURCE-URL to TARGET.\n"
+"  Otherwise, display the type of information specified by the\n"
+"  --show-revs option.\n"
 msgstr ""
-"Demande les informations liées à la fusion (merge).\n"
-"usage : mergeinfo [CIBLE[@REV]...]\n"
+"Montre les informations liées aux fusions.\n"
+"Usage : mergeinfo URL-SOURCE[@REV] [CIBLE[@REV]]\n"
+"\n"
+"  Montre les informations liées aux fusions (ou fusions potentielles) entre\n"
+"  URL-SOURCE et CIBLE. Si l'option '--show-revs' n'est pas fournie, affiche\n"
+"  les révisions qui ont été fusionnées entre URL-SOURCE et CIBLE. Sinon, \n"
+"  affiche les informations liées à l'option '--show-revs'.\n"
 
-#: ../svn/main.c:628
+#: ../svn/main.c:640
 msgid ""
 "Create a new directory under version control.\n"
 "usage: 1. mkdir PATH...\n"
@@ -7501,7 +7528,7 @@
 "  Dans les deux cas, les répertoires intermédiaires doivent déjà exister,\n"
 "  sauf si l'option --parents est présente.\n"
 
-#: ../svn/main.c:645
+#: ../svn/main.c:657
 msgid ""
 "Move and/or rename something in working copy or repository.\n"
 "usage: move SRC... DST\n"
@@ -7531,7 +7558,7 @@
 "    URL -> URL : effectue un renommage côté serveur.\n"
 "  Toutes les sources doivent être du même type.\n"
 
-#: ../svn/main.c:661
+#: ../svn/main.c:673
 msgid ""
 "Remove a property from files, dirs, or revisions.\n"
 "usage: 1. propdel PROPNAME [PATH...]\n"
@@ -7549,7 +7576,7 @@
 "  2. Supprime une propriété non versionnée d'une révision du dépôt.\n"
 "     CIBLE détermine uniquement à quel dépôt accéder.\n"
 
-#: ../svn/main.c:672
+#: ../svn/main.c:684
 msgid ""
 "Edit a property with an external editor.\n"
 "usage: 1. propedit PROPNAME TARGET...\n"
@@ -7571,7 +7598,7 @@
 "\n"
 "Voir 'svn help propset' pour plus d'informations sur les propriétés.\n"
 
-#: ../svn/main.c:685
+#: ../svn/main.c:697
 msgid ""
 "Print the value of a property on files, dirs, or revisions.\n"
 "usage: 1. propget PROPNAME [TARGET[@REV]...]\n"
@@ -7604,7 +7631,7 @@
 "  Utiliser --strict pour désactiver ces améliorations esthétiques, par\n"
 "  exemple pour rediriger les propriétés binaires vers un fichier.\n"
 
-#: ../svn/main.c:703
+#: ../svn/main.c:715
 msgid ""
 "List all properties on files, dirs, or revisions.\n"
 "usage: 1. proplist [TARGET[@REV]...]\n"
@@ -7624,7 +7651,7 @@
 "  2. Liste les propriétés non versionnées d'une révision du dépôt.\n"
 "     CIBLE détermine uniquement à quel dépôt accéder.\n"
 
-#: ../svn/main.c:714
+#: ../svn/main.c:726
 msgid ""
 "Set the value of a property on files, dirs, or revisions.\n"
 "usage: 1. propset PROPNAME PROPVAL PATH...\n"
@@ -7638,7 +7665,7 @@
 "\n"
 "  Note: svn recognizes the following special versioned properties\n"
 "  but will store any arbitrary properties set:\n"
-"    svn:ignore     - A newline separated list of file patterns to ignore.\n"
+"    svn:ignore     - A newline separated list of file glob patterns to ignore.\n"
 "    svn:keywords   - Keywords to be expanded.  Valid keywords are:\n"
 "      URL, HeadURL             - The URL for the head version of the object.\n"
 "      Author, LastChangedBy    - The last person to modify the file.\n"
@@ -7742,35 +7769,48 @@
 "  modification non récursive sur un répertoire échouera. Une modification\n"
 "  récursive s'appliquera seulement aux fichiers fils du répertoire.\n"
 
-#: ../svn/main.c:774
+#: ../svn/main.c:786
 msgid "read property value from file ARG"
 msgstr "prend la valeur d'une propriété dans le fichier ARG"
 
-#: ../svn/main.c:777
+#: ../svn/main.c:789
+msgid ""
+"Resolve conflicts on working copy files or directories.\n"
+"usage: resolve [PATH...]\n"
+"\n"
+"  Note:  the --accept option is currently required.\n"
+msgstr ""
+"Résout les conflits de fichiers ou répertoires dans la copie de travail.\n"
+"Usage : resolve [CHEMIN...]\n"
+"\n"
+"  Note : l'option '--accept' est actuellement requise.\n"
+
+#: ../svn/main.c:794
+msgid ""
+"specify automatic conflict resolution source\n"
+"                            ('"
+msgstr ""
+"précise la source de la résolution automatique de conflit\n"
+"    '"
+
+#: ../svn/main.c:806
 msgid ""
 "Remove 'conflicted' state on working copy files or directories.\n"
 "usage: resolved PATH...\n"
 "\n"
 "  Note:  this subcommand does not semantically resolve conflicts or\n"
 "  remove conflict markers; it merely removes the conflict-related\n"
-"  artifact files and allows PATH to be committed again.\n"
+"  artifact files and allows PATH to be committed again.  It has been\n"
+"  deprecated in favor of running 'svn resolve --accept working'.\n"
 msgstr ""
 "Enlève l'état 'en conflit' (conflicted) d'un fichier ou répertoire local.\n"
-"usage : resolved PATH...\n"
+"usage : resolved CHEMIN...\n"
 "\n"
 "  Note : cette sous-commande ne résout pas le conflit sur le fond ; elle\n"
 "  supprime simplement les fichiers relatifs au conflit pour permettre une\n"
-"  propagation (commit) ultérieure.\n"
+"  propagation (commit) ultérieure. Lui préférer 'svn resolve --accept working'.\n"
 
-#: ../svn/main.c:784
-msgid ""
-"specify automatic conflict resolution source\n"
-"                             '"
-msgstr ""
-"précise la source de la résolution automatique de conflit\n"
-"    '"
-
-#: ../svn/main.c:795
+#: ../svn/main.c:816
 msgid ""
 "Restore pristine working copy file (undo most local edits).\n"
 "usage: revert PATH...\n"
@@ -7784,7 +7824,7 @@
 "  Note : cette sous-commande n'a pas besoin d'accès réseau, et résout les\n"
 "  conflits. Elle ne restaure cependant pas les répertoires supprimés.\n"
 
-#: ../svn/main.c:803
+#: ../svn/main.c:824
 msgid ""
 "Print the status of working copy files and directories.\n"
 "usage: status [PATH...]\n"
@@ -7933,7 +7973,7 @@
 "                 965       687 suzy         wc/zig.c\n"
 "    État par rapport à la révision   981\n"
 
-#: ../svn/main.c:879
+#: ../svn/main.c:900
 msgid ""
 "Update the working copy to a different URL.\n"
 "usage: 1. switch URL[@PEGREV] [PATH]\n"
@@ -7993,7 +8033,7 @@
 "  modification locale à la copie de travail.\n"
 "  Toutes les propriétés stockées dans le dépôt sont appliquées aux objets.\n"
 
-#: ../svn/main.c:913
+#: ../svn/main.c:934
 msgid ""
 "Unlock working copy paths or URLs.\n"
 "usage: unlock TARGET...\n"
@@ -8005,7 +8045,7 @@
 "\n"
 "  Utiliser --force pour casser le verrou.\n"
 
-#: ../svn/main.c:920
+#: ../svn/main.c:941
 msgid ""
 "Bring changes from the repository into the working copy.\n"
 "usage: update [PATH...]\n"
@@ -8078,73 +8118,73 @@
 "  la copie de travail cible de l'opération.  La profondeur peut seulement être\n"
 "  augmenté dans la version actuelle.  \n"
 
-#: ../svn/main.c:1000 ../svnadmin/main.c:78 ../svnlook/main.c:329
+#: ../svn/main.c:1021 ../svnadmin/main.c:78 ../svnlook/main.c:329
 #: ../svnsync/main.c:184
 msgid "Caught signal"
 msgstr "Signal reçu"
 
-#: ../svn/main.c:1122 ../svnlook/main.c:2083
+#: ../svn/main.c:1144 ../svnlook/main.c:2083
 msgid "Non-numeric limit argument given"
 msgstr "L'argument de l'option limit doit être numérique"
 
-#: ../svn/main.c:1128 ../svnlook/main.c:2089
+#: ../svn/main.c:1150 ../svnlook/main.c:2089
 msgid "Argument to --limit must be positive"
 msgstr "L'argument de --limit doit être positif"
 
-#: ../svn/main.c:1150 ../svn/main.c:1383
+#: ../svn/main.c:1172 ../svn/main.c:1412
 msgid "Can't specify -c with --old"
 msgstr "Option -c incompatible avec --old"
 
-#: ../svn/main.c:1160
+#: ../svn/main.c:1189
 msgid "Non-numeric change argument given to -c"
 msgstr "L'argument de l'option -c doit être numérique"
 
-#: ../svn/main.c:1168
+#: ../svn/main.c:1197
 msgid "There is no change 0"
 msgstr "Il n'y a pas de changement (option -c) 0"
 
-#: ../svn/main.c:1204 ../svnadmin/main.c:1473
+#: ../svn/main.c:1233 ../svnadmin/main.c:1473
 #, c-format
 msgid "Syntax error in revision argument '%s'"
 msgstr "Erreur de syntaxe à l'argument de révision '%s'"
 
-#: ../svn/main.c:1277 ../svn/main.c:1296
+#: ../svn/main.c:1306 ../svn/main.c:1325
 #, c-format
 msgid "Error converting depth from locale to UTF8"
 msgstr "Erreur en convertissant la profondeur de la 'locale' vers UTF8"
 
-#: ../svn/main.c:1285 ../svn/main.c:1304
+#: ../svn/main.c:1314 ../svn/main.c:1333
 #, c-format
 msgid "'%s' is not a valid depth; try 'empty', 'files', 'immediates', or 'infinity'"
 msgstr "'%s' n'est pas un profondeur valide ; essayer 'empty' (vide), 'files' (fichiers), 'immediates' (immédiat) ou 'infinity' (infini)"
 
-#: ../svn/main.c:1411
+#: ../svn/main.c:1440
 #, c-format
 msgid "Syntax error in native-eol argument '%s'"
 msgstr "Erreur de syntaxe à l'argument de fin de ligne native (native-eol) '%s'"
 
-#: ../svn/main.c:1457
+#: ../svn/main.c:1486
 #, c-format
-msgid "'%s' is not a valid accept value"
-msgstr "'%s' n'est pas une valeur d'acceptation valide"
+msgid "'%s' is not a valid --accept value"
+msgstr "'%s' n'est pas valide pour --accept"
 
-#: ../svn/main.c:1465
+#: ../svn/main.c:1495
 #, c-format
-msgid "'%s' is not a URL"
-msgstr "'%s' n'est pas une URL"
+msgid "'%s' is not a valid --show-revs value"
+msgstr "'%s' n'est pas valide pour --show-revs"
 
-#: ../svn/main.c:1527 ../svndumpfilter/main.c:1314 ../svnlook/main.c:2161
+#: ../svn/main.c:1557 ../svndumpfilter/main.c:1314 ../svnlook/main.c:2161
 #, c-format
 msgid "Subcommand argument required\n"
 msgstr "Argument de la sous-commande attendu\n"
 
-#: ../svn/main.c:1546 ../svnadmin/main.c:1605 ../svndumpfilter/main.c:1333
+#: ../svn/main.c:1576 ../svnadmin/main.c:1605 ../svndumpfilter/main.c:1333
 #: ../svnlook/main.c:2180
 #, c-format
 msgid "Unknown command: '%s'\n"
 msgstr "Commande inconnue : '%s'\n"
 
-#: ../svn/main.c:1580
+#: ../svn/main.c:1610
 #, c-format
 msgid ""
 "Subcommand '%s' doesn't accept option '%s'\n"
@@ -8153,122 +8193,110 @@
 "La sous-commande '%s' n'accepte pas l'option '%s'\n"
 "Entrer 'svn help %s' pour l'aide.\n"
 
-#: ../svn/main.c:1594
+#: ../svn/main.c:1624
 msgid "Multiple revision arguments encountered; can't specify -c twice, or both -c and -r"
 msgstr "Arguments de révision multiples : ne pas répéter -c, ou utiliser à la fois -c et -r"
 
-#: ../svn/main.c:1608
+#: ../svn/main.c:1638
 msgid "-r and -c can't be used with --reintegrate"
 msgstr "-r et -c ne peuvent être utilisées avec --reintegrate"
 
-#: ../svn/main.c:1617
+#: ../svn/main.c:1647
 msgid "--depth and --set-depth are mutually exclusive"
 msgstr "--depth et --set-depth sont mutuellement exclusives"
 
-#: ../svn/main.c:1667
+#: ../svn/main.c:1697
 msgid "Log message file is a versioned file; use '--force-log' to override"
 msgstr "Le fichier de l'entrée du journal est versionné; forcer avec '--force-log'"
 
-#: ../svn/main.c:1674
+#: ../svn/main.c:1704
 msgid "Lock comment file is a versioned file; use '--force-log' to override"
 msgstr "Le fichier de commentaire du verrou est versionné ; forcer avec '--force-log'"
 
-#: ../svn/main.c:1694
+#: ../svn/main.c:1724
 msgid "The log message is a pathname (was -F intended?); use '--force-log' to override"
 msgstr "Le message de propagation donné est un chemin (-F était voulu ?) ; forcer avec '--force-log'"
 
-#: ../svn/main.c:1701
+#: ../svn/main.c:1731
 msgid "The lock comment is a pathname (was -F intended?); use '--force-log' to override"
 msgstr "Le commentaire du verrou est un chemin de fichier (-F était voulu ?) ; forcer avec '--force-log'"
 
-#: ../svn/main.c:1712
+#: ../svn/main.c:1742
 msgid "--relocate and --depth are mutually exclusive"
 msgstr "--relocate et --depth sont mutuellement exclusives"
 
-#: ../svn/main.c:1788
+#: ../svn/main.c:1818
 msgid "--auto-props and --no-auto-props are mutually exclusive"
 msgstr "--auto-props et --no-auto-props sont mutuellement exclusives"
 
-#: ../svn/main.c:1802
+#: ../svn/main.c:1832
 msgid "--reintegrate cannot be used with --ignore-ancestry or --record-only"
 msgstr "--reintegrate ne peut être utilisé avec --ignore-ancestry ou --record-only"
 
-#: ../svn/main.c:1810
+#: ../svn/main.c:1840
 msgid "--reintegrate cannot be used with --ignore-ancestry"
 msgstr "--reintegrate ne peut être utilisé avec --ignore-ancestry"
 
-#: ../svn/main.c:1818
+#: ../svn/main.c:1848
 msgid "--reintegrate cannot be used with --record-only"
 msgstr "--reintegrate ne peut être utilise avec --record-only"
 
-#: ../svn/main.c:1931 ../svn/main.c:1937
+#: ../svn/main.c:1961 ../svn/main.c:1967
 #, c-format
 msgid "--accept=%s incompatible with --non-interactive"
 msgstr "--accept=%s incompatible avec --non-interactive"
 
-#: ../svn/main.c:1964
+#: ../svn/main.c:1994
 msgid "Try 'svn help' for more info"
 msgstr "Essayer 'svn help' pour plus d'information."
 
-#: ../svn/main.c:1974
+#: ../svn/main.c:2004
 msgid "svn: run 'svn cleanup' to remove locks (type 'svn help cleanup' for details)\n"
 msgstr "svn : lancer 'svn cleanup' pour enlever les verrous (cf 'svn help cleanup')\n"
 
-#: ../svn/merge-cmd.c:102
+#: ../svn/merge-cmd.c:105
+msgid "Merge source required"
+msgstr "Source de la fusion attendue"
+
+#: ../svn/merge-cmd.c:151
 msgid "Second revision required"
 msgstr "Seconde révision attendue"
 
-#: ../svn/merge-cmd.c:111 ../svn/merge-cmd.c:144
+#: ../svn/merge-cmd.c:160 ../svn/merge-cmd.c:193 ../svn/mergeinfo-cmd.c:74
 msgid "Too many arguments given"
 msgstr "Trop d'arguments donnés"
 
-#: ../svn/merge-cmd.c:133
+#: ../svn/merge-cmd.c:182
 msgid "Cannot specify a revision range with two URLs"
 msgstr "Impossible de préciser un intervalle de révision avec deux URLs"
 
-#: ../svn/merge-cmd.c:160
+#: ../svn/merge-cmd.c:209
 msgid "A working copy merge source needs an explicit revision"
 msgstr "Une fusion à partir de sources locales nécessite une révision explicite"
 
-#: ../svn/merge-cmd.c:243
+#: ../svn/merge-cmd.c:292
+msgid "--depth cannot be used with --reintegrate"
+msgstr "--deth ne peut être utilisé avec --reintegrate"
+
+#: ../svn/merge-cmd.c:297
 msgid "--force cannot be used with --reintegrate"
 msgstr "--force ne peut être utilisé avec --reintegrate"
 
-#: ../svn/mergeinfo-cmd.c:77
-#, c-format
-msgid "  Source path: %s\n"
-msgstr "  Chemin de la source : %s\n"
+#: ../svn/mergeinfo-cmd.c:71
+msgid "Not enough arguments given"
+msgstr "Nombre d'arguments insuffisant"
 
-#: ../svn/mergeinfo-cmd.c:79
+#: ../svn/mergeinfo-cmd.c:81 ../svnsync/main.c:700 ../svnsync/main.c:703
+#: ../svnsync/main.c:1642 ../svnsync/main.c:1792
 #, c-format
-msgid "    Merged ranges: "
-msgstr "    Révisions fusionnées : "
-
-#. Now fetch the available merges for this source.
-#. ### FIXME: There's no reason why this API should fail to
-#. ### answer the question (when asked of a 1.5+ server),
-#. ### short of something being quite wrong with the
-#. ### question.  Certainly, that the merge source URL can't
-#. ### be found in HEAD shouldn't mean we can't get any
-#. ### decent information about it out of the system.  It
-#. ### may just mean the system has to work harder to
-#. ### provide that information.
-#.
-#: ../svn/mergeinfo-cmd.c:93
-#, c-format
-msgid "    Eligible ranges: "
-msgstr "    Fusions possibles : "
-
-#: ../svn/mergeinfo-cmd.c:106
-#, c-format
-msgid "(source no longer available in HEAD)\n"
-msgstr "(source non disponible à la révision de tête - HEAD)\n"
+msgid "Path '%s' is not a URL"
+msgstr "Le chemin '%s' n'est pas une URL"
 
 #: ../svn/mkdir-cmd.c:88
 msgid "Try 'svn add' or 'svn add --non-recursive' instead?"
 msgstr "Essayer plutôt 'svn add' ou 'svn add --non-recursive' ?"
 
-#: ../svn/mkdir-cmd.c:94
+#: ../svn/mkdir-cmd.c:95
 msgid "Try 'svn mkdir --parents' instead?"
 msgstr "Essayer plutôt 'svn mkdir --parents' ?"
 
@@ -8421,7 +8449,7 @@
 msgid "Replacing      %s\n"
 msgstr "Remplacement   %s\n"
 
-#: ../svn/notify.c:374 ../svnsync/main.c:906
+#: ../svn/notify.c:374 ../svnsync/main.c:909
 #, c-format
 msgid "Transmitting file data "
 msgstr "Transmission des données "
@@ -8446,27 +8474,27 @@
 msgid "Path '%s' is no longer a member of a changelist.\n"
 msgstr "Le chemin '%s' n'est plus associé à une liste de changements.\n"
 
-#: ../svn/notify.c:427
+#: ../svn/notify.c:421
 #, c-format
 msgid "--- Merging differences between repository URLs into '%s':\n"
 msgstr "--- Fusion des différences des URLs du dépôt vers '%s' :\n"
 
-#: ../svn/notify.c:432
+#: ../svn/notify.c:426
 #, c-format
 msgid "--- Merging r%ld into '%s':\n"
 msgstr "--- Fusion de r%ld dans '%s':\n"
 
-#: ../svn/notify.c:436
+#: ../svn/notify.c:430
 #, c-format
 msgid "--- Reverse-merging r%ld into '%s':\n"
 msgstr "--- Fusion inverse de r%ld dans '%s' :\n"
 
-#: ../svn/notify.c:440
+#: ../svn/notify.c:434
 #, c-format
 msgid "--- Merging r%ld through r%ld into '%s':\n"
 msgstr "--- Fusion de r%ld à r%ld dans '%s':\n"
 
-#: ../svn/notify.c:446
+#: ../svn/notify.c:440
 #, c-format
 msgid "--- Reverse-merging r%ld through r%ld into '%s':\n"
 msgstr "--- Fusion inverse de r%ld à r%ld dans '%s' :\n"
@@ -8585,7 +8613,11 @@
 msgid "property '%s' set on '%s'\n"
 msgstr "Propriété '%s' définie sur '%s'\n"
 
-#: ../svn/resolved-cmd.c:74
+#: ../svn/resolve-cmd.c:74
+msgid "missing --accept option"
+msgstr "option '--accept' requise"
+
+#: ../svn/resolve-cmd.c:77
 msgid "invalid 'accept' ARG"
 msgstr "Argument 'accept' invalide"
 
@@ -9285,7 +9317,9 @@
 msgid ""
 "\n"
 "Upgrade completed.\n"
-msgstr "\nFin de la mise à jour.\n"
+msgstr ""
+"\n"
+"Fin de la mise à jour.\n"
 
 #: ../svnadmin/main.c:1459
 msgid "Multiple revision arguments encountered; try '-r N:M' instead of '-r N -r M'"
@@ -10057,7 +10091,9 @@
 msgid ""
 "\n"
 "Cyrus SASL authentication is available.\n"
-msgstr "\nAuthentification Cyrus SASL disponible.\n"
+msgstr ""
+"\n"
+"Authentification Cyrus SASL disponible.\n"
 
 #: ../svnserve/main.c:489
 #, c-format
@@ -10304,57 +10340,51 @@
 msgid "Destination repository is already synchronizing from '%s'"
 msgstr "Le dépôt destination est déjà synchronisé à partir de '%s'"
 
-#: ../svnsync/main.c:697 ../svnsync/main.c:700 ../svnsync/main.c:1605
-#: ../svnsync/main.c:1755
-#, c-format
-msgid "Path '%s' is not a URL"
-msgstr "Le chemin '%s' n'est pas une URL"
-
-#: ../svnsync/main.c:1208
+#: ../svnsync/main.c:1211
 #, c-format
 msgid "Committed revision %ld.\n"
 msgstr "Révision %ld propagée.\n"
 
-#: ../svnsync/main.c:1249
+#: ../svnsync/main.c:1252
 msgid "Destination repository has not been initialized"
 msgstr "Le dépôt destination n'a pas été initialisé"
 
-#: ../svnsync/main.c:1262
+#: ../svnsync/main.c:1265
 #, c-format
 msgid "UUID of source repository (%s) does not match expected UUID (%s)"
 msgstr "UUID du dépôt source (%s) différent de celui attendu (%s)"
 
-#: ../svnsync/main.c:1413
+#: ../svnsync/main.c:1439
 #, c-format
 msgid "Commit created rev %ld but should have created %ld"
 msgstr "La propagation (commit) a créé la révision %ld au lieu de la %ld"
 
-#: ../svnsync/main.c:1515
+#: ../svnsync/main.c:1545
 #, c-format
 msgid "Revision being currently copied (%ld), last merged revision (%ld), and destination HEAD (%ld) are inconsistent; have you committed to the destination without using svnsync?"
 msgstr "La révision en cours de copie (%ld), la dernière révision fusionnée (%ld), et la révision de tête de la destination (%ld) sont incohérentes. Auriez-vous propagé vers la destination sans utiliser 'svnsync' ?"
 
-#: ../svnsync/main.c:1552
+#: ../svnsync/main.c:1582
 #, c-format
 msgid "Destination HEAD (%ld) is not the last merged revision (%ld); have you committed to the destination without using svnsync?"
 msgstr "La révisions de tête (HEAD) de la destination (%ld) n'est pas la même que la dernière révision fusionnée (%ld). Auriez-vous propagé vers la destination sans utiliser 'svnsync' ?"
 
-#: ../svnsync/main.c:1648 ../svnsync/main.c:1653
+#: ../svnsync/main.c:1685 ../svnsync/main.c:1690
 #, c-format
 msgid "Cannot copy revprops for a revision (%ld) that has not been synchronized yet"
 msgstr "Impossible de copier les propriétés de révision d'une révision (%ld) non encore synchronisée"
 
-#: ../svnsync/main.c:1705
+#: ../svnsync/main.c:1742
 #, c-format
 msgid "'%s' is not a valid revision range"
 msgstr "'%s' n'est pas un intervalle de révisions valide"
 
-#: ../svnsync/main.c:1719 ../svnsync/main.c:1739
+#: ../svnsync/main.c:1756 ../svnsync/main.c:1776
 #, c-format
 msgid "Invalid revision number (%ld)"
 msgstr "Numéro de révision invalide (%ld)"
 
-#: ../svnsync/main.c:1779
+#: ../svnsync/main.c:1816
 msgid ""
 "general usage: svnsync SUBCOMMAND DEST_URL  [ARGS & OPTIONS ...]\n"
 "Type 'svnsync help <subcommand>' for help on a specific subcommand.\n"
@@ -10368,11 +10398,11 @@
 "\n"
 "Sous-commandes disponibles :\n"
 
-#: ../svnsync/main.c:1941
+#: ../svnsync/main.c:1978
 msgid "Cannot use --username or --password with any of --source-username, --source-password, --sync-username, or --sync-password.\n"
 msgstr "Impossible d'utiliser --username ou --password pour un des --source-username, --source-password, --sync-username ou --sync-password.\n"
 
-#: ../svnsync/main.c:2021
+#: ../svnsync/main.c:2058
 #, c-format
 msgid ""
 "Subcommand '%s' doesn't accept option '%s'\n"
@@ -10381,7 +10411,7 @@
 "La sous-commande '%s' n'accepte pas l'option '%s'\n"
 "Entrer 'svnsync help %s' pour l'aide.\n"
 
-#: ../svnsync/main.c:2093
+#: ../svnsync/main.c:2130
 msgid "Try 'svnsync help' for more info"
 msgstr "Essayer 'svnsync help' pour plus d'information"
 
@@ -10467,3 +10497,4 @@
 #, c-format
 msgid "'%s' not versioned, and not exported\n"
 msgstr "'%s' non versionné et non exporté\n"
+
diff --git a/subversion/po/pl.po b/subversion/po/pl.po
index b1d9efc..4c74852 100644
--- a/subversion/po/pl.po
+++ b/subversion/po/pl.po
@@ -35,8 +35,8 @@
 msgstr ""
 "Project-Id-Version: subversion 1.6\n"
 "Report-Msgid-Bugs-To: dev@subversion.tigris.org\n"
-"POT-Creation-Date: 2008-04-06 21:30+0200\n"
-"PO-Revision-Date: 2008-04-06 21:30+0200\n"
+"POT-Creation-Date: 2008-04-12 01:00+0200\n"
+"PO-Revision-Date: 2008-04-12 01:00+0200\n"
 "Last-Translator: Subversion Developers <dev@subversion.tigris.org>\n"
 "Language-Team: Polish <dev@subversion.tigris.org>\n"
 "MIME-Version: 1.0\n"
@@ -1281,8 +1281,8 @@
 msgid "Cannot display: file marked as a binary type.%s"
 msgstr "Nie można wyświetlić: plik binarny.%s"
 
-#: ../libsvn_client/diff.c:881 ../libsvn_client/merge.c:3687
-#: ../libsvn_client/merge.c:4950
+#: ../libsvn_client/diff.c:881 ../libsvn_client/merge.c:3703
+#: ../libsvn_client/merge.c:4970
 msgid "Not all required revisions are specified"
 msgstr "Nie wszystkie wymagane wersje zostały podane"
 
@@ -1392,9 +1392,9 @@
 msgid "No common parent found, unable to operate on disjoint arguments"
 msgstr "Nie znaleziono wspólnego rodzica, nie można użyć rozłącznych argumentów"
 
-#: ../libsvn_client/locking_commands.c:261 ../libsvn_client/merge.c:4967
-#: ../libsvn_client/merge.c:4973 ../libsvn_client/merge.c:5544
-#: ../libsvn_client/merge.c:5700 ../libsvn_client/ra.c:386
+#: ../libsvn_client/locking_commands.c:261 ../libsvn_client/merge.c:4987
+#: ../libsvn_client/merge.c:4993 ../libsvn_client/merge.c:5564
+#: ../libsvn_client/merge.c:5720 ../libsvn_client/ra.c:386
 #: ../libsvn_client/ra.c:423 ../libsvn_client/ra.c:626
 #, c-format
 msgid "'%s' has no URL"
@@ -1455,25 +1455,25 @@
 #. xgettext: the '.working', '.merge-left.r%ld' and
 #. '.merge-right.r%ld' strings are used to tag onto a file
 #. name in case of a merge conflict
-#: ../libsvn_client/merge.c:737
+#: ../libsvn_client/merge.c:747
 msgid ".working"
 msgstr ".robocza"
 
-#: ../libsvn_client/merge.c:739
+#: ../libsvn_client/merge.c:749
 #, c-format
 msgid ".merge-left.r%ld"
 msgstr ".merge-lewo.w%ld"
 
-#: ../libsvn_client/merge.c:742
+#: ../libsvn_client/merge.c:752
 #, c-format
 msgid ".merge-right.r%ld"
 msgstr ".merge-prawo.w%ld"
 
-#: ../libsvn_client/merge.c:1655
+#: ../libsvn_client/merge.c:1666
 msgid "Cannot reverse-merge a range from a path's own future history; try updating first"
 msgstr "Nie można połączyć odwróconych zmian z własnej przyszłości ścieżki. Spróbuj najpierw zaktualizować kopię roboczą"
 
-#: ../libsvn_client/merge.c:2147
+#: ../libsvn_client/merge.c:2158
 #, c-format
 msgid ""
 "One or more conflicts were produced while merging r%ld:%ld into\n"
@@ -1486,45 +1486,45 @@
 "rozwiąż wszystkie konflikty i uruchom merge ponownie, by zastosować\n"
 "pozostałe wersje"
 
-#: ../libsvn_client/merge.c:4646
+#: ../libsvn_client/merge.c:4666
 msgid "Use of two URLs is not compatible with mergeinfo modification"
 msgstr "Użycie dwu URL-i jest niekompatybilne z modyfikacją informacji o połączeniach zmian"
 
-#: ../libsvn_client/merge.c:4653 ../libsvn_client/merge.c:4888
+#: ../libsvn_client/merge.c:4673 ../libsvn_client/merge.c:4908
 msgid "Merge from foreign repository is not compatible with mergeinfo modification"
 msgstr "Łączenie zmian z zewnętrznego repozytorium jest niekompatybilne z modyfikacją informacji o połączeniach zmian"
 
-#: ../libsvn_client/merge.c:5194
+#: ../libsvn_client/merge.c:5214
 msgid "Cannot reintegrate into a working copy with a switched subtree"
 msgstr "Nie można reintegrować do kopii roboczej z przełączonym poddrzewem"
 
-#: ../libsvn_client/merge.c:5199
+#: ../libsvn_client/merge.c:5219
 msgid "Cannot reintegrate into a working copy not entirely at infinite depth"
 msgstr "Nie można reintegrować do kopii roboczej z niecałkowicie nieskończoną głębokością"
 
-#: ../libsvn_client/merge.c:5204
+#: ../libsvn_client/merge.c:5224
 msgid "Cannot reintegrate into a working copy that has local modifications"
 msgstr "Nie można reintegrować do kopii roboczej posiadającej lokalne modyfikacje"
 
-#: ../libsvn_client/merge.c:5210
+#: ../libsvn_client/merge.c:5230
 msgid "Cannot determine revision of working copy"
 msgstr "Nie można określić wersji kopii roboczej"
 
-#: ../libsvn_client/merge.c:5214
+#: ../libsvn_client/merge.c:5234
 msgid "Cannot reintegrate into mixed-revision working copy; try updating first"
 msgstr "Nie można reintegrować do kopii roboczej z mieszanymi wersjami. Spróbuj najpierw zaktualizować kopię roboczą"
 
-#: ../libsvn_client/merge.c:5281
+#: ../libsvn_client/merge.c:5301
 #, c-format
 msgid "At least one revision (r%ld) not yet merged from '%s'"
 msgstr "Przynajmniej jedna wersja (r%ld) niepołączona jeszcze z '%s'"
 
-#: ../libsvn_client/merge.c:5439 ../libsvn_client/merge.c:5603
+#: ../libsvn_client/merge.c:5459 ../libsvn_client/merge.c:5623
 #, c-format
 msgid "'%s@%ld' must be ancestrally related to '%s@%ld'"
 msgstr "'%s@%ld' musi być spokrewnione z '%s@%ld'"
 
-#: ../libsvn_client/merge.c:5562
+#: ../libsvn_client/merge.c:5582
 #, c-format
 msgid "'%s' must be from the same repository as '%s'"
 msgstr "'%s' musi być z tego samego repozytorium co '%s'"
@@ -2776,8 +2776,8 @@
 msgid "Mismatched RA version for '%s': found %d.%d.%d%s, expected %d.%d.%d%s"
 msgstr "Niewłaściwa wersja RA dla '%s': znaleziona %d.%d.%d%s, oczekiwana %d.%d.%d%s"
 
-#: ../libsvn_ra/ra_loader.c:408 ../libsvn_ra_serf/serf.c:499
-#: ../libsvn_ra_serf/serf.c:616
+#: ../libsvn_ra/ra_loader.c:408 ../libsvn_ra_serf/serf.c:507
+#: ../libsvn_ra_serf/serf.c:624
 #, c-format
 msgid "Illegal repository URL '%s'"
 msgstr "Nieprawidłowy URL '%s' repozytorium"
@@ -2826,13 +2826,13 @@
 msgid "URL '%s' is not a child of the session's repository root URL '%s'"
 msgstr "URL '%s' nie jest katalogiem podrzędnym URL-u '%s' katalogu głównego repozytorium sesji"
 
-#: ../libsvn_ra_local/ra_plugin.c:1372 ../libsvn_ra_neon/session.c:913
-#: ../libsvn_ra_serf/serf.c:292 ../libsvn_ra_svn/client.c:2255
+#: ../libsvn_ra_local/ra_plugin.c:1373 ../libsvn_ra_neon/session.c:922
+#: ../libsvn_ra_serf/serf.c:300 ../libsvn_ra_svn/client.c:2258
 #, c-format
 msgid "Don't know anything about capability '%s'"
 msgstr "Nie wiadomo nic o zdolności '%s'"
 
-#: ../libsvn_ra_local/ra_plugin.c:1450
+#: ../libsvn_ra_local/ra_plugin.c:1451
 #, c-format
 msgid "Unsupported RA loader version (%d) for ra_local"
 msgstr "Nieobsługiwana wersja loadera modułu RA (%d) dla ra_local"
@@ -3197,15 +3197,15 @@
 msgid "PIN for token \"%s\" in slot \"%s\""
 msgstr "PIN dla żetonu \"%s\" w otworze \"%s\""
 
-#: ../libsvn_ra_neon/session.c:529 ../libsvn_ra_serf/serf.c:423
+#: ../libsvn_ra_neon/session.c:529 ../libsvn_ra_serf/serf.c:431
 msgid "Invalid URL: illegal character in proxy port number"
 msgstr "Błędny URL: niedozwolony znak w ramach numeru portu proxy"
 
-#: ../libsvn_ra_neon/session.c:533 ../libsvn_ra_serf/serf.c:427
+#: ../libsvn_ra_neon/session.c:533 ../libsvn_ra_serf/serf.c:435
 msgid "Invalid URL: negative proxy port number"
 msgstr "Błędny URL: ujemny numer portu proxy"
 
-#: ../libsvn_ra_neon/session.c:536 ../libsvn_ra_serf/serf.c:430
+#: ../libsvn_ra_neon/session.c:536 ../libsvn_ra_serf/serf.c:438
 msgid "Invalid URL: proxy port number greater than maximum TCP port number 65535"
 msgstr "Błędny URL: port proxy ma numer większy niż maksymalny dopuszczalny numer portu TCP (65535)"
 
@@ -3235,49 +3235,49 @@
 msgid "OPTIONS request (for capabilities) got HTTP response code %d"
 msgstr "Żądanie OPTIONS (dla zdolności) uzyskało kod %d odpowiedzi HTTP"
 
-#: ../libsvn_ra_neon/session.c:896 ../libsvn_ra_serf/serf.c:275
+#: ../libsvn_ra_neon/session.c:905 ../libsvn_ra_serf/serf.c:283
 #, c-format
 msgid "Don't know how to handle '%s' for capability '%s'"
 msgstr "Nie wiadomo, jak obsługiwać '%s' dla zdolności '%s'"
 
-#: ../libsvn_ra_neon/session.c:920 ../libsvn_ra_serf/serf.c:299
+#: ../libsvn_ra_neon/session.c:929 ../libsvn_ra_serf/serf.c:307
 #, c-format
 msgid "Attempt to fetch capability '%s' resulted in '%s'"
 msgstr "Próba pobrania zdolności '%s' skutkowała w '%s'"
 
-#: ../libsvn_ra_neon/session.c:943 ../libsvn_ra_serf/locks.c:548
+#: ../libsvn_ra_neon/session.c:952 ../libsvn_ra_serf/locks.c:548
 msgid "Malformed URL for repository"
 msgstr "Niepoprawny URL repozytorium"
 
-#: ../libsvn_ra_neon/session.c:993
+#: ../libsvn_ra_neon/session.c:1002
 msgid "Network socket initialization failed"
 msgstr "Nieudana inicjalizacja połączenia sieciowego"
 
-#: ../libsvn_ra_neon/session.c:1012
+#: ../libsvn_ra_neon/session.c:1021
 msgid "SSL is not supported"
 msgstr "SSL nie jest obsługiwany"
 
-#: ../libsvn_ra_neon/session.c:1177 ../libsvn_ra_serf/util.c:211
+#: ../libsvn_ra_neon/session.c:1186 ../libsvn_ra_serf/util.c:211
 #, c-format
 msgid "Invalid config: unable to load certificate file '%s'"
 msgstr "Błąd konfiguracji: ładowanie certyfikatu '%s' nie powiodło się"
 
-#: ../libsvn_ra_neon/session.c:1205
+#: ../libsvn_ra_neon/session.c:1214
 #, c-format
 msgid "Invalid config: unable to load PKCS#11 provider '%s'"
 msgstr "Błąd konfiguracji: nie można załadować dostawcy '%s' PKCS#11"
 
-#: ../libsvn_ra_neon/session.c:1330 ../libsvn_ra_serf/serf.c:1128
+#: ../libsvn_ra_neon/session.c:1339 ../libsvn_ra_serf/serf.c:1136
 msgid "The UUID property was not found on the resource or any of its parents"
 msgstr ""
 "Atrybut UUID nie został znaleziony ani w podanym obiekcie, ani też w\n"
 "żadnym z jego katalogów nadrzędnych"
 
-#: ../libsvn_ra_neon/session.c:1338
+#: ../libsvn_ra_neon/session.c:1347
 msgid "Please upgrade the server to 0.19 or later"
 msgstr "Zaktualizuj serwer do wersji 0.19 lub nowszej"
 
-#: ../libsvn_ra_neon/session.c:1409
+#: ../libsvn_ra_neon/session.c:1418
 #, c-format
 msgid "Unsupported RA loader version (%d) for ra_neon"
 msgstr "Nieobsługiwana wersja loadera RA (%d) dla ra_neon"
@@ -3358,7 +3358,7 @@
 msgid "Missing 'realm' attribute in Authorization header."
 msgstr "Brak atrybutu 'realm' w nagłówku Authorization."
 
-#: ../libsvn_ra_serf/blame.c:464 ../libsvn_ra_serf/serf.c:653
+#: ../libsvn_ra_serf/blame.c:464 ../libsvn_ra_serf/serf.c:661
 #: ../libsvn_ra_serf/update.c:2222 ../libsvn_ra_serf/util.c:1402
 msgid "The OPTIONS response did not include the requested version-controlled-configuration value"
 msgstr "Odpowiedź OPTIONS nie zawiera wymaganej wartości version-controlled-configuration"
@@ -3368,14 +3368,14 @@
 msgstr "Odpowiedź OPTIONS nie zawiera wymaganej wartości baseline-relative-path"
 
 #: ../libsvn_ra_serf/blame.c:496 ../libsvn_ra_serf/commit.c:1160
-#: ../libsvn_ra_serf/property.c:930 ../libsvn_ra_serf/serf.c:669
+#: ../libsvn_ra_serf/property.c:930 ../libsvn_ra_serf/serf.c:677
 #: ../libsvn_ra_serf/update.c:1135 ../libsvn_ra_serf/update.c:1680
 msgid "The OPTIONS response did not include the requested checked-in value"
 msgstr "Odpowiedź OPTIONS nie zawiera wymaganej wartości checked-in"
 
 #: ../libsvn_ra_serf/blame.c:523 ../libsvn_ra_serf/commit.c:1389
 #: ../libsvn_ra_serf/commit.c:1779 ../libsvn_ra_serf/property.c:944
-#: ../libsvn_ra_serf/serf.c:791 ../libsvn_ra_serf/serf.c:1027
+#: ../libsvn_ra_serf/serf.c:799 ../libsvn_ra_serf/serf.c:1035
 msgid "The OPTIONS response did not include the requested baseline-collection value"
 msgstr "Odpowiedź OPTIONS nie zawiera wymaganej wartości baseline-collection"
 
@@ -3460,24 +3460,24 @@
 msgid "Error retrieving replay REPORT (%d)"
 msgstr "Błąd podczas odbierania powtórzenia RAPORTU (%d)"
 
-#: ../libsvn_ra_serf/serf.c:315
+#: ../libsvn_ra_serf/serf.c:323
 msgid "Module for accessing a repository via WebDAV protocol using serf."
 msgstr "Moduł umożliwiający dostęp do repozytorium przy pomocy protokołu WebDAV przy użyciu biblioteki serf"
 
-#: ../libsvn_ra_serf/serf.c:542
+#: ../libsvn_ra_serf/serf.c:550
 #, c-format
 msgid "Could not lookup hostname `%s'"
 msgstr "Nie można odszukać hosta: `%s'"
 
-#: ../libsvn_ra_serf/serf.c:686
+#: ../libsvn_ra_serf/serf.c:694
 msgid "The OPTIONS response did not include the requested version-name value"
 msgstr "Odpowiedź OPTIONS nie zawiera wymaganej wartości version-name"
 
-#: ../libsvn_ra_serf/serf.c:850
+#: ../libsvn_ra_serf/serf.c:858
 msgid "The OPTIONS response did not include the requested resourcetype value"
 msgstr "Odpowiedź OPTIONS nie zawiera wymaganej wartości resourcetype"
 
-#: ../libsvn_ra_serf/serf.c:1193
+#: ../libsvn_ra_serf/serf.c:1201
 #, c-format
 msgid "Unsupported RA loader version (%d) for ra_serf"
 msgstr "Nieobsługiwana wersja loadera RA (%d) dla ra_serf"
@@ -3696,7 +3696,7 @@
 msgid "Expected 'revprops', found '%s'"
 msgstr "Oczekiwano 'revprops', znaleziono '%s'"
 
-#: ../libsvn_ra_svn/client.c:2319
+#: ../libsvn_ra_svn/client.c:2322
 #, c-format
 msgid "Unsupported RA loader version (%d) for ra_svn"
 msgstr "Nieobsługiwana wersja loadera RA (%d) dla ra_svn"
@@ -6227,7 +6227,7 @@
 "Subversion jest narzędziem zarządzania wersjami.\n"
 "Dla dodatkowych informacji zobacz http://subversion.tigris.org/\n"
 
-#: ../svn/help-cmd.c:65 ../svnsync/main.c:1786
+#: ../svn/help-cmd.c:65 ../svnsync/main.c:1823
 msgid ""
 "The following repository access (RA) modules are available:\n"
 "\n"
@@ -7296,7 +7296,9 @@
 "\n"
 "  2. Print the log messages for the PATHs (default: '.') under URL.\n"
 "     If specified, REV determines in which revision the URL is first\n"
-"     looked up.  The default revision range is HEAD:1.\n"
+"     looked up, and the default revision range is REV:1; otherwise,\n"
+"     the URL is looked up in HEAD, and the default revision range is\n"
+"     HEAD:1.\n"
 "\n"
 "  With -v, also print all affected paths with each log message.\n"
 "  With -q, don't print the log message body itself (note that this is\n"
@@ -7321,9 +7323,10 @@
 "     (domyślnie: '.'). Domyślnym zakresem wersji jest BASE:1.\n"
 "\n"
 "  2. Wypisz opisy zmian dla pliku lub katalogu w repozytorium, gdzie\n"
-"     ŚCIEŻKI (domyślnie: '.') są podane względem URL-u. WERSJA, jeśli ją\n"
-"     podano, określa, w której wersji URL będzie najpierw sprawdzany.\n"
-"     Domyślnym zakresem wersji jest HEAD:1.\n"
+"     ŚCIEŻKI (domyślnie: '.') są podane względem URL-u. Jeśli podano\n"
+"     WERSJĘ, określa ona, w której wersji URL będzie najpierw sprawdzany,\n"
+"     a domyślnym zakresem wersji jest WERSJA:1. W przeciwnym wypadku URL\n"
+"     jest sprawdzany w wersji HEAD, a domyślnym zakresem wersji jest HEAD:1.\n"
 "\n"
 "  Opcja -v powoduje dodatkowe wypisanie przy każdym opisie zmiany\n"
 "  wszystkich plików i katalogów, które zostały przy jej okazji\n"
@@ -7344,15 +7347,15 @@
 "    svn log http://www.example.com/repo/project/foo.c\n"
 "    svn log http://www.example.com/repo/project foo.c bar.c\n"
 
-#: ../svn/main.c:585
+#: ../svn/main.c:587
 msgid "retrieve revision property ARG"
 msgstr "pobierz atrybut wersji podany jako ARG"
 
-#: ../svn/main.c:586
+#: ../svn/main.c:588
 msgid "the change made by ARG"
 msgstr "zmiana wykonana przez argument ARG"
 
-#: ../svn/main.c:589
+#: ../svn/main.c:591
 msgid ""
 "Apply the differences between two sources to a working copy path.\n"
 "usage: 1. merge sourceURL1[@N] sourceURL2[@M] [WCPATH]\n"
@@ -7373,7 +7376,7 @@
 "     for each revision range provided.  If REV is not specified, HEAD\n"
 "     is assumed.  '-c M' is equivalent to '-r <M-1>:M', and '-c -M'\n"
 "     does the reverse: '-r M:<M-1>'.  If no revision ranges are\n"
-"     specified, the default range of 0:HEAD is used.  Multiple '-c'\n"
+"     specified, the default range of 0:REV is used.  Multiple '-c'\n"
 "     and/or '-r' instances may be specified, and mixing of forward\n"
 "     and reverse ranges is allowed.\n"
 "\n"
@@ -7409,7 +7412,7 @@
 "     dla każdego podanego zakresu wersji. Jeśli WERSJA nie jest określona,\n"
 "     przyjmowana jest wersja HEAD. '-c M' jest równoważne '-r <M-1>:M', a\n"
 "     '-c -M' działa odwrotnie: '-r M:<M-1>'. Jeśli nie podano żadnego zakresu\n"
-"     wersji, używany jest domyślny zakres 0:HEAD. Wiele opcji '-c' i/lub '-r'\n"
+"     wersji, używany jest domyślny zakres 0:WERSJA. Wiele opcji '-c' i/lub '-r'\n"
 "     może być podanych i mieszanie postępujących i odwróconych zakresów jest\n"
 "     dozwolone.\n"
 "\n"
@@ -7426,7 +7429,7 @@
 "  zmuszając Subversion do traktowania źródeł jako niespokrewnione i\n"
 "  nieśledzenia połączeń zmian.\n"
 
-#: ../svn/main.c:627
+#: ../svn/main.c:629
 msgid ""
 "Query merge-related information.\n"
 "usage: mergeinfo SOURCE-URL[@REV] [TARGET[@REV]]\n"
@@ -7446,7 +7449,7 @@
 "  skopiowane ze ŹRÓDŁOWEGO-URL-u do CELu. W przeciwnym wypadku wyświetl\n"
 "  rodzaj informacji określony przez opcję --show-revs.\n"
 
-#: ../svn/main.c:638
+#: ../svn/main.c:640
 msgid ""
 "Create a new directory under version control.\n"
 "usage: 1. mkdir PATH...\n"
@@ -7478,7 +7481,7 @@
 "  W obydwu wypadkach wszelkie nadrzędne katalogi muszą już istnieć,\n"
 "  jeśli nie podano opcji --parents.\n"
 
-#: ../svn/main.c:655
+#: ../svn/main.c:657
 msgid ""
 "Move and/or rename something in working copy or repository.\n"
 "usage: move SRC... DST\n"
@@ -7512,7 +7515,7 @@
 "                 kopii roboczej.\n"
 "  Wszystkie ŹRÓDŁA muszą być takiego samego typu.\n"
 
-#: ../svn/main.c:671
+#: ../svn/main.c:673
 msgid ""
 "Remove a property from files, dirs, or revisions.\n"
 "usage: 1. propdel PROPNAME [PATH...]\n"
@@ -7531,7 +7534,7 @@
 "  2. Usuwa niewersjonowane, zdalne atrybuty wersji w repozytorium.\n"
 "     CEL tylko określa, do którego repozytorium uzyskać dostęp.\n"
 
-#: ../svn/main.c:682
+#: ../svn/main.c:684
 msgid ""
 "Edit a property with an external editor.\n"
 "usage: 1. propedit PROPNAME TARGET...\n"
@@ -7555,7 +7558,7 @@
 "Zobacz 'svn help propset' w celu uzyskania dodatkowych informacji o\n"
 "ustawianiu atrybutów.\n"
 
-#: ../svn/main.c:695
+#: ../svn/main.c:697
 msgid ""
 "Print the value of a property on files, dirs, or revisions.\n"
 "usage: 1. propget PROPNAME [TARGET[@REV]...]\n"
@@ -7588,7 +7591,7 @@
 "  dana wartość. Opcja --strict powoduje pominięcie tych ozdobników (jest to\n"
 "  (użyteczne np. podczas kopiowania binarnej wartości atrybutu do pliku).\n"
 
-#: ../svn/main.c:713
+#: ../svn/main.c:715
 msgid ""
 "List all properties on files, dirs, or revisions.\n"
 "usage: 1. proplist [TARGET[@REV]...]\n"
@@ -7608,7 +7611,7 @@
 "  2. Wypisuje niewersjonowane, zdalne atrybuty wersji w repozytorium.\n"
 "     CEL tylko określa, do którego repozytorium uzyskać dostęp.\n"
 
-#: ../svn/main.c:724
+#: ../svn/main.c:726
 msgid ""
 "Set the value of a property on files, dirs, or revisions.\n"
 "usage: 1. propset PROPNAME PROPVAL PATH...\n"
@@ -7731,11 +7734,11 @@
 "  a uruchomienie z opcją --recursive spowoduje ustawienie atrybutu dla\n"
 "  wszystkich plików w tym katalogu.\n"
 
-#: ../svn/main.c:784
+#: ../svn/main.c:786
 msgid "read property value from file ARG"
 msgstr "odczytaj wartość atrybutu z pliku ARG"
 
-#: ../svn/main.c:787
+#: ../svn/main.c:789
 msgid ""
 "Resolve conflicts on working copy files or directories.\n"
 "usage: resolve [PATH...]\n"
@@ -7747,7 +7750,7 @@
 "\n"
 "  Uwaga: opcja --accept jest obecnie wymagana.\n"
 
-#: ../svn/main.c:792
+#: ../svn/main.c:794
 msgid ""
 "specify automatic conflict resolution source\n"
 "                            ('"
@@ -7755,7 +7758,7 @@
 "określ źródło automatycznego rozwiązywania konfliktów\n"
 "                            ('"
 
-#: ../svn/main.c:804
+#: ../svn/main.c:806
 msgid ""
 "Remove 'conflicted' state on working copy files or directories.\n"
 "usage: resolved PATH...\n"
@@ -7774,7 +7777,7 @@
 "  możliwość zatwierdzenia zmian. To polecenie jest przestarzałe - zamiast\n"
 "  niego należy używać 'svn resolve --accept working'.\n"
 
-#: ../svn/main.c:814
+#: ../svn/main.c:816
 msgid ""
 "Restore pristine working copy file (undo most local edits).\n"
 "usage: revert PATH...\n"
@@ -7790,7 +7793,7 @@
 "  rozwiązuje wszelkie konflikty. Jednak nie może ono odtworzyć skasowanych\n"
 "  katalogów.\n"
 
-#: ../svn/main.c:822
+#: ../svn/main.c:824
 msgid ""
 "Print the status of working copy files and directories.\n"
 "usage: status [PATH...]\n"
@@ -7942,7 +7945,7 @@
 "                 965       687 joe          wc/zig.c\n"
 "    Status względem wersji:   981\n"
 
-#: ../svn/main.c:898
+#: ../svn/main.c:900
 msgid ""
 "Update the working copy to a different URL.\n"
 "usage: 1. switch URL[@PEGREV] [PATH]\n"
@@ -8007,7 +8010,7 @@
 "     (np. zmienia się sposób dostępu albo nazwa maszyny), ale kopia\n"
 "     robocza nadal odpowiada temu samemu katalogowi w tym samym repozytorium.\n"
 
-#: ../svn/main.c:932
+#: ../svn/main.c:934
 msgid ""
 "Unlock working copy paths or URLs.\n"
 "usage: unlock TARGET...\n"
@@ -8019,7 +8022,7 @@
 "\n"
 "  Użyj opcję --force, aby zerwać blokadę.\n"
 
-#: ../svn/main.c:939
+#: ../svn/main.c:941
 msgid ""
 "Bring changes from the repository into the working copy.\n"
 "usage: update [PATH...]\n"
@@ -8099,73 +8102,73 @@
 "  tej operacji. Obecnie głębokość kopii roboczej może być tylko zwiększona.\n"
 "  Nie można uczynić katalogu bardziej płytkim.\n"
 
-#: ../svn/main.c:1019 ../svnadmin/main.c:78 ../svnlook/main.c:329
+#: ../svn/main.c:1021 ../svnadmin/main.c:78 ../svnlook/main.c:329
 #: ../svnsync/main.c:184
 msgid "Caught signal"
 msgstr "Złapano sygnał"
 
-#: ../svn/main.c:1142 ../svnlook/main.c:2083
+#: ../svn/main.c:1144 ../svnlook/main.c:2083
 msgid "Non-numeric limit argument given"
 msgstr "Nienumeryczny argument określający limit podany"
 
-#: ../svn/main.c:1148 ../svnlook/main.c:2089
+#: ../svn/main.c:1150 ../svnlook/main.c:2089
 msgid "Argument to --limit must be positive"
 msgstr "Argument dla --limit musi być dodatni"
 
-#: ../svn/main.c:1170 ../svn/main.c:1410
+#: ../svn/main.c:1172 ../svn/main.c:1412
 msgid "Can't specify -c with --old"
 msgstr "Nie można użyć opcji -c wraz z opcją --old"
 
-#: ../svn/main.c:1187
+#: ../svn/main.c:1189
 msgid "Non-numeric change argument given to -c"
 msgstr "Nienumeryczny argument określający zmianę podany do -c"
 
-#: ../svn/main.c:1195
+#: ../svn/main.c:1197
 msgid "There is no change 0"
 msgstr "Nie ma zmiany 0"
 
-#: ../svn/main.c:1231 ../svnadmin/main.c:1473
+#: ../svn/main.c:1233 ../svnadmin/main.c:1473
 #, c-format
 msgid "Syntax error in revision argument '%s'"
 msgstr "Błąd składniowy w numerze wersji '%s'"
 
-#: ../svn/main.c:1304 ../svn/main.c:1323
+#: ../svn/main.c:1306 ../svn/main.c:1325
 #, c-format
 msgid "Error converting depth from locale to UTF8"
 msgstr "Błąd podczas konwersji głębokości z lokalnego kodowania do UTF8"
 
-#: ../svn/main.c:1312 ../svn/main.c:1331
+#: ../svn/main.c:1314 ../svn/main.c:1333
 #, c-format
 msgid "'%s' is not a valid depth; try 'empty', 'files', 'immediates', or 'infinity'"
 msgstr "'%s' nie jest właściwą głębokością; spróbuj 'empty', 'files', 'immediates' lub 'infinity'"
 
-#: ../svn/main.c:1438
+#: ../svn/main.c:1440
 #, c-format
 msgid "Syntax error in native-eol argument '%s'"
 msgstr "Błąd składniowy w argumencie native-eol '%s'"
 
-#: ../svn/main.c:1484
+#: ../svn/main.c:1486
 #, c-format
 msgid "'%s' is not a valid --accept value"
 msgstr "'%s' nie jest poprawną wartością opcji --accept"
 
-#: ../svn/main.c:1493
+#: ../svn/main.c:1495
 #, c-format
 msgid "'%s' is not a valid --show-revs value"
 msgstr "'%s' nie jest poprawną wartością opcji --show-revs"
 
-#: ../svn/main.c:1555 ../svndumpfilter/main.c:1314 ../svnlook/main.c:2161
+#: ../svn/main.c:1557 ../svndumpfilter/main.c:1314 ../svnlook/main.c:2161
 #, c-format
 msgid "Subcommand argument required\n"
 msgstr "Podpolecenie wymaga podania argumentu\n"
 
-#: ../svn/main.c:1574 ../svnadmin/main.c:1605 ../svndumpfilter/main.c:1333
+#: ../svn/main.c:1576 ../svnadmin/main.c:1605 ../svndumpfilter/main.c:1333
 #: ../svnlook/main.c:2180
 #, c-format
 msgid "Unknown command: '%s'\n"
 msgstr "Nieznane polecenie: '%s'\n"
 
-#: ../svn/main.c:1608
+#: ../svn/main.c:1610
 #, c-format
 msgid ""
 "Subcommand '%s' doesn't accept option '%s'\n"
@@ -8174,64 +8177,64 @@
 "Podpolecenie '%s' nie obsługuje opcji '%s'.\n"
 "Użyj 'svn help %s', by uzyskać informacje o użyciu.\n"
 
-#: ../svn/main.c:1622
+#: ../svn/main.c:1624
 msgid "Multiple revision arguments encountered; can't specify -c twice, or both -c and -r"
 msgstr "Wielokrotnie podano opcję numeru wersji; nie można określić -c dwa razy, lub obydwu -c i -r"
 
-#: ../svn/main.c:1636
+#: ../svn/main.c:1638
 msgid "-r and -c can't be used with --reintegrate"
 msgstr "-r i -c nie mogą być używane z --reintegrate"
 
-#: ../svn/main.c:1645
+#: ../svn/main.c:1647
 msgid "--depth and --set-depth are mutually exclusive"
 msgstr "Opcje --depth i --set-depth nie mogą występować równocześnie"
 
-#: ../svn/main.c:1695
+#: ../svn/main.c:1697
 msgid "Log message file is a versioned file; use '--force-log' to override"
 msgstr "Plik z opisem zmian jest plikiem podlegającym zarządzaniu wersjami; użyj '--force-log', by wymusić jego użycie."
 
-#: ../svn/main.c:1702
+#: ../svn/main.c:1704
 msgid "Lock comment file is a versioned file; use '--force-log' to override"
 msgstr "Plik z opisem blokady jest plikiem podlegającym zarządzaniu wersjami; użyj '--force-log', by wymusić jego użycie."
 
-#: ../svn/main.c:1722
+#: ../svn/main.c:1724
 msgid "The log message is a pathname (was -F intended?); use '--force-log' to override"
 msgstr "Opis zmian jest ścieżką (chciano użyć -F?); użyj --force-log, by wymusić użycie takiego opisu"
 
-#: ../svn/main.c:1729
+#: ../svn/main.c:1731
 msgid "The lock comment is a pathname (was -F intended?); use '--force-log' to override"
 msgstr "Opis blokady jest ścieżką (chciano użyć -F?); użyj --force-log, bywymusić użycie takiego opisu"
 
-#: ../svn/main.c:1740
+#: ../svn/main.c:1742
 msgid "--relocate and --depth are mutually exclusive"
 msgstr "Opcje --relocate i --depth nie mogą występować równocześnie"
 
-#: ../svn/main.c:1816
+#: ../svn/main.c:1818
 msgid "--auto-props and --no-auto-props are mutually exclusive"
 msgstr "Opcje --auto-props i --no-auto-props nie mogą występować równocześnie"
 
-#: ../svn/main.c:1830
+#: ../svn/main.c:1832
 msgid "--reintegrate cannot be used with --ignore-ancestry or --record-only"
 msgstr "--reintegrate nie może być używane z --ignore-ancestry lub --record-only"
 
-#: ../svn/main.c:1838
+#: ../svn/main.c:1840
 msgid "--reintegrate cannot be used with --ignore-ancestry"
 msgstr "--reintegrate nie może być używane z --ignore-ancestry"
 
-#: ../svn/main.c:1846
+#: ../svn/main.c:1848
 msgid "--reintegrate cannot be used with --record-only"
 msgstr "--reintegrate nie może być używane z --record-only"
 
-#: ../svn/main.c:1959 ../svn/main.c:1965
+#: ../svn/main.c:1961 ../svn/main.c:1967
 #, c-format
 msgid "--accept=%s incompatible with --non-interactive"
 msgstr "--accept=%s jest niekompatybilne z --non-interactive"
 
-#: ../svn/main.c:1992
+#: ../svn/main.c:1994
 msgid "Try 'svn help' for more info"
 msgstr "Użyj 'svn help', by otrzymać dodatkowe instrukcje"
 
-#: ../svn/main.c:2002
+#: ../svn/main.c:2004
 msgid "svn: run 'svn cleanup' to remove locks (type 'svn help cleanup' for details)\n"
 msgstr ""
 "svn: uruchom 'svn cleanup', by usunąć blokady (więcej informacji -\n"
@@ -8258,6 +8261,10 @@
 msgstr "Użycie kopii roboczej jako źródła dla dołączania wymaga podania jawnej wersji"
 
 #: ../svn/merge-cmd.c:292
+msgid "--depth cannot be used with --reintegrate"
+msgstr "--depth nie może być używane z --reintegrate"
+
+#: ../svn/merge-cmd.c:297
 msgid "--force cannot be used with --reintegrate"
 msgstr "--force nie może być używane z --reintegrate"
 
@@ -8265,8 +8272,8 @@
 msgid "Not enough arguments given"
 msgstr "Zbyt mało parametrów"
 
-#: ../svn/mergeinfo-cmd.c:81 ../svnsync/main.c:697 ../svnsync/main.c:700
-#: ../svnsync/main.c:1605 ../svnsync/main.c:1755
+#: ../svn/mergeinfo-cmd.c:81 ../svnsync/main.c:700 ../svnsync/main.c:703
+#: ../svnsync/main.c:1642 ../svnsync/main.c:1792
 #, c-format
 msgid "Path '%s' is not a URL"
 msgstr "Ścieżka '%s' nie jest URL-em"
@@ -8427,7 +8434,7 @@
 msgid "Replacing      %s\n"
 msgstr "Zastępowanie    %s\n"
 
-#: ../svn/notify.c:374 ../svnsync/main.c:906
+#: ../svn/notify.c:374 ../svnsync/main.c:909
 #, c-format
 msgid "Transmitting file data "
 msgstr "Przesyłanie treści pliku"
@@ -8452,27 +8459,27 @@
 msgid "Path '%s' is no longer a member of a changelist.\n"
 msgstr "Ścieżka '%s' już nie jest członkiem listy zmian.\n"
 
-#: ../svn/notify.c:427
+#: ../svn/notify.c:421
 #, c-format
 msgid "--- Merging differences between repository URLs into '%s':\n"
 msgstr "--- Łączenie zmian nastąpiłych pomiędzy URL-ami repozytorium do '%s':\n"
 
-#: ../svn/notify.c:432
+#: ../svn/notify.c:426
 #, c-format
 msgid "--- Merging r%ld into '%s':\n"
 msgstr "--- Łączenie zmian nastąpiłych w r%ld do '%s':\n"
 
-#: ../svn/notify.c:436
+#: ../svn/notify.c:430
 #, c-format
 msgid "--- Reverse-merging r%ld into '%s':\n"
 msgstr "--- Łączenie odwróconych zmian nastąpiłych w r%ld do '%s':\n"
 
-#: ../svn/notify.c:440
+#: ../svn/notify.c:434
 #, c-format
 msgid "--- Merging r%ld through r%ld into '%s':\n"
 msgstr "--- Łączenie zmian nastąpiłych od r%ld do r%ld do '%s':\n"
 
-#: ../svn/notify.c:446
+#: ../svn/notify.c:440
 #, c-format
 msgid "--- Reverse-merging r%ld through r%ld into '%s':\n"
 msgstr "--- Łączenie odwróconych zmian nastąpiłych między r%ld a r%ld do '%s':\n"
@@ -10346,51 +10353,51 @@
 msgid "Destination repository is already synchronizing from '%s'"
 msgstr "Repozytorium docelowe jest już synchronizujące z '%s'"
 
-#: ../svnsync/main.c:1208
+#: ../svnsync/main.c:1211
 #, c-format
 msgid "Committed revision %ld.\n"
 msgstr "Zatwierdzona wersja %ld.\n"
 
-#: ../svnsync/main.c:1249
+#: ../svnsync/main.c:1252
 msgid "Destination repository has not been initialized"
 msgstr "Docelowe repozytorium nie zostało zainicjalizowane"
 
-#: ../svnsync/main.c:1262
+#: ../svnsync/main.c:1265
 #, c-format
 msgid "UUID of source repository (%s) does not match expected UUID (%s)"
 msgstr "UUID źródłowego repozytorium (%s) nie zgadza się z oczekiwanym UUID (%s)"
 
-#: ../svnsync/main.c:1413
+#: ../svnsync/main.c:1439
 #, c-format
 msgid "Commit created rev %ld but should have created %ld"
 msgstr "Zatwierdzanie zmian stworzyło wersję o numerze %ld, a powinno stworzyć %ld"
 
-#: ../svnsync/main.c:1515
+#: ../svnsync/main.c:1545
 #, c-format
 msgid "Revision being currently copied (%ld), last merged revision (%ld), and destination HEAD (%ld) are inconsistent; have you committed to the destination without using svnsync?"
 msgstr "Wersja obecnie kopiowana (%ld), ostatnio połączona wersja (%ld) i docelowa wersja HEAD (%ld) są niespójne; czy przeprowadziłeś zatwierdzenie do docelowego repozytorium bez użycia svnsync?"
 
-#: ../svnsync/main.c:1552
+#: ../svnsync/main.c:1582
 #, c-format
 msgid "Destination HEAD (%ld) is not the last merged revision (%ld); have you committed to the destination without using svnsync?"
 msgstr "Docelowa wersja HEAD (%ld) nie jest ostatnio połączoną wersją (%ld); czy przeprowadziłeś zatwierdzenie do docelowego repozytorium bez użycia svnsync?"
 
-#: ../svnsync/main.c:1648 ../svnsync/main.c:1653
+#: ../svnsync/main.c:1685 ../svnsync/main.c:1690
 #, c-format
 msgid "Cannot copy revprops for a revision (%ld) that has not been synchronized yet"
 msgstr "Nie można skopiować atrybutów wersji (%ld), która jeszcze nie była synchronizowana"
 
-#: ../svnsync/main.c:1705
+#: ../svnsync/main.c:1742
 #, c-format
 msgid "'%s' is not a valid revision range"
 msgstr "'%s' nie jest poprawnym zakresem wersji"
 
-#: ../svnsync/main.c:1719 ../svnsync/main.c:1739
+#: ../svnsync/main.c:1756 ../svnsync/main.c:1776
 #, c-format
 msgid "Invalid revision number (%ld)"
 msgstr "Błędny numer wersji (%ld)"
 
-#: ../svnsync/main.c:1779
+#: ../svnsync/main.c:1816
 msgid ""
 "general usage: svnsync SUBCOMMAND DEST_URL  [ARGS & OPTIONS ...]\n"
 "Type 'svnsync help <subcommand>' for help on a specific subcommand.\n"
@@ -10406,11 +10413,11 @@
 "\n"
 "Dostępne podpolecenia:\n"
 
-#: ../svnsync/main.c:1941
+#: ../svnsync/main.c:1978
 msgid "Cannot use --username or --password with any of --source-username, --source-password, --sync-username, or --sync-password.\n"
 msgstr "Nie można użyć opcji --username lub --password jednocześnie z którąkolwiek z opcji --source-username, --source-password, --sync-username lub --sync-password.\n"
 
-#: ../svnsync/main.c:2021
+#: ../svnsync/main.c:2058
 #, c-format
 msgid ""
 "Subcommand '%s' doesn't accept option '%s'\n"
@@ -10419,7 +10426,7 @@
 "Podpolecenie '%s' nie obsługuje opcji '%s'.\n"
 "Użyj 'svnsync help %s', by uzyskać informacje o użyciu.\n"
 
-#: ../svnsync/main.c:2093
+#: ../svnsync/main.c:2130
 msgid "Try 'svnsync help' for more info"
 msgstr "Użyj 'svnsync help', aby uzyskać więcej informacji"
 
diff --git a/subversion/po/zh_CN.po b/subversion/po/zh_CN.po
index 038984c..66b21a7 100644
--- a/subversion/po/zh_CN.po
+++ b/subversion/po/zh_CN.po
@@ -36,8 +36,8 @@
 msgstr ""
 "Project-Id-Version: subversion 1.5.0\n"
 "Report-Msgid-Bugs-To: dev@subversion.tigris.org\n"
-"POT-Creation-Date: 2008-03-13 14:58+0800\n"
-"PO-Revision-Date: 2008-03-09 15:37+0800\n"
+"POT-Creation-Date: 2008-04-14 14:53+0800\n"
+"PO-Revision-Date: 2008-04-14 14:50+0800\n"
 "Last-Translator: Subversion Developers <dev@subversion.tigris.org>\n"
 "Language-Team: Simplified Chinese <dev@subversion.tigris.org>\n"
 "MIME-Version: 1.0\n"
@@ -640,316 +640,320 @@
 msgid "Initialization of SSPI library failed"
 msgstr "初始化 SSPI 库失败"
 
-#: ../include/svn_error_codes.h:851
+#: ../include/svn_error_codes.h:847
+msgid "Server SSL certificate untrusted"
+msgstr "服务器的 SSL 证书不被信任"
+
+#: ../include/svn_error_codes.h:855
 msgid "Credential data unavailable"
 msgstr "无法取得凭证数据"
 
-#: ../include/svn_error_codes.h:855
+#: ../include/svn_error_codes.h:859
 msgid "No authentication provider available"
 msgstr "没有可用的认证提供者"
 
-#: ../include/svn_error_codes.h:859 ../include/svn_error_codes.h:863
+#: ../include/svn_error_codes.h:863 ../include/svn_error_codes.h:867
 msgid "All authentication providers exhausted"
 msgstr "所有的认证提供者都不可用"
 
-#: ../include/svn_error_codes.h:868
+#: ../include/svn_error_codes.h:872
 msgid "Authentication failed"
 msgstr "认证失败"
 
-#: ../include/svn_error_codes.h:874
+#: ../include/svn_error_codes.h:878
 msgid "Read access denied for root of edit"
 msgstr "编辑根目录时拒绝读取"
 
-#: ../include/svn_error_codes.h:879
+#: ../include/svn_error_codes.h:883
 msgid "Item is not readable"
 msgstr "条目不可读"
 
-#: ../include/svn_error_codes.h:884
+#: ../include/svn_error_codes.h:888
 msgid "Item is partially readable"
 msgstr "条目部分可读"
 
-#: ../include/svn_error_codes.h:888
+#: ../include/svn_error_codes.h:892
 msgid "Invalid authz configuration"
 msgstr "认证配置无效"
 
-#: ../include/svn_error_codes.h:893
+#: ../include/svn_error_codes.h:897
 msgid "Item is not writable"
 msgstr "条目不能写"
 
-#: ../include/svn_error_codes.h:899
+#: ../include/svn_error_codes.h:903
 msgid "Svndiff data has invalid header"
 msgstr "svndiff 数据包含无效头"
 
-#: ../include/svn_error_codes.h:903
+#: ../include/svn_error_codes.h:907
 msgid "Svndiff data contains corrupt window"
 msgstr "Svndiff 数据包含损坏窗口"
 
-#: ../include/svn_error_codes.h:907
+#: ../include/svn_error_codes.h:911
 msgid "Svndiff data contains backward-sliding source view"
 msgstr "Svndiff 数据包含向后变化的资源视图"
 
-#: ../include/svn_error_codes.h:911
+#: ../include/svn_error_codes.h:915
 msgid "Svndiff data contains invalid instruction"
 msgstr "svndiff 数据包含无效指令"
 
-#: ../include/svn_error_codes.h:915
+#: ../include/svn_error_codes.h:919
 msgid "Svndiff data ends unexpectedly"
 msgstr "svndiff 数据意外结束"
 
-#: ../include/svn_error_codes.h:919
+#: ../include/svn_error_codes.h:923
 msgid "Svndiff compressed data is invalid"
 msgstr "非法 svndiff 压缩数据"
 
-#: ../include/svn_error_codes.h:925
+#: ../include/svn_error_codes.h:929
 msgid "Diff data source modified unexpectedly"
 msgstr "svndiff 数据被意外修改"
 
-#: ../include/svn_error_codes.h:931
+#: ../include/svn_error_codes.h:935
 msgid "Apache has no path to an SVN filesystem"
 msgstr "Apache 没有指向 SVN 文件系统的路径"
 
-#: ../include/svn_error_codes.h:935
+#: ../include/svn_error_codes.h:939
 msgid "Apache got a malformed URI"
 msgstr "Apache 得到非法 URI"
 
-#: ../include/svn_error_codes.h:939
+#: ../include/svn_error_codes.h:943
 msgid "Activity not found"
 msgstr "没有找到活动项"
 
-#: ../include/svn_error_codes.h:943
+#: ../include/svn_error_codes.h:947
 msgid "Baseline incorrect"
 msgstr "基线错误"
 
-#: ../include/svn_error_codes.h:947
+#: ../include/svn_error_codes.h:951
 msgid "Input/output error"
 msgstr "输出/输出错误"
 
-#: ../include/svn_error_codes.h:953
+#: ../include/svn_error_codes.h:957
 msgid "A path under version control is needed for this operation"
 msgstr "只能对纳入版本控制的路径执行此操作"
 
-#: ../include/svn_error_codes.h:957
+#: ../include/svn_error_codes.h:961
 msgid "Repository access is needed for this operation"
 msgstr "此操作需要存取版本库"
 
-#: ../include/svn_error_codes.h:961
+#: ../include/svn_error_codes.h:965
 msgid "Bogus revision information given"
 msgstr "给出的版本信息非法"
 
-#: ../include/svn_error_codes.h:965
+#: ../include/svn_error_codes.h:969
 msgid "Attempting to commit to a URL more than once"
 msgstr "试图对 URL 进行多次提交"
 
-#: ../include/svn_error_codes.h:969
+#: ../include/svn_error_codes.h:973
 msgid "Operation does not apply to binary file"
 msgstr "不能对二进制文件执行此操作"
 
-#: ../include/svn_error_codes.h:975
+#: ../include/svn_error_codes.h:979
 msgid "Format of an svn:externals property was invalid"
 msgstr "svn:externals 属性格式非法"
 
-#: ../include/svn_error_codes.h:979
+#: ../include/svn_error_codes.h:983
 msgid "Attempting restricted operation for modified resource"
 msgstr "试图对已修改的资源进行受限操作"
 
-#: ../include/svn_error_codes.h:983
+#: ../include/svn_error_codes.h:987
 msgid "Operation does not apply to directory"
 msgstr "不能对目录执行此操作"
 
-#: ../include/svn_error_codes.h:987
+#: ../include/svn_error_codes.h:991
 msgid "Revision range is not allowed"
 msgstr "不允许的版本范围"
 
-#: ../include/svn_error_codes.h:991
+#: ../include/svn_error_codes.h:995
 msgid "Inter-repository relocation not allowed"
 msgstr "不支持版本库之间的重新定位"
 
-#: ../include/svn_error_codes.h:995
+#: ../include/svn_error_codes.h:999
 msgid "Author name cannot contain a newline"
 msgstr "作者名称不能换行"
 
-#: ../include/svn_error_codes.h:999
+#: ../include/svn_error_codes.h:1003
 msgid "Bad property name"
 msgstr "属性名称错误"
 
-#: ../include/svn_error_codes.h:1004
+#: ../include/svn_error_codes.h:1008
 msgid "Two versioned resources are unrelated"
 msgstr "两个纳入版本控制的资源不相关"
 
-#: ../include/svn_error_codes.h:1009
+#: ../include/svn_error_codes.h:1013
 msgid "Path has no lock token"
 msgstr "路径没有锁定令牌"
 
-#: ../include/svn_error_codes.h:1014
+#: ../include/svn_error_codes.h:1018
 msgid "Operation does not support multiple sources"
 msgstr "此操作不支持多个源对象"
 
-#: ../include/svn_error_codes.h:1019
+#: ../include/svn_error_codes.h:1023
 msgid "No versioned parent directories"
 msgstr "没有受版本控制的父目录"
 
-#: ../include/svn_error_codes.h:1024
+#: ../include/svn_error_codes.h:1028
 msgid "Working copy and merge source not ready for reintegration"
 msgstr "工作副本与合并来源没有准备好复兴"
 
-#: ../include/svn_error_codes.h:1030
+#: ../include/svn_error_codes.h:1034
 msgid "A problem occurred; see later errors for details"
 msgstr "发生问题;请参阅随后的错误信息"
 
-#: ../include/svn_error_codes.h:1034
+#: ../include/svn_error_codes.h:1038
 msgid "Failure loading plugin"
 msgstr "加载插件失败"
 
-#: ../include/svn_error_codes.h:1038
+#: ../include/svn_error_codes.h:1042
 msgid "Malformed file"
 msgstr "文件格式错误"
 
-#: ../include/svn_error_codes.h:1042
+#: ../include/svn_error_codes.h:1046
 msgid "Incomplete data"
 msgstr "数据不完整"
 
-#: ../include/svn_error_codes.h:1046
+#: ../include/svn_error_codes.h:1050
 msgid "Incorrect parameters given"
 msgstr "参数不正确"
 
-#: ../include/svn_error_codes.h:1050
+#: ../include/svn_error_codes.h:1054
 msgid "Tried a versioning operation on an unversioned resource"
 msgstr "试图对未纳入版本控制的资源进行版本操作"
 
-#: ../include/svn_error_codes.h:1054
+#: ../include/svn_error_codes.h:1058
 msgid "Test failed"
 msgstr "测试失败"
 
-#: ../include/svn_error_codes.h:1058
+#: ../include/svn_error_codes.h:1062
 msgid "Trying to use an unsupported feature"
 msgstr "试图使用不支持的特性"
 
-#: ../include/svn_error_codes.h:1062
+#: ../include/svn_error_codes.h:1066
 msgid "Unexpected or unknown property kind"
 msgstr "意外或未知的属性类型"
 
-#: ../include/svn_error_codes.h:1066
+#: ../include/svn_error_codes.h:1070
 msgid "Illegal target for the requested operation"
 msgstr "此请求操作的目标非法"
 
-#: ../include/svn_error_codes.h:1070
+#: ../include/svn_error_codes.h:1074
 msgid "MD5 checksum is missing"
 msgstr "没有 MD5 校验和"
 
-#: ../include/svn_error_codes.h:1074
+#: ../include/svn_error_codes.h:1078
 msgid "Directory needs to be empty but is not"
 msgstr "必须为空的目录有内容"
 
-#: ../include/svn_error_codes.h:1078
+#: ../include/svn_error_codes.h:1082
 msgid "Error calling external program"
 msgstr "调用外部程序错误"
 
-#: ../include/svn_error_codes.h:1082
+#: ../include/svn_error_codes.h:1086
 msgid "Python exception has been set with the error"
 msgstr "Python 异常被设为错误"
 
-#: ../include/svn_error_codes.h:1086
+#: ../include/svn_error_codes.h:1090
 msgid "A checksum mismatch occurred"
 msgstr "校验和错误"
 
-#: ../include/svn_error_codes.h:1090
+#: ../include/svn_error_codes.h:1094
 msgid "The operation was interrupted"
 msgstr "操作被中断"
 
-#: ../include/svn_error_codes.h:1094
+#: ../include/svn_error_codes.h:1098
 msgid "The specified diff option is not supported"
 msgstr "不支持指定的 diff 选项"
 
-#: ../include/svn_error_codes.h:1098
+#: ../include/svn_error_codes.h:1102
 msgid "Property not found"
 msgstr "找不到属性"
 
-#: ../include/svn_error_codes.h:1102
+#: ../include/svn_error_codes.h:1106
 msgid "No auth file path available"
 msgstr "未提供 auth 文件路径"
 
-#: ../include/svn_error_codes.h:1107
+#: ../include/svn_error_codes.h:1111
 msgid "Incompatible library version"
 msgstr "不兼容的库版本"
 
-#: ../include/svn_error_codes.h:1112
+#: ../include/svn_error_codes.h:1116
 msgid "Mergeinfo parse error"
 msgstr "分析合并信息出错"
 
-#: ../include/svn_error_codes.h:1117
+#: ../include/svn_error_codes.h:1121
 msgid "Cease invocation of this API"
 msgstr "停止调用此 API"
 
-#: ../include/svn_error_codes.h:1122
+#: ../include/svn_error_codes.h:1126
 msgid "Error parsing revision number"
 msgstr "解析版本号出错"
 
-#: ../include/svn_error_codes.h:1127
+#: ../include/svn_error_codes.h:1131
 msgid "Iteration terminated before completion"
 msgstr "迭代在完成前终止"
 
-#: ../include/svn_error_codes.h:1132
+#: ../include/svn_error_codes.h:1136
 msgid "Unknown changelist"
 msgstr "未知修改列表"
 
-#: ../include/svn_error_codes.h:1137
+#: ../include/svn_error_codes.h:1141
 msgid "Reserved directory name in command line arguments"
 msgstr "在命令行参数中包含保留的目录名称"
 
-#: ../include/svn_error_codes.h:1142
+#: ../include/svn_error_codes.h:1146
 msgid "Inquiry about unknown capability"
 msgstr "查询未知特性"
 
-#: ../include/svn_error_codes.h:1148
+#: ../include/svn_error_codes.h:1152
 msgid "Error parsing arguments"
 msgstr "解析参数出错"
 
-#: ../include/svn_error_codes.h:1152
+#: ../include/svn_error_codes.h:1156
 msgid "Not enough arguments provided"
 msgstr "没有提供足够的参数"
 
-#: ../include/svn_error_codes.h:1156
+#: ../include/svn_error_codes.h:1160
 msgid "Mutually exclusive arguments specified"
 msgstr "参数冲突"
 
-#: ../include/svn_error_codes.h:1160
+#: ../include/svn_error_codes.h:1164
 msgid "Attempted command in administrative dir"
 msgstr "试图在管理目录中执行命令"
 
-#: ../include/svn_error_codes.h:1164
+#: ../include/svn_error_codes.h:1168
 msgid "The log message file is under version control"
 msgstr "日志信息文件被纳入版本控制"
 
-#: ../include/svn_error_codes.h:1168
+#: ../include/svn_error_codes.h:1172
 msgid "The log message is a pathname"
 msgstr "日志信息是路径名"
 
-#: ../include/svn_error_codes.h:1172
+#: ../include/svn_error_codes.h:1176
 msgid "Committing in directory scheduled for addition"
 msgstr "在调度增加的目录中进行提交"
 
-#: ../include/svn_error_codes.h:1176
+#: ../include/svn_error_codes.h:1180
 msgid "No external editor available"
 msgstr "没有外部编辑器可用"
 
-#: ../include/svn_error_codes.h:1180
+#: ../include/svn_error_codes.h:1184
 msgid "Something is wrong with the log message's contents"
 msgstr "日志信息内容不妥"
 
-#: ../include/svn_error_codes.h:1184
+#: ../include/svn_error_codes.h:1188
 msgid "A log message was given where none was necessary"
 msgstr "在不需要时给出日志信息"
 
-#: ../include/svn_error_codes.h:1188
+#: ../include/svn_error_codes.h:1192
 msgid "No external merge tool available"
 msgstr "没有外部合并工具可用"
 
-#: ../libsvn_client/add.c:348 ../libsvn_wc/copy.c:188
+#: ../libsvn_client/add.c:350 ../libsvn_wc/copy.c:188
 #, c-format
 msgid "Can't close directory '%s'"
 msgstr "无法关闭目录 “%s”"
 
-#: ../libsvn_client/add.c:356
+#: ../libsvn_client/add.c:358
 #, c-format
 msgid "Error during add of '%s'"
 msgstr "增加 “%s” 时出错"
@@ -1020,15 +1024,15 @@
 msgid "'%s' does not exist"
 msgstr "“%s” 不存在"
 
-#: ../libsvn_client/commit.c:634 ../libsvn_client/copy.c:518
+#: ../libsvn_client/commit.c:634 ../libsvn_client/copy.c:513
 #: ../svnlook/main.c:1271
 #, c-format
 msgid "Path '%s' does not exist"
 msgstr "路径 “%s” 不存在"
 
-#: ../libsvn_client/commit.c:769 ../libsvn_client/copy.c:527
-#: ../libsvn_client/copy.c:917 ../libsvn_client/copy.c:1158
-#: ../libsvn_client/copy.c:1585
+#: ../libsvn_client/commit.c:769 ../libsvn_client/copy.c:522
+#: ../libsvn_client/copy.c:912 ../libsvn_client/copy.c:1153
+#: ../libsvn_client/copy.c:1580
 #, c-format
 msgid "Path '%s' already exists"
 msgstr "路径 “%s” 已经存在"
@@ -1038,7 +1042,7 @@
 msgid "'%s' is a reserved name and cannot be imported"
 msgstr "“%s” 是保留名称,无法被导入"
 
-#: ../libsvn_client/commit.c:917 ../libsvn_client/copy.c:1325
+#: ../libsvn_client/commit.c:917 ../libsvn_client/copy.c:1320
 msgid "Commit failed (details follow):"
 msgstr "提交失败(细节如下): "
 
@@ -1135,76 +1139,76 @@
 msgid "Standard properties can't be set explicitly as revision properties"
 msgstr "标准属性不能设置为版本属性"
 
-#: ../libsvn_client/copy.c:543 ../libsvn_client/copy.c:1601
+#: ../libsvn_client/copy.c:538 ../libsvn_client/copy.c:1596
 #: ../libsvn_client/update.c:140
 #, c-format
 msgid "Path '%s' is not a directory"
 msgstr "路径 “%s” 不是目录"
 
-#: ../libsvn_client/copy.c:783
+#: ../libsvn_client/copy.c:778
 #, c-format
 msgid "Source and dest appear not to be in the same repository (src: '%s'; dst: '%s')"
 msgstr "来源与目标似乎不在同一版本库 (来源: “%s”;目的: “%s”)"
 
-#: ../libsvn_client/copy.c:898
+#: ../libsvn_client/copy.c:893
 #, c-format
 msgid "Cannot move URL '%s' into itself"
 msgstr "无法移动 URL “%s” 到本身"
 
-#: ../libsvn_client/copy.c:907 ../libsvn_client/prop_commands.c:237
+#: ../libsvn_client/copy.c:902 ../libsvn_client/prop_commands.c:249
 #, c-format
 msgid "Path '%s' does not exist in revision %ld"
 msgstr "路径 “%s” 不在版本 %ld 中"
 
-#: ../libsvn_client/copy.c:1424
+#: ../libsvn_client/copy.c:1419
 #, c-format
 msgid "Source URL '%s' is from foreign repository; leaving it as a disjoint WC"
 msgstr "源 URL “%s” 来自其它版本库;把它当作脱离的工作副本"
 
-#: ../libsvn_client/copy.c:1572
+#: ../libsvn_client/copy.c:1567
 #, c-format
 msgid "Path '%s' not found in revision %ld"
 msgstr "路径 “%s” 不在版本 %ld 中"
 
-#: ../libsvn_client/copy.c:1577
+#: ../libsvn_client/copy.c:1572
 #, c-format
 msgid "Path '%s' not found in head revision"
 msgstr "HEAD 版本中找不到路径 “%s”"
 
-#: ../libsvn_client/copy.c:1627
+#: ../libsvn_client/copy.c:1622
 #, c-format
 msgid "Entry for '%s' exists (though the working file is missing)"
 msgstr "“%s” 的入口存在(尽管丢失了工作文件)"
 
-#: ../libsvn_client/copy.c:1719 ../libsvn_client/diff.c:1694
-#: ../libsvn_client/log.c:334
+#: ../libsvn_client/copy.c:1712 ../libsvn_client/diff.c:1724
+#: ../libsvn_client/log.c:335
 msgid "Revision type requires a working copy path, not a URL"
 msgstr "版本类型需要工作目录,不是 URL"
 
-#: ../libsvn_client/copy.c:1764
+#: ../libsvn_client/copy.c:1757
 msgid "Cannot mix repository and working copy sources"
 msgstr "不能在源中混合版本库和工作副本"
 
-#: ../libsvn_client/copy.c:1807
+#: ../libsvn_client/copy.c:1800
 #, c-format
 msgid "Cannot copy path '%s' into its own child '%s'"
 msgstr "无法复制路径 “%s” 到其子目录 “%s” 中"
 
-#: ../libsvn_client/copy.c:1827
+#: ../libsvn_client/copy.c:1820
 #, c-format
 msgid "Cannot move path '%s' into itself"
 msgstr "无法移动路径 “%s” 到本身"
 
-#: ../libsvn_client/copy.c:1836
+#: ../libsvn_client/copy.c:1829
 msgid "Moves between the working copy and the repository are not supported"
 msgstr "不支持在工作副本和版本库之间移动"
 
-#: ../libsvn_client/copy.c:1899
+#: ../libsvn_client/copy.c:1892
 #, c-format
 msgid "'%s' does not have a URL associated with it"
 msgstr "“%s” 没有关联的 URL"
 
-#: ../libsvn_client/copy.c:2269 ../svn/move-cmd.c:61
+#: ../libsvn_client/copy.c:2262 ../svn/move-cmd.c:61
 msgid "Cannot specify revisions (except HEAD) with move operations"
 msgstr "移动操作不能指定版本"
 
@@ -1215,7 +1219,7 @@
 
 #: ../libsvn_client/delete.c:67 ../libsvn_wc/adm_ops.c:2955
 #: ../libsvn_wc/entries.c:1272 ../libsvn_wc/entries.c:2383
-#: ../libsvn_wc/entries.c:3005 ../libsvn_wc/update_editor.c:2375
+#: ../libsvn_wc/entries.c:3005 ../libsvn_wc/update_editor.c:2394
 #, c-format
 msgid "'%s' is not under version control"
 msgstr "“%s” 尚未纳入版本控制"
@@ -1261,12 +1265,12 @@
 msgid "Modified: %s%s"
 msgstr "已修改: %s%s"
 
-#: ../libsvn_client/diff.c:352
+#: ../libsvn_client/diff.c:366
 #, c-format
 msgid "%s\t(revision %ld)"
 msgstr "%s\t(版本 %ld)"
 
-#: ../libsvn_client/diff.c:354
+#: ../libsvn_client/diff.c:368
 #, c-format
 msgid "%s\t(working copy)"
 msgstr "%s\t(工作副本)"
@@ -1276,34 +1280,34 @@
 msgid "Cannot display: file marked as a binary type.%s"
 msgstr "无法显示: 文件标记为二进制类型。%s"
 
-#: ../libsvn_client/diff.c:894 ../libsvn_client/merge.c:3785
-#: ../libsvn_client/merge.c:5123
+#: ../libsvn_client/diff.c:881 ../libsvn_client/merge.c:3703
+#: ../libsvn_client/merge.c:4970
 msgid "Not all required revisions are specified"
 msgstr "没有全部提供需要的版本"
 
-#: ../libsvn_client/diff.c:909
+#: ../libsvn_client/diff.c:896
 msgid "At least one revision must be non-local for a pegged diff"
 msgstr "对于 peg 差异,必须至少有一个非本地版本"
 
-#: ../libsvn_client/diff.c:1021 ../libsvn_client/diff.c:1033
+#: ../libsvn_client/diff.c:1008 ../libsvn_client/diff.c:1020
 #, c-format
 msgid "'%s' was not found in the repository at revision %ld"
 msgstr "“%s” 不在版本库版本 %ld 中"
 
-#: ../libsvn_client/diff.c:1092
+#: ../libsvn_client/diff.c:1079
 msgid "Sorry, svn_client_diff4 was called in a way that is not yet supported"
 msgstr "抱歉,svn_client_diff4 尚不支持这种调用方式"
 
-#: ../libsvn_client/diff.c:1133
+#: ../libsvn_client/diff.c:1119
 msgid "Only diffs between a path's text-base and its working files are supported at this time"
 msgstr "当前 diff 只支持参考文件与其工作文件比较"
 
-#: ../libsvn_client/diff.c:1279 ../libsvn_client/switch.c:126
+#: ../libsvn_client/diff.c:1264 ../libsvn_client/switch.c:126
 #, c-format
 msgid "Directory '%s' has no URL"
 msgstr "目录 “%s” 没有 URL"
 
-#: ../libsvn_client/diff.c:1493
+#: ../libsvn_client/diff.c:1475
 msgid "Summarizing diff can only compare repository to repository"
 msgstr "只有版本库和版本库才能比较差异概要"
 
@@ -1327,7 +1331,7 @@
 msgstr "“%s” 已存在"
 
 #: ../libsvn_client/export.c:725 ../libsvn_wc/adm_crawler.c:1092
-#: ../libsvn_wc/update_editor.c:2059 ../libsvn_wc/update_editor.c:2725
+#: ../libsvn_wc/update_editor.c:2078 ../libsvn_wc/update_editor.c:2746
 #, c-format
 msgid "Checksum mismatch for '%s'; expected: '%s', actual: '%s'"
 msgstr "“%s” 的校验和不匹配;期望: “%s”,实际: “%s”"
@@ -1362,6 +1366,11 @@
 msgid "Traversal of '%s' found no ambient depth"
 msgstr "在 “%s” 中找不到深度"
 
+#: ../libsvn_client/externals.c:821
+#, c-format
+msgid "'%s' is not a URL"
+msgstr "“%s”不是 URL"
+
 #: ../libsvn_client/info.c:420
 #, c-format
 msgid "Server does not support retrieving information about the repository root"
@@ -1382,9 +1391,9 @@
 msgid "No common parent found, unable to operate on disjoint arguments"
 msgstr "没有找到公共父节点,不能在分离的参数上操作"
 
-#: ../libsvn_client/locking_commands.c:261 ../libsvn_client/merge.c:5140
-#: ../libsvn_client/merge.c:5146 ../libsvn_client/merge.c:5700
-#: ../libsvn_client/merge.c:5856 ../libsvn_client/ra.c:386
+#: ../libsvn_client/locking_commands.c:261 ../libsvn_client/merge.c:4987
+#: ../libsvn_client/merge.c:4993 ../libsvn_client/merge.c:5564
+#: ../libsvn_client/merge.c:5720 ../libsvn_client/ra.c:386
 #: ../libsvn_client/ra.c:423 ../libsvn_client/ra.c:626
 #, c-format
 msgid "'%s' has no URL"
@@ -1405,7 +1414,7 @@
 msgstr "“%s” 没有被锁定"
 
 #: ../libsvn_client/locking_commands.c:407 ../libsvn_fs/fs-loader.c:1035
-#: ../libsvn_ra/ra_loader.c:1125
+#: ../libsvn_ra/ra_loader.c:1127
 msgid "Lock comment contains illegal characters"
 msgstr "锁定注释包含非法字符"
 
@@ -1413,17 +1422,17 @@
 msgid "Missing required revision specification"
 msgstr "未提供请求的版本"
 
-#: ../libsvn_client/log.c:371
+#: ../libsvn_client/log.c:372
 msgid "When specifying working copy paths, only one target may be given"
 msgstr "当指定工作副本路径时,只能给出一个目标"
 
-#: ../libsvn_client/log.c:394 ../libsvn_client/status.c:296
+#: ../libsvn_client/log.c:395 ../libsvn_client/status.c:296
 #: ../libsvn_client/update.c:154
 #, c-format
 msgid "Entry '%s' has no URL"
 msgstr "条目“%s”没有URL"
 
-#: ../libsvn_client/log.c:647
+#: ../libsvn_client/log.c:645
 msgid "No commits in repository"
 msgstr "版本库中没有提交"
 
@@ -1445,25 +1454,25 @@
 #. xgettext: the '.working', '.merge-left.r%ld' and
 #. '.merge-right.r%ld' strings are used to tag onto a file
 #. name in case of a merge conflict
-#: ../libsvn_client/merge.c:758
+#: ../libsvn_client/merge.c:747
 msgid ".working"
 msgstr ".working"
 
-#: ../libsvn_client/merge.c:760
+#: ../libsvn_client/merge.c:749
 #, c-format
 msgid ".merge-left.r%ld"
 msgstr ".merge-left.r%ld"
 
-#: ../libsvn_client/merge.c:763
+#: ../libsvn_client/merge.c:752
 #, c-format
 msgid ".merge-right.r%ld"
 msgstr ".merge-right.r%ld"
 
-#: ../libsvn_client/merge.c:1676
+#: ../libsvn_client/merge.c:1666
 msgid "Cannot reverse-merge a range from a path's own future history; try updating first"
 msgstr "不能从路径的未来历史中反向合并范围;请先更新"
 
-#: ../libsvn_client/merge.c:2209
+#: ../libsvn_client/merge.c:2158
 #, c-format
 msgid ""
 "One or more conflicts were produced while merging r%ld:%ld into\n"
@@ -1474,45 +1483,45 @@
 "当合并 r%ld:%ld 到 “%s” 时出现了一个或更多的冲突\n"
 "请解决所有冲突后,再次运行合并,处理剩余的未合并版本"
 
-#: ../libsvn_client/merge.c:4771
+#: ../libsvn_client/merge.c:4666
 msgid "Use of two URLs is not compatible with mergeinfo modification"
 msgstr "使用两个 URL 与合并信息修改不兼容"
 
-#: ../libsvn_client/merge.c:4778 ../libsvn_client/merge.c:5061
+#: ../libsvn_client/merge.c:4673 ../libsvn_client/merge.c:4908
 msgid "Merge from foreign repository is not compatible with mergeinfo modification"
 msgstr "从外部版本库合并与合并信息修改不兼容"
 
-#: ../libsvn_client/merge.c:5367
+#: ../libsvn_client/merge.c:5214
 msgid "Cannot reintegrate into a working copy with a switched subtree"
 msgstr "不能复兴到包含已经切换子目录的工作副本"
 
-#: ../libsvn_client/merge.c:5372
+#: ../libsvn_client/merge.c:5219
 msgid "Cannot reintegrate into a working copy not entirely at infinite depth"
 msgstr "不能复兴到非全部无限制深度的工作副本"
 
-#: ../libsvn_client/merge.c:5377
+#: ../libsvn_client/merge.c:5224
 msgid "Cannot reintegrate into a working copy that has local modifications"
 msgstr "不能复兴到有本地修改的工作副本"
 
-#: ../libsvn_client/merge.c:5383
+#: ../libsvn_client/merge.c:5230
 msgid "Cannot determine revision of working copy"
 msgstr "不能确定工作副本的版本"
 
-#: ../libsvn_client/merge.c:5387
+#: ../libsvn_client/merge.c:5234
 msgid "Cannot reintegrate into mixed-revision working copy; try updating first"
 msgstr "不能复兴到有混合版本的工作副本;请先更新"
 
-#: ../libsvn_client/merge.c:5454
+#: ../libsvn_client/merge.c:5301
 #, c-format
 msgid "At least one revision (r%ld) not yet merged from '%s'"
 msgstr "至少有一个版本(r%ld)没有自“%s”合并"
 
-#: ../libsvn_client/merge.c:5595 ../libsvn_client/merge.c:5759
+#: ../libsvn_client/merge.c:5459 ../libsvn_client/merge.c:5623
 #, c-format
 msgid "'%s@%ld' must be ancestrally related to '%s@%ld'"
 msgstr "“%s@%ld”必须与“%s@%ld”有祖先关系"
 
-#: ../libsvn_client/merge.c:5718
+#: ../libsvn_client/merge.c:5582
 #, c-format
 msgid "'%s' must be from the same repository as '%s'"
 msgstr "“%s”必须与“%s”在同一个版本库中"
@@ -1522,46 +1531,46 @@
 msgid "'%s' is a wcprop, thus not accessible to clients"
 msgstr "“%s” 是一个工作副本属性,应此不能被客户端存取"
 
-#: ../libsvn_client/prop_commands.c:224
+#: ../libsvn_client/prop_commands.c:236
 #, c-format
 msgid "Property '%s' is not a regular property"
 msgstr "属性 “%s” 不是常规属性"
 
-#: ../libsvn_client/prop_commands.c:326
+#: ../libsvn_client/prop_commands.c:338
 #, c-format
 msgid "Revision property '%s' not allowed in this context"
 msgstr "此上下文中不允许版本属性 “%s”"
 
-#: ../libsvn_client/prop_commands.c:333 ../libsvn_client/prop_commands.c:472
+#: ../libsvn_client/prop_commands.c:345 ../libsvn_client/prop_commands.c:486
 #, c-format
 msgid "Bad property name: '%s'"
 msgstr "属性名称错误: “%s”"
 
-#: ../libsvn_client/prop_commands.c:343
+#: ../libsvn_client/prop_commands.c:355
 #, c-format
 msgid "Setting property on non-local target '%s' needs a base revision"
 msgstr "设定非本地目标 “%s” 的属性需要版本参数"
 
-#: ../libsvn_client/prop_commands.c:348
+#: ../libsvn_client/prop_commands.c:360
 #, c-format
 msgid "Setting property recursively on non-local target '%s' is not supported"
 msgstr "不支持递归设置非本地目标 “%s” 的属性"
 
-#: ../libsvn_client/prop_commands.c:363
+#: ../libsvn_client/prop_commands.c:375
 #, c-format
 msgid "Setting property '%s' on non-local target '%s' is not supported"
 msgstr "不支持设置属性 “%s” 于非本地目标 “%s”"
 
-#: ../libsvn_client/prop_commands.c:468
+#: ../libsvn_client/prop_commands.c:482
 msgid "Value will not be set unless forced"
 msgstr "除非强迫为之,否则其值不会被设定"
 
-#: ../libsvn_client/prop_commands.c:649
+#: ../libsvn_client/prop_commands.c:663
 #, c-format
 msgid "'%s' does not exist in revision %ld"
 msgstr "没有路径 “%s” 在版本 %ld 中"
 
-#: ../libsvn_client/prop_commands.c:656 ../libsvn_client/prop_commands.c:995
+#: ../libsvn_client/prop_commands.c:670 ../libsvn_client/prop_commands.c:1009
 #, c-format
 msgid "Unknown node kind for '%s'"
 msgstr "“%s” 是未知的节点类型"
@@ -1602,7 +1611,7 @@
 msgstr "“%s” 的请求版本类型无法识别"
 
 #: ../libsvn_client/switch.c:144 ../libsvn_ra_local/ra_plugin.c:196
-#: ../libsvn_ra_local/ra_plugin.c:271 ../libsvn_wc/update_editor.c:3244
+#: ../libsvn_ra_local/ra_plugin.c:271 ../libsvn_wc/update_editor.c:3266
 #, c-format
 msgid ""
 "'%s'\n"
@@ -1817,12 +1826,12 @@
 msgid "reading copy"
 msgstr "正在读取副本"
 
-#: ../libsvn_fs_base/bdb/node-origins-table.c:110
+#: ../libsvn_fs_base/bdb/node-origins-table.c:111
 #, c-format
 msgid "Node origin for '%s' exists in filesystem '%s' with a different value (%s) than what we were about to store (%s)"
 msgstr "“%s” 的原始节点在文件系统 “%s” 中,取值(%s)与我们要存储的值(%s)不同"
 
-#: ../libsvn_fs_base/bdb/node-origins-table.c:120
+#: ../libsvn_fs_base/bdb/node-origins-table.c:121
 msgid "storing node-origins record"
 msgstr "正在存储节点原始记录"
 
@@ -2277,49 +2286,49 @@
 msgid "Cannot compare property value between two different filesystems"
 msgstr "不能在两个不同的文件系统之间比较属性值"
 
-#: ../libsvn_fs_base/tree.c:1726
+#: ../libsvn_fs_base/tree.c:1733
 msgid "Corrupt DB: faulty predecessor count"
 msgstr "损坏的数据库: 先前的数目不完整"
 
-#: ../libsvn_fs_base/tree.c:1781 ../libsvn_fs_fs/tree.c:1190
+#: ../libsvn_fs_base/tree.c:1788 ../libsvn_fs_fs/tree.c:1190
 #, c-format
 msgid "Unexpected immutable node at '%s'"
 msgstr "“%s”有意外的不变节点"
 
-#: ../libsvn_fs_base/tree.c:1802 ../libsvn_fs_fs/tree.c:1213
+#: ../libsvn_fs_base/tree.c:1809 ../libsvn_fs_fs/tree.c:1213
 #, c-format
 msgid "Conflict at '%s'"
 msgstr "在“%s”冲突"
 
-#: ../libsvn_fs_base/tree.c:1855 ../libsvn_fs_base/tree.c:2607
+#: ../libsvn_fs_base/tree.c:1862 ../libsvn_fs_base/tree.c:2614
 #: ../libsvn_fs_fs/tree.c:1264 ../libsvn_fs_fs/tree.c:1803
 msgid "Bad merge; ancestor, source, and target not all in same fs"
 msgstr "错误的合并;初始,原始,目标不在同一个文件系统"
 
-#: ../libsvn_fs_base/tree.c:1871 ../libsvn_fs_fs/tree.c:1280
+#: ../libsvn_fs_base/tree.c:1878 ../libsvn_fs_fs/tree.c:1280
 #, c-format
 msgid "Bad merge; target '%s' has id '%s', same as ancestor"
 msgstr "错误的合并: 目标“%s”拥有标识“%s”,与初始相同"
 
-#: ../libsvn_fs_base/tree.c:2414
+#: ../libsvn_fs_base/tree.c:2421
 #, c-format
 msgid "Transaction '%s' out-of-date with respect to revision '%s'"
 msgstr "事务 “%s” 过时,对于版本 “%s” "
 
-#: ../libsvn_fs_base/tree.c:2792 ../libsvn_fs_fs/tree.c:1940
+#: ../libsvn_fs_base/tree.c:2799 ../libsvn_fs_fs/tree.c:1940
 msgid "The root directory cannot be deleted"
 msgstr "不能删除根目录"
 
-#: ../libsvn_fs_base/tree.c:3013 ../libsvn_fs_fs/tree.c:2022
+#: ../libsvn_fs_base/tree.c:3020 ../libsvn_fs_fs/tree.c:2022
 #, c-format
 msgid "Cannot copy between two different filesystems ('%s' and '%s')"
 msgstr "不能在两个不同的文件系统(“%s”和“%s”)之间复制"
 
-#: ../libsvn_fs_base/tree.c:3022 ../libsvn_fs_fs/tree.c:2028
+#: ../libsvn_fs_base/tree.c:3029 ../libsvn_fs_fs/tree.c:2028
 msgid "Copy from mutable tree not currently supported"
 msgstr "当前不支持从可变的树复制"
 
-#: ../libsvn_fs_base/tree.c:3519 ../libsvn_fs_fs/tree.c:2476
+#: ../libsvn_fs_base/tree.c:3526 ../libsvn_fs_fs/tree.c:2476
 #, c-format
 msgid ""
 "Base checksum mismatch on '%s':\n"
@@ -2330,23 +2339,23 @@
 "  期望: %s\n"
 "  实际: %s\n"
 
-#: ../libsvn_fs_base/tree.c:3774 ../libsvn_fs_fs/tree.c:2712
+#: ../libsvn_fs_base/tree.c:3781 ../libsvn_fs_fs/tree.c:2712
 msgid "Cannot compare file contents between two different filesystems"
 msgstr "不能在两个不同的文件系统间比较文件内容"
 
-#: ../libsvn_fs_base/tree.c:3783 ../libsvn_fs_base/tree.c:3788
+#: ../libsvn_fs_base/tree.c:3790 ../libsvn_fs_base/tree.c:3795
 #: ../libsvn_fs_fs/tree.c:2721 ../libsvn_fs_fs/tree.c:2726
 #: ../libsvn_ra/compat.c:677
 #, c-format
 msgid "'%s' is not a file"
 msgstr "“%s”不是一个文件"
 
-#: ../libsvn_fs_base/tree.c:4793 ../libsvn_fs_base/tree.c:4981
+#: ../libsvn_fs_base/tree.c:4800 ../libsvn_fs_base/tree.c:4988
 #, c-format
 msgid "Node-revision '%s' claims to have mergeinfo but doesn't"
 msgstr "节点版本“%s”声称自己有合并信息,实际上却没有"
 
-#: ../libsvn_fs_base/tree.c:4817
+#: ../libsvn_fs_base/tree.c:4824
 #, c-format
 msgid "Node-revision '%s' claims to sit atop a tree containing mergeinfo but is not a directory"
 msgstr "节点版本“%s”声称自己是包含合并信息的树顶,实际上却不是目录"
@@ -2757,8 +2766,8 @@
 msgid "Mismatched RA version for '%s': found %d.%d.%d%s, expected %d.%d.%d%s"
 msgstr "“%s”的 RA 版本不匹配: 找到 %d.%d.%d%s,期望 %d.%d.%d%s"
 
-#: ../libsvn_ra/ra_loader.c:408 ../libsvn_ra_serf/serf.c:481
-#: ../libsvn_ra_serf/serf.c:595
+#: ../libsvn_ra/ra_loader.c:408 ../libsvn_ra_serf/serf.c:507
+#: ../libsvn_ra_serf/serf.c:625
 #, c-format
 msgid "Illegal repository URL '%s'"
 msgstr "非法版本库 URL “%s”"
@@ -2777,12 +2786,12 @@
 msgid "'%s' isn't in the same repository as '%s'"
 msgstr "“%s”与“%s”并不在同一个版本库中"
 
-#: ../libsvn_ra/ra_loader.c:1284
+#: ../libsvn_ra/ra_loader.c:1286
 #, c-format
 msgid "  - handles '%s' scheme\n"
 msgstr "  - 处理“%s”方案\n"
 
-#: ../libsvn_ra/ra_loader.c:1370
+#: ../libsvn_ra/ra_loader.c:1372
 #, c-format
 msgid "Unrecognized URL scheme '%s'"
 msgstr "无法识别的URL方案(一般需要svn://,http://,file://等开头)“%s”"
@@ -2807,13 +2816,13 @@
 msgid "URL '%s' is not a child of the session's repository root URL '%s'"
 msgstr "URL “%s” 不是会话版本库根 URL “%s” 的子节点"
 
-#: ../libsvn_ra_local/ra_plugin.c:1372 ../libsvn_ra_neon/session.c:913
-#: ../libsvn_ra_serf/serf.c:292 ../libsvn_ra_svn/client.c:2246
+#: ../libsvn_ra_local/ra_plugin.c:1373 ../libsvn_ra_neon/session.c:922
+#: ../libsvn_ra_serf/serf.c:300 ../libsvn_ra_svn/client.c:2258
 #, c-format
 msgid "Don't know anything about capability '%s'"
 msgstr "不知道特性 “%s” 的任何信息"
 
-#: ../libsvn_ra_local/ra_plugin.c:1450
+#: ../libsvn_ra_local/ra_plugin.c:1451
 #, c-format
 msgid "Unsupported RA loader version (%d) for ra_local"
 msgstr "不支持ra_local RA加载器版本 %d"
@@ -2868,19 +2877,19 @@
 msgid "Could not write svndiff to temp file"
 msgstr "无法将 svndiff 写入临时文件"
 
-#: ../libsvn_ra_neon/fetch.c:254
+#: ../libsvn_ra_neon/fetch.c:257
 msgid "Could not save the URL of the version resource"
 msgstr "无法储存版本资源的URL"
 
-#: ../libsvn_ra_neon/fetch.c:447
+#: ../libsvn_ra_neon/fetch.c:450
 msgid "Could not get content-type from response"
 msgstr "不能从响应中获得内容类型"
 
-#: ../libsvn_ra_neon/fetch.c:540
+#: ../libsvn_ra_neon/fetch.c:543
 msgid "Could not save file"
 msgstr "无法保存文件"
 
-#: ../libsvn_ra_neon/fetch.c:761 ../libsvn_ra_svn/client.c:960
+#: ../libsvn_ra_neon/fetch.c:764 ../libsvn_ra_svn/client.c:969
 #, c-format
 msgid ""
 "Checksum mismatch for '%s':\n"
@@ -2891,105 +2900,105 @@
 "  期望的校验和: %s\n"
 "  实际的校验和: %s\n"
 
-#: ../libsvn_ra_neon/fetch.c:1007
+#: ../libsvn_ra_neon/fetch.c:1010
 msgid "Server response missing the expected deadprop-count property"
 msgstr "服务器响应丢失了期望的 deadprop-count 属性"
 
-#: ../libsvn_ra_neon/fetch.c:1174 ../libsvn_ra_serf/commit.c:2135
+#: ../libsvn_ra_neon/fetch.c:1177 ../libsvn_ra_serf/commit.c:2135
 msgid "DAV request failed; it's possible that the repository's pre-revprop-change hook either failed or is non-existent"
 msgstr "DAV 请求失败;可能是版本库的 pre-revprop-change 钩子执行失败或者不存在"
 
-#: ../libsvn_ra_neon/fetch.c:1417
+#: ../libsvn_ra_neon/fetch.c:1422
 #, c-format
 msgid "Missing rev attr in target-revision element"
 msgstr "元素 target-revision 没有 rev 属性"
 
-#: ../libsvn_ra_neon/fetch.c:1428 ../libsvn_ra_serf/update.c:1466
+#: ../libsvn_ra_neon/fetch.c:1433 ../libsvn_ra_serf/update.c:1466
 #, c-format
 msgid "Missing name attr in absent-directory element"
 msgstr "元素 absent-directory 没有 name 属性"
 
-#: ../libsvn_ra_neon/fetch.c:1444 ../libsvn_ra_serf/update.c:1489
+#: ../libsvn_ra_neon/fetch.c:1449 ../libsvn_ra_serf/update.c:1489
 #, c-format
 msgid "Missing name attr in absent-file element"
 msgstr "元素 absent-file 没有 name 属性"
 
-#: ../libsvn_ra_neon/fetch.c:1459
+#: ../libsvn_ra_neon/fetch.c:1464
 #, c-format
 msgid "Missing path attr in resource element"
 msgstr "元素 resource 没有 path 属性"
 
-#: ../libsvn_ra_neon/fetch.c:1468
+#: ../libsvn_ra_neon/fetch.c:1473
 #, c-format
 msgid "Missing rev attr in open-directory element"
 msgstr "元素 open-directory 没有 rev 属性"
 
-#: ../libsvn_ra_neon/fetch.c:1499 ../libsvn_ra_serf/replay.c:255
+#: ../libsvn_ra_neon/fetch.c:1504 ../libsvn_ra_serf/replay.c:255
 #: ../libsvn_ra_serf/update.c:1295
 #, c-format
 msgid "Missing name attr in open-directory element"
 msgstr "元素 open-directory 没有 name 属性"
 
-#: ../libsvn_ra_neon/fetch.c:1526 ../libsvn_ra_serf/replay.c:281
+#: ../libsvn_ra_neon/fetch.c:1531 ../libsvn_ra_serf/replay.c:281
 #: ../libsvn_ra_serf/update.c:1330
 #, c-format
 msgid "Missing name attr in add-directory element"
 msgstr "元素 add-directory 没有 name 属性"
 
-#: ../libsvn_ra_neon/fetch.c:1539
+#: ../libsvn_ra_neon/fetch.c:1544
 #, c-format
 msgid "Missing copyfrom-rev attr in add-directory element"
 msgstr "元素 add-directory 没有 copyfrom-rev 属性"
 
-#: ../libsvn_ra_neon/fetch.c:1616
+#: ../libsvn_ra_neon/fetch.c:1621
 #, c-format
 msgid "Missing rev attr in open-file element"
 msgstr "元素 open-file 没有 rev 属性"
 
-#: ../libsvn_ra_neon/fetch.c:1623 ../libsvn_ra_serf/replay.c:316
+#: ../libsvn_ra_neon/fetch.c:1628 ../libsvn_ra_serf/replay.c:316
 #: ../libsvn_ra_serf/update.c:1370
 #, c-format
 msgid "Missing name attr in open-file element"
 msgstr "元素 open-file 没有 name 属性"
 
-#: ../libsvn_ra_neon/fetch.c:1649 ../libsvn_ra_serf/replay.c:342
+#: ../libsvn_ra_neon/fetch.c:1654 ../libsvn_ra_serf/replay.c:342
 #: ../libsvn_ra_serf/update.c:1405
 #, c-format
 msgid "Missing name attr in add-file element"
 msgstr "元素 add-file 没有 name 属性"
 
-#: ../libsvn_ra_neon/fetch.c:1662
+#: ../libsvn_ra_neon/fetch.c:1667
 #, c-format
 msgid "Missing copyfrom-rev attr in add-file element"
 msgstr "元素 add-file 没有 copyfrom-rev 属性"
 
-#: ../libsvn_ra_neon/fetch.c:1717
+#: ../libsvn_ra_neon/fetch.c:1722
 #, c-format
 msgid "Missing name attr in set-prop element"
 msgstr "元素 set-pro 没有 name 属性"
 
-#: ../libsvn_ra_neon/fetch.c:1731
+#: ../libsvn_ra_neon/fetch.c:1736
 #, c-format
 msgid "Missing name attr in remove-prop element"
 msgstr "元素 remove-prop 没有 name 属性"
 
-#: ../libsvn_ra_neon/fetch.c:1805 ../libsvn_ra_serf/replay.c:229
+#: ../libsvn_ra_neon/fetch.c:1810 ../libsvn_ra_serf/replay.c:229
 #: ../libsvn_ra_serf/update.c:1435
 #, c-format
 msgid "Missing name attr in delete-entry element"
 msgstr "元素 delete-entry 没有 attr 属性"
 
-#: ../libsvn_ra_neon/fetch.c:1945
+#: ../libsvn_ra_neon/fetch.c:1972
 #, c-format
 msgid "Error writing to '%s': unexpected EOF"
 msgstr "写入 “%s” 时出错: 意外的 EOF"
 
-#: ../libsvn_ra_neon/fetch.c:2092
+#: ../libsvn_ra_neon/fetch.c:2119
 #, c-format
 msgid "Unknown XML encoding: '%s'"
 msgstr "未知的 XML 编码: “%s”"
 
-#: ../libsvn_ra_neon/fetch.c:2379
+#: ../libsvn_ra_neon/fetch.c:2418
 #, c-format
 msgid "REPORT response handling failed to complete the editor drive"
 msgstr "处理报告响应失败,不能完成编辑"
@@ -3015,7 +3024,7 @@
 msgstr "服务器请求 dated-rev 的响应无效"
 
 #: ../libsvn_ra_neon/get_location_segments.c:118
-#: ../libsvn_ra_serf/getlocationsegments.c:101 ../libsvn_ra_svn/client.c:1575
+#: ../libsvn_ra_serf/getlocationsegments.c:101 ../libsvn_ra_svn/client.c:1584
 msgid "Expected valid revision range"
 msgstr "期望合法的版本范围"
 
@@ -3064,7 +3073,7 @@
 msgid "'%s' is not locked in the repository"
 msgstr "版本库中的“%s”没有被锁定"
 
-#: ../libsvn_ra_neon/lock.c:529
+#: ../libsvn_ra_neon/lock.c:528
 msgid "Failed to fetch lock information"
 msgstr "获取锁信息失败"
 
@@ -3074,7 +3083,7 @@
 msgstr "元素 revprop 没有 name 属性"
 
 #: ../libsvn_ra_neon/log.c:433 ../libsvn_ra_serf/log.c:533
-#: ../libsvn_ra_svn/client.c:1300
+#: ../libsvn_ra_svn/client.c:1309
 msgid "Server does not support custom revprops via log"
 msgstr "服务器不支持通过日志自定义 revprops"
 
@@ -3178,15 +3187,15 @@
 msgid "PIN for token \"%s\" in slot \"%s\""
 msgstr "钉住令牌“%s”于通道“%s”"
 
-#: ../libsvn_ra_neon/session.c:529 ../libsvn_ra_serf/serf.c:405
+#: ../libsvn_ra_neon/session.c:529 ../libsvn_ra_serf/serf.c:431
 msgid "Invalid URL: illegal character in proxy port number"
 msgstr "无效URL: 代理端口中有非法字符"
 
-#: ../libsvn_ra_neon/session.c:533 ../libsvn_ra_serf/serf.c:409
+#: ../libsvn_ra_neon/session.c:533 ../libsvn_ra_serf/serf.c:435
 msgid "Invalid URL: negative proxy port number"
 msgstr "无效URL: 负的代理端口"
 
-#: ../libsvn_ra_neon/session.c:536 ../libsvn_ra_serf/serf.c:412
+#: ../libsvn_ra_neon/session.c:536 ../libsvn_ra_serf/serf.c:438
 msgid "Invalid URL: proxy port number greater than maximum TCP port number 65535"
 msgstr "无效URL: 代理端口大于TCP通信端口最大值65535"
 
@@ -3216,47 +3225,47 @@
 msgid "OPTIONS request (for capabilities) got HTTP response code %d"
 msgstr "OPTIONS 请求(特性)得到 HTTP 响应码 %d"
 
-#: ../libsvn_ra_neon/session.c:896 ../libsvn_ra_serf/serf.c:275
+#: ../libsvn_ra_neon/session.c:905 ../libsvn_ra_serf/serf.c:283
 #, c-format
 msgid "Don't know how to handle '%s' for capability '%s'"
 msgstr "不知道如何处理“%s”,对于特性“%s”"
 
-#: ../libsvn_ra_neon/session.c:920 ../libsvn_ra_serf/serf.c:299
+#: ../libsvn_ra_neon/session.c:929 ../libsvn_ra_serf/serf.c:307
 #, c-format
 msgid "Attempt to fetch capability '%s' resulted in '%s'"
 msgstr "试图取得特性 “%s” 导致 “%s”"
 
-#: ../libsvn_ra_neon/session.c:943 ../libsvn_ra_serf/locks.c:548
+#: ../libsvn_ra_neon/session.c:952 ../libsvn_ra_serf/locks.c:548
 msgid "Malformed URL for repository"
 msgstr "版本库的 URL 非法"
 
-#: ../libsvn_ra_neon/session.c:993
+#: ../libsvn_ra_neon/session.c:1002
 msgid "Network socket initialization failed"
 msgstr "创建网络套接字失败"
 
-#: ../libsvn_ra_neon/session.c:1012
+#: ../libsvn_ra_neon/session.c:1021
 msgid "SSL is not supported"
 msgstr "不支持 SSL"
 
-#: ../libsvn_ra_neon/session.c:1177
+#: ../libsvn_ra_neon/session.c:1186 ../libsvn_ra_serf/util.c:211
 #, c-format
 msgid "Invalid config: unable to load certificate file '%s'"
 msgstr "无效的配置: 无法加载证书文件“%s”"
 
-#: ../libsvn_ra_neon/session.c:1205
+#: ../libsvn_ra_neon/session.c:1214
 #, c-format
 msgid "Invalid config: unable to load PKCS#11 provider '%s'"
 msgstr "无效的配置: 无法加载 PKCS#11 提供者“%s”"
 
-#: ../libsvn_ra_neon/session.c:1330 ../libsvn_ra_serf/serf.c:1107
+#: ../libsvn_ra_neon/session.c:1339 ../libsvn_ra_serf/serf.c:1137
 msgid "The UUID property was not found on the resource or any of its parents"
 msgstr "无法在本资源或其任何父项目中找到UUID属性"
 
-#: ../libsvn_ra_neon/session.c:1338
+#: ../libsvn_ra_neon/session.c:1347
 msgid "Please upgrade the server to 0.19 or later"
 msgstr "请将服务器升级至0.19或更新的版本"
 
-#: ../libsvn_ra_neon/session.c:1409
+#: ../libsvn_ra_neon/session.c:1418
 #, c-format
 msgid "Unsupported RA loader version (%d) for ra_neon"
 msgstr "不支持的 ra_neon RA 加载器版本(%d)"
@@ -3279,7 +3288,9 @@
 msgid "%s of '%s'"
 msgstr "方法 %s 失败于 “%s”"
 
-#: ../libsvn_ra_neon/util.c:544 ../libsvn_ra_serf/mergeinfo.c:292
+#: ../libsvn_ra_neon/util.c:544 ../libsvn_ra_serf/getlocations.c:280
+#: ../libsvn_ra_serf/getlocationsegments.c:231
+#: ../libsvn_ra_serf/mergeinfo.c:292 ../libsvn_ra_serf/mergeinfo.c:306
 #, c-format
 msgid "'%s' path not found"
 msgstr "找不到路径 “%s”"
@@ -3335,8 +3346,8 @@
 msgid "Missing 'realm' attribute in Authorization header."
 msgstr "认证头丢失属性“realm”"
 
-#: ../libsvn_ra_serf/blame.c:464 ../libsvn_ra_serf/serf.c:632
-#: ../libsvn_ra_serf/update.c:2222 ../libsvn_ra_serf/util.c:1201
+#: ../libsvn_ra_serf/blame.c:464 ../libsvn_ra_serf/serf.c:662
+#: ../libsvn_ra_serf/update.c:2222 ../libsvn_ra_serf/util.c:1402
 msgid "The OPTIONS response did not include the requested version-controlled-configuration value"
 msgstr "OPTIONS 响应中没有包含请求的 version-controlled-configuration 值。"
 
@@ -3345,14 +3356,14 @@
 msgstr "OPTIONS 响应中没有包含请求的 baseline-relative-path 值。"
 
 #: ../libsvn_ra_serf/blame.c:496 ../libsvn_ra_serf/commit.c:1160
-#: ../libsvn_ra_serf/property.c:930 ../libsvn_ra_serf/serf.c:648
+#: ../libsvn_ra_serf/property.c:930 ../libsvn_ra_serf/serf.c:678
 #: ../libsvn_ra_serf/update.c:1135 ../libsvn_ra_serf/update.c:1680
 msgid "The OPTIONS response did not include the requested checked-in value"
 msgstr "OPTIONS 响应中没有包含请求的 checked-in 值。"
 
 #: ../libsvn_ra_serf/blame.c:523 ../libsvn_ra_serf/commit.c:1389
 #: ../libsvn_ra_serf/commit.c:1779 ../libsvn_ra_serf/property.c:944
-#: ../libsvn_ra_serf/serf.c:770 ../libsvn_ra_serf/serf.c:1006
+#: ../libsvn_ra_serf/serf.c:800 ../libsvn_ra_serf/serf.c:1036
 msgid "The OPTIONS response did not include the requested baseline-collection value"
 msgstr "OPTIONS 响应中没有包含请求的 baseline-collection 值。"
 
@@ -3437,24 +3448,24 @@
 msgid "Error retrieving replay REPORT (%d)"
 msgstr "获取重放报告出错(%d)"
 
-#: ../libsvn_ra_serf/serf.c:315
+#: ../libsvn_ra_serf/serf.c:323
 msgid "Module for accessing a repository via WebDAV protocol using serf."
 msgstr "通过 WebDAV 协议使用 serf 访问版本库的模块。"
 
-#: ../libsvn_ra_serf/serf.c:521
+#: ../libsvn_ra_serf/serf.c:551
 #, c-format
 msgid "Could not lookup hostname `%s'"
 msgstr "无法解析主机 “%s” 的地址"
 
-#: ../libsvn_ra_serf/serf.c:665
+#: ../libsvn_ra_serf/serf.c:695
 msgid "The OPTIONS response did not include the requested version-name value"
 msgstr "OPTIONS 响应中没有包含请求的 version-name 值。"
 
-#: ../libsvn_ra_serf/serf.c:829
+#: ../libsvn_ra_serf/serf.c:859
 msgid "The OPTIONS response did not include the requested resourcetype value"
 msgstr "OPTIONS 响应中没有包含请求的 resourcetype 值。"
 
-#: ../libsvn_ra_serf/serf.c:1172
+#: ../libsvn_ra_serf/serf.c:1202
 #, c-format
 msgid "Unsupported RA loader version (%d) for ra_serf"
 msgstr "不支持ra_serf RA加载器版本 %d"
@@ -3464,16 +3475,16 @@
 msgid "GET request failed: %d %s"
 msgstr "GET 请求失败: %d %s"
 
-#: ../libsvn_ra_serf/update.c:2298
+#: ../libsvn_ra_serf/update.c:2302
 #, c-format
 msgid "Error retrieving REPORT (%d)"
 msgstr "获取报告出错(%d)"
 
-#: ../libsvn_ra_serf/util.c:986
+#: ../libsvn_ra_serf/util.c:1186
 msgid "Premature EOF seen from server"
 msgstr "从服务器发现EOF太早"
 
-#: ../libsvn_ra_serf/util.c:1036
+#: ../libsvn_ra_serf/util.c:1237
 msgid "Unspecified error message"
 msgstr "未指明的错误信息"
 
@@ -3482,201 +3493,196 @@
 msgid "Unknown hostname '%s'"
 msgstr "未知的主机“%s”"
 
-#: ../libsvn_ra_svn/client.c:145
-#, c-format
-msgid "Can't create socket"
-msgstr "无法创建 socket"
-
-#: ../libsvn_ra_svn/client.c:149
+#: ../libsvn_ra_svn/client.c:158
 #, c-format
 msgid "Can't connect to host '%s'"
 msgstr "无法连接主机“%s”"
 
-#: ../libsvn_ra_svn/client.c:172
+#: ../libsvn_ra_svn/client.c:181
 msgid "Prop diffs element not a list"
 msgstr "Prop diffs 元素不是一个列表"
 
-#: ../libsvn_ra_svn/client.c:210
+#: ../libsvn_ra_svn/client.c:219
 #, c-format
 msgid "Unrecognized node kind '%s' from server"
 msgstr "服务器返回无法识别的节点类型 “%s”"
 
-#: ../libsvn_ra_svn/client.c:374
+#: ../libsvn_ra_svn/client.c:383
 #, c-format
 msgid "Undefined tunnel scheme '%s'"
 msgstr "无法识别的隧道方案 “%s”"
 
-#: ../libsvn_ra_svn/client.c:391
+#: ../libsvn_ra_svn/client.c:400
 #, c-format
 msgid "Tunnel scheme %s requires environment variable %s to be defined"
 msgstr "隧道方案 %s 需要设定环境变量 %s"
 
-#: ../libsvn_ra_svn/client.c:402
+#: ../libsvn_ra_svn/client.c:411
 #, c-format
 msgid "Can't tokenize command '%s'"
 msgstr "不能解析命令“%s”"
 
-#: ../libsvn_ra_svn/client.c:433
+#: ../libsvn_ra_svn/client.c:442
 #, c-format
 msgid "Error in child process: %s"
 msgstr "子进程错误: %s"
 
-#: ../libsvn_ra_svn/client.c:457
+#: ../libsvn_ra_svn/client.c:466
 #, c-format
 msgid "Can't create tunnel"
 msgstr "无法创建隧道"
 
-#: ../libsvn_ra_svn/client.c:495
+#: ../libsvn_ra_svn/client.c:504
 #, c-format
 msgid "Illegal svn repository URL '%s'"
 msgstr "非法的svn版本库URL“%s”"
 
-#: ../libsvn_ra_svn/client.c:555
+#: ../libsvn_ra_svn/client.c:564
 #, c-format
 msgid "Server requires minimum version %d"
 msgstr "服务器要求的最低版本是 %d"
 
-#: ../libsvn_ra_svn/client.c:559
+#: ../libsvn_ra_svn/client.c:568
 #, c-format
 msgid "Server only supports versions up to %d"
 msgstr "服务器支持的版本不大于 %d"
 
-#: ../libsvn_ra_svn/client.c:567
+#: ../libsvn_ra_svn/client.c:576
 msgid "Server does not support edit pipelining"
 msgstr "服务器不支持流水线编辑"
 
-#: ../libsvn_ra_svn/client.c:600
+#: ../libsvn_ra_svn/client.c:609
 msgid "Impossibly long repository root from server"
 msgstr "服务器返回的版本库根路径太长"
 
-#: ../libsvn_ra_svn/client.c:612
+#: ../libsvn_ra_svn/client.c:621
 msgid ""
 "Module for accessing a repository using the svn network protocol.\n"
 "  - with Cyrus SASL authentication"
 msgstr "使用 svn 网络协议访问版本库的模块。  - 使用 Cyrus SASL 认证"
 
-#: ../libsvn_ra_svn/client.c:616
+#: ../libsvn_ra_svn/client.c:625
 msgid "Module for accessing a repository using the svn network protocol."
 msgstr "使用 svn 网络协议访问版本库的模块。"
 
-#: ../libsvn_ra_svn/client.c:777
+#: ../libsvn_ra_svn/client.c:786
 msgid "Server did not send repository root"
 msgstr "服务器没有返回版本库根路径"
 
-#: ../libsvn_ra_svn/client.c:850
+#: ../libsvn_ra_svn/client.c:859
 msgid "Server doesn't support setting arbitrary revision properties during commit"
 msgstr "在提交时,服务器不支持设置任意版本属性"
 
-#: ../libsvn_ra_svn/client.c:938
+#: ../libsvn_ra_svn/client.c:947
 msgid "Non-string as part of file contents"
 msgstr "部份文件内容不是字符串"
 
-#: ../libsvn_ra_svn/client.c:1039
+#: ../libsvn_ra_svn/client.c:1048
 msgid "Dirlist element not a list"
 msgstr "目录列表元素不是列表"
 
-#: ../libsvn_ra_svn/client.c:1098
+#: ../libsvn_ra_svn/client.c:1107
 msgid "Mergeinfo element is not a list"
 msgstr "Mergeinfo 元素不是列表"
 
-#: ../libsvn_ra_svn/client.c:1289
+#: ../libsvn_ra_svn/client.c:1298
 msgid "Log entry not a list"
 msgstr "日志条目不是列表"
 
-#: ../libsvn_ra_svn/client.c:1324
+#: ../libsvn_ra_svn/client.c:1333
 msgid "Changed-path entry not a list"
 msgstr "已修改路径条目不是列表"
 
-#: ../libsvn_ra_svn/client.c:1440
+#: ../libsvn_ra_svn/client.c:1449
 msgid "'stat' not implemented"
 msgstr "未实现“stat”"
 
-#: ../libsvn_ra_svn/client.c:1497
+#: ../libsvn_ra_svn/client.c:1506
 msgid "'get-locations' not implemented"
 msgstr "未实现“get-locations”"
 
-#: ../libsvn_ra_svn/client.c:1509
+#: ../libsvn_ra_svn/client.c:1518
 msgid "Location entry not a list"
 msgstr "区域条目不是列表"
 
-#: ../libsvn_ra_svn/client.c:1554
+#: ../libsvn_ra_svn/client.c:1563
 msgid "'get-location-segments' not implemented"
 msgstr "未实现 “get-location-segments”"
 
-#: ../libsvn_ra_svn/client.c:1566
+#: ../libsvn_ra_svn/client.c:1575
 msgid "Location segment entry not a list"
 msgstr "位置分段入口不是列表"
 
-#: ../libsvn_ra_svn/client.c:1628
+#: ../libsvn_ra_svn/client.c:1637
 msgid "'get-file-revs' not implemented"
 msgstr "未实现“get-file-revs”"
 
-#: ../libsvn_ra_svn/client.c:1641
+#: ../libsvn_ra_svn/client.c:1650
 msgid "Revision entry not a list"
 msgstr "版本条目不是列表"
 
-#: ../libsvn_ra_svn/client.c:1658 ../libsvn_ra_svn/client.c:1683
+#: ../libsvn_ra_svn/client.c:1667 ../libsvn_ra_svn/client.c:1692
 msgid "Text delta chunk not a string"
 msgstr "文本差异块不是字符串"
 
-#: ../libsvn_ra_svn/client.c:1695
+#: ../libsvn_ra_svn/client.c:1704
 msgid "The get-file-revs command didn't return any revisions"
 msgstr "get-file-revs 命令没有返回任何版本"
 
-#: ../libsvn_ra_svn/client.c:1743
+#: ../libsvn_ra_svn/client.c:1752
 msgid "Server doesn't support the lock command"
 msgstr "服务器不支持加锁"
 
-#: ../libsvn_ra_svn/client.c:1807
+#: ../libsvn_ra_svn/client.c:1816
 msgid "Server doesn't support the unlock command"
 msgstr "服务器不支持解锁"
 
-#: ../libsvn_ra_svn/client.c:1904
+#: ../libsvn_ra_svn/client.c:1913
 msgid "Lock response not a list"
 msgstr "加锁响应不是列表"
 
-#: ../libsvn_ra_svn/client.c:1918
+#: ../libsvn_ra_svn/client.c:1927
 msgid "Unknown status for lock command"
 msgstr "加锁命令的状态未知"
 
-#: ../libsvn_ra_svn/client.c:1940
+#: ../libsvn_ra_svn/client.c:1949
 msgid "Didn't receive end marker for lock responses"
 msgstr "加锁响应没有结束标记"
 
-#: ../libsvn_ra_svn/client.c:2027
+#: ../libsvn_ra_svn/client.c:2036
 msgid "Unlock response not a list"
 msgstr "解锁响应不是列表"
 
-#: ../libsvn_ra_svn/client.c:2041
+#: ../libsvn_ra_svn/client.c:2050
 msgid "Unknown status for unlock command"
 msgstr "未知的解锁命令状态"
 
-#: ../libsvn_ra_svn/client.c:2062
+#: ../libsvn_ra_svn/client.c:2071
 msgid "Didn't receive end marker for unlock responses"
 msgstr "解锁响应没有结束标记"
 
-#: ../libsvn_ra_svn/client.c:2086 ../libsvn_ra_svn/client.c:2114
+#: ../libsvn_ra_svn/client.c:2095 ../libsvn_ra_svn/client.c:2123
 msgid "Server doesn't support the get-lock command"
 msgstr "服务器不支持命令 get-lock"
 
-#: ../libsvn_ra_svn/client.c:2127
+#: ../libsvn_ra_svn/client.c:2136
 msgid "Lock element not a list"
 msgstr "Lock元素不是列表"
 
-#: ../libsvn_ra_svn/client.c:2150
+#: ../libsvn_ra_svn/client.c:2159
 msgid "Server doesn't support the replay command"
 msgstr "服务器不支持重放命令"
 
-#: ../libsvn_ra_svn/client.c:2182
+#: ../libsvn_ra_svn/client.c:2191
 msgid "Server doesn't support the replay-range command"
 msgstr "服务器不支持重放范围命令"
 
-#: ../libsvn_ra_svn/client.c:2200
+#: ../libsvn_ra_svn/client.c:2209
 #, c-format
 msgid "Expected 'revprops', found '%s'"
 msgstr "期望“revprops”,发现“%s”"
 
-#: ../libsvn_ra_svn/client.c:2310
+#: ../libsvn_ra_svn/client.c:2322
 #, c-format
 msgid "Unsupported RA loader version (%d) for ra_svn"
 msgstr "不支持ra_svn RA加载器版本 %d"
@@ -4154,24 +4160,24 @@
 msgid "Cannot replace a directory from within"
 msgstr "不能在子目录中替换目录"
 
-#: ../libsvn_repos/reporter.c:1211
+#: ../libsvn_repos/reporter.c:1209
 msgid "Invalid report for top level of working copy"
 msgstr "最上层工作副本报告无效"
 
-#: ../libsvn_repos/reporter.c:1226
+#: ../libsvn_repos/reporter.c:1224
 msgid "Two top-level reports with no target"
 msgstr "两个最上层报告没有目标"
 
-#: ../libsvn_repos/reporter.c:1278
+#: ../libsvn_repos/reporter.c:1282
 #, c-format
 msgid "Unsupported report depth '%s'"
 msgstr "不支持报告深度“%s”"
 
-#: ../libsvn_repos/reporter.c:1322
+#: ../libsvn_repos/reporter.c:1326
 msgid "Depth 'exclude' not supported for link"
 msgstr "深度 “exclude” 不支持链接"
 
-#: ../libsvn_repos/reporter.c:1401
+#: ../libsvn_repos/reporter.c:1405
 msgid "Request depth 'exclude' not supported"
 msgstr "不支持请求的深度 “exclude”"
 
@@ -4220,40 +4226,40 @@
 msgid "Creating conf directory"
 msgstr "正在创建 conf 目录"
 
-#: ../libsvn_repos/repos.c:989
+#: ../libsvn_repos/repos.c:986
 msgid "Creating svnserve.conf file"
 msgstr "正在创建 svnserve.conf 文件"
 
-#: ../libsvn_repos/repos.c:1007
+#: ../libsvn_repos/repos.c:1004
 msgid "Creating passwd file"
 msgstr "正在创建 passwd 文件"
 
-#: ../libsvn_repos/repos.c:1049
+#: ../libsvn_repos/repos.c:1046
 msgid "Creating authz file"
 msgstr "正在创建 authz 文件"
 
-#: ../libsvn_repos/repos.c:1084
+#: ../libsvn_repos/repos.c:1081
 msgid "Could not create top-level directory"
 msgstr "无法创建最上层目录"
 
-#: ../libsvn_repos/repos.c:1096
+#: ../libsvn_repos/repos.c:1093
 msgid "Creating DAV sandbox dir"
 msgstr "正在创建 DAV 沙箱目录"
 
-#: ../libsvn_repos/repos.c:1167
+#: ../libsvn_repos/repos.c:1164
 msgid "Error opening db lockfile"
 msgstr "打开数据库锁文件出错"
 
-#: ../libsvn_repos/repos.c:1204
+#: ../libsvn_repos/repos.c:1201
 msgid "Repository creation failed"
 msgstr "创建版本库失败"
 
-#: ../libsvn_repos/repos.c:1285
+#: ../libsvn_repos/repos.c:1282
 #, c-format
 msgid "Expected repository format '%d' or '%d'; found format '%d'"
 msgstr "期望版本库格式是“%d”或“%d”;发现格式是“%d”"
 
-#: ../libsvn_repos/repos.c:1508
+#: ../libsvn_repos/repos.c:1505
 #, c-format
 msgid "unknown capability '%s'"
 msgstr "未知特性“%s”"
@@ -4789,7 +4795,7 @@
 msgid "Could not find end of line in range list line in '%s'"
 msgstr "在“%s”的范围列表行中没有找到行结束符"
 
-#: ../libsvn_subr/mergeinfo.c:600
+#: ../libsvn_subr/mergeinfo.c:599
 #, c-format
 msgid "Could not parse mergeinfo string '%s'"
 msgstr "不能解析合并信息字符串“%s”"
@@ -4837,42 +4843,42 @@
 "“%s”: 未知命令。\n"
 "\n"
 
-#: ../libsvn_subr/opt.c:850
+#: ../libsvn_subr/opt.c:864
 #, c-format
 msgid "Syntax error parsing revision '%s'"
 msgstr "解析版本“%s”时发生语法错误"
 
-#: ../libsvn_subr/opt.c:978
+#: ../libsvn_subr/opt.c:992
 #, c-format
 msgid "URL '%s' is not properly URI-encoded"
 msgstr "URL“%s”不是正确的URI编码"
 
-#: ../libsvn_subr/opt.c:984
+#: ../libsvn_subr/opt.c:998
 #, c-format
 msgid "URL '%s' contains a '..' element"
 msgstr "URL“%s”包含“..”元素"
 
-#: ../libsvn_subr/opt.c:1013
+#: ../libsvn_subr/opt.c:1027
 #, c-format
 msgid "Error resolving case of '%s'"
 msgstr "解析“%s”出错"
 
-#: ../libsvn_subr/opt.c:1035
+#: ../libsvn_subr/opt.c:1049
 #, c-format
 msgid "'%s' ends in a reserved name"
 msgstr "“%s”以保留名称结束"
 
-#: ../libsvn_subr/opt.c:1116
+#: ../libsvn_subr/opt.c:1130
 msgid "Revision property pair is empty"
 msgstr "版本属性对为空"
 
-#: ../libsvn_subr/opt.c:1136 ../svn/propedit-cmd.c:60 ../svn/propget-cmd.c:180
+#: ../libsvn_subr/opt.c:1150 ../svn/propedit-cmd.c:60 ../svn/propget-cmd.c:180
 #: ../svn/propset-cmd.c:64
 #, c-format
 msgid "'%s' is not a valid Subversion property name"
 msgstr "“%s”不是有效的 Subversion 属性名称"
 
-#: ../libsvn_subr/opt.c:1164
+#: ../libsvn_subr/opt.c:1178
 #, c-format
 msgid ""
 "%s, version %s\n"
@@ -4883,7 +4889,7 @@
 "   编译于 %s,%s\n"
 "\n"
 
-#: ../libsvn_subr/opt.c:1167
+#: ../libsvn_subr/opt.c:1181
 msgid ""
 "Copyright (C) 2000-2008 CollabNet.\n"
 "Subversion is open source software, see http://subversion.tigris.org/\n"
@@ -4895,7 +4901,7 @@
 "此产品包含由 CollabNet(http://www.Collab.Net/) 开发的软件。\n"
 "\n"
 
-#: ../libsvn_subr/opt.c:1220 ../libsvn_subr/opt.c:1287
+#: ../libsvn_subr/opt.c:1234 ../libsvn_subr/opt.c:1301
 #, c-format
 msgid "Type '%s help' for usage.\n"
 msgstr "使用“%s help”得到用法。\n"
@@ -5845,72 +5851,72 @@
 msgid "Failed to add directory '%s': object of the same name as the administrative directory"
 msgstr "无法增加目录“%s”: 对象与管理目录同名"
 
-#: ../libsvn_wc/update_editor.c:1350
+#: ../libsvn_wc/update_editor.c:1369
 #, c-format
 msgid "Failed to add directory '%s': copyfrom arguments not yet supported"
 msgstr "无法增加目录“%s”:尚不支持 copyfrom 参数"
 
-#: ../libsvn_wc/update_editor.c:1644
+#: ../libsvn_wc/update_editor.c:1663
 msgid "Couldn't do property merge"
 msgstr "无法进行属性合并"
 
-#: ../libsvn_wc/update_editor.c:1717
+#: ../libsvn_wc/update_editor.c:1736
 #, c-format
 msgid "Failed to mark '%s' absent: item of the same name is already scheduled for addition"
 msgstr "无法将“%s”标记为不存在: 同名项目已加入增加调度"
 
-#: ../libsvn_wc/update_editor.c:1790
+#: ../libsvn_wc/update_editor.c:1809
 msgid "Bad copyfrom arguments received"
 msgstr "接收到非法的 copyfrom 参数"
 
-#: ../libsvn_wc/update_editor.c:1829
+#: ../libsvn_wc/update_editor.c:1848
 #, c-format
 msgid "Failed to add file '%s': a file of the same name is already scheduled for addition with history"
 msgstr "无法新增文件“%s”: 同名文件已加入新增调度"
 
-#: ../libsvn_wc/update_editor.c:1841
+#: ../libsvn_wc/update_editor.c:1860
 #, c-format
 msgid "Failed to add file '%s': a non-file object of the same name already exists"
 msgstr "无法新增文件“%s”: 同名非文件对象已存在"
 
-#: ../libsvn_wc/update_editor.c:1856
+#: ../libsvn_wc/update_editor.c:1875
 #, c-format
 msgid "Failed to add file '%s': object of the same name already exists"
 msgstr "无法增加文件“%s”: 同名对象已存在"
 
-#: ../libsvn_wc/update_editor.c:1914
+#: ../libsvn_wc/update_editor.c:1933
 #, c-format
 msgid "File '%s' in directory '%s' is not a versioned resource"
 msgstr "文件 “%s” 不是版本控制资源,在目录 “%s” 中"
 
-#: ../libsvn_wc/update_editor.c:2068
+#: ../libsvn_wc/update_editor.c:2087
 #, c-format
 msgid "Checksum mismatch for '%s'; recorded: '%s', actual: '%s'"
 msgstr "“%s” 的校验和不匹配;记录: “%s”,实际: “%s”"
 
-#: ../libsvn_wc/update_editor.c:2804
+#: ../libsvn_wc/update_editor.c:2825
 msgid "Destination directory of add-with-history is missing a URL"
 msgstr "add-with-history 的目标目录缺少 URL"
 
-#: ../libsvn_wc/update_editor.c:2819
+#: ../libsvn_wc/update_editor.c:2840
 msgid "Destination URLs are broken"
 msgstr "目的 URL 无效"
 
-#: ../libsvn_wc/update_editor.c:3076
+#: ../libsvn_wc/update_editor.c:3097
 msgid "No fetch_func supplied to update_editor"
 msgstr "没有为 update_editor 提供 fetch_func"
 
-#: ../libsvn_wc/update_editor.c:3316
+#: ../libsvn_wc/update_editor.c:3338
 #, c-format
 msgid "Shallowing of working copy depths is not yet supported"
 msgstr "不支持收缩工作副本的深度"
 
-#: ../libsvn_wc/update_editor.c:3717
+#: ../libsvn_wc/update_editor.c:3739
 #, c-format
 msgid "'%s' has no ancestry information"
 msgstr "“%s”没有演进历程信息"
 
-#: ../libsvn_wc/update_editor.c:3871
+#: ../libsvn_wc/update_editor.c:3893
 #, c-format
 msgid "Copyfrom-url '%s' has different repository root than '%s'"
 msgstr "Copyfrom-url“%s”与“%s”的版本库根目录不相同"
@@ -5948,15 +5954,15 @@
 msgid "'%s' does not appear to be a URL"
 msgstr "“%s”不像是URL"
 
-#: ../svn/conflict-callbacks.c:140
+#: ../svn/conflict-callbacks.c:142
 msgid "No editor found."
 msgstr "没有发现编辑器。"
 
-#: ../svn/conflict-callbacks.c:147
+#: ../svn/conflict-callbacks.c:149
 msgid "Error running editor."
 msgstr "执行编辑器错误。"
 
-#: ../svn/conflict-callbacks.c:157
+#: ../svn/conflict-callbacks.c:159
 #, c-format
 msgid ""
 "Invalid option; there's no merged version to edit.\n"
@@ -5965,71 +5971,71 @@
 "非法选项;没有已合并的版本来编辑。\n"
 "\n"
 
-#: ../svn/conflict-callbacks.c:179
+#: ../svn/conflict-callbacks.c:181
 msgid "No merge tool found.\n"
 msgstr "没有发现合并工具。\n"
 
-#: ../svn/conflict-callbacks.c:186
+#: ../svn/conflict-callbacks.c:188
 msgid "Error running merge tool."
 msgstr "执行合并工具错误。"
 
-#: ../svn/conflict-callbacks.c:252
+#: ../svn/conflict-callbacks.c:258
 msgid "No editor found, leaving all conflicts."
 msgstr "没有发现编辑器,不处理冲突。"
 
-#: ../svn/conflict-callbacks.c:261
+#: ../svn/conflict-callbacks.c:267
 msgid "Error running editor, leaving all conflicts."
 msgstr "执行编辑器错误,不处理冲突。"
 
-#: ../svn/conflict-callbacks.c:293
+#: ../svn/conflict-callbacks.c:299
 msgid "No merge tool found, leaving all conflicts."
 msgstr "没有发现合并工具,不处理冲突。"
 
-#: ../svn/conflict-callbacks.c:302
+#: ../svn/conflict-callbacks.c:308
 msgid "Error running merge tool leaving all conflicts."
 msgstr "执行合并工具错误,不处理冲突。"
 
-#: ../svn/conflict-callbacks.c:338
+#: ../svn/conflict-callbacks.c:344
 #, c-format
 msgid "Conflict discovered in '%s'.\n"
 msgstr "在 “%s” 中发现冲突。\n"
 
-#: ../svn/conflict-callbacks.c:343
+#: ../svn/conflict-callbacks.c:349
 #, c-format
 msgid "Conflict for property '%s' discovered on '%s'.\n"
 msgstr "属性 “%s” 冲突,位于 “%s”。\n"
 
-#: ../svn/conflict-callbacks.c:360
+#: ../svn/conflict-callbacks.c:366
 #, c-format
 msgid "They want to delete the property, you want to change the value to '%s'.\n"
 msgstr "他人想删除此属性,你想改变其取值为 “%s”。\n"
 
-#: ../svn/conflict-callbacks.c:369
+#: ../svn/conflict-callbacks.c:375
 #, c-format
 msgid "They want to change the property value to '%s', you want to delete the property.\n"
 msgstr "他人想改变其取值为 “%s”,你想删除此属性。\n"
 
-#: ../svn/conflict-callbacks.c:391
+#: ../svn/conflict-callbacks.c:397
 msgid "Select: (p) postpone"
 msgstr "选择: (p) 推迟"
 
-#: ../svn/conflict-callbacks.c:394
+#: ../svn/conflict-callbacks.c:400
 msgid ", (df) diff-full, (e) edit"
 msgstr ",(df) 显示全部差异,(e) 编辑"
 
-#: ../svn/conflict-callbacks.c:398
+#: ../svn/conflict-callbacks.c:404
 msgid ", (mf) mine-full, (tf) theirs-full"
 msgstr ",(mf) 全用我的,(tf) 全用他人的"
 
-#: ../svn/conflict-callbacks.c:401
+#: ../svn/conflict-callbacks.c:407
 msgid ", (r) resolved"
 msgstr ",(r) 已解决"
 
-#: ../svn/conflict-callbacks.c:405
-msgid "(h) help for more options: "
-msgstr "(h) 使用帮助以得到更多选项: "
+#: ../svn/conflict-callbacks.c:411
+msgid "(s) show all options: "
+msgstr "(s) 显示全部选项: "
 
-#: ../svn/conflict-callbacks.c:413
+#: ../svn/conflict-callbacks.c:419
 #, c-format
 msgid ""
 "  (p)  postpone    - mark the conflict to be resolved later\n"
@@ -6039,7 +6045,7 @@
 "  (mf) mine-full   - accept my version of entire file (ignore their changes)\n"
 "  (tf) theirs-full - accept their version of entire file (lose my changes)\n"
 "  (l)  launch      - launch external tool to resolve conflict\n"
-"  (h)  help        - show this list\n"
+"  (s)  show all    - show this list\n"
 "\n"
 msgstr ""
 "  (p)  推迟           - 标记以后解决冲突\n"
@@ -6049,10 +6055,10 @@
 "  (mf) 全用我的       - 使用我的文件(忽略他人的修改)\n"
 "  (tf) 全用他人的     - 使用他人的文件(放弃我的修改)\n"
 "  (l)  执行           - 使用第三方工具解决冲突\n"
-"  (h)  帮助           - 显示这个列表\n"
+"  (s)  显示全部选项   - 显示这个列表\n"
 "\n"
 
-#: ../svn/conflict-callbacks.c:436 ../svn/conflict-callbacks.c:577
+#: ../svn/conflict-callbacks.c:442 ../svn/conflict-callbacks.c:583
 #, c-format
 msgid ""
 "Sorry, '(mc) mine for conflicts' is not yet implemented; see\n"
@@ -6063,7 +6069,7 @@
 "http://subversion.tigris.org/issues/show_bug.cgi?id=3049\n"
 "\n"
 
-#: ../svn/conflict-callbacks.c:445 ../svn/conflict-callbacks.c:586
+#: ../svn/conflict-callbacks.c:451 ../svn/conflict-callbacks.c:592
 #, c-format
 msgid ""
 "Sorry, '(tc) theirs for conflicts' is not yet implemented; see\n"
@@ -6074,7 +6080,7 @@
 "http://subversion.tigris.org/issues/show_bug.cgi?id=3049\n"
 "\n"
 
-#: ../svn/conflict-callbacks.c:464
+#: ../svn/conflict-callbacks.c:470
 #, c-format
 msgid ""
 "Sorry, '(dc) diff of conflicts' is not yet implemented; see\n"
@@ -6085,7 +6091,7 @@
 "http://subversion.tigris.org/issues/show_bug.cgi?id=3048\n"
 "\n"
 
-#: ../svn/conflict-callbacks.c:474
+#: ../svn/conflict-callbacks.c:480
 #, c-format
 msgid ""
 "Invalid option; there's no merged version to diff.\n"
@@ -6094,7 +6100,7 @@
 "非法选项;没有已合并的版本来比较差异。\n"
 "\n"
 
-#: ../svn/conflict-callbacks.c:492 ../svn/conflict-callbacks.c:506
+#: ../svn/conflict-callbacks.c:498 ../svn/conflict-callbacks.c:512
 #, c-format
 msgid ""
 "Invalid option.\n"
@@ -6103,7 +6109,7 @@
 "无效选项。\n"
 "\n"
 
-#: ../svn/conflict-callbacks.c:536
+#: ../svn/conflict-callbacks.c:542
 #, c-format
 msgid ""
 "Conflict discovered when trying to add '%s'.\n"
@@ -6112,23 +6118,23 @@
 "增加 “%s” 时出现冲突。\n"
 "同名对象已存在。\n"
 
-#: ../svn/conflict-callbacks.c:539
+#: ../svn/conflict-callbacks.c:545
 msgid "Select: (p) postpone, (mf) mine-full, (tf) theirs-full, (h) help:"
 msgstr "选择:(p) 推迟,(mf) 全用我的,(tf) 全用他人的,(h) 帮助:"
 
-#: ../svn/conflict-callbacks.c:551
+#: ../svn/conflict-callbacks.c:557
 #, c-format
 msgid ""
 "  (p)  postpone    - resolve the conflict later\n"
 "  (mf) mine-full   - accept pre-existing item (ignore upstream addition)\n"
 "  (tf) theirs-full - accept incoming item (overwrite pre-existing item)\n"
-"  (h)  help        - show this list\n"
+"  (h)  help        - show this help\n"
 "\n"
 msgstr ""
-"  (p)  推迟           - 以后解决冲突\n"
-"  (mf) 全用我的       - 使用先前的项目(忽略上游的修改)\n"
-"  (tf) 全用他人的     - 使用引入的项目(覆盖先前的项目)\n"
-"  (h)  帮助           - 显示这个列表\n"
+"  (p)  推迟            - 以后解决冲突\n"
+"  (mf) 全用我的        - 使用先前的项目(忽略上游的修改)\n"
+"  (tf) 全用他人的      - 使用引入的项目(覆盖先前的项目)\n"
+"  (h)  帮助            - 显示这个列表\n"
 "\n"
 
 #: ../svn/copy-cmd.c:126 ../svn/delete-cmd.c:65 ../svn/mkdir-cmd.c:66
@@ -6197,7 +6203,7 @@
 "Subversion 是版本控制工具。\n"
 "欲取得详细资料,请参阅 http://subversion.tigris.org/\n"
 
-#: ../svn/help-cmd.c:65 ../svnsync/main.c:1786
+#: ../svn/help-cmd.c:65 ../svnsync/main.c:1823
 msgid ""
 "The following repository access (RA) modules are available:\n"
 "\n"
@@ -6223,7 +6229,7 @@
 msgid "'%s' has invalid revision"
 msgstr "“%s”的版本无效"
 
-#: ../svn/info-cmd.c:239 ../svn/mergeinfo-cmd.c:170 ../svnadmin/main.c:1199
+#: ../svn/info-cmd.c:239 ../svnadmin/main.c:1199
 #, c-format
 msgid "Path: %s\n"
 msgstr "路径: %s\n"
@@ -6786,14 +6792,18 @@
 "                            ('"
 
 #: ../svn/main.c:274
-msgid "query a particular merge source URL"
-msgstr "查询精确的合并源 URL"
+msgid ""
+"specify which collection of revisions to display\n"
+"                             ('"
+msgstr ""
+"指定显示哪个版本集合\n"
+"                             ('"
 
-#: ../svn/main.c:276
+#: ../svn/main.c:279
 msgid "lump-merge all of source URL's unmerged changes"
 msgstr "批量合并所有源 URL 中未合并的修改"
 
-#: ../svn/main.c:323
+#: ../svn/main.c:326
 msgid ""
 "Put files and directories under version control, scheduling\n"
 "them for addition to repository.  They will be added in next commit.\n"
@@ -6802,11 +6812,11 @@
 "把文件和目录纳入版本控制,通过调度加到版本库。它们会在下一次提交时加入。\n"
 "用法: add 路径...\n"
 
-#: ../svn/main.c:328
+#: ../svn/main.c:331
 msgid "add intermediate parents"
 msgstr "增加中间父目录"
 
-#: ../svn/main.c:331
+#: ../svn/main.c:334
 msgid ""
 "Output the content of specified files or\n"
 "URLs with revision and author information in-line.\n"
@@ -6822,7 +6832,7 @@
 "      如果指定了版本,将从指定的版本开始查找。\n"
 "  \n"
 
-#: ../svn/main.c:340
+#: ../svn/main.c:343
 msgid ""
 "Output the content of specified files or URLs.\n"
 "usage: cat TARGET[@REV]...\n"
@@ -6836,7 +6846,7 @@
 "      如果指定了版本,将从指定的版本开始查找。\n"
 "  \n"
 
-#: ../svn/main.c:348
+#: ../svn/main.c:351
 msgid ""
 "Associate (or dissociate) changelist CLNAME with the named files.\n"
 "usage: 1. changelist CLNAME TARGET...\n"
@@ -6846,7 +6856,7 @@
 "使用: 1. changelist CLNAME TARGET...\n"
 "      2. changelist --remove TARGET...\n"
 
-#: ../svn/main.c:354
+#: ../svn/main.c:357
 msgid ""
 "Check out a working copy from a repository.\n"
 "usage: checkout URL[@REV]... [PATH]\n"
@@ -6884,7 +6894,7 @@
 "  径,那么也会受版本控制。对于障碍路径中的文件,如果与版本库内的不同,将视为工\n"
 "  作副本发生本地修改。版本库中的所有属性都应用于障碍路径。\n"
 
-#: ../svn/main.c:378
+#: ../svn/main.c:381
 msgid ""
 "Recursively clean up the working copy, removing locks, resuming\n"
 "unfinished operations, etc.\n"
@@ -6894,7 +6904,7 @@
 "\n"
 "用法: cleanup [路径...]\n"
 
-#: ../svn/main.c:385
+#: ../svn/main.c:388
 msgid ""
 "Send changes from your working copy to the repository.\n"
 "usage: commit [PATH...]\n"
@@ -6911,7 +6921,7 @@
 "     选项,编辑器会被启动。如果有目标是锁定的或者包含锁定条目,则在成功\n"
 "     提交后会被解锁。\n"
 
-#: ../svn/main.c:393
+#: ../svn/main.c:396
 msgid ""
 "Send changes from your working copy to the repository.\n"
 "usage: commit [PATH...]\n"
@@ -6929,7 +6939,7 @@
 "     因此必须指定 --message 或 --file 选项。如果有目标是锁定的\n"
 "     或者包含锁定条目,则在成功提交后会被解锁。\n"
 
-#: ../svn/main.c:406
+#: ../svn/main.c:409
 msgid ""
 "Duplicate something in working copy or repository, remembering\n"
 "history.\n"
@@ -6967,7 +6977,7 @@
 "操作不会与版本库通信。同样地,在缺省情况下,不能从复制源到目的地传播合\n"
 "并跟踪信息。\n"
 
-#: ../svn/main.c:428
+#: ../svn/main.c:431
 msgid ""
 "Remove files and directories from version control.\n"
 "usage: 1. delete PATH...\n"
@@ -6994,7 +7004,7 @@
 "\n"
 "  2、每个 UR L指定的项目会通过立即提交从版本库中删除。\n"
 
-#: ../svn/main.c:444
+#: ../svn/main.c:447
 msgid ""
 "Display the differences between two revisions or paths.\n"
 "usage: 1. diff [-c M | -r N[:M]] [TARGET[@REV]...]\n"
@@ -7039,7 +7049,7 @@
 "\n"
 "     使用不加参数的 “svn diff” 显示工作副本中的本地修改。\n"
 
-#: ../svn/main.c:472
+#: ../svn/main.c:475
 msgid ""
 "Create an unversioned copy of a tree.\n"
 "usage: 1. export [-r REV] URL[@PEGREV] [PATH]\n"
@@ -7077,7 +7087,7 @@
 "     如果指定了 PEGREV ,将从指定的版本本开始查找。\n"
 "\n"
 
-#: ../svn/main.c:493
+#: ../svn/main.c:496
 msgid ""
 "Describe the usage of this program or its subcommands.\n"
 "usage: help [SUBCOMMAND...]\n"
@@ -7085,7 +7095,7 @@
 "描述本程序或其子命令的用法。\n"
 "用法: help [子命令...]\n"
 
-#: ../svn/main.c:499
+#: ../svn/main.c:502
 msgid ""
 "Commit an unversioned file or tree into the repository.\n"
 "usage: import [PATH] URL\n"
@@ -7107,7 +7117,7 @@
 "  如果 PATH 是目录,则其下的内容直接加入到 URL 指定的位置内。\n"
 "  如果使用了 “--force”,那么不能纳入版本控制的项目,例如设备文件,管道等,会被忽略。\n"
 
-#: ../svn/main.c:513
+#: ../svn/main.c:516
 msgid ""
 "Display information about a local or remote item.\n"
 "usage: info [TARGET[@REV]...]\n"
@@ -7123,7 +7133,7 @@
 "  TARGET 可以是工作副本中的路径或版本库中的URL。REV指定从哪个\n"
 "  版本开始查找目标。\n"
 
-#: ../svn/main.c:523
+#: ../svn/main.c:526
 msgid ""
 "List directory entries in the repository.\n"
 "usage: list [TARGET[@REV]...]\n"
@@ -7160,7 +7170,7 @@
 "    大小 (以字节为单位)\n"
 "    最后一次提交的日期与时间\n"
 
-#: ../svn/main.c:544
+#: ../svn/main.c:547
 msgid ""
 "Lock working copy paths or URLs in the repository, so that\n"
 "no other user can commit changes to them.\n"
@@ -7173,19 +7183,19 @@
 "\n"
 "     使用 --force 选项可以从其他用户或工作副本窃取到锁。\n"
 
-#: ../svn/main.c:550
+#: ../svn/main.c:553
 msgid "read lock comment from file ARG"
 msgstr "从文件 ARG 读取加锁注释"
 
-#: ../svn/main.c:551
+#: ../svn/main.c:554
 msgid "specify lock comment ARG"
 msgstr "指定加锁注释ARG"
 
-#: ../svn/main.c:552
+#: ../svn/main.c:555
 msgid "force validity of lock comment source"
 msgstr "强制校验锁定注释源"
 
-#: ../svn/main.c:555
+#: ../svn/main.c:558
 msgid ""
 "Show the log messages for a set of revision(s) and/or file(s).\n"
 "usage: 1. log [PATH]\n"
@@ -7196,7 +7206,9 @@
 "\n"
 "  2. Print the log messages for the PATHs (default: '.') under URL.\n"
 "     If specified, REV determines in which revision the URL is first\n"
-"     looked up.  The default revision range is HEAD:1.\n"
+"     looked up, and the default revision range is REV:1; otherwise,\n"
+"     the URL is looked up in HEAD, and the default revision range is\n"
+"     HEAD:1.\n"
 "\n"
 "  With -v, also print all affected paths with each log message.\n"
 "  With -q, don't print the log message body itself (note that this is\n"
@@ -7217,17 +7229,17 @@
 "用法: 1、log [PATH]\n"
 "      2、log URL[@REV] [PATH...]\n"
 "\n"
-"  1、显示本地 PATH (默认: “.”) 的日志信息。默认的版本范围为\n"
-"     BASE:1。\n"
+"  1、显示本地 PATH (默认: “.”) 的日志信息。默认的版本范围是 BASE:1。\n"
 "\n"
-"  2、显示 URL 下的 PATH (默认: “.”) 的日志信息。REV指定从哪个版本开始查找\n"
-"     URL。默认的版本范围为 HEAD:1。\n"
+"  2、显示 URL 中 PATH (默认: “.”) 的日志信息。如果指定了 REV,就从 REV\n"
+"     开始查找 URL,版本范围是 REV:1。否则就从 HEAD 开始查找 URL,版本范围\n"
+"     是 HEAD:1。\n"
 "\n"
 "  使用 -v 时,在日志信息中显示受影响的路径名。\n"
-"  使用 -q 时,不显示日志信息主体 (请注意,这可和 -v 并存)。\n"
+"  使用 -q 时,不显示日志信息主体 (请注意,它可与 -v 并存)。\n"
 "\n"
-"  每一条日志信息只会显示一次,即使指定某一个修改中涉及到的多个文件。默认日志\n"
-"  信息会追溯复制历史;使用 --stop-on-copy 可以关闭这种行为,这便于找出分支点。\n"
+"  每条日志信息只会显示一次,即使指定了此版本涉及到的多个路径。默认日志信息\n"
+"  会追溯复制历史;使用 --stop-on-copy 可以关闭这种行为,用来找出分支点。\n"
 "\n"
 "  范例: \n"
 "    svn log\n"
@@ -7235,20 +7247,20 @@
 "    svn log http://www.example.com/repo/project/foo.c\n"
 "    svn log http://www.example.com/repo/project foo.c bar.c\n"
 
-#: ../svn/main.c:582
+#: ../svn/main.c:587
 msgid "retrieve revision property ARG"
 msgstr "获取版本属性 ARG"
 
-#: ../svn/main.c:583
+#: ../svn/main.c:588
 msgid "the change made by ARG"
 msgstr "ARG 引起的改变"
 
-#: ../svn/main.c:586
+#: ../svn/main.c:591
 msgid ""
 "Apply the differences between two sources to a working copy path.\n"
 "usage: 1. merge sourceURL1[@N] sourceURL2[@M] [WCPATH]\n"
 "       2. merge sourceWCPATH1@N sourceWCPATH2@M [WCPATH]\n"
-"       3. merge [[-c M[,N]]... | [-r N:M]...] [SOURCE[@REV] [WCPATH]]\n"
+"       3. merge [-c M[,N...] | -r N:M ...] SOURCE[@REV] [WCPATH]\n"
 "\n"
 "  1. In the first form, the source URLs are specified at revisions\n"
 "     N and M.  These are the two sources to be compared.  The revisions\n"
@@ -7259,30 +7271,31 @@
 "     be specified.\n"
 "\n"
 "  3. In the third form, SOURCE can be either a URL or a working copy\n"
-"     path (in which case its corresponding URL is used).  If not\n"
-"     specified, SOURCE will be the same as WCPATH.  SOURCE in revision\n"
-"     REV is compared as it existed between revisions N and M for each\n"
-"     revision range provided.  If REV is not specified, HEAD is\n"
-"     assumed.  '-c M' is equivalent to '-r <M-1>:M', and '-c -M' does\n"
-"     the reverse: '-r M:<M-1>'.  If no revision ranges are specified,\n"
-"     the default range of 1:HEAD is used.  Multiple '-c' and/or '-r'\n"
-"     instances may be specified, and mixing of forward and reverse\n"
-"     ranges is allowed.\n"
+"     path (in which case its corresponding URL is used).  SOURCE (in\n"
+"     revision REV) is compared as it existed between revisions N and M\n"
+"     for each revision range provided.  If REV is not specified, HEAD\n"
+"     is assumed.  '-c M' is equivalent to '-r <M-1>:M', and '-c -M'\n"
+"     does the reverse: '-r M:<M-1>'.  If no revision ranges are\n"
+"     specified, the default range of 0:REV is used.  Multiple '-c'\n"
+"     and/or '-r' instances may be specified, and mixing of forward\n"
+"     and reverse ranges is allowed.\n"
 "\n"
 "  WCPATH is the working copy path that will receive the changes.\n"
 "  If WCPATH is omitted, a default value of '.' is assumed, unless\n"
 "  the sources have identical basenames that match a file within '.':\n"
 "  in which case, the differences will be applied to that file.\n"
 "\n"
-"  NOTE:  Subversion will only internally track metadata about the\n"
-"  merge operation if the two sources are ancestrally related -- if the\n"
+"  NOTE:  Subversion will only record metadata to track the merge\n"
+"  if the two sources are on the same line of history -- if the\n"
 "  first source is an ancestor of the second, or vice-versa.  This is\n"
 "  guaranteed to be the case when using the third form listed above.\n"
+"  The --ignore-ancestry option overrides this, forcing Subversion to\n"
+"  regard the sources as unrelated and not to track the merge.\n"
 msgstr ""
 "将两个源差异应用至工作副本路径。\n"
-"用法: 1. merge sourceURL1[@N] sourceURL2[@M] [WCPATH]\n"
-"      2. merge sourceWCPATH1@N sourceWCPATH2@M [WCPATH]\n"
-"      3. merge [[-c M[,N]]... | [-r N:M]...] [SOURCE[@REV] [WCPATH]]\n"
+"用法:  1. merge sourceURL1[@N] sourceURL2[@M] [WCPATH]\n"
+"       2. merge sourceWCPATH1@N sourceWCPATH2@M [WCPATH]\n"
+"       3. merge [-c M[,N...] | -r N:M ...] SOURCE[@REV] [WCPATH]\n"
 "\n"
 "  1、第一种形式中,源 URL 的版本 N 与 M 作为比较的来源。如果没有指定版本,默认\n"
 "     为 HEAD。\n"
@@ -7294,7 +7307,7 @@
 "     的 URL)。如果没有指定,SOURCE 就和 WCPATH 相同。比较版本为 REV 的 SOURCE,\n"
 "     就像它在版本 N 到 M 存在一样。如果没有给出 REV,默认为 HEAD。选项 “-c M”\n"
 "     等价于 “-r <M-1>:M”,“-c -M” 与之相反,等价于 “-r M:<M-1>”。如果没\n"
-"     有指定版本范围,默认为 1:HEAD。可以指定多个 “-c” 或 “-r”,并且可以混\n"
+"     有指定版本范围,默认为 0:REV。可以指定多个 “-c” 或 “-r”,并且可以混\n"
 "     合使用向前范围或向后范围。\n"
 "\n"
 "  WCPATH 是接收修改的工作副本路径。如果省略了 WCPATH,默认为 “.”,除非来源中\n"
@@ -7302,17 +7315,28 @@
 "\n"
 "  注意:  Subversion 只有当两个合并源有继承关系的时候才会内部跟踪合并操作的源数\n"
 "  据 -- 即如果第一个合并源是第二个的祖先,或者相反。在上述的第三种形式中,已经\n"
-"  保证了满足条件。\n"
+"  保证了满足条件。选项 --ignore-ancestry 忽略继承关系,强制 Subversion 认为合并\n"
+"  源之间没有关系,不跟踪本次合并。\n"
 
-#: ../svn/main.c:623
+#: ../svn/main.c:629
 msgid ""
 "Query merge-related information.\n"
-"usage: mergeinfo [TARGET[@REV]...]\n"
+"usage: mergeinfo SOURCE-URL[@REV] [TARGET[@REV]]\n"
+"\n"
+"  Query information related to merges (or potential merges) between\n"
+"  SOURCE-URL and TARGET.  If the --show-revs option is not provided,\n"
+"  display revisions which have been merged from SOURCE-URL to TARGET.\n"
+"  Otherwise, display the type of information specified by the\n"
+"  --show-revs option.\n"
 msgstr ""
-"查询合并相关的信息。\n"
-"用法: mergeinfo [TARGET[@REV]...]\n"
+"查询合并相关信息。\n"
+"用法: mergeinfo SOURCE-URL[@REV] [TARGET[@REV]]\n"
+"\n"
+"  查询 SOURCE-URL 与 TARGET 之间的合并(或潜在合并)信息。如果没有提供选项\n"
+"  --show-revs,那么就显示已经从 SOURCE-URL 合并到 TARGET 的版本。否则就显\n"
+"  示选项 --show-revs 指定的信息类型。\n"
 
-#: ../svn/main.c:628
+#: ../svn/main.c:640
 msgid ""
 "Create a new directory under version control.\n"
 "usage: 1. mkdir PATH...\n"
@@ -7343,7 +7367,7 @@
 "  在这两个情况下,所有的中间目录都必须事先存在,\n"
 "  除非使用选项 --parents。\n"
 
-#: ../svn/main.c:645
+#: ../svn/main.c:657
 msgid ""
 "Move and/or rename something in working copy or repository.\n"
 "usage: move SRC... DST\n"
@@ -7372,7 +7396,7 @@
 "    URL -> URL :  完全是服务器端更名。\n"
 "  所有 SRC 必须是同一类型。\n"
 
-#: ../svn/main.c:661
+#: ../svn/main.c:673
 msgid ""
 "Remove a property from files, dirs, or revisions.\n"
 "usage: 1. propdel PROPNAME [PATH...]\n"
@@ -7389,7 +7413,7 @@
 "  1、删除工作副本中纳入版本管理的文件或目录的属性。\n"
 "  2、删除版本库中版本的属性。TARGET只用来判断访问哪个版本库。\n"
 
-#: ../svn/main.c:672
+#: ../svn/main.c:684
 msgid ""
 "Edit a property with an external editor.\n"
 "usage: 1. propedit PROPNAME TARGET...\n"
@@ -7411,7 +7435,7 @@
 "\n"
 "参见 “svn help propset” 获得更多设置属性的信息。\n"
 
-#: ../svn/main.c:685
+#: ../svn/main.c:697
 msgid ""
 "Print the value of a property on files, dirs, or revisions.\n"
 "usage: 1. propget PROPNAME [TARGET[@REV]...]\n"
@@ -7441,7 +7465,7 @@
 "  使用 --strict 选项可以关闭这些美化行为 (它很有用,例如将二进制属\n"
 "  性内容重定向到一个文件)。\n"
 
-#: ../svn/main.c:703
+#: ../svn/main.c:715
 msgid ""
 "List all properties on files, dirs, or revisions.\n"
 "usage: 1. proplist [TARGET[@REV]...]\n"
@@ -7459,7 +7483,7 @@
 "      1、显示目标的属性。REV指定从哪个版本开始查找目标。\n"
 "      2、列出版本库中版本的属性。TARGET只用来判断访问哪个版本库。\n"
 
-#: ../svn/main.c:714
+#: ../svn/main.c:726
 msgid ""
 "Set the value of a property on files, dirs, or revisions.\n"
 "usage: 1. propset PROPNAME PROPVAL PATH...\n"
@@ -7473,7 +7497,7 @@
 "\n"
 "  Note: svn recognizes the following special versioned properties\n"
 "  but will store any arbitrary properties set:\n"
-"    svn:ignore     - A newline separated list of file patterns to ignore.\n"
+"    svn:ignore     - A newline separated list of file glob patterns to ignore.\n"
 "    svn:keywords   - Keywords to be expanded.  Valid keywords are:\n"
 "      URL, HeadURL             - The URL for the head version of the object.\n"
 "      Author, LastChangedBy    - The last person to modify the file.\n"
@@ -7521,14 +7545,14 @@
 "  only on the file children of the directory.\n"
 msgstr ""
 "设定目录、文件或版本的属性。\n"
-"用法: 1、propset PROPNAME PROPVAL PATH...\n"
-"      2、propset PROPNAME --revprop -r REV PROPVAL [TARGET]\n"
+"用法: 1. propset PROPNAME PROPVAL PATH...\n"
+"       2. propset PROPNAME --revprop -r REV PROPVAL [TARGET]\n"
 "\n"
 "  1、在工作副本中创建或修改一个受版本控制的属性。\n"
-"  2、在版本库的 REV 版本创建或者修改一个未版本控制的属性。\n"
+"  2、在版本库的 REV 版本创建或者修改一个非版本控制的属性。\n"
 "     TARGET 只用来判断访问哪一个版本库。\n"
 "\n"
-"  可以使用 --file 选项来代替 PROPVAL 赋值。\n"
+"  可以使用选项 --file 来代替 PROPVAL 赋值。\n"
 "\n"
 "  注意: svn 除了能存储任意属性外,还识别以下专用的版本控制属性: \n"
 "    svn:ignore     - 以换行符隔开的文件忽略模式列表。\n"
@@ -7562,42 +7586,56 @@
 "            /    相对于服务器根\n"
 "        相对路径“relative_path relative_path”这种不明确的格式来自\n"
 "        “relative_url relative_path”和 peg 版本支持。\n"
-"    svn:needs-lock - 此属性表明文件在修改前应被加锁,\n"
-"        如果没有被加锁,则此文件在工作副本中应被设为只读。使用\n"
+"    svn:needs-lock - 此属性表明文件在修改前应该加锁。\n"
+"        如果没有加锁,则此文件在工作副本中应被设为只读。使用\n"
 "        “svn propdel svn:needs-lock PATH...” 清除。\n"
 "\n"
 "    svn:keywords, svn:executable, svn:eol-style, svn:mime-type 以及\n"
 "    svn:needs-lock 属性不能设置在目录上。使用非递归选项(-N)在目录上\n"
 "    设置这些属性时会失败,递归操作时只会作用于指定目录中的文件子孙上。\n"
 
-#: ../svn/main.c:774
+#: ../svn/main.c:786
 msgid "read property value from file ARG"
 msgstr "从文件 ARG 读取属性值"
 
-#: ../svn/main.c:777
+#: ../svn/main.c:789
+msgid ""
+"Resolve conflicts on working copy files or directories.\n"
+"usage: resolve [PATH...]\n"
+"\n"
+"  Note:  the --accept option is currently required.\n"
+msgstr ""
+"解决工作副本中目录或文件的冲突。\n"
+"用法: resolve [PATH...]\n"
+"\n"
+"  注意:  当前需要选项 --accept 。\n"
+
+#: ../svn/main.c:794
+msgid ""
+"specify automatic conflict resolution source\n"
+"                            ('"
+msgstr ""
+"指定自动解决冲突源\n"
+"                            ('"
+
+#: ../svn/main.c:806
 msgid ""
 "Remove 'conflicted' state on working copy files or directories.\n"
 "usage: resolved PATH...\n"
 "\n"
 "  Note:  this subcommand does not semantically resolve conflicts or\n"
 "  remove conflict markers; it merely removes the conflict-related\n"
-"  artifact files and allows PATH to be committed again.\n"
+"  artifact files and allows PATH to be committed again.  It has been\n"
+"  deprecated in favor of running 'svn resolve --accept working'.\n"
 msgstr ""
 "删除工作副本中目录或文件的“冲突”状态。\n"
 "用法: resolved PATH...\n"
 "\n"
-"  注意: 本子命令不会依语法来解决冲突或是删除冲突标记;它只是删除冲突的\n"
-"        相关附加文件,让 PATH 可以被再次提交。\n"
+"  注意: 本子命令不会依语法来解决冲突或是删除冲突标记;它只是删除冲突相关的\n"
+"        附加文件,让 PATH 可以被再次提交。它已经过时,被\n"
+"        “svn resolve --accept working”取代。\n"
 
-#: ../svn/main.c:784
-msgid ""
-"specify automatic conflict resolution source\n"
-"                             '"
-msgstr ""
-"指定自动解决冲突源\n"
-"                             “"
-
-#: ../svn/main.c:795
+#: ../svn/main.c:816
 msgid ""
 "Restore pristine working copy file (undo most local edits).\n"
 "usage: revert PATH...\n"
@@ -7611,7 +7649,7 @@
 "  注意: 本子命令不会访问网络,它解除任何冲突的状态。\n"
 "  但是,它不恢复被删除的目录。\n"
 
-#: ../svn/main.c:803
+#: ../svn/main.c:824
 msgid ""
 "Print the status of working copy files and directories.\n"
 "usage: status [PATH...]\n"
@@ -7758,7 +7796,7 @@
 "                 965       687 joe          wc/zig.c\n"
 "    Status against revision:   981\n"
 
-#: ../svn/main.c:879
+#: ../svn/main.c:900
 msgid ""
 "Update the working copy to a different URL.\n"
 "usage: 1. switch URL[@PEGREV] [PATH]\n"
@@ -7811,7 +7849,7 @@
 "     变(比如方案或者主机名称变动),但是工作副本仍旧对应同一版本库的同一目录\n"
 "     时,使用这个命令更新工作副本与档案库的对应关系。\n"
 
-#: ../svn/main.c:913
+#: ../svn/main.c:934
 msgid ""
 "Unlock working copy paths or URLs.\n"
 "usage: unlock TARGET...\n"
@@ -7823,7 +7861,7 @@
 "\n"
 "    使用 --force 终止锁定。\n"
 
-#: ../svn/main.c:920
+#: ../svn/main.c:941
 msgid ""
 "Bring changes from the repository into the working copy.\n"
 "usage: update [PATH...]\n"
@@ -7892,73 +7930,73 @@
 "  使用“--set-depth”选项设置此操作目标的工作副本之新深度。目前工作副本的\n"
 "  深度只能增加(嵌入更深);你不能让目录收缩。\n"
 
-#: ../svn/main.c:1000 ../svnadmin/main.c:78 ../svnlook/main.c:329
+#: ../svn/main.c:1021 ../svnadmin/main.c:78 ../svnlook/main.c:329
 #: ../svnsync/main.c:184
 msgid "Caught signal"
 msgstr "捕捉到信号"
 
-#: ../svn/main.c:1122 ../svnlook/main.c:2083
+#: ../svn/main.c:1144 ../svnlook/main.c:2083
 msgid "Non-numeric limit argument given"
 msgstr "--limit取值不是数字"
 
-#: ../svn/main.c:1128 ../svnlook/main.c:2089
+#: ../svn/main.c:1150 ../svnlook/main.c:2089
 msgid "Argument to --limit must be positive"
 msgstr "--limit取值必须为正"
 
-#: ../svn/main.c:1150 ../svn/main.c:1383
+#: ../svn/main.c:1172 ../svn/main.c:1412
 msgid "Can't specify -c with --old"
 msgstr "不能同时指定 -c 和 --old"
 
-#: ../svn/main.c:1160
+#: ../svn/main.c:1189
 msgid "Non-numeric change argument given to -c"
 msgstr "-c 选项的取值不是数字"
 
-#: ../svn/main.c:1168
+#: ../svn/main.c:1197
 msgid "There is no change 0"
 msgstr "没有版本 0"
 
-#: ../svn/main.c:1204 ../svnadmin/main.c:1473
+#: ../svn/main.c:1233 ../svnadmin/main.c:1473
 #, c-format
 msgid "Syntax error in revision argument '%s'"
 msgstr "版本参数“%s”中有语法错误"
 
-#: ../svn/main.c:1277 ../svn/main.c:1296
+#: ../svn/main.c:1306 ../svn/main.c:1325
 #, c-format
 msgid "Error converting depth from locale to UTF8"
 msgstr "深度从本地编码转换到 UTF8 失败"
 
-#: ../svn/main.c:1285 ../svn/main.c:1304
+#: ../svn/main.c:1314 ../svn/main.c:1333
 #, c-format
 msgid "'%s' is not a valid depth; try 'empty', 'files', 'immediates', or 'infinity'"
 msgstr "“%s” 不是有效的深度;尝试 “empty”,“files”,“immediates”,或 “infinity”"
 
-#: ../svn/main.c:1411
+#: ../svn/main.c:1440
 #, c-format
 msgid "Syntax error in native-eol argument '%s'"
 msgstr "原生换行符号参数“%s”中有语法错误"
 
-#: ../svn/main.c:1457
+#: ../svn/main.c:1486
 #, c-format
-msgid "'%s' is not a valid accept value"
-msgstr "“%s” 不是有效值"
+msgid "'%s' is not a valid --accept value"
+msgstr "“%s” 是非法 --accept 取值"
 
-#: ../svn/main.c:1465
+#: ../svn/main.c:1495
 #, c-format
-msgid "'%s' is not a URL"
-msgstr "“%s”不是 URL"
+msgid "'%s' is not a valid --show-revs value"
+msgstr "“%s” 是非法 --show-revs 取值"
 
-#: ../svn/main.c:1527 ../svndumpfilter/main.c:1314 ../svnlook/main.c:2161
+#: ../svn/main.c:1557 ../svndumpfilter/main.c:1314 ../svnlook/main.c:2161
 #, c-format
 msgid "Subcommand argument required\n"
 msgstr "必须提供子命令参数\n"
 
-#: ../svn/main.c:1546 ../svnadmin/main.c:1605 ../svndumpfilter/main.c:1333
+#: ../svn/main.c:1576 ../svnadmin/main.c:1605 ../svndumpfilter/main.c:1333
 #: ../svnlook/main.c:2180
 #, c-format
 msgid "Unknown command: '%s'\n"
 msgstr "未知命令: “%s”\n"
 
-#: ../svn/main.c:1580
+#: ../svn/main.c:1610
 #, c-format
 msgid ""
 "Subcommand '%s' doesn't accept option '%s'\n"
@@ -7967,122 +8005,110 @@
 "子命令“%s”不接受选项“%s”\n"
 "输入“svn help %s”得到用法。\n"
 
-#: ../svn/main.c:1594
+#: ../svn/main.c:1624
 msgid "Multiple revision arguments encountered; can't specify -c twice, or both -c and -r"
 msgstr "遇到了多个版本参数;不能指定 -c 两次或者同时使用 -c 和 -r"
 
-#: ../svn/main.c:1608
+#: ../svn/main.c:1638
 msgid "-r and -c can't be used with --reintegrate"
 msgstr "-r 和 -c 不能与 --reintegrate 共存"
 
-#: ../svn/main.c:1617
+#: ../svn/main.c:1647
 msgid "--depth and --set-depth are mutually exclusive"
 msgstr "--depth 与 --set-depth 是互斥的"
 
-#: ../svn/main.c:1667
+#: ../svn/main.c:1697
 msgid "Log message file is a versioned file; use '--force-log' to override"
 msgstr "日志信息文件受版本控制;请使用“--force-log”强制执行"
 
-#: ../svn/main.c:1674
+#: ../svn/main.c:1704
 msgid "Lock comment file is a versioned file; use '--force-log' to override"
 msgstr "锁注释文件受版本控制;请使用“--force-log”强制执行"
 
-#: ../svn/main.c:1694
+#: ../svn/main.c:1724
 msgid "The log message is a pathname (was -F intended?); use '--force-log' to override"
 msgstr "日志信息是路径名称 (本来想用 -F 选项的吗?);请使用“--force-log”强制执行"
 
-#: ../svn/main.c:1701
+#: ../svn/main.c:1731
 msgid "The lock comment is a pathname (was -F intended?); use '--force-log' to override"
 msgstr "锁注释是路径名称 (本来想用-F 选项的吗?);请使用“--force-log”强制执行"
 
-#: ../svn/main.c:1712
+#: ../svn/main.c:1742
 msgid "--relocate and --depth are mutually exclusive"
 msgstr "--relocate 与 --depth 是互斥的"
 
-#: ../svn/main.c:1788
+#: ../svn/main.c:1818
 msgid "--auto-props and --no-auto-props are mutually exclusive"
 msgstr "--auto-props 与 --no-auto-props 是互斥的"
 
-#: ../svn/main.c:1802
+#: ../svn/main.c:1832
 msgid "--reintegrate cannot be used with --ignore-ancestry or --record-only"
 msgstr "--reintegrate 不能与 --ignore-ancestry 或 --record-only 共存"
 
-#: ../svn/main.c:1810
+#: ../svn/main.c:1840
 msgid "--reintegrate cannot be used with --ignore-ancestry"
 msgstr "--reintegrate 不能与 --ignore-ancestry 共存"
 
-#: ../svn/main.c:1818
+#: ../svn/main.c:1848
 msgid "--reintegrate cannot be used with --record-only"
 msgstr "--reintegrate 不能与 --record-only 共存"
 
-#: ../svn/main.c:1931 ../svn/main.c:1937
+#: ../svn/main.c:1961 ../svn/main.c:1967
 #, c-format
 msgid "--accept=%s incompatible with --non-interactive"
 msgstr "--accept=%s 与 --non-interactive 不兼容"
 
-#: ../svn/main.c:1964
+#: ../svn/main.c:1994
 msgid "Try 'svn help' for more info"
 msgstr "请使用 “svn help” 以得到更多信息"
 
-#: ../svn/main.c:1974
+#: ../svn/main.c:2004
 msgid "svn: run 'svn cleanup' to remove locks (type 'svn help cleanup' for details)\n"
 msgstr "svn: 运行“svn cleanup”删除锁定 (输入“svn help cleanup”得到用法)\n"
 
-#: ../svn/merge-cmd.c:102
+#: ../svn/merge-cmd.c:105
+msgid "Merge source required"
+msgstr "需要合并源"
+
+#: ../svn/merge-cmd.c:151
 msgid "Second revision required"
 msgstr "需要第二个版本"
 
-#: ../svn/merge-cmd.c:111 ../svn/merge-cmd.c:144
+#: ../svn/merge-cmd.c:160 ../svn/merge-cmd.c:193 ../svn/mergeinfo-cmd.c:74
 msgid "Too many arguments given"
 msgstr "参数过多"
 
-#: ../svn/merge-cmd.c:133
+#: ../svn/merge-cmd.c:182
 msgid "Cannot specify a revision range with two URLs"
 msgstr "不能对两个 URL 指定版本范围"
 
-#: ../svn/merge-cmd.c:160
+#: ../svn/merge-cmd.c:209
 msgid "A working copy merge source needs an explicit revision"
 msgstr "工作副本的合并来源需要指定版本"
 
-#: ../svn/merge-cmd.c:243
+#: ../svn/merge-cmd.c:292
+msgid "--depth cannot be used with --reintegrate"
+msgstr "--depth 不能与 --reintegrate 共存"
+
+#: ../svn/merge-cmd.c:297
 msgid "--force cannot be used with --reintegrate"
 msgstr "--force 不能与 --reintegrate 共存"
 
-#: ../svn/mergeinfo-cmd.c:77
-#, c-format
-msgid "  Source path: %s\n"
-msgstr "  源路径: %s\n"
+#: ../svn/mergeinfo-cmd.c:71
+msgid "Not enough arguments given"
+msgstr "没有提供足够的参数"
 
-#: ../svn/mergeinfo-cmd.c:79
+#: ../svn/mergeinfo-cmd.c:81 ../svnsync/main.c:700 ../svnsync/main.c:703
+#: ../svnsync/main.c:1642 ../svnsync/main.c:1792
 #, c-format
-msgid "    Merged ranges: "
-msgstr "    合并范围: "
-
-#. Now fetch the available merges for this source.
-#. ### FIXME: There's no reason why this API should fail to
-#. ### answer the question (when asked of a 1.5+ server),
-#. ### short of something being quite wrong with the
-#. ### question.  Certainly, that the merge source URL can't
-#. ### be found in HEAD shouldn't mean we can't get any
-#. ### decent information about it out of the system.  It
-#. ### may just mean the system has to work harder to
-#. ### provide that information.
-#.
-#: ../svn/mergeinfo-cmd.c:93
-#, c-format
-msgid "    Eligible ranges: "
-msgstr "    合格范围: "
-
-#: ../svn/mergeinfo-cmd.c:106
-#, c-format
-msgid "(source no longer available in HEAD)\n"
-msgstr "(source 已经不在 HEAD 中)\n"
+msgid "Path '%s' is not a URL"
+msgstr "路径“%s”不是URL"
 
 #: ../svn/mkdir-cmd.c:88
 msgid "Try 'svn add' or 'svn add --non-recursive' instead?"
 msgstr "尝试用 “svn add”或 “svn add --non-recursive”代替?"
 
-#: ../svn/mkdir-cmd.c:94
+#: ../svn/mkdir-cmd.c:95
 msgid "Try 'svn mkdir --parents' instead?"
 msgstr "尝试“svn mkdir --parents”?"
 
@@ -8234,7 +8260,7 @@
 msgid "Replacing      %s\n"
 msgstr "替换           %s\n"
 
-#: ../svn/notify.c:374 ../svnsync/main.c:906
+#: ../svn/notify.c:374 ../svnsync/main.c:909
 #, c-format
 msgid "Transmitting file data "
 msgstr "传输文件数据"
@@ -8259,27 +8285,27 @@
 msgid "Path '%s' is no longer a member of a changelist.\n"
 msgstr "路径“%s”不再是修改列表的成员。\n"
 
-#: ../svn/notify.c:427
+#: ../svn/notify.c:421
 #, c-format
 msgid "--- Merging differences between repository URLs into '%s':\n"
 msgstr "--- 合并版本库 URL 之间的差异到 “%s”:\n"
 
-#: ../svn/notify.c:432
+#: ../svn/notify.c:426
 #, c-format
 msgid "--- Merging r%ld into '%s':\n"
 msgstr "--- 正在合并 r%ld 到 “%s”:\n"
 
-#: ../svn/notify.c:436
+#: ../svn/notify.c:430
 #, c-format
 msgid "--- Reverse-merging r%ld into '%s':\n"
 msgstr "--- 正在反向合并 r%ld 到 “%s”:\n"
 
-#: ../svn/notify.c:440
+#: ../svn/notify.c:434
 #, c-format
 msgid "--- Merging r%ld through r%ld into '%s':\n"
 msgstr "--- 正在合并 r%ld,经由 r%ld,到 “%s”:\n"
 
-#: ../svn/notify.c:446
+#: ../svn/notify.c:440
 #, c-format
 msgid "--- Reverse-merging r%ld through r%ld into '%s':\n"
 msgstr "--- 正在反向合并 r%ld,经由 r%ld,到 “%s”:\n"
@@ -8398,7 +8424,11 @@
 msgid "property '%s' set on '%s'\n"
 msgstr "设置属性 “%s” 于 “%s”\n"
 
-#: ../svn/resolved-cmd.c:74
+#: ../svn/resolve-cmd.c:74
+msgid "missing --accept option"
+msgstr "缺少选项 --accept"
+
+#: ../svn/resolve-cmd.c:77
 msgid "invalid 'accept' ARG"
 msgstr "无效的 “accept” 参数"
 
@@ -10089,57 +10119,51 @@
 msgid "Destination repository is already synchronizing from '%s'"
 msgstr "目标版本库已经与“%s”同步"
 
-#: ../svnsync/main.c:697 ../svnsync/main.c:700 ../svnsync/main.c:1605
-#: ../svnsync/main.c:1755
-#, c-format
-msgid "Path '%s' is not a URL"
-msgstr "路径“%s”不是URL"
-
-#: ../svnsync/main.c:1208
+#: ../svnsync/main.c:1211
 #, c-format
 msgid "Committed revision %ld.\n"
 msgstr "已提交版本 %ld。\n"
 
-#: ../svnsync/main.c:1249
+#: ../svnsync/main.c:1252
 msgid "Destination repository has not been initialized"
 msgstr "目标版本库没有初始化"
 
-#: ../svnsync/main.c:1262
+#: ../svnsync/main.c:1265
 #, c-format
 msgid "UUID of source repository (%s) does not match expected UUID (%s)"
 msgstr "源版本库的UUID(%s)与期望的UUID(%s)不匹配"
 
-#: ../svnsync/main.c:1413
+#: ../svnsync/main.c:1439
 #, c-format
 msgid "Commit created rev %ld but should have created %ld"
 msgstr "提交创建版本 %ld,应该创建版本 %ld"
 
-#: ../svnsync/main.c:1515
+#: ../svnsync/main.c:1545
 #, c-format
 msgid "Revision being currently copied (%ld), last merged revision (%ld), and destination HEAD (%ld) are inconsistent; have you committed to the destination without using svnsync?"
 msgstr "当前复制版本(%ld), 最后合并版本(%ld), 和目标 HEAD (%ld) 不一致;你是否使用非svnsync方法提交到目标版本库?"
 
-#: ../svnsync/main.c:1552
+#: ../svnsync/main.c:1582
 #, c-format
 msgid "Destination HEAD (%ld) is not the last merged revision (%ld); have you committed to the destination without using svnsync?"
 msgstr "目标 HEAD (%ld)不是最后合并版本(%ld);你是否使用非 svnsync 方法提交到目标版本库?"
 
-#: ../svnsync/main.c:1648 ../svnsync/main.c:1653
+#: ../svnsync/main.c:1685 ../svnsync/main.c:1690
 #, c-format
 msgid "Cannot copy revprops for a revision (%ld) that has not been synchronized yet"
 msgstr "不能在尚未同步时复制版本(%ld)的 revprops"
 
-#: ../svnsync/main.c:1705
+#: ../svnsync/main.c:1742
 #, c-format
 msgid "'%s' is not a valid revision range"
 msgstr "“%s”不是有效的版本范围"
 
-#: ../svnsync/main.c:1719 ../svnsync/main.c:1739
+#: ../svnsync/main.c:1756 ../svnsync/main.c:1776
 #, c-format
 msgid "Invalid revision number (%ld)"
 msgstr "无效的版本号 (%ld)"
 
-#: ../svnsync/main.c:1779
+#: ../svnsync/main.c:1816
 msgid ""
 "general usage: svnsync SUBCOMMAND DEST_URL  [ARGS & OPTIONS ...]\n"
 "Type 'svnsync help <subcommand>' for help on a specific subcommand.\n"
@@ -10153,11 +10177,11 @@
 "\n"
 "可用的子命令: \n"
 
-#: ../svnsync/main.c:1941
+#: ../svnsync/main.c:1978
 msgid "Cannot use --username or --password with any of --source-username, --source-password, --sync-username, or --sync-password.\n"
 msgstr "不能将 --username 或 --password 与 --source-username, --source-password, --sync-username, 或 --sync-password 一起使用。\n"
 
-#: ../svnsync/main.c:2021
+#: ../svnsync/main.c:2058
 #, c-format
 msgid ""
 "Subcommand '%s' doesn't accept option '%s'\n"
@@ -10166,7 +10190,7 @@
 "子命令“%s”不接受选项“%s”\n"
 "使用“svnsync help %s”得到用法。\n"
 
-#: ../svnsync/main.c:2093
+#: ../svnsync/main.c:2130
 msgid "Try 'svnsync help' for more info"
 msgstr "请使用 “svnsync help” 以得到更多信息"
 
diff --git a/subversion/svn/main.c b/subversion/svn/main.c
index 495c77f..79eba4b 100644
--- a/subversion/svn/main.c
+++ b/subversion/svn/main.c
@@ -564,7 +564,9 @@
      "\n"
      "  2. Print the log messages for the PATHs (default: '.') under URL.\n"
      "     If specified, REV determines in which revision the URL is first\n"
-     "     looked up.  The default revision range is HEAD:1.\n"
+     "     looked up, and the default revision range is REV:1; otherwise,\n"
+     "     the URL is looked up in HEAD, and the default revision range is\n"
+     "     HEAD:1.\n"
      "\n"
      "  With -v, also print all affected paths with each log message.\n"
      "  With -q, don't print the log message body itself (note that this is\n"
@@ -605,7 +607,7 @@
      "     for each revision range provided.  If REV is not specified, HEAD\n"
      "     is assumed.  '-c M' is equivalent to '-r <M-1>:M', and '-c -M'\n"
      "     does the reverse: '-r M:<M-1>'.  If no revision ranges are\n"
-     "     specified, the default range of 0:HEAD is used.  Multiple '-c'\n"
+     "     specified, the default range of 0:REV is used.  Multiple '-c'\n"
      "     and/or '-r' instances may be specified, and mixing of forward\n"
      "     and reverse ranges is allowed.\n"
      "\n"
diff --git a/subversion/svn/merge-cmd.c b/subversion/svn/merge-cmd.c
index 6cc3057..31d464a 100644
--- a/subversion/svn/merge-cmd.c
+++ b/subversion/svn/merge-cmd.c
@@ -281,7 +281,7 @@
           ranges_to_merge = apr_array_make(pool, 1, sizeof(range));
           range->start.kind = svn_opt_revision_number;
           range->start.value.number = 1;
-          range->end.kind = svn_opt_revision_head;
+          range->end = peg_revision1;
           APR_ARRAY_PUSH(ranges_to_merge, svn_opt_revision_range_t *) = range;
         }
 
diff --git a/subversion/svn/notify.c b/subversion/svn/notify.c
index b7a54f0..bcbbd61 100644
--- a/subversion/svn/notify.c
+++ b/subversion/svn/notify.c
@@ -411,14 +411,8 @@
         goto print_error;
       break;
 
-    case svn_wc_notify_changelist_failed:
-      svn_handle_warning(stderr, n->err);
-      svn_error_clear(n->err);
-      break;
-
     case svn_wc_notify_changelist_moved:
       svn_handle_warning(stderr, n->err);
-      svn_error_clear(n->err);
       break;
 
     case svn_wc_notify_merge_begin:
@@ -451,6 +445,40 @@
         goto print_error;
       break;
 
+    case svn_wc_notify_foreign_merge_begin:
+      if (n->merge_range == NULL)
+        err = svn_cmdline_printf(pool,
+                                 _("--- Merging differences between "
+                                   "foreign repository URLs into '%s':\n"),
+                                 path_local);
+      else if (n->merge_range->start == n->merge_range->end - 1
+          || n->merge_range->start == n->merge_range->end)
+        err = svn_cmdline_printf(pool, 
+                                 _("--- Merging (from foreign repository) "
+                                   "r%ld into '%s':\n"),
+                                 n->merge_range->end, path_local);
+      else if (n->merge_range->start - 1 == n->merge_range->end)
+        err = svn_cmdline_printf(pool,
+                                 _("--- Reverse-merging (from foreign "
+                                   "repository) r%ld into '%s':\n"),
+                                 n->merge_range->start, path_local);
+      else if (n->merge_range->start < n->merge_range->end)
+        err = svn_cmdline_printf(pool,
+                                 _("--- Merging (from foreign repository) "
+                                   "r%ld through r%ld into '%s':\n"),
+                                 n->merge_range->start + 1,
+                                 n->merge_range->end, path_local);
+      else /* n->merge_range->start > n->merge_range->end - 1 */
+        err = svn_cmdline_printf(pool,
+                                 _("--- Reverse-merging (from foreign "
+                                   "repository) r%ld through r%ld into "
+                                   "'%s':\n"),
+                                 n->merge_range->start,
+                                 n->merge_range->end + 1, path_local);
+      if (err)
+        goto print_error;
+      break;
+
     default:
       break;
     }
diff --git a/subversion/svnserve/serve.c b/subversion/svnserve/serve.c
index cde8fa3..3c49170 100644
--- a/subversion/svnserve/serve.c
+++ b/subversion/svnserve/serve.c
@@ -650,7 +650,6 @@
   else if (rb.err)
     {
       /* Some failure during the reporting or editing operations. */
-      svn_error_clear(editor->abort_edit(edit_baton, pool));
       SVN_CMD_ERR(rb.err);
     }
   SVN_ERR(svn_ra_svn_write_cmd_response(conn, pool, ""));
diff --git a/subversion/svnsync/main.c b/subversion/svnsync/main.c
index ab2e985..62aed6b 100644
--- a/subversion/svnsync/main.c
+++ b/subversion/svnsync/main.c
@@ -626,7 +626,7 @@
 
   /* If we're doing a partial replay, we have to check first if the server 
      supports this. */
-  if (strcmp(root_url, baton->from_url) < 0)
+  if (svn_path_is_child(root_url, baton->from_url, pool))
     {
       svn_boolean_t server_supports_partial_replay;
       svn_error_t *err = svn_ra_has_capability(from_session,
@@ -636,9 +636,12 @@
       if (err && err->apr_err == SVN_ERR_UNKNOWN_CAPABILITY)
         {
           svn_error_clear(err);
-          return svn_error_create(SVN_ERR_RA_PARTIAL_REPLAY_NOT_SUPPORTED, NULL, 
-                                  NULL);
+          server_supports_partial_replay = FALSE;
         }
+
+      if (!server_supports_partial_replay)
+        return svn_error_create(SVN_ERR_RA_PARTIAL_REPLAY_NOT_SUPPORTED, NULL,
+                                NULL);
     }
 
   SVN_ERR(svn_ra_change_rev_prop(to_session, 0, SVNSYNC_PROP_FROM_URL,
@@ -1271,6 +1274,7 @@
   svn_ra_session_t *from_session;
   svn_ra_session_t *to_session;
   subcommand_baton_t *sb;
+  svn_boolean_t has_commit_revprops_capability;
 } replay_baton_t;
 
 /* Return a replay baton allocated from POOL and populated with
@@ -1291,11 +1295,9 @@
 static svn_boolean_t 
 filter_exclude_date_author_sync(const char *key)
 {
-  if (strncmp(key, SVN_PROP_REVISION_AUTHOR, 
-              sizeof(SVN_PROP_REVISION_AUTHOR) - 1) == 0)
+  if (strcmp(key, SVN_PROP_REVISION_AUTHOR) == 0)
     return TRUE;
-  else if (strncmp(key, SVN_PROP_REVISION_DATE, 
-                   sizeof(SVN_PROP_REVISION_DATE) - 1) == 0)
+  else if (strcmp(key, SVN_PROP_REVISION_DATE) == 0)
     return TRUE;
   else if (strncmp(key, SVNSYNC_PROP_PREFIX,
                    sizeof(SVNSYNC_PROP_PREFIX) - 1) == 0)
@@ -1311,6 +1313,25 @@
   return ! filter_exclude_date_author_sync(key);
 }
 
+
+/* Only exclude svn:log .*/
+static svn_boolean_t
+filter_exclude_log(const char *key)
+{
+  if (strcmp(key, SVN_PROP_REVISION_LOG) == 0)
+    return TRUE;
+  else
+    return FALSE;
+}
+
+/* Only include svn:log. */
+static svn_boolean_t
+filter_include_log(const char *key)
+{
+  return ! filter_exclude_log(key);
+}
+
+
 /* Callback function for svn_ra_replay_range, invoked when starting to parse
  * a replay report.
  */
@@ -1350,9 +1371,14 @@
   /* The actual copy is just a replay hooked up to a commit.  Include
      all the revision properties from the source repositories, except
      'svn:author' and 'svn:date', those are not guaranteed to get
-     through the editor anyway. */
+     through the editor anyway.
+     If we're syncing to an non-commit-revprops capable server, filter
+     out all revprops except svn:log and add them later in
+     revplay_rev_finished. */
   filtered = filter_props(&filtered_count, rev_props,
-                          filter_exclude_date_author_sync,
+                          (rb->has_commit_revprops_capability
+                            ? filter_exclude_date_author_sync
+                            : filter_include_log),
                           pool);
 
   /* svn_ra_get_commit_editor3 requires the log message to be
@@ -1418,9 +1444,13 @@
 
 
   /* Ok, we're done with the data, now we just need to copy the remaining 
-     'svn:date' and 'svn:author' revprops and we're all set. */
-  filtered = filter_props(&filtered_count, rev_props, 
-                          filter_include_date_author_sync, 
+     'svn:date' and 'svn:author' revprops and we're all set.
+     If the server doesn't support revprops-in-a-commit, we still have to
+     set all revision properties except svn:log. */
+  filtered = filter_props(&filtered_count, rev_props,
+                          (rb->has_commit_revprops_capability
+                            ? filter_include_date_author_sync
+                            : filter_exclude_log),
                           subpool);
   SVN_ERR(write_revprops(&filtered_count, rb->to_session, revision, filtered, 
                          subpool));
@@ -1566,6 +1596,13 @@
      into the destination repository. */
   rb = make_replay_baton(from_session, to_session, baton, pool);
     
+  /* For compatibility with older svnserve versions, check first if we
+     support adding revprops to the commit. */
+  SVN_ERR(svn_ra_has_capability(rb->to_session, 
+                                &rb->has_commit_revprops_capability,
+                                SVN_RA_CAPABILITY_COMMIT_REVPROPS,
+                                pool));
+
   start_revision = atol(last_merged_rev->data) + 1;
   end_revision = from_latest;
   
diff --git a/subversion/tests/cmdline/README b/subversion/tests/cmdline/README
index a470be1..9137aa8 100644
--- a/subversion/tests/cmdline/README
+++ b/subversion/tests/cmdline/README
@@ -290,3 +290,24 @@
 the bottom of the file.
 
 
+Testing Compatability With Previous Release
+===========================================
+
+You can run the Python test suite against older installed versions of
+the Subversion servers.  This mail fragment introduces the ability:
+
+   Message-ID: <1ea387f60804091828q48c9d18ah7bf8d89ef7d39461@mail.gmail.com>
+   Date: Wed, 9 Apr 2008 18:28:40 -0700
+   From: "David Glasser" <glasser@davidglasser.net>
+   To: "Subversion Developers" <dev@subversion.tigris.org>
+   Subject:  backwards-compatibility testing!
+   
+   I've updated the expectations on trunk so that you can cleanly run the
+   test suite against 1.4.x svnserve or DAV.  You do this by adding
+   SERVER_MINOR_VERSION=4 with make check, or --server-minor-version 4 to
+   run_tests.py or a specific Python test.
+   
+   [...]
+
+We expect that post-1.5, this support will expand in the obvious ways
+(allowing "--server-minor-version 5" and SERVER_MINOR_VERSION=5).
\ No newline at end of file
diff --git a/subversion/tests/cmdline/changelist_tests.py b/subversion/tests/cmdline/changelist_tests.py
index 452e2c6..10c64d0 100755
--- a/subversion/tests/cmdline/changelist_tests.py
+++ b/subversion/tests/cmdline/changelist_tests.py
@@ -211,8 +211,8 @@
     return expected_skips
 
   # all dirs in the Greek tree
-  expected_skips_all = dict.fromkeys([
-    os.path.join(wc_dir),
+  expected_skips_all = dict([(x, None) for x in [
+        os.path.join(wc_dir),
     os.path.join(wc_dir, 'A'),
     os.path.join(wc_dir, 'A', 'B'),
     os.path.join(wc_dir, 'A', 'B', 'E'),
@@ -221,7 +221,7 @@
     os.path.join(wc_dir, 'A', 'D'),
     os.path.join(wc_dir, 'A', 'D', 'G'),
     os.path.join(wc_dir, 'A', 'D', 'H'),
-    ])
+    ]])
 
   expected_skips_wc_dir = { wc_dir : None }
 
diff --git a/subversion/tests/cmdline/commit_tests.py b/subversion/tests/cmdline/commit_tests.py
index 6e9ccd8..d5b9668 100755
--- a/subversion/tests/cmdline/commit_tests.py
+++ b/subversion/tests/cmdline/commit_tests.py
@@ -28,7 +28,8 @@
 XFail = svntest.testcase.XFail
 Item = svntest.wc.StateItem
 
-from svntest.main import server_has_revprop_commit
+from svntest.main import server_has_revprop_commit, \
+    server_gets_client_capabilities
 from svntest.actions import inject_conflict_into_wc
 
 ######################################################################
@@ -2549,7 +2550,8 @@
               versioned_log_message,
               changelist_near_conflict,
               commit_out_of_date_file,
-              start_commit_detect_capabilities,
+              SkipUnless(start_commit_detect_capabilities,
+                         server_gets_client_capabilities),
               commit_url,
              ]
 
diff --git a/subversion/tests/cmdline/depth_tests.py b/subversion/tests/cmdline/depth_tests.py
index 319542b..6d0f9b5 100755
--- a/subversion/tests/cmdline/depth_tests.py
+++ b/subversion/tests/cmdline/depth_tests.py
@@ -1428,6 +1428,511 @@
 
 #----------------------------------------------------------------------
 
+# Tests for deselection interface (a.k.a folding subtrees).
+# XFail until issue #2843 is resolved.
+#----------------------------------------------------------------------
+def depth_folding_clean_trees_1(sbox):
+  "gradually fold wc from depth=infinity to empty"
+
+  # Covers the following situations:
+  #
+  #  infinity->immediates (metadata only)
+  #  immediates->files (metadata only)
+  #  mixed(infinity+files)=>immediates
+  #  infinity=>empty
+  #  immediates=>empty
+  #  mixed(infinity+empty)=>immediates
+  #  mixed(infinity+empty/immediates)=>immediates
+  #  immediates=>files
+  #  files=>empty
+  #  mixed(infinity+empty)=>files
+
+  ign_a, ign_b, ign_c, wc_dir = set_up_depthy_working_copies(sbox,
+                                                             infinity=True)
+
+  A_path = os.path.join(wc_dir, 'A')
+  C_path = os.path.join(A_path, 'C')
+  B_path = os.path.join(A_path, 'B')
+  E_path = os.path.join(B_path, 'E')
+  F_path = os.path.join(B_path, 'F')
+  D_path = os.path.join(A_path, 'D')
+  H_path = os.path.join(A_path, 'H')
+
+  # Run 'svn up --set-depth=immediates' to directory A/B/E.
+  # This is an infinity=>immediates folding, changes on metadata only
+  expected_output = svntest.wc.State(wc_dir, {})
+  expected_status = svntest.actions.get_virginal_state('', 1)
+  expected_disk = svntest.main.greek_state.copy()
+  svntest.actions.run_and_verify_update(wc_dir,
+                                        expected_output,
+                                        expected_disk,
+                                        expected_status,
+                                        None, None,
+                                        None, None, None, None,
+                                        '--set-depth', 'immediates', E_path)
+  verify_depth(None, "immediates", E_path)
+
+  # Run 'svn up --set-depth=files' to directory A/B/E.
+  # This is an immediates=>files folding, changes on metadata only
+  svntest.actions.run_and_verify_update(wc_dir,
+                                        expected_output,
+                                        expected_disk,
+                                        expected_status,
+                                        None, None,
+                                        None, None, None, None,
+                                        '--set-depth', 'files', E_path)
+  verify_depth(None, "files", E_path)
+
+  # Run 'svn up --set-depth=immediates' to directory A/B.
+  # This is an mixed(infinity+files)=>immediates folding
+  expected_output = svntest.wc.State(wc_dir, {
+    'A/B/E/alpha'    : Item(status='D '),
+    'A/B/E/beta'     : Item(status='D '),
+    })
+  expected_status.remove('A/B/E/alpha', 'A/B/E/beta')
+  expected_disk.remove('A/B/E/alpha', 'A/B/E/beta')
+  svntest.actions.run_and_verify_update(wc_dir,
+                                        expected_output,
+                                        expected_disk,
+                                        expected_status,
+                                        None, None,
+                                        None, None, None, None,
+                                        '--set-depth', 'immediates', B_path)
+  verify_depth(None, "immediates", B_path)
+  verify_depth(None, "empty", E_path)
+  verify_depth(None, "empty", F_path)
+
+  # Run 'svn up --set-depth=empty' to directory A/D/H
+  # This is an infinity=>empty folding.
+  expected_output = svntest.wc.State(wc_dir, {
+    'A/D/H/chi'      : Item(status='D '),
+    'A/D/H/psi'      : Item(status='D '),
+    'A/D/H/omega'    : Item(status='D ')
+    })
+  expected_status.remove( 'A/D/H/chi', 'A/D/H/psi', 'A/D/H/omega')
+  expected_disk.remove( 'A/D/H/chi', 'A/D/H/psi', 'A/D/H/omega')
+  svntest.actions.run_and_verify_update(wc_dir,
+                                        expected_output,
+                                        expected_disk,
+                                        expected_status,
+                                        None, None,
+                                        None, None, None, None,
+                                        '--set-depth', 'empty', H_path)
+  verify_depth(None, "empty", H_path)
+
+  # Run 'svn up --set-depth=immediates' to directory A/D
+  # This is an mixed(infinity+empty)=>immediates folding.
+  expected_output = svntest.wc.State(wc_dir, {
+    'A/D/G/pi'       : Item(status='D '),
+    'A/D/G/rho'      : Item(status='D '),
+    'A/D/G/tau'      : Item(status='D '),
+    })
+  expected_status.remove('A/D/G/pi', 'A/D/G/rho', 'A/D/G/tau')
+  expected_disk.remove('A/D/G/pi', 'A/D/G/rho', 'A/D/G/tau')
+  svntest.actions.run_and_verify_update(wc_dir,
+                                        expected_output,
+                                        expected_disk,
+                                        expected_status,
+                                        None, None,
+                                        None, None, None, None,
+                                        '--set-depth', 'immediates', D_path)
+  verify_depth(None, "immediates", D_path)
+  verify_depth(None, "empty", G_path)
+
+  # Run 'svn up --set-depth=empty' to directory A/D
+  # This is an immediates=>empty folding.
+  expected_output = svntest.wc.State(wc_dir, {
+    'A/D/G'          : Item(status='D '),
+    'A/D/H'          : Item(status='D '),
+    'A/D/gamma'      : Item(status='D ')
+    })
+  expected_status.remove('A/D/gamma', 'A/D/G', 'A/D/H')
+  expected_disk.remove('A/D/gamma', 'A/D/G', 'A/D/H')
+  svntest.actions.run_and_verify_update(wc_dir,
+                                        expected_output,
+                                        expected_disk,
+                                        expected_status,
+                                        None, None,
+                                        None, None, None, None,
+                                        '--set-depth', 'empty', D_path)
+  verify_depth(None, "empty", D_path)
+
+  # Run 'svn up --set-depth=immediates' to directory A
+  # This is an mixed(infinity+empty/immediates)=>immediates folding.
+  expected_output = svntest.wc.State(wc_dir, {
+    'A/B/E'          : Item(status='D '),
+    'A/B/F'          : Item(status='D '),
+    'A/B/lambda'     : Item(status='D ')
+    })
+  expected_status.remove('A/B/lambda', 'A/B/E', 'A/B/F')
+  expected_disk.remove('A/B/lambda', 'A/B/E', 'A/B/F')
+  svntest.actions.run_and_verify_update(wc_dir,
+                                        expected_output,
+                                        expected_disk,
+                                        expected_status,
+                                        None, None,
+                                        None, None, None, None,
+                                        '--set-depth', 'immediates', A_path)
+  verify_depth(None, "immediates", A_path)
+  verify_depth(None, "empty", C_path)
+  verify_depth(None, "empty", B_path)
+
+  # Run 'svn up --set-depth=files' to directory A
+  # This is an immediates=>files folding.
+  expected_output = svntest.wc.State(wc_dir, {
+    'A/B'            : Item(status='D '),
+    'A/C'            : Item(status='D '),
+    'A/D'            : Item(status='D ')
+    })
+  expected_status.remove('A/B', 'A/C', 'A/D')
+  expected_disk.remove('A/B', 'A/C', 'A/D')
+  svntest.actions.run_and_verify_update(wc_dir,
+                                        expected_output,
+                                        expected_disk,
+                                        expected_status,
+                                        None, None,
+                                        None, None, None, None,
+                                        '--set-depth', 'files', A_path)
+  verify_depth(None, "files", A_path)
+
+  # Run 'svn up --set-depth=empty' to directory A
+  # This is an files=>empty folding.
+  expected_output = svntest.wc.State(wc_dir, {
+    'A/mu'            : Item(status='D ')
+    })
+  expected_status.remove('A/mu')
+  expected_disk.remove('A/mu')
+  svntest.actions.run_and_verify_update(wc_dir,
+                                        expected_output,
+                                        expected_disk,
+                                        expected_status,
+                                        None, None,
+                                        None, None, None, None,
+                                        '--set-depth', 'empty', A_path)
+  verify_depth(None, "empty", A_path)
+
+  # Run 'svn up --set-depth=files' to wc
+  # This is an mixed(infinity+empty)=>files folding.
+  expected_output = svntest.wc.State(wc_dir, {
+    'A'            : Item(status='D ')
+    })
+  expected_status.remove('A')
+  expected_disk.remove('A')
+  svntest.actions.run_and_verify_update(wc_dir,
+                                        expected_output,
+                                        expected_disk,
+                                        expected_status,
+                                        None, None,
+                                        None, None, None, None,
+                                        '--set-depth', 'files')
+  verify_depth(None, "files")
+
+
+#------------------------------------------------------------------------------
+def depth_folding_clean_trees_2(sbox):
+  "gradually fold wc, focusing on depth=immediates"
+
+  # Covers the following situations:
+  # 
+  #  infinity=>immediates
+  #  mixed(immediates+immediates)=>immediates
+  #  mixed(immediates+infinity)=>immediates
+  #  mixed(immediates+files)=>immediates
+  #  immediates=>empty(remove the target since the parent is at files/empty)
+
+  ign_a, wc_dir, ign_b, ign_c = set_up_depthy_working_copies(sbox, files=True)
+
+  A_path = os.path.join(wc_dir, 'A')
+  D_path = os.path.join(A_path, 'D')
+  H_path = os.path.join(D_path, 'H')
+  G_path = os.path.join(D_path, 'G')
+
+  # pull in directory A at immediates
+  svntest.actions.run_and_verify_svn(None, None, [],
+                                     'up', '--depth', 'immediates', A_path)
+  # check to see if it's really at immediates
+  verify_depth(None, "immediates", A_path)
+  
+  # pull in directory D at infinity
+  svntest.actions.run_and_verify_svn(None, None, [], 'up', D_path)
+
+  # Run 'svn up --set-depth=immediates' to directory A/D.
+  # This is an infinity=>immediates folding
+  expected_output = svntest.wc.State(wc_dir, {
+    'A/D/G/pi'       : Item(status='D '),
+    'A/D/G/rho'      : Item(status='D '),
+    'A/D/G/tau'      : Item(status='D '),
+    'A/D/H/chi'      : Item(status='D '),
+    'A/D/H/psi'      : Item(status='D '),
+    'A/D/H/omega'    : Item(status='D ')
+    })
+  expected_status = svntest.wc.State(wc_dir, {
+    ''               : Item(status='  ', wc_rev=1),
+    'iota'           : Item(status='  ', wc_rev=1),
+    'A'              : Item(status='  ', wc_rev=1),
+    'A/mu'           : Item(status='  ', wc_rev=1),
+    'A/B'            : Item(status='  ', wc_rev=1),
+    'A/C'            : Item(status='  ', wc_rev=1),
+    'A/D'            : Item(status='  ', wc_rev=1),
+    'A/D/gamma'      : Item(status='  ', wc_rev=1),
+    'A/D/G'          : Item(status='  ', wc_rev=1),
+    'A/D/H'          : Item(status='  ', wc_rev=1)
+    })
+  expected_disk = svntest.wc.State(wc_dir, {
+    'iota'        : Item(contents="This is the file 'iota'.\n"),
+    'A'           : Item(contents=None),
+    'A/mu'        : Item(contents="This is the file 'mu'.\n"),
+    'A/B'         : Item(contents=None),
+    'A/C'         : Item(contents=None),
+    'A/D'         : Item(contents=None),
+    'A/D/gamma'   : Item(contents="This is the file 'gamma'.\n"),
+    'A/D/G'       : Item(contents=None),
+    'A/D/H'       : Item(contents=None)
+    })
+  svntest.actions.run_and_verify_update(wc_dir,
+                                        expected_output,
+                                        expected_disk,
+                                        expected_status,
+                                        None, None,
+                                        None, None, None, None,
+                                        '--set-depth', 'immediates', D_path)
+  verify_depth(None, "immediates", D_path)
+  verify_depth(None, "empty", G_path)
+  verify_depth(None, "empty", H_path)
+
+  # Run 'svn up --set-depth=immediates' to directory A.
+  # This is an mixed(immediates+immediates)=>immediates folding
+  expected_output = svntest.wc.State(wc_dir, {
+    'A/D/G'      : Item(status='D '),
+    'A/D/H'      : Item(status='D '),
+    'A/D/gamma'  : Item(status='D ')
+    })
+  expected_status.remove( 'A/D/G', 'A/D/H', 'A/D/gamma')
+  expected_disk.remove( 'A/D/G', 'A/D/H', 'A/D/gamma')
+  svntest.actions.run_and_verify_update(wc_dir,
+                                        expected_output,
+                                        expected_disk,
+                                        expected_status,
+                                        None, None,
+                                        None, None, None, None,
+                                        '--set-depth', 'immediates', A_path)
+  verify_depth(None, "immediates", A_path)
+  verify_depth(None, "empty", D_path)
+
+  # pull in directory D at infinity
+  svntest.actions.run_and_verify_svn(None, None, [],
+                                     'up', D_path)
+
+  # Run 'svn up --set-depth=immediates' to directory A.
+  # This is an mixed(immediates+infinity)=>immediates folding
+  expected_output = svntest.wc.State(wc_dir, {
+    'A/D/gamma'      : Item(status='D '),
+    'A/D/G'          : Item(status='D '),
+    'A/D/G/pi'       : Item(status='D '),
+    'A/D/G/rho'      : Item(status='D '),
+    'A/D/G/tau'      : Item(status='D '),
+    'A/D/H'          : Item(status='D '),
+    'A/D/H/chi'      : Item(status='D '),
+    'A/D/H/psi'      : Item(status='D '),
+    'A/D/H/omega'    : Item(status='D ')
+    })
+  svntest.actions.run_and_verify_update(wc_dir,
+                                        expected_output,
+                                        expected_disk,
+                                        expected_status,
+                                        None, None,
+                                        None, None, None, None,
+                                        '--set-depth', 'immediates', A_path)
+  verify_depth(None, "immediates", A_path)
+  verify_depth(None, "empty", D_path)
+
+  # pull in directory D at files
+  svntest.actions.run_and_verify_svn(None, None, [],
+                                     'up', '--depth', 'files', D_path)
+
+  # Run 'svn up --set-depth=immediates' to directory A.
+  # This is an mixed(immediates+files)=>immediates folding
+  expected_output = svntest.wc.State(wc_dir, {
+    'A/D/gamma'      : Item(status='D ')
+    })
+  svntest.actions.run_and_verify_update(wc_dir,
+                                        expected_output,
+                                        expected_disk,
+                                        expected_status,
+                                        None, None,
+                                        None, None, None, None,
+                                        '--set-depth', 'immediates', A_path)
+  verify_depth(None, "immediates", A_path)
+  verify_depth(None, "empty", D_path)
+
+  # Run 'svn up --set-depth=empty' to directory A.
+  # This is an immediates=>empty folding, the directory A should be deleted
+  # too since the parent directory is at files/empty
+  expected_output = svntest.wc.State(wc_dir, {
+    'A'              : Item(status='D '),
+    'A/mu'           : Item(status='D '),
+    'A/D'            : Item(status='D '),
+    'A/C'            : Item(status='D '),
+    'A/B'            : Item(status='D ')
+    })
+  expected_status = svntest.wc.State(wc_dir, {
+    ''               : Item(status='  ', wc_rev=1),
+    'iota'           : Item(status='  ', wc_rev=1)
+    })
+  expected_disk = svntest.wc.State(wc_dir, {
+    'iota'        : Item(contents="This is the file 'iota'.\n")
+    })
+  svntest.actions.run_and_verify_update(wc_dir,
+                                        expected_output,
+                                        expected_disk,
+                                        expected_status,
+                                        None, None,
+                                        None, None, None, None,
+                                        '--set-depth', 'empty', A_path)
+
+def depth_fold_expand_clean_trees(sbox):
+  "expand target while contracting subtree"
+  #  --set-depth=immediates/files to an empty target with infinity
+  #  sub-tree should both fold the subtree and expand the target
+  
+  wc_dir, ign_a, ign_b, ign_c = set_up_depthy_working_copies(sbox, empty=True)
+
+  A_path = os.path.join(wc_dir, 'A')
+  B_path = os.path.join(A_path, 'B')
+  C_path = os.path.join(A_path, 'C')
+  D_path = os.path.join(A_path, 'D')
+
+  # pull in directory A at empty
+  svntest.actions.run_and_verify_svn(None, None, [],
+                                     'up', '--depth', 'empty', A_path)
+  verify_depth(None, "empty", A_path)
+
+  # pull in directory D at infinity
+  svntest.actions.run_and_verify_svn(None, None, [],
+                                     'up', D_path)
+
+  # Make the other working copy.
+  other_wc = sbox.add_wc_path('other')
+  svntest.actions.duplicate_dir(wc_dir, other_wc)
+
+  # Run 'svn up --set-depth=immediates' to directory A. This both folds
+  # directory D to empty and expands directory A to immediates
+  expected_output = svntest.wc.State(wc_dir, {
+    'A/mu'           : Item(status='A '),
+    'A/B'            : Item(status='A '),
+    'A/C'            : Item(status='A '),
+    'A/D/gamma'      : Item(status='D '),
+    'A/D/G'          : Item(status='D '),
+    'A/D/G/pi'       : Item(status='D '),
+    'A/D/G/rho'      : Item(status='D '),
+    'A/D/G/tau'      : Item(status='D '),
+    'A/D/H'          : Item(status='D '),
+    'A/D/H/chi'      : Item(status='D '),
+    'A/D/H/psi'      : Item(status='D '),
+    'A/D/H/omega'    : Item(status='D ')
+    })
+  expected_status = svntest.wc.State(wc_dir, {
+    ''               : Item(status='  ', wc_rev=1),
+    'A'              : Item(status='  ', wc_rev=1),
+    'A/mu'           : Item(status='  ', wc_rev=1),
+    'A/B'            : Item(status='  ', wc_rev=1),
+    'A/C'            : Item(status='  ', wc_rev=1),
+    'A/D'            : Item(status='  ', wc_rev=1)
+    })
+  expected_disk = svntest.wc.State(wc_dir, {
+    'A'           : Item(contents=None),
+    'A/mu'        : Item(contents="This is the file 'mu'.\n"),
+    'A/B'         : Item(contents=None),
+    'A/C'         : Item(contents=None),
+    'A/D'         : Item(contents=None)
+    })
+  svntest.actions.run_and_verify_update(wc_dir,
+                                        expected_output,
+                                        expected_disk,
+                                        expected_status,
+                                        None, None,
+                                        None, None, None, None,
+                                        '--set-depth', 'immediates', A_path)
+  verify_depth(None, "immediates", A_path)
+  verify_depth(None, "empty", B_path)
+  verify_depth(None, "empty", C_path)
+  verify_depth(None, "empty", D_path)
+
+  # Run 'svn up --set-depth=files' to directory A in other_wc. This both
+  # removes directory D and expands directory A to files
+  expected_output = svntest.wc.State(wc_dir, {
+    'A/mu'           : Item(status='A '),
+    'A/D'            : Item(status='D '),
+    'A/D/gamma'      : Item(status='D '),
+    'A/D/G'          : Item(status='D '),
+    'A/D/G/pi'       : Item(status='D '),
+    'A/D/G/rho'      : Item(status='D '),
+    'A/D/G/tau'      : Item(status='D '),
+    'A/D/H'          : Item(status='D '),
+    'A/D/H/chi'      : Item(status='D '),
+    'A/D/H/psi'      : Item(status='D '),
+    'A/D/H/omega'    : Item(status='D ')
+    })
+  expected_status = svntest.wc.State(wc_dir, {
+    ''               : Item(status='  ', wc_rev=1),
+    'A'              : Item(status='  ', wc_rev=1),
+    'A/mu'           : Item(status='  ', wc_rev=1),
+    })
+  expected_disk = svntest.wc.State(wc_dir, {
+    'A'           : Item(contents=None),
+    'A/mu'        : Item(contents="This is the file 'mu'.\n")
+    })
+  Other_A_path = os.path.join(other_wc, 'A')
+  svntest.actions.run_and_verify_update(other_wc,
+                                        expected_output,
+                                        expected_disk,
+                                        expected_status,
+                                        None, None,
+                                        None, None, None, None,
+                                        '--set-depth', 'files', Other_A_path)
+  verify_depth(None, "files", Other_A_path)
+
+
+def pull_in_tree_with_depth_option(sbox):
+  """checkout and verify subtree with depth immediates"""
+
+  wc_empty,ign_a, ign_b, ign_c = set_up_depthy_working_copies(sbox,
+                                                              empty=True)
+  A_path = os.path.join(wc_empty, 'A')
+  expected_output = svntest.wc.State(wc_empty, {
+    'A'      : Item(status='A '),
+    'A/mu'   : Item(status='A '),
+    'A/B'    : Item(status='A '),
+    'A/C'    : Item(status='A '),
+    'A/D'    : Item(status='A ')
+    })
+  expected_disk = svntest.wc.State('', {
+    'A'      : Item(),
+    'A/mu'   : Item("This is the file 'mu'.\n"),
+    'A/B'    : Item(),
+    'A/C'    : Item(),
+    'A/D'    : Item(),
+    })
+  expected_status = svntest.wc.State(wc_empty, {
+    ''       : Item(status='  ', wc_rev=1),
+    'A'      : Item(status='  ', wc_rev=1),
+    'A/mu'   : Item(status='  ', wc_rev=1),
+    'A/B'    : Item(status='  ', wc_rev=1),
+    'A/C'    : Item(status='  ', wc_rev=1),
+    'A/D'    : Item(status='  ', wc_rev=1),
+    })
+  svntest.actions.run_and_verify_update(wc_empty,
+                                        expected_output,
+                                        expected_disk,
+                                        expected_status,
+                                        None, None, None, None, None, False,
+                                        "--depth=immediates", A_path)
+
+  # Check that the A directory was pull ed in at depth=immediates.
+  verify_depth(None, "immediates", A_path)
+
+
+#----------------------------------------------------------------------
 # list all tests here, starting with None:
 test_list = [ None,
               depth_empty_checkout,
@@ -1455,6 +1960,10 @@
               upgrade_from_above,
               status_in_depthy_wc,
               depthy_update_above_dir_to_be_deleted,
+              XFail(depth_folding_clean_trees_1),
+              XFail(depth_folding_clean_trees_2),
+              XFail(depth_fold_expand_clean_trees),
+              pull_in_tree_with_depth_option,
             ]
 
 if __name__ == "__main__":
diff --git a/subversion/tests/cmdline/getopt_tests_data/svn_help_log_switch_stdout b/subversion/tests/cmdline/getopt_tests_data/svn_help_log_switch_stdout
index 1033642..74d593a 100644
--- a/subversion/tests/cmdline/getopt_tests_data/svn_help_log_switch_stdout
+++ b/subversion/tests/cmdline/getopt_tests_data/svn_help_log_switch_stdout
@@ -7,7 +7,9 @@
 
   2. Print the log messages for the PATHs (default: '.') under URL.
      If specified, REV determines in which revision the URL is first
-     looked up.  The default revision range is HEAD:1.
+     looked up, and the default revision range is REV:1; otherwise,
+     the URL is looked up in HEAD, and the default revision range is
+     HEAD:1.
 
   With -v, also print all affected paths with each log message.
   With -q, don't print the log message body itself (note that this is
diff --git a/subversion/tests/cmdline/log_tests.py b/subversion/tests/cmdline/log_tests.py
index 7b0c1dc..ee8492f 100755
--- a/subversion/tests/cmdline/log_tests.py
+++ b/subversion/tests/cmdline/log_tests.py
@@ -262,7 +262,7 @@
 
   # Do some mergeing - r6
   os.chdir('trunk')
-  svntest.main.run_svn(None, 'merge', os.path.join('..', branch_a))
+  svntest.main.run_svn(None, 'merge', os.path.join('..', branch_a) + '@HEAD')
   svntest.main.run_svn(None, 'ci', '-m',
                        'Merged branches/a to trunk.',
                        '--username', svntest.main.wc_author2)
@@ -319,7 +319,7 @@
 
   # Merge branches/a to branches/b - r12
   os.chdir(branch_b)
-  svntest.main.run_svn(None, 'merge', os.path.join('..', 'a'))
+  svntest.main.run_svn(None, 'merge', os.path.join('..', 'a') + '@HEAD')
   svntest.main.run_svn(None, 'ci', '-m',
                        "Merged branches/a to branches/b.",
                        '--username', svntest.main.wc_author2)
@@ -333,7 +333,7 @@
 
   # More merging - r14
   os.chdir('trunk')
-  svntest.main.run_svn(None, 'merge', os.path.join('..', branch_b))
+  svntest.main.run_svn(None, 'merge', os.path.join('..', branch_b) + '@HEAD')
   svntest.main.run_svn(None, 'ci', '-m',
                        "Merged branches/b to trunk.",
                        '--username', svntest.main.wc_author2)
@@ -341,7 +341,8 @@
 
   # Even more merging - r15
   os.chdir(branch_c)
-  svntest.main.run_svn(None, 'merge', os.path.join('..', '..', 'trunk'))
+  svntest.main.run_svn(None, 'merge',
+                       os.path.join('..', '..', 'trunk') + '@HEAD')
   svntest.main.run_svn(None, 'ci', '-m',
                        "Bring branches/c up to date with trunk.",
                        '--username', svntest.main.wc_author2)
@@ -355,7 +356,7 @@
 
   # Merge branches/c to trunk, which produces a conflict - r17
   os.chdir('trunk')
-  svntest.main.run_svn(None, 'merge', os.path.join('..', branch_c))
+  svntest.main.run_svn(None, 'merge', os.path.join('..', branch_c) + '@HEAD')
   svntest.main.file_write(os.path.join('A', 'mu'),
                           "This is the file 'mu'.\n" +
                           "Don't forget to look at 'upsilon', as well.\n" +
diff --git a/subversion/tests/cmdline/merge_authz_tests.py b/subversion/tests/cmdline/merge_authz_tests.py
index 1b4d665..915cd8f 100755
--- a/subversion/tests/cmdline/merge_authz_tests.py
+++ b/subversion/tests/cmdline/merge_authz_tests.py
@@ -434,7 +434,9 @@
 
 # list all tests here, starting with None:
 test_list = [ None,
-              Skip(mergeinfo_and_skipped_paths, svntest.main.is_ra_type_file),
+              SkipUnless(Skip(mergeinfo_and_skipped_paths,
+                              svntest.main.is_ra_type_file),
+                         svntest.main.server_has_mergeinfo),
              ]
 
 if __name__ == '__main__':
diff --git a/subversion/tests/cmdline/merge_tests.py b/subversion/tests/cmdline/merge_tests.py
index 2b2b8cf..1a65c70 100755
--- a/subversion/tests/cmdline/merge_tests.py
+++ b/subversion/tests/cmdline/merge_tests.py
@@ -43,14 +43,14 @@
   shorten_by = len(svntest.main.work_dir) + len(os.sep)
   return path[shorten_by:]
 
-def expected_merge_output(rev_ranges, additional_lines=None):
+def expected_merge_output(rev_ranges, additional_lines=None, foreign=False):
   """Generate an (inefficient) regex representing the expected merge
   output from REV_RANGES (a list of 'range' lists of the form [start, end] or
   [single_rev] --> [single_rev - 1, single_rev]), and ADDITIONAL_LINES (a list
   of strings).  If REV_RANGES is None then only the standard notification for
   a 3-way merge is expected."""
   if rev_ranges is None:
-    lines = [svntest.main.merge_notify_line(None, None, False)]
+    lines = [svntest.main.merge_notify_line(None, None, False, foreign)]
   else:
    lines = []
    for rng in rev_ranges:
@@ -59,7 +59,8 @@
        end_rev = rng[1]
      else:
        end_rev = None
-     lines += [svntest.main.merge_notify_line(start_rev, end_rev, True)]
+     lines += [svntest.main.merge_notify_line(start_rev, end_rev,
+                                              True, foreign)]
   if isinstance(additional_lines, list):
     # Address "The Backslash Plague"
     #
@@ -1328,11 +1329,15 @@
                                        'merge', '-c', '2', 'mu')
 
   elif arg_flav == '*':
+    # Without a peg revision, the default merge range of BASE:1 (which
+    # is a no-op) will be chosen.  Let's do it both ways (no-op first,
+    # of course).
+    svntest.actions.run_and_verify_svn(None, None, [], 'merge', 'mu')
     svntest.actions.run_and_verify_svn(None,
                                        expected_merge_output([[2]],
                                                              'U    mu\n'),
                                        [],
-                                       'merge', 'mu')
+                                       'merge', 'mu@2')
 
   # sanity-check resulting file
   if (svntest.tree.get_text('mu') != orig_mu_text + added_mu_text):
@@ -4317,6 +4322,9 @@
   A_B_F_path = os.path.join(A_B_path, 'F')
   A_B_F_E_path = os.path.join(A_B_F_path, 'E')
   copy_of_B_path = os.path.join(A_path, 'copy-of-B')
+  copy_of_B_F_path = os.path.join(A_path, 'copy-of-B', 'F')
+  A_copy_of_B_F_E_alpha_path = os.path.join(A_path, 'copy-of-B', 'F',
+                                            'E', 'alpha')
 
   # Create a deeper directory structure.
   expected_status = create_deep_trees(wc_dir)
@@ -4448,6 +4456,61 @@
                                        None,
                                        None,
                                        None, 1)
+  os.chdir(saved_cwd)
+
+  # Test for part of Issue #2821, see
+  # http://subversion.tigris.org/issues/show_bug.cgi?id=2821#desc22
+  #
+  # Revert all local changes.
+  svntest.actions.run_and_verify_svn(None, None, [], 'revert', '-R', wc_dir)
+
+  # Make a text mod to A/copy-of-B/F/E/alpha
+  newer_content_for_alpha = "Conflicting content"
+  svntest.main.file_write(A_copy_of_B_F_E_alpha_path,
+                          newer_content_for_alpha)
+
+  # Re-merge r5 to A/copy-of-B/F, this *should* be a no-op as the mergeinfo
+  # on A/copy-of-B/F/E should prevent any attempt to merge r5 into that
+  # subtree.  The merge will leave a few local changes as mergeinfo is set
+  # on A/copy-of-B/F, the mergeinfo on A/copy-of-B/F/E elides to it, and
+  # the mergeinfo on A/copy-of-B/F/E1 picks up r5 from /A/B/F/E1.
+  short_copy_of_B_F_path = shorten_path_kludge(copy_of_B_F_path)
+  expected_output = wc.State(short_copy_of_B_F_path, {})
+  expected_status = wc.State(short_copy_of_B_F_path, {
+    ''         : Item(status=' M', wc_rev=8),
+    'E'        : Item(status=' M', wc_rev=8),
+    'E/alpha'  : Item(status='M ', wc_rev=8),
+    'E/beta'   : Item(status='  ', wc_rev=8),
+    'E1'       : Item(status=' M', wc_rev=8),
+    'E1/alpha' : Item(status='  ', wc_rev=8),
+    'E1/beta'  : Item(status='  ', wc_rev=8),
+    })
+  expected_disk = wc.State('', {
+    ''         : Item(props={SVN_PROP_MERGEINFO : '/A/B/F:5'}),
+    'E'        : Item(props={}),
+    'E/alpha'  : Item(newer_content_for_alpha),
+    'E/beta'   : Item("This is the file 'beta'.\n"),
+    'E1'       : Item(props={SVN_PROP_MERGEINFO :
+                               '/A/B/F/E:5\n/A/B/F/E1:5\n'}),
+    'E1/alpha' : Item(new_content_for_alpha1),
+    'E1/beta'  : Item("This is the file 'beta'.\n")
+    })
+  expected_skip = wc.State(short_copy_of_B_F_path, { })
+  saved_cwd = os.getcwd()
+
+  os.chdir(svntest.main.work_dir)
+  svntest.actions.run_and_verify_merge(short_copy_of_B_F_path, '4', '5',
+                                       sbox.repo_url + '/A/B/F',
+                                       expected_output,
+                                       expected_disk,
+                                       expected_status,
+                                       expected_skip,
+                                       None,
+                                       None,
+                                       None,
+                                       None,
+                                       None, 1)
+  os.chdir(saved_cwd)
 
 def tweak_src_then_merge_to_dest(sbox, src_path, dst_path,
                                  canon_src_path, contents, cur_rev):
@@ -6353,8 +6416,8 @@
                                        None, None, None, None,
                                        None, 1)
 
-def diff_repos_does_not_update_mergeinfo(sbox):
-  "don't set mergeinfo when merging from another repo"
+def foreign_repos_does_not_update_mergeinfo(sbox):
+  "set no mergeinfo when merging from foreign repos"
 
   # Test for issue #2788.
 
@@ -6381,7 +6444,7 @@
                                      expected_merge_output([[4]],
                                       'U    ' +
                                       os.path.join(short_G_COPY_path,
-                                                   "rho") + '\n'),
+                                                   "rho") + '\n', True),
                                      [], 'merge', '-c4',
                                      other_repo_url + '/A/D/G',
                                      short_G_COPY_path)
@@ -6397,7 +6460,7 @@
                                      expected_merge_output([[5]],
                                       'U    ' +
                                       os.path.join(short_E_COPY_path,
-                                                   "beta") +'\n'),
+                                                   "beta") +'\n', True),
                                      [], 'merge',
                                      other_repo_url + '/A/B/E@4',
                                      other_repo_url + '/A/B/E@5',
@@ -10769,107 +10832,490 @@
   svntest.actions.run_and_verify_svn("", None, expected_err,
                                      "merge", url, wc_dir)
 
+def reverse_merge_away_all_mergeinfo(sbox):
+  "merges that remove all mergeinfo work"
+
+  # 
+
+  sbox.build()
+  wc_dir = sbox.wc_dir
+  wc_disk, wc_status = set_up_branch(sbox)
+
+  # Some paths we'll care about
+  A_COPY_H_path = os.path.join(wc_dir, "A_COPY", "D", "H")
+
+  # Merge r4:8 from A/D/H into A_COPY/D/H.
+  short_H_COPY_path = shorten_path_kludge(A_COPY_H_path)
+  expected_output = wc.State(short_H_COPY_path, {
+    'omega' : Item(status='U '),
+    'psi'   : Item(status='U ')
+    })
+  expected_status = wc.State(short_H_COPY_path, {
+    ''      : Item(status=' M', wc_rev=2),
+    'psi'   : Item(status='M ', wc_rev=2),
+    'omega' : Item(status='M ', wc_rev=2),
+    'chi'   : Item(status='  ', wc_rev=2),
+    })
+  expected_disk = wc.State('', {
+    ''      : Item(props={SVN_PROP_MERGEINFO : '/A/D/H:3-6'}),
+    'psi'   : Item("New content"),
+    'omega' : Item("New content"),
+    'chi'   : Item("This is the file 'chi'.\n"),
+    })
+  expected_skip = wc.State(short_H_COPY_path, { })
+  saved_cwd = os.getcwd()
+  os.chdir(svntest.main.work_dir)
+  svntest.actions.run_and_verify_merge(short_H_COPY_path, '2', '6',
+                                       sbox.repo_url + '/A/D/H',
+                                       expected_output, expected_disk,
+                                       expected_status, expected_skip,
+                                       None, None, None, None, None, 1)
+  os.chdir(saved_cwd)
+
+  # Commit the merge as r7
+  expected_output = wc.State(wc_dir, {
+    'A_COPY/D/H'       : Item(verb='Sending'),
+    'A_COPY/D/H/omega' : Item(verb='Sending'),
+    'A_COPY/D/H/psi'   : Item(verb='Sending'),
+    })
+  wc_status.tweak('A_COPY/D/H', 'A_COPY/D/H/omega', 'A_COPY/D/H/psi',
+                  wc_rev=7)
+  svntest.actions.run_and_verify_commit(wc_dir,
+                                        expected_output,
+                                        wc_status,
+                                        None,
+                                        wc_dir)
+
+  # Now reverse merge r7 from itself, all mergeinfo should be removed.
+  expected_output = wc.State(short_H_COPY_path, {
+    ''      : Item(status=' U'),
+    'omega' : Item(status='U '),
+    'psi'   : Item(status='U ')
+    })
+  expected_status = wc.State(short_H_COPY_path, {
+    ''      : Item(status=' M', wc_rev=7),
+    'psi'   : Item(status='M ', wc_rev=7),
+    'omega' : Item(status='M ', wc_rev=7),
+    'chi'   : Item(status='  ', wc_rev=2),
+    })
+  expected_disk = wc.State('', {
+    'psi'   : Item("This is the file 'psi'.\n"),
+    'omega' : Item("This is the file 'omega'.\n"),
+    'chi'   : Item("This is the file 'chi'.\n"),
+    })
+  expected_skip = wc.State(short_H_COPY_path, { })
+  os.chdir(svntest.main.work_dir)
+  svntest.actions.run_and_verify_merge(short_H_COPY_path, '7', '6',
+                                       sbox.repo_url + '/A_COPY/D/H',
+                                       expected_output, expected_disk,
+                                       expected_status, expected_skip,
+                                       None, None, None, None, None, 1)
+  os.chdir(saved_cwd)
+
+
+# Another test for issue #3067: 'subtrees with intersecting mergeinfo, that don't
+# exist at the start of a merge range shouldn't break the merge'.  Specifically see
+# http://subversion.tigris.org/issues/show_bug.cgi?id=3067#desc5
+#
+# Set as XFail until that issue is resolved.
+def dont_merge_revs_into_subtree_that_predate_it(sbox):
+  "dont merge revs into a subtree that predate it"
+
+  # Create our good 'ole greek tree.
+  sbox.build()
+  wc_dir = sbox.wc_dir
+
+  # Some paths we'll care about
+  psi_path     = os.path.join(wc_dir, "A", "D", "H", "psi")
+  nu_path      = os.path.join(wc_dir, "A", "D", "H", "nu")
+  H_COPY_path  = os.path.join(wc_dir, "H_COPY")
+  nu_COPY_path = os.path.join(wc_dir, "H_COPY", "nu")
+
+  expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
+  expected_disk = svntest.main.greek_state.copy()
+
+  # Make a text mod to 'A/D/H/psi' and commit it as r2
+  svntest.main.file_write(psi_path, "New content")
+  expected_output = wc.State(wc_dir, {'A/D/H/psi' : Item(verb='Sending')})
+  expected_status.tweak('A/D/H/psi', wc_rev=2)
+  svntest.actions.run_and_verify_commit(wc_dir, expected_output,
+                                        expected_status, None, wc_dir)
+  expected_disk.tweak('A/D/H/psi', contents="New content")
+
+  # Create 'A/D/H/nu' and commit it as r3.
+  svntest.main.file_write(nu_path, "This is the file 'nu'.\n")
+  svntest.actions.run_and_verify_svn(None, None, [], 'add', nu_path)
+  expected_output = wc.State(wc_dir, {'A/D/H/nu' : Item(verb='Adding')})
+  expected_status.add({'A/D/H/nu' : Item(status='  ', wc_rev=3)})
+  svntest.actions.run_and_verify_commit(wc_dir, expected_output,
+                                        expected_status, None, wc_dir)
+
+  # Copy 'A/D/H' to 'H_COPY' in r4.
+  svntest.actions.run_and_verify_svn(None,
+                                     ['\n', 'Committed revision 4.\n'],
+                                     [], 'copy',
+                                     sbox.repo_url + "/A/D/H",
+                                     sbox.repo_url + "/H_COPY",
+                                     "-m", "Copy A/D/H to H_COPY")
+  expected_status.add({
+    "H_COPY"       : Item(),
+    "H_COPY/chi"   : Item(),
+    "H_COPY/omega" : Item(),
+    "H_COPY/psi"   : Item(),
+    "H_COPY/nu"    : Item()})
+
+  # Update to pull the previous copy into the WC
+  svntest.main.run_svn(None, 'up', wc_dir)
+  expected_status.tweak(status='  ', wc_rev=4)
+
+  # Make a text mod to 'A/D/H/nu' and commit it as r5.
+  svntest.main.file_write(nu_path, "New content")
+  expected_output = wc.State(wc_dir, {'A/D/H/nu' : Item(verb='Sending')})
+  expected_status.tweak('A/D/H/nu', wc_rev=5)
+  svntest.actions.run_and_verify_commit(wc_dir, expected_output,
+                                        expected_status, None, wc_dir)
+
+  # Make another text mod to 'A/D/H/psi' that can be merged to 'H_COPY'
+  # during a cherry harvest and commit it as r6.
+  svntest.main.file_write(psi_path, "Even *newer* content")
+  expected_output = wc.State(wc_dir, {'A/D/H/psi' : Item(verb='Sending')})
+  expected_status.tweak('A/D/H/psi', wc_rev=6)
+  svntest.actions.run_and_verify_commit(wc_dir, expected_output,
+                                        expected_status, None, wc_dir)
+  expected_disk.tweak('A/D/H/psi', contents="Even *newer* content")
+
+  # Update WC so elision occurs smoothly.
+  svntest.main.run_svn(None, 'up', wc_dir)
+  expected_status.tweak(status='  ', wc_rev=6)
+
+  # Merge r5 from 'A/D/H/nu' to 'H_COPY/nu'.
+  saved_cwd = os.getcwd()
+  os.chdir(svntest.main.work_dir)
+  short_nu_COPY_path = shorten_path_kludge(nu_COPY_path)
+  svntest.actions.run_and_verify_svn(None,
+                                     expected_merge_output([[5]], 'U    ' +
+                                                           short_nu_COPY_path +
+                                                           '\n'),
+                                     [], 'merge', '-c5',
+                                     sbox.repo_url + '/A/D/H/nu',
+                                     short_nu_COPY_path)
+  os.chdir(saved_cwd)
+
+  # Cherry harvest all eligible revisions from 'A/D/H' to 'H_COPY'.
+  #
+  # This is where we see the problem described in
+  # http://subversion.tigris.org/issues/show_bug.cgi?id=3067#desc5. 
+  #
+  # Search for the comment entitled "The Merge Kluge" elsewhere in
+  # this file, to understand why we shorten and chdir() below.
+  #
+  # Use run_and_verify_svn() because run_and_verify_merge*() require
+  # explicit revision ranges.
+  short_H_COPY_path = shorten_path_kludge(H_COPY_path)
+
+  expected_skip = wc.State(short_H_COPY_path, { })
+  os.chdir(svntest.main.work_dir)
+  svntest.actions.run_and_verify_svn(
+    None,
+    expected_merge_output(
+      [[4,6]], 'U    ' + os.path.join(short_H_COPY_path, "psi") + '\n'),
+    [], 'merge', sbox.repo_url + '/A/D/H', short_H_COPY_path)
+  os.chdir(saved_cwd)
+
+  # Check the status after the merge.  The mergeinfo set on 'H_COPY/nu set
+  # by the first merge should elide.
+  expected_status.tweak('H_COPY', status=' M')
+  expected_status.tweak('H_COPY/nu', 'H_COPY/psi', status='M ')
+  svntest.actions.run_and_verify_status(wc_dir, expected_status)
+  expected_props = svntest.verify.UnorderedOutput(
+    ["Properties on '" + H_COPY_path + "':\n",
+     "  " + SVN_PROP_MERGEINFO + " : /A/D/H:4-6\n"])
+  svntest.actions.run_and_verify_svn(None,
+                                     expected_props, [],
+                                     'pl', '-vR', wc_dir)
+
+# Test for issue #3174: 'Merge algorithm chokes on subtrees needing
+# special attention that have been renamed'
+#
+# Set as XFail until that issue is resolved.
+def merge_chokes_on_renamed_subtrees(sbox):
+  "merge fails with renamed subtrees with mergeinfo"
+
+  # Create our good 'ole greek tree.
+  sbox.build()
+  wc_dir = sbox.wc_dir
+
+  # Some paths we'll care about
+  psi_path            = os.path.join(wc_dir, "A", "D", "H", "psi")
+  psi_moved_path      = os.path.join(wc_dir, "A", "D", "H", "psi_moved")
+  psi_COPY_moved_path = os.path.join(wc_dir, "H_COPY", "psi_moved")
+  H_COPY_path    = os.path.join(wc_dir, "H_COPY")
+
+  expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
+  expected_disk = svntest.main.greek_state.copy()
+
+  # Make a text mod to 'A/D/H/psi' and commit it as r2
+  svntest.main.file_write(psi_path, "New content")
+  expected_output = wc.State(wc_dir, {'A/D/H/psi' : Item(verb='Sending')})
+  expected_status.tweak('A/D/H/psi', wc_rev=2)
+  svntest.actions.run_and_verify_commit(wc_dir, expected_output,
+                                        expected_status, None, wc_dir)
+  expected_disk.tweak('A/D/H/psi', contents="New content")
+
+  # Move 'A/D/H/psi' to 'A/D/H/psi_moved' and commit it as r3.
+  svntest.actions.run_and_verify_svn(None, None, [], 'move',
+                                     psi_path, psi_moved_path)
+  expected_output = wc.State(wc_dir, {
+    'A/D/H/psi'       : Item(verb='Deleting'),
+    'A/D/H/psi_moved' : Item(verb='Adding')
+    })
+  expected_status.add({'A/D/H/psi_moved' : Item(status='  ', wc_rev=3)})
+  expected_status.remove('A/D/H/psi')
+  svntest.actions.run_and_verify_commit(wc_dir, expected_output,
+                                        expected_status, None, wc_dir)
+
+  # Copy 'A/D/H' to 'H_COPY' in r4.
+  svntest.actions.run_and_verify_svn(None,
+                                     ['\n', 'Committed revision 4.\n'],
+                                     [], 'copy',
+                                     sbox.repo_url + "/A/D/H",
+                                     sbox.repo_url + "/H_COPY",
+                                     "-m", "Copy A/D/H to H_COPY")
+  expected_status.add({
+    "H_COPY"       : Item(),
+    "H_COPY/chi"   : Item(),
+    "H_COPY/omega" : Item(),
+    "H_COPY/psi_moved"   : Item()})
+
+  # Update to pull the previous copy into the WC
+  svntest.main.run_svn(None, 'up', wc_dir)
+  expected_status.tweak(status='  ', wc_rev=4)
+
+  # Make a text mod to 'A/D/H/psi_moved' and commit it as r5
+  svntest.main.file_write(psi_moved_path, "Even *Newer* content")
+  expected_output = wc.State(wc_dir,
+                             {'A/D/H/psi_moved' : Item(verb='Sending')})
+  expected_status.tweak('A/D/H/psi_moved', wc_rev=5)
+  svntest.actions.run_and_verify_commit(wc_dir, expected_output,
+                                        expected_status, None, wc_dir)
+  expected_disk.remove('A/D/H/psi')
+  expected_disk.add({
+    'A/D/H/psi_moved' : Item("Even *Newer* content"),
+    })
+
+  # Update for a uniform working copy before merging.
+  svntest.main.run_svn(None, 'up', wc_dir)
+  expected_status.tweak(status='  ', wc_rev=4)
+
+  # Merge r5 from 'A/D/H/psi_moved' to 'H_COPY/psi_moved'.
+  #
+  # Search for the comment entitled "The Merge Kluge" elsewhere in
+  # this file, to understand why we shorten and chdir() below.
+  saved_cwd = os.getcwd()
+  os.chdir(svntest.main.work_dir)
+  short_psi_COPY_moved_path = shorten_path_kludge(psi_COPY_moved_path)
+  svntest.actions.run_and_verify_svn(
+    None,
+    expected_merge_output([[5]], 'U    ' + short_psi_COPY_moved_path + '\n'),
+    [], 'merge', '-c5',
+    sbox.repo_url + '/A/D/H/psi_moved', short_psi_COPY_moved_path)
+  os.chdir(saved_cwd)
+
+  # Merge r2 from 'A/D/H' to 'H_COPY'.  This should be a no-op as r2 is
+  # already a part of H_COPY's natural history and won't be repeated (and
+  # therefore we don't expect to see even a skipped notification for
+  # H_COPY/psi).
+  #
+  # Here is where issue #3174 appears, the merge fails with:
+  # svn: File not found: revision 5, path '/A_COPY/D/H'
+  short_H_COPY_path = shorten_path_kludge(H_COPY_path)
+  expected_output = wc.State(short_H_COPY_path, {})
+  expected_status = wc.State(short_H_COPY_path, {
+    ''          : Item(status=' M', wc_rev=5),
+    'psi_moved' : Item(status='MM', wc_rev=5),
+    'omega'     : Item(status='  ', wc_rev=5),
+    'chi'       : Item(status='  ', wc_rev=5),
+    })
+  # Note: Due to issue #3157 we do get some self-referential
+  # mergeinfo on H_COPY.
+  expected_disk = wc.State('', {
+    ''          : Item(props={SVN_PROP_MERGEINFO : '/A/D/H:2'}),
+    'psi_moved' : Item("Even *Newer* content",
+                       props={SVN_PROP_MERGEINFO : '/A/D/H/psi_moved:5'}),
+    'omega'     : Item("This is the file 'omega'.\n"),
+    'chi'       : Item("This is the file 'chi'.\n"),
+    })
+  expected_skip = wc.State(short_H_COPY_path, { })
+  os.chdir(svntest.main.work_dir)
+  svntest.actions.run_and_verify_merge(short_H_COPY_path, '1', '2',
+                                       sbox.repo_url + '/A_COPY/D/H',
+                                       expected_output, expected_disk,
+                                       expected_status, expected_skip,
+                                       None, None, None, None, None, 1)
+  os.chdir(saved_cwd)
+
 ########################################################################
 # Run the tests
 
 
 # list all tests here, starting with None:
 test_list = [ None,
-              textual_merges_galore,
-              add_with_history,
-              delete_file_and_dir,
-              simple_property_merges,
+              SkipUnless(textual_merges_galore,
+                         server_has_mergeinfo),
+              SkipUnless(add_with_history,
+                         server_has_mergeinfo),
+              SkipUnless(delete_file_and_dir,
+                         server_has_mergeinfo),
+              SkipUnless(simple_property_merges,
+                         server_has_mergeinfo),
               merge_with_implicit_target_using_r,
               merge_with_implicit_target_using_c,
               merge_with_implicit_target_and_revs,
-              merge_catches_nonexistent_target,
-              merge_tree_deleted_in_target,
+              SkipUnless(merge_catches_nonexistent_target,
+                         server_has_mergeinfo),
+              SkipUnless(merge_tree_deleted_in_target,
+                         server_has_mergeinfo),
               merge_similar_unrelated_trees,
               merge_with_prev,
-              merge_binary_file,
+              SkipUnless(merge_binary_file,
+                         server_has_mergeinfo),
               three_way_merge_add_of_existing_binary_file,
-              merge_one_file_using_r,
-              merge_one_file_using_c,
-              merge_one_file_using_implicit_revs,
-              merge_record_only,
-              merge_in_new_file_and_diff,
-              merge_skips_obstructions,
-              merge_into_missing,
-              dry_run_adds_file_with_prop,
+              SkipUnless(merge_one_file_using_r,
+                         server_has_mergeinfo),
+              SkipUnless(merge_one_file_using_c,
+                         server_has_mergeinfo),
+              SkipUnless(merge_one_file_using_implicit_revs,
+                         server_has_mergeinfo),
+              SkipUnless(merge_record_only,
+                         server_has_mergeinfo),
+              SkipUnless(merge_in_new_file_and_diff,
+                         server_has_mergeinfo),
+              SkipUnless(merge_skips_obstructions,
+                         server_has_mergeinfo),
+              SkipUnless(merge_into_missing,
+                         server_has_mergeinfo),
+              SkipUnless(dry_run_adds_file_with_prop,
+                         server_has_mergeinfo),
               merge_binary_with_common_ancestry,
-              merge_funny_chars_on_path,
+              SkipUnless(merge_funny_chars_on_path,
+                         server_has_mergeinfo),
               merge_keyword_expansions,
               merge_prop_change_to_deleted_target,
               merge_file_with_space_in_its_name,
               merge_dir_branches,
-              safe_property_merge,
-              property_merge_from_branch,
+              SkipUnless(safe_property_merge,
+                         server_has_mergeinfo),
+              SkipUnless(property_merge_from_branch,
+                         server_has_mergeinfo),
               property_merge_undo_redo,
-              cherry_pick_text_conflict,
+              SkipUnless(cherry_pick_text_conflict,
+                         server_has_mergeinfo),
               merge_file_replace,
-              merge_dir_replace,
+              SkipUnless(merge_dir_replace,
+                         server_has_mergeinfo),
               XFail(merge_dir_and_file_replace),
               merge_file_replace_to_mixed_rev_wc,
               merge_added_dir_to_deleted_in_target,
-              merge_ignore_whitespace,
-              merge_ignore_eolstyle,
-              merge_add_over_versioned_file_conflicts,
-              merge_conflict_markers_matching_eol,
-              merge_eolstyle_handling,
-              avoid_repeated_merge_using_inherited_merge_info,
-              avoid_repeated_merge_on_subtree_with_merge_info,
-              obey_reporter_api_semantics_while_doing_subtree_merges,
+              SkipUnless(merge_ignore_whitespace,
+                         server_has_mergeinfo),
+              SkipUnless(merge_ignore_eolstyle,
+                         server_has_mergeinfo),
+              SkipUnless(merge_add_over_versioned_file_conflicts,
+                         server_has_mergeinfo),
+              SkipUnless(merge_conflict_markers_matching_eol,
+                         server_has_mergeinfo),
+              SkipUnless(merge_eolstyle_handling,
+                         server_has_mergeinfo),
+              SkipUnless(avoid_repeated_merge_using_inherited_merge_info,
+                         server_has_mergeinfo),
+              SkipUnless(avoid_repeated_merge_on_subtree_with_merge_info,
+                         server_has_mergeinfo),
+              SkipUnless(obey_reporter_api_semantics_while_doing_subtree_merges,
+                         server_has_mergeinfo),
               SkipUnless(mergeinfo_inheritance,
                          server_has_mergeinfo),
-              mergeinfo_elision,
-              mergeinfo_inheritance_and_discontinuous_ranges,
+              SkipUnless(mergeinfo_elision,
+                         server_has_mergeinfo),
+              SkipUnless(mergeinfo_inheritance_and_discontinuous_ranges,
+                         server_has_mergeinfo),
               SkipUnless(merge_to_target_with_copied_children,
                          server_has_mergeinfo),
-              merge_to_switched_path,
+              SkipUnless(merge_to_switched_path,
+                         server_has_mergeinfo),
               SkipUnless(merge_to_path_with_switched_children,
                          server_has_mergeinfo),
               merge_with_implicit_target_file,
               SkipUnless(empty_mergeinfo,
                          server_has_mergeinfo),
-              prop_add_to_child_with_mergeinfo,
-              diff_repos_does_not_update_mergeinfo,
+              SkipUnless(prop_add_to_child_with_mergeinfo,
+                         server_has_mergeinfo),
+              foreign_repos_does_not_update_mergeinfo,
               XFail(avoid_reflected_revs),
-              update_loses_mergeinfo,
-              merge_loses_mergeinfo,
+              SkipUnless(update_loses_mergeinfo,
+                         server_has_mergeinfo),
+              SkipUnless(merge_loses_mergeinfo,
+                         server_has_mergeinfo),
               single_file_replace_style_merge_capability,
-              merge_to_out_of_date_target,
-              merge_with_depth_files,
-              merge_fails_if_subtree_is_deleted_on_src,
-              merge_away_subtrees_noninheritable_ranges,
-              merge_to_sparse_directories,
-              merge_old_and_new_revs_from_renamed_dir,
-              merge_with_child_having_different_rev_ranges_to_merge,
-              merge_old_and_new_revs_from_renamed_file,
-              merge_with_auto_rev_range_detection,
-              mergeinfo_recording_in_skipped_merge,
-              cherry_picking,
-              propchange_of_subdir_raises_conflict,
-              reverse_merge_prop_add_on_child,
+              SkipUnless(merge_to_out_of_date_target,
+                         server_has_mergeinfo),
+              SkipUnless(merge_with_depth_files,
+                         server_has_mergeinfo),
+              SkipUnless(merge_fails_if_subtree_is_deleted_on_src,
+                         server_has_mergeinfo),
+              SkipUnless(merge_away_subtrees_noninheritable_ranges,
+                         server_has_mergeinfo),
+              SkipUnless(merge_to_sparse_directories,
+                         server_has_mergeinfo),
+              SkipUnless(merge_old_and_new_revs_from_renamed_dir,
+                         server_has_mergeinfo),
+              SkipUnless(merge_with_child_having_different_rev_ranges_to_merge,
+                         server_has_mergeinfo),
+              SkipUnless(merge_old_and_new_revs_from_renamed_file,
+                         server_has_mergeinfo),
+              SkipUnless(merge_with_auto_rev_range_detection,
+                         server_has_mergeinfo),
+              SkipUnless(mergeinfo_recording_in_skipped_merge,
+                         server_has_mergeinfo),
+              SkipUnless(cherry_picking,
+                         server_has_mergeinfo),
+              SkipUnless(propchange_of_subdir_raises_conflict,
+                         server_has_mergeinfo),
+              SkipUnless(reverse_merge_prop_add_on_child,
+                         server_has_mergeinfo),
               XFail(merge_target_with_non_inheritable_mergeinfo),
               self_reverse_merge,
-              ignore_ancestry_and_mergeinfo,
-              merge_from_renamed_branch_fails_while_avoiding_repeat_merge,
-              merge_source_normalization_and_subtree_merges,
-              new_subtrees_should_not_break_merge,
-              basic_reintegrate,
+              SkipUnless(ignore_ancestry_and_mergeinfo,
+                         server_has_mergeinfo),
+              SkipUnless(merge_from_renamed_branch_fails_while_avoiding_repeat_merge,
+                         server_has_mergeinfo),
+              SkipUnless(merge_source_normalization_and_subtree_merges,
+                         server_has_mergeinfo),
+              SkipUnless(new_subtrees_should_not_break_merge,
+                         server_has_mergeinfo),
+              SkipUnless(basic_reintegrate,
+                         server_has_mergeinfo),
               XFail(reintegrate_with_rename),
               XFail(reintegrate_branch_never_merged_to),
               reintegrate_fail_on_modified_wc,
               reintegrate_fail_on_mixed_rev_wc,
               reintegrate_fail_on_switched_wc,
               reintegrate_fail_on_shallow_wc,
-              XFail(reintegrate_fail_on_stale_source),
-              dont_add_mergeinfo_from_own_history,
+              SkipUnless(XFail(reintegrate_fail_on_stale_source),
+                         server_has_mergeinfo),
+              SkipUnless(dont_add_mergeinfo_from_own_history,
+                         server_has_mergeinfo),
               merge_range_predates_history,
               foreign_repos,
               foreign_repos_2_url,
               XFail(merge_added_subtree),
-              merge_unknown_url,
+              SkipUnless(merge_unknown_url,
+                         server_has_mergeinfo),
+              SkipUnless(reverse_merge_away_all_mergeinfo,
+                         server_has_mergeinfo),
+              XFail(SkipUnless(dont_merge_revs_into_subtree_that_predate_it,
+                               server_has_mergeinfo)),
+              XFail(SkipUnless(merge_chokes_on_renamed_subtrees,
+                               server_has_mergeinfo)),
              ]
 
 if __name__ == '__main__':
diff --git a/subversion/tests/cmdline/mergeinfo_tests.py b/subversion/tests/cmdline/mergeinfo_tests.py
index 2bf2255..4a2584f 100755
--- a/subversion/tests/cmdline/mergeinfo_tests.py
+++ b/subversion/tests/cmdline/mergeinfo_tests.py
@@ -37,7 +37,7 @@
   if server_has_mergeinfo():
     return expected_err
   else:
-    return "Retrieval of mergeinfo unsupported by '.+'"
+    return ".*Retrieval of mergeinfo unsupported by '.+'"
 
 ######################################################################
 # Tests
@@ -110,7 +110,8 @@
                                      "ci", wc_dir, "-m", "log message")
 
   url = sbox.repo_url + "/iota"
-  expected_err = ".*File not found.*iota.*|.*iota.*path not found.*"
+  expected_err = adjust_error_for_server_version(".*File not found.*iota.*|"
+                                                 ".*iota.*path not found.*")
   svntest.actions.run_and_verify_svn("", None, expected_err,
                                      "mergeinfo", "--show-revs", "eligible", 
                                      url, wc_dir)
@@ -123,7 +124,7 @@
 test_list = [ None,
               no_mergeinfo,
               mergeinfo,
-              XFail(explicit_mergeinfo_source),
+              XFail(explicit_mergeinfo_source, server_has_mergeinfo),
               mergeinfo_on_unknown_url,
              ]
 
diff --git a/subversion/tests/cmdline/prop_tests.py b/subversion/tests/cmdline/prop_tests.py
index 06db47e..baa079f 100755
--- a/subversion/tests/cmdline/prop_tests.py
+++ b/subversion/tests/cmdline/prop_tests.py
@@ -385,7 +385,7 @@
   svntest.main.run_svn(None, 'propset', 'foo', 'eek', wc_dir)
 
   svntest.actions.run_and_verify_commit(wc_dir, None, None,
-                                        "out[- ]of[- ]date",
+                                        "[oO]ut[- ]of[- ]date",
                                         wc_dir)
 
 #----------------------------------------------------------------------
diff --git a/subversion/tests/cmdline/special_tests.py b/subversion/tests/cmdline/special_tests.py
index 1d3391b..a09eec0 100755
--- a/subversion/tests/cmdline/special_tests.py
+++ b/subversion/tests/cmdline/special_tests.py
@@ -22,6 +22,7 @@
 # Our testing module
 import svntest
 
+from svntest.main import server_has_mergeinfo
 
 # (abbreviation)
 Skip = svntest.testcase.Skip
@@ -639,7 +640,9 @@
               SkipUnless(copy_tree_with_symlink, svntest.main.is_posix_os),
               SkipUnless(replace_symlink_with_file, svntest.main.is_posix_os),
               SkipUnless(remove_symlink, svntest.main.is_posix_os),
-              SkipUnless(merge_symlink_into_file, svntest.main.is_posix_os),
+              SkipUnless(SkipUnless(merge_symlink_into_file,
+                                    svntest.main.is_posix_os),
+                         server_has_mergeinfo),
               SkipUnless(merge_file_into_symlink, svntest.main.is_posix_os),
               checkout_repo_with_symlinks,
               XFail(SkipUnless(diff_symlink_to_dir, svntest.main.is_posix_os)),
diff --git a/subversion/tests/cmdline/stat_tests.py b/subversion/tests/cmdline/stat_tests.py
index 5715cdb..8dd9fe5 100755
--- a/subversion/tests/cmdline/stat_tests.py
+++ b/subversion/tests/cmdline/stat_tests.py
@@ -933,13 +933,16 @@
                                      'merge',
                                      branch_url, '-r', '4:5', trunk_dir)
 
-  expected_output = svntest.verify.UnorderedOutput([
+  lines = [
     "?      " + os.path.join(wc_dir, "trunk", "file.merge-left.r4") + "\n",
     "?      " + os.path.join(wc_dir, "trunk", "file.merge-right.r5") + "\n",
     "?      " + os.path.join(wc_dir, "trunk", "file.working") + "\n",
-    " M     " + os.path.join(wc_dir, "trunk") + "\n",
     "C  +   " + os.path.join(wc_dir, "trunk", "file") + "\n",
-  ])
+  ]
+  if svntest.main.server_has_mergeinfo():
+    lines.append(" M     " + os.path.join(wc_dir, "trunk") + "\n")
+
+  expected_output = svntest.verify.UnorderedOutput(lines)
 
   svntest.actions.run_and_verify_svn(None, expected_output, [],
                                      'status', wc_dir)
diff --git a/subversion/tests/cmdline/svnadmin_tests.py b/subversion/tests/cmdline/svnadmin_tests.py
index 5a951f2..5a77b13 100755
--- a/subversion/tests/cmdline/svnadmin_tests.py
+++ b/subversion/tests/cmdline/svnadmin_tests.py
@@ -446,6 +446,16 @@
 
 #----------------------------------------------------------------------
 
+# Returns the filename of the rev or revprop file (according to KIND)
+# numbered REV in REPO_DIR, which must be in the first shard if we're
+# using a sharded repository.
+def fsfs_file(repo_dir, kind, rev):
+  if svntest.main.server_minor_version >= 5:
+    return os.path.join(repo_dir, 'db', kind, '0', rev)
+  else:
+    return os.path.join(repo_dir, 'db', kind, rev)
+
+
 def verify_incremental_fsfs(sbox):
   """svnadmin verify detects corruption dump can't"""
 
@@ -462,7 +472,7 @@
   # "dir 7-1.0.r1/1569" (increment offset) and updating the checksum for
   # this directory listing to "c9b5a2d26473a4e28088673dda9df804" so that
   # the listing itself is valid.
-  r2 = sbox.repo_dir + "/db/revs/0/2"
+  r2 = fsfs_file(sbox.repo_dir, 'revs', '2')
   fp = open(r2, 'wb')
   fp.write("""id: 0-2.0.r2/0
 type: dir
@@ -790,10 +800,12 @@
   svntest.main.file_append(os.path.join(sbox.wc_dir, 'iota'), 'newest line\n')
   svntest.main.run_svn(None, 'ci', sbox.wc_dir, '--quiet', '-m', 'log msg')
 
+  rev_3 = fsfs_file(sbox.repo_dir, 'revs', '3')
+  rev_was_3 = fsfs_file(sbox.repo_dir, 'revs', 'was_3')
+
   # Move aside the revs file for r3.
-  os.rename(os.path.join(sbox.repo_dir, 'db','revs','0', '3'),
-            os.path.join(sbox.repo_dir, 'db','revs','0', 'was_3'));
-  
+  os.rename(rev_3, rev_was_3)
+
   # Verify 'svnadmin recover' fails when youngest has a revprops
   # file but no revs file.
   exit_code, output, errput = svntest.main.run_svnadmin("recover",
@@ -805,12 +817,13 @@
     raise svntest.Failure
 
   # Restore the r3 revs file, thus repairing the repository.
-  os.rename(os.path.join(sbox.repo_dir, 'db','revs','0', 'was_3'),
-            os.path.join(sbox.repo_dir, 'db','revs','0', '3'));
-  
+  os.rename(rev_was_3, rev_3)
+
+  revprop_3 = fsfs_file(sbox.repo_dir, 'revprops', '3')
+  revprop_was_3 = fsfs_file(sbox.repo_dir, 'revprops', 'was_3')
+
   # Move aside the revprops file for r3.
-  os.rename(os.path.join(sbox.repo_dir, 'db','revprops','0', '3'),
-            os.path.join(sbox.repo_dir, 'db','revprops','0', 'was_3'));
+  os.rename(revprop_3, revprop_was_3)
 
   # Verify 'svnadmin recover' fails when youngest has a revs file
   # but no revprops file (issue #2992).
@@ -823,13 +836,11 @@
     raise svntest.Failure
 
   # Restore the r3 revprops file, thus repairing the repository.
-  os.rename(os.path.join(sbox.repo_dir, 'db','revprops','0', 'was_3'),
-            os.path.join(sbox.repo_dir, 'db','revprops','0', '3'));
+  os.rename(revprop_was_3, revprop_3)
 
   # Change revprops file to a directory for revision 3
-  os.rename(os.path.join(sbox.repo_dir, 'db','revprops','0', '3'),
-            os.path.join(sbox.repo_dir, 'db','revprops','0', 'was_3'));
-  os.mkdir(os.path.join(sbox.repo_dir, 'db','revprops','0','3'));
+  os.rename(revprop_3, revprop_was_3)
+  os.mkdir(revprop_3)
 
   # Verify 'svnadmin recover' fails when youngest has a revs file
   # but revprops file is not a file (another aspect of issue #2992).
diff --git a/subversion/tests/cmdline/svnsync_tests.py b/subversion/tests/cmdline/svnsync_tests.py
index 92b6ba3..a3f6366 100755
--- a/subversion/tests/cmdline/svnsync_tests.py
+++ b/subversion/tests/cmdline/svnsync_tests.py
@@ -24,9 +24,11 @@
 from svntest.verify import SVNUnexpectedStdout, SVNUnexpectedStderr
 from svntest.verify import SVNExpectedStderr
 from svntest.main import write_restrictive_svnserve_conf
+from svntest.main import server_has_partial_replay
 
 # (abbreviation)
 Skip = svntest.testcase.Skip
+SkipUnless = svntest.testcase.SkipUnless
 XFail = svntest.testcase.XFail
 Item = svntest.wc.StateItem
 
@@ -706,8 +708,10 @@
               url_encoding,
               no_author,
               copy_revprops,
-              only_trunk,
-              only_trunk_A_with_changes,
+              SkipUnless(only_trunk,
+                         server_has_partial_replay),
+              SkipUnless(only_trunk_A_with_changes,
+                         server_has_partial_replay),
               move_and_modify_in_the_same_revision,
              ]
 
diff --git a/subversion/tests/cmdline/svntest/main.py b/subversion/tests/cmdline/svntest/main.py
index 096f880..9533543 100644
--- a/subversion/tests/cmdline/svntest/main.py
+++ b/subversion/tests/cmdline/svntest/main.py
@@ -776,27 +776,34 @@
   os.environ['SVNTEST_EDITOR_FUNC'] = func
 
 
-def merge_notify_line(revstart=None, revend=None, same_URL=True):
+def merge_notify_line(revstart=None, revend=None, same_URL=True,
+                      foreign=False):
   """Return an expected output line that describes the beginning of a
   merge operation on revisions REVSTART through REVEND.  Omit both
   REVSTART and REVEND for the case where the left and right sides of
   the merge are from different URLs."""
+  from_foreign_phrase = foreign and "\(from foreign repository\) " or ""
   if not same_URL:
-    return "--- Merging differences between repository URLs into '.+':\n"
+    return "--- Merging differences between %srepository URLs into '.+':\n" \
+           % (foreign and "foreign " or "")
   if revend is None:
     if revstart is None:
       # The left and right sides of the merge are from different URLs.
-      return "--- Merging differences between repository URLs into '.+':\n"
+      return "--- Merging differences between %srepository URLs into '.+':\n" \
+             % (foreign and "foreign " or "")
     elif revstart < 0:
-      return "--- Reverse-merging r%ld into '.+':\n" % abs(revstart)
+      return "--- Reverse-merging %sr%ld into '.+':\n" \
+             % (from_foreign_phrase, abs(revstart))
     else:
-      return "--- Merging r%ld into '.+':\n" % revstart
+      return "--- Merging %sr%ld into '.+':\n" \
+             % (from_foreign_phrase, revstart)
   else:
     if revstart > revend:
-      return "--- Reverse-merging r%ld through r%ld into '.+':\n" % (revstart,
-                                                                     revend)
+      return "--- Reverse-merging %sr%ld through r%ld into '.+':\n" \
+             % (from_foreign_phrase, revstart, revend)
     else:
-      return "--- Merging r%ld through r%ld into '.+':\n" % (revstart, revend)
+      return "--- Merging %sr%ld through r%ld into '.+':\n" \
+             % (from_foreign_phrase, revstart, revend)
 
 
 ######################################################################
@@ -850,6 +857,14 @@
   _check_command_line_parsed()
   return server_minor_version >= 5
 
+def server_gets_client_capabilities():
+  _check_command_line_parsed()
+  return server_minor_version >= 5
+
+def server_has_partial_replay():
+  _check_command_line_parsed()
+  return server_minor_version >= 5
+
 
 ######################################################################
 # Sandbox handling
diff --git a/subversion/tests/cmdline/switch_tests.py b/subversion/tests/cmdline/switch_tests.py
index d514c1c..53df063 100755
--- a/subversion/tests/cmdline/switch_tests.py
+++ b/subversion/tests/cmdline/switch_tests.py
@@ -24,10 +24,11 @@
 
 # (abbreviation)
 Skip = svntest.testcase.Skip
+SkipUnless = svntest.testcase.SkipUnless
 XFail = svntest.testcase.XFail
 Item = svntest.wc.StateItem
 
-from svntest.main import SVN_PROP_MERGEINFO
+from svntest.main import SVN_PROP_MERGEINFO, server_has_mergeinfo
 
 ### Bummer.  It would be really nice to have easy access to the URL
 ### member of our entries files so that switches could be testing by
@@ -2134,7 +2135,7 @@
               forced_switch,
               forced_switch_failures,
               switch_scheduled_add,
-              mergeinfo_switch_elision,
+              SkipUnless(mergeinfo_switch_elision, server_has_mergeinfo),
               switch_with_obstructing_local_adds,
               switch_with_depth,
               switch_to_dir_with_peg_rev,
diff --git a/subversion/tests/cmdline/update_tests.py b/subversion/tests/cmdline/update_tests.py
index a7a1c74..7a665a4 100755
--- a/subversion/tests/cmdline/update_tests.py
+++ b/subversion/tests/cmdline/update_tests.py
@@ -29,7 +29,8 @@
 XFail = svntest.testcase.XFail
 Item = svntest.wc.StateItem
 
-from svntest.main import SVN_PROP_MERGEINFO, server_sends_copyfrom_on_update
+from svntest.main import SVN_PROP_MERGEINFO, server_sends_copyfrom_on_update, \
+  server_has_mergeinfo
 
 ######################################################################
 # Tests
@@ -2938,10 +2939,9 @@
     # Construct a properly escaped regex when dealing with
     # '\' riddled paths on Windows.
     update_line = update_line.replace("\\", "\\\\")
+  notify_line = svntest.main.merge_notify_line(3, 5, True, False)
   svntest.actions.run_and_verify_svn(None,
-                                     '|'.join(
-                                        [svntest.main.merge_notify_line(3, 5),
-                                         update_line]),
+                                     '|'.join([notify_line, update_line]),
                                      [], 'merge', '-r2:5',
                                      sbox.repo_url + '/A/B/E/alpha',
                                      short_alpha_COPY_path)
@@ -3859,7 +3859,8 @@
               update_wc_with_replaced_file,
               update_with_obstructing_additions,
               update_conflicted,
-              mergeinfo_update_elision,
+              SkipUnless(mergeinfo_update_elision,
+                         server_has_mergeinfo),
               SkipUnless(update_handles_copyfrom,
                          server_sends_copyfrom_on_update),
               copyfrom_degrades_gracefully,
diff --git a/subversion/tests/libsvn_subr/path-test.c b/subversion/tests/libsvn_subr/path-test.c
index 4462775..9ee598f 100644
--- a/subversion/tests/libsvn_subr/path-test.c
+++ b/subversion/tests/libsvn_subr/path-test.c
@@ -933,6 +933,18 @@
     { "../foo",          "..",            FALSE},
     { SVN_EMPTY_PATH,    SVN_EMPTY_PATH,  TRUE},
     { "/",               "/",             TRUE},
+
+    { "http://test",    "http://test",     TRUE},
+    { "http://test",    "http://taste",    FALSE},
+    { "http://test",    "http://test/foo", TRUE},
+    { "http://test",    "file://test/foo", FALSE},
+    { "http://test",    "http://testF",    FALSE},
+/*
+    TODO: this testcase fails, showing that svn_path_is_ancestor
+    shouldn't be used on urls. This is related to issue #1711.
+
+    { "http://",        "http://test",     FALSE},
+*/
   };
 
   *msg = "test svn_path_is_ancestor";
@@ -1083,6 +1095,8 @@
     { "http://test",    "http://taste",    ""},
     { "http://test",    "http://test/foo", "http://test"},
     { "http://test",    "file://test/foo", ""},
+    { "http://test",    "http://testF",    ""},
+    { "http://",        "http://test",     ""},
   };
 
   *msg = "test svn_path_get_longest_ancestor";
diff --git a/tools/client-side/bash_completion b/tools/client-side/bash_completion
index 82100d8..7f4346e 100644
--- a/tools/client-side/bash_completion
+++ b/tools/client-side/bash_completion
@@ -109,8 +109,10 @@
 #     Argument completion outside a working copy results in an error message.
 #     Filenames with spaces are not completed properly.
 #     
-# - to do: other options? 
-#   obsolete options could be removed from auto-comp? (e.g. -N)
+# TODO 
+# - other options? 
+# - obsolete options could be removed from auto-comp? (e.g. -N)
+# - obsolete commands could be removed? (e.g. resolved)
 _svn()
 {
 	local cur cmds cmdOpts pOpts mOpts rOpts qOpts nOpts optsParam opt
@@ -124,7 +126,7 @@
               copy cp delete remove rm diff export help import info \
               list ls lock log merge mergeinfo mkdir move mv rename \
               propdel pdel propedit pedit propget pget \
-              proplist plist propset pset resolved revert \
+              proplist plist propset pset resolve resolved revert \
               status switch unlock update'
 
 	# help options have a strange command status...
@@ -172,6 +174,7 @@
 	#    hasRevPropOpt: is --revprop set
 	#    hasRevisionOpt: is --revision set
 	#    hasRelocateOpt: is --relocate set
+	#    acceptOpt: the value of --accept
 	# nargs: how many arguments were found
 	# stat: status of parsing at the 'current' word
 	#
@@ -181,6 +184,7 @@
 	local cmd= isPropCmd= isPsCmd= isHelpCmd= nExpectArgs= isCur= i=0
 	local prev= help= prop= val= isRevProp= last='none' nargs=0 stat=
 	local options= hasRevPropOpt= hasRevisionOpt= hasRelocateOpt=
+	local acceptOpt=
 
 	for opt in "${COMP_WORDS[@]}"
 	do
@@ -197,6 +201,10 @@
 
 	    # SKIP option arguments
 	    if [[ $prev == @($optsParam) ]] ; then
+
+		# record accept value
+		[[ $prev = '--accept' ]] && acceptOpt=$opt
+
 		prev=''
 		last='skip'
 		continue ;
@@ -352,11 +360,13 @@
 
 	    [[ $previous = '--accept' ]] && \
 	    {
-	        # the list is reduced for 'resolved'
-                if [[ $cmd = 'resolved' ]] ; then
-		    values='base mine theirs'
+	        # the list is different for 'resolve'
+                if [[ $cmd = 'resolve' ]] ; then
+		    # from svn help resolve
+		    values='base working mine-full theirs-full'
 		else # checkout merge switch update
-		    values='postpone base mine theirs edit launch'
+		    # not implemented yet: mine-conflict theirs-conflict
+		    values='postpone base mine-full theirs-full edit launch'
 		fi
 	    }
 
@@ -502,6 +512,14 @@
 	    [[ ${COMPREPLY} ]] && return 0
 	fi
 
+	# force mandatory --accept option for 'resolve' command
+	if [[ $cmd = 'resolve' && ! $acceptOpt ]]
+	then
+	    COMPREPLY=( $( compgen -W '--accept' -- $cur ) )
+	    # force option now! others will be available on later completions
+	    return 0
+	fi
+
 	# maximum number of additional arguments expected in various forms
 	case $cmd in
 	    merge)
@@ -571,7 +589,7 @@
 		    unlock) # unlock locked files
 			files=$($status $cs| _svn_grcut '@(??L*|?????[KOTB]*)')
 			;;
-		    resolved) # files in conflict
+		    resolve*) # files in conflict
 			files=$($status $cs| _svn_grcut '@(?C*|C*)')
 			;;
 		    praise|blame|ann*) # any svn file but added
@@ -649,7 +667,7 @@
 		;;
 	add)
 		cmdOpts="--auto-props --no-auto-props --force --targets \
-		         --no-ignore $nOpts $qOpts"
+		         --no-ignore --parents $nOpts $qOpts $pOpts"
 		;;
 	blame|annotate|ann|praise)
 		cmdOpts="$rOpts $pOpts -v --verbose --incremental --xml \
@@ -659,29 +677,31 @@
 		cmdOpts="$rOpts $pOpts"
 		;;
 	changelist|cl)
-		cmdOpts="--clear --targets"
+		cmdOpts="--targets $pOpts $qOpts --changelist \
+                         -R --recursive --depth --remove"
 		;;
 	checkout|co)
 		cmdOpts="$rOpts $qOpts $nOpts $pOpts --ignore-externals \
                          --force --accept"
 		;;
 	cleanup)
-		cmdOpts="--diff3-cmd"
+		cmdOpts="--diff3-cmd $pOpts"
 		;;
 	commit|ci)
 		cmdOpts="$mOpts $qOpts $nOpts --targets --editor-cmd $pOpts \
-		         --no-unlock --changelist --keep-changelist"
+		         --no-unlock --changelist --keep-changelists"
 		;;
 	copy|cp)
-		cmdOpts="$mOpts $rOpts $qOpts --editor-cmd $pOpts $gOpts"
+		cmdOpts="$mOpts $rOpts $qOpts --editor-cmd $pOpts --parents"
 		;;
 	delete|del|remove|rm)
-		cmdOpts="--force $mOpts $qOpts --targets --editor-cmd $pOpts"
+		cmdOpts="--force $mOpts $qOpts --targets --editor-cmd $pOpts \
+                         --keep-local"
 		;;
 	diff|di)
 		cmdOpts="$rOpts -x --extensions --diff-cmd --no-diff-deleted \
 		         $nOpts $pOpts --force --old --new --notice-ancestry \
-		         -c --change --summarize"
+		         -c --change --summarize --changelist --xml"
 		;;
 	export)
 		cmdOpts="$rOpts $qOpts $pOpts $nOpts --force --native-eol \
@@ -692,83 +712,93 @@
 		;;
 	import)
 		cmdOpts="--auto-props --no-auto-props $mOpts $qOpts $nOpts \
-		         --no-ignore --editor-cmd $pOpts"
+		         --no-ignore --editor-cmd $pOpts --force"
 		;; 
 	info)
-		cmdOpts="$pOpts $rOpts --targets -R --recursive \
+		cmdOpts="$pOpts $rOpts --targets -R --recursive --depth \
                          --incremental --xml --changelist"
 		;;
 	list|ls)
 		cmdOpts="$rOpts -v --verbose -R --recursive $pOpts \
-                         --incremental --xml"
+                         --incremental --xml --depth"
 		;;
 	lock)
-		cmdOpts="$mOpts --targets --force $pOpts"
+		cmdOpts="-m --message -F --file --encoding --force-log \
+                         --targets --force $pOpts"
 		;;
 	log)
 		cmdOpts="$rOpts -v --verbose --targets $pOpts --stop-on-copy \
-		         --incremental --xml $qOpts -l --limit --changelist \
-                         $gOpts"
+		         --incremental --xml $qOpts -l --limit -c --change \
+                         $gOpts --with-all-revprops --with-revprop"
 		;;
 	merge)
 		cmdOpts="$rOpts $nOpts $qOpts --force --dry-run --diff3-cmd \
 		         $pOpts --ignore-ancestry -c --change -x --extensions \
-                         --record-only --accept"
+                         --record-only --accept --reintegrate"
 		;;
 	mergeinfo)
-	        cmdOpts="$rOpts $pOpts"
+	        cmdOpts="$rOpts $pOpts --show-revs"
 		;;
 	mkdir)
-		cmdOpts="$mOpts $qOpts --editor-cmd $pOpts"
+		cmdOpts="$mOpts $qOpts --editor-cmd $pOpts --parents"
 		;;
 	move|mv|rename|ren)
 		cmdOpts="$mOpts $rOpts $qOpts --force --editor-cmd $pOpts \
-                         $gOpts"
+                         --parents"
 		;;
 	propdel|pdel|pd)
-		cmdOpts="$qOpts -R --recursive $rOpts $pOpts"
+		cmdOpts="$qOpts -R --recursive $rOpts $pOpts --changelist \
+                         --depth"
 		[[ $isRevProp || ! $prop ]] && cmdOpts="$cmdOpts --revprop"
 		;;
 	propedit|pedit|pe)
-		cmdOpts="--encoding --editor-cmd $pOpts --force"
+		cmdOpts="--editor-cmd $pOpts $mOpts --force"
 		[[ $isRevProp || ! $prop ]] && \
 		    cmdOpts="$cmdOpts --revprop $rOpts"
 		;;
 	propget|pget|pg)
-	        cmdOpts="-R --recursive $rOpts --strict $pOpts"
+	        cmdOpts="-R --recursive $rOpts --strict $pOpts --changelist \
+                         --depth --xml"
 		[[ $isRevProp || ! $prop ]] && cmdOpts="$cmdOpts --revprop"
 		;;
 	proplist|plist|pl)
 		cmdOpts="-v --verbose -R --recursive $rOpts --revprop $qOpts \
-		         $pOpts"
+		         $pOpts --changelist --depth --xml"
 		;;
 	propset|pset|ps)
 		cmdOpts="$qOpts --targets -R --recursive \
-		         --encoding $pOpts --force"
+		         --encoding $pOpts --force --changelist --depth"
 		[[ $isRevProp || ! $prop ]] && \
 		    cmdOpts="$cmdOpts --revprop $rOpts"
 		[[ $val ]] || cmdOpts="$cmdOpts -F --file"
 		;;
+        resolve)
+                cmdOpts="--targets -R --recursive $qOpts $pOpts --accept \
+                         --depth"
+                ;;
 	resolved)
-		cmdOpts="--targets -R --recursive $qOpts --accept"
+		cmdOpts="--targets -R --recursive $qOpts $pOpts --depth"
 		;;
 	revert)
-		cmdOpts="--targets -R --recursive $qOpts --changelist"
+		cmdOpts="--targets -R --recursive $qOpts --changelist \
+                         --depth $pOpts"
 		;;
 	status|stat|st)
 		cmdOpts="-u --show-updates -v --verbose $nOpts $qOpts $pOpts \
-		         --no-ignore --ignore-externals --incremental --xml"
+		         --no-ignore --ignore-externals --incremental --xml \
+                         --changelist"
 		;;
 	switch|sw)
 		cmdOpts="--relocate $rOpts $nOpts $qOpts $pOpts --diff3-cmd \
-                         --force --accept"
+                         --force --accept --ignore-externals --set-depth"
 		;;
 	unlock)
 		cmdOpts="--targets --force $pOpts"
 		;;
 	update|up)
 		cmdOpts="$rOpts $nOpts $qOpts $pOpts --diff3-cmd \
-                         --ignore-externals --force --accept"
+                         --ignore-externals --force --accept --changelist \
+                         --editor-cmd --set-depth"
 		;;
 	*)
 		;;
@@ -778,6 +808,12 @@
 	[[ "$cmd" != "--version" ]] && cmdOpts="$cmdOpts $helpOpts"
 	cmdOpts="$cmdOpts --config-dir"
 
+        # --accept (edit|launch) incompatible with --non-interactive
+	if [[ $acceptOpt == @(edit|launch) ]] ;
+	then
+	    cmdOpts=${cmdOpts/ --non-interactive / }
+	fi
+
 	# take out options already given
 	for opt in $options
 	do
@@ -791,7 +827,7 @@
 
 		cmdOpts=" $cmdOpts "
 		cmdOpts=${cmdOpts/ ${optBase} / }
-
+		
 		# take out alternatives and mutually exclusives
 		case $optBase in
 		-v)              cmdOpts=${cmdOpts/ --verbose / } ;;
diff --git a/tools/dist/construct-rolling-environment.sh b/tools/dist/construct-rolling-environment.sh
index 0a99fdd..6cb4018 100755
--- a/tools/dist/construct-rolling-environment.sh
+++ b/tools/dist/construct-rolling-environment.sh
@@ -1,7 +1,7 @@
 #!/bin/sh
 set -e
 
-AUTOCONF=autoconf-2.61
+AUTOCONF=autoconf-2.62
 LIBTOOL=libtool-1.5.26
 SWIG=swig-1.3.31
 
diff --git a/tools/dist/roll.sh b/tools/dist/roll.sh
index 7159de8..2b8bf22 100755
--- a/tools/dist/roll.sh
+++ b/tools/dist/roll.sh
@@ -8,7 +8,7 @@
 
 rs=http://svn.collab.net/repos/svn
 
-if [ -n "`svn diff $rs/branches/$BRANCH/CHANGES $rs/trunk/CHANGES`" ]; then
+if [ -n "`svn diff --summarize $rs/branches/$BRANCH/CHANGES $rs/trunk/CHANGES | grep ^M`" ]; then
   echo "CHANGES not synced between trunk and branch, aborting!" >&2
   exit 1
 fi
diff --git a/tools/server-side/svn_dav_log_parse.py b/tools/server-side/svn_dav_log_parse.py
index 8fb517e..2b2a3e3 100644
--- a/tools/server-side/svn_dav_log_parse.py
+++ b/tools/server-side/svn_dav_log_parse.py
@@ -48,14 +48,14 @@
     commit r<N>
     get-dir <PATH> r<N> text? props?
     get-file <PATH> r<N> text? props?
-    lock <PATH> steal?
+    lock (<PATH> ...) steal?
     rev-proplist r<N>
-    unlock <PATH> break?
+    unlock (<PATH> ...) break?
 
 Reports::
 
     get-file-revs <PATH> r<N>:<M> include-merged-revisions?
-    get-mergeinfo (<PATH> ...) <I>
+    get-mergeinfo (<PATH> ...) <I> include-descendants?
     log (<PATH> ...) r<N>:<M> limit=<N>? discover-changed-paths? strict? include-merged-revisions? revprops=all|(<REVPROP> ...)?
     replay <PATH> r<N>
 
@@ -65,7 +65,7 @@
     diff <FROM-PATH>@<N> <TO-PATH>@<M> depth=<D>? ignore-ancestry?
     diff <PATH> r<N>:<M> depth=<D>? ignore-ancestry?
     status <PATH> r<N> depth=<D>?
-    switch <FROM-PATH>@<N> <TO-PATH>@<M> depth=<D>?
+    switch <FROM-PATH> <TO-PATH>@<N> depth=<D>?
     update <PATH> r<N> depth=<D>? send-copyfrom-args?
 """
 
@@ -113,6 +113,11 @@
 class BadMergeinfoInheritanceError(Error):
     def __init__(self, value):
         Error.__init__(self, 'bad svn_mergeinfo_inheritance_t value ' + value)
+class MatchError(Error):
+    def __init__(self, pattern, line):
+        Error.__init__(self, '/%s/ does not match log line:\n%s'
+                             % (pattern, line))
+
 
 #
 # Helper functions
@@ -161,7 +166,7 @@
     pattern += ''.join([r'(\s+' + x + ')?' for x in optional])
     m = re.match(pattern, line)
     if m is None:
-        raise Error
+        raise MatchError(pattern, line)
     return m
 
 
@@ -214,8 +219,9 @@
         return line[m.end():]
 
     def _parse_lock(self, line):
-        m = _match(line, pPATH, ['steal'])
-        self.handle_lock(m.group(1), m.group(2) is not None)
+        m = _match(line, pPATHS, ['steal'])
+        paths = m.group(1).split()
+        self.handle_lock(paths, m.group(2) is not None)
         return line[m.end():]
 
     def _parse_change_rev_prop(self, line):
@@ -231,8 +237,9 @@
         return line[m.end():]
 
     def _parse_unlock(self, line):
-        m = _match(line, pPATH, ['break'])
-        self.handle_unlock(m.group(1), m.group(2) is not None)
+        m = _match(line, pPATHS, ['break'])
+        paths = m.group(1).split()
+        self.handle_unlock(paths, m.group(2) is not None)
         return line[m.end():]
 
     # reports
@@ -249,10 +256,13 @@
     def _parse_get_mergeinfo(self, line):
         # <I>
         pMERGEINFO_INHERITANCE = pWORD
-        m = _match(line, pPATHS, pMERGEINFO_INHERITANCE)
+        pINCLUDE_DESCENDANTS = pWORD
+        m = _match(line,
+                   pPATHS, pMERGEINFO_INHERITANCE, ['include-descendants'])
         paths = m.group(1).split()
         inheritance = _parse_mergeinfo_inheritance(m.group(2))
-        self.handle_get_mergeinfo(paths, inheritance)
+        include_descendants         = m.group(3) is not None
+        self.handle_get_mergeinfo(paths, inheritance, include_descendants)
         return line[m.end():]
 
     def _parse_log(self, line):
@@ -342,13 +352,12 @@
         return line[m.end():]
 
     def _parse_switch(self, line):
-        m = _match(line, pPATHREV, pPATHREV, [pDEPTH])
+        m = _match(line, pPATH, pPATHREV, [pDEPTH])
         from_path = m.group(1)
-        from_rev = int(m.group(2))
-        to_path = m.group(3)
-        to_rev = int(m.group(4))
-        depth = _parse_depth(m.group(6))
-        self.handle_switch(from_path, from_rev, to_path, to_rev, depth)
+        to_path = m.group(2)
+        to_rev = int(m.group(3))
+        depth = _parse_depth(m.group(5))
+        self.handle_switch(from_path, to_path, to_rev, depth)
         return line[m.end():]
 
     def _parse_update(self, line):
diff --git a/tools/server-side/test_svn_dav_log_parse.py b/tools/server-side/test_svn_dav_log_parse.py
index 0c97590..1017e26 100755
--- a/tools/server-side/test_svn_dav_log_parse.py
+++ b/tools/server-side/test_svn_dav_log_parse.py
@@ -14,6 +14,9 @@
 # history and logs, available at http://subversion.tigris.org/.
 # ====================================================================
 
+# Run this without arguments to run unit tests.
+# Run with a path to a davautocheck ops log to test that it can parse that.
+
 import os
 import sys
 import tempfile
@@ -76,11 +79,11 @@
 
     def test_lock(self):
         self.assertRaises(svn_dav_log_parse.Error, self.parse, 'lock')
-        self.parse('lock /foo')
-        self.assertEqual(self.result, ('/foo', False))
-        self.assertEqual(self.parse('lock /foo steal ...'), ' ...')
-        self.assertEqual(self.result, ('/foo', True))
-        self.assertEqual(self.parse('lock /foo stear'), ' stear')
+        self.parse('lock (/foo)')
+        self.assertEqual(self.result, (['/foo'], False))
+        self.assertEqual(self.parse('lock (/foo) steal ...'), ' ...')
+        self.assertEqual(self.result, (['/foo'], True))
+        self.assertEqual(self.parse('lock (/foo) stear'), ' stear')
 
     def test_change_rev_prop(self):
         self.assertRaises(svn_dav_log_parse.Error,
@@ -104,11 +107,11 @@
 
     def test_unlock(self):
         self.assertRaises(svn_dav_log_parse.Error, self.parse, 'unlock')
-        self.parse('unlock /foo')
-        self.assertEqual(self.result, ('/foo', False))
-        self.assertEqual(self.parse('unlock /foo break ...'), ' ...')
-        self.assertEqual(self.result, ('/foo', True))
-        self.assertEqual(self.parse('unlock /foo bear'), ' bear')
+        self.parse('unlock (/foo)')
+        self.assertEqual(self.result, (['/foo'], False))
+        self.assertEqual(self.parse('unlock (/foo) break ...'), ' ...')
+        self.assertEqual(self.result, (['/foo'], True))
+        self.assertEqual(self.parse('unlock (/foo) bear'), ' bear')
 
     def test_get_file_revs(self):
         self.assertRaises(svn_dav_log_parse.Error, self.parse, 'get-file-revs')
@@ -139,11 +142,13 @@
                           self.parse, 'get-mergeinfo (/foo) bork')
         self.assertEqual(self.parse('get-mergeinfo (/foo) explicit'), '')
         self.assertEqual(self.result, (['/foo'],
-                                       svn.core.svn_mergeinfo_explicit))
+                                       svn.core.svn_mergeinfo_explicit, False))
         self.assertEqual(self.parse('get-mergeinfo (/foo /bar) inherited ...'),
                          ' ...')
         self.assertEqual(self.result, (['/foo', '/bar'],
-                                       svn.core.svn_mergeinfo_inherited))
+                                       svn.core.svn_mergeinfo_inherited, False))
+        self.assertEqual(self.result, (['/foo', '/bar'],
+                                       svn.core.svn_mergeinfo_inherited, False))
 
     def test_log(self):
         self.assertRaises(svn_dav_log_parse.Error, self.parse, 'log')
@@ -236,12 +241,12 @@
         self.assertEqual(self.result, ('/foo', 9, svn.core.svn_depth_files))
 
     def test_switch(self):
-        self.assertEqual(self.parse('switch /foo@9 /bar@10 ...'), ' ...')
-        self.assertEqual(self.result, ('/foo', 9, '/bar', 10,
+        self.assertEqual(self.parse('switch /foo /bar@10 ...'), ' ...')
+        self.assertEqual(self.result, ('/foo', '/bar', 10,
                                        svn.core.svn_depth_unknown))
-        self.assertEqual(self.parse('switch /foo@9 /bar@10'
+        self.assertEqual(self.parse('switch /foo /bar@10'
                                     ' depth=files'), '')
-        self.assertEqual(self.result, ('/foo', 9, '/bar', 10,
+        self.assertEqual(self.result, ('/foo', '/bar', 10,
                                        svn.core.svn_depth_files))
 
     def test_update(self):
@@ -296,8 +301,8 @@
             if props:
                 self.action += ' props'
 
-        def handle_lock(self, path, steal):
-            self.action = 'lock ' + path
+        def handle_lock(self, paths, steal):
+            self.action = 'lock (%s)' % (' '.join(paths),)
             if steal:
                 self.action += ' steal'
 
@@ -307,8 +312,8 @@
         def handle_rev_proplist(self, revision):
             self.action = 'rev-proplist r%d' % (revision,)
 
-        def handle_unlock(self, path, break_lock):
-            self.action = 'unlock ' + path
+        def handle_unlock(self, paths, break_lock):
+            self.action = 'unlock (%s)' % (' '.join(paths),)
             if break_lock:
                 self.action += ' break'
 
@@ -319,10 +324,12 @@
             if include_merged_revisions:
                 self.action += ' include-merged-revisions'
 
-        def handle_get_mergeinfo(self, paths, inheritance):
+        def handle_get_mergeinfo(self, paths, inheritance, include_descendants):
             self.action = ('get-mergeinfo (%s) %s'
                            % (' '.join(paths),
                               svn.core.svn_inheritance_to_word(inheritance)))
+            if include_descendants:
+                self.action += ' include-descendants'
 
         def handle_log(self, paths, left, right, limit, discover_changed_paths,
                        strict, include_merged_revisions, revprops):
@@ -375,10 +382,9 @@
             self.action = 'status %s r%d' % (path, revision)
             self.maybe_depth(depth)
 
-        def handle_switch(self, from_path, from_rev,
-                          to_path, to_rev, depth):
-            self.action = ('switch %s@%d %s@%d'
-                           % (from_path, from_rev, to_path, to_rev))
+        def handle_switch(self, from_path, to_path, to_rev, depth):
+            self.action = ('switch %s %s@%d'
+                           % (from_path, to_path, to_rev))
             self.maybe_depth(depth)
 
         def handle_update(self, path, revision, depth, send_copyfrom_args):
@@ -402,9 +408,10 @@
             leading = ' '.join(words[:4])
             action = ' '.join(words[4:])
             # Parse the action and write the reconstructed action to
-            # the temporary file.
-            trailing = parser.parse(action)
-            fp.write(leading + ' ' + parser.action + trailing + '\n')
+            # the temporary file.  Ignore the returned trailing text,
+            # as we have none in the davautocheck ops log.
+            parser.parse(action)
+            fp.write(leading + ' ' + parser.action + '\n')
         fp.close()
         # Check differences between original and reconstructed files
         # (should be identical).
diff --git a/www/faq.html b/www/faq.html
index 686fa42..97fa2b4 100644
--- a/www/faq.html
+++ b/www/faq.html
@@ -3760,7 +3760,7 @@
 <p>The Neon library, used for communication between a Subversion server and
 client over HTTP, is usually built as a static library.  But it is
 subsequently linked into a different shared library.  This causes an error
-during the build process on 64-bit AMD systems similar to this:
+during the build process on 64-bit AMD systems similar to this:</p>
 
 <blockquote>
 <div><pre><code>
@@ -3773,7 +3773,7 @@
 </blockquote>
 
 <p>There was a
-<a href="http://subversion.tigris.org/servlets/ReadMsg?listName=dev&msgNo=119669">
+<a href="http://subversion.tigris.org/servlets/ReadMsg?listName=dev&amp;msgNo=119669">
 thread</a> on the developers' list about this.</p>
 
 <p>The solution is to supply the "--enable-shared" option to Subversion's
diff --git a/www/svn_1.5_releasenotes.html b/www/svn_1.5_releasenotes.html
index dbb7ec2..73ca24d 100644
--- a/www/svn_1.5_releasenotes.html
+++ b/www/svn_1.5_releasenotes.html
@@ -89,6 +89,92 @@
 and run using 1.5 libraries.  However, a program written for 1.5
 cannot necessarily compile or run against older libraries.</p>
 
+<div class="h3" id="new-feature-compatibility-table"
+             title="new-feature-compatibility-table">
+<h3>New Feature Compatibility Table</h3>
+<table border="1">
+  <tr>
+    <th>New Feature</th>
+    <th>Minimum Client</th>
+    <th>Minimum Server</th>
+    <th>Minimum Repository</th>
+    <th>Notes</th></tr>
+  <tr>
+    <td><a href="#merge-tracking">Merge tracking</a></td>
+    <td>1.5</td>
+    <td>1.5</td>
+    <td>1.5</td>
+    <td></td></tr>
+  <tr>
+    <td><a href="#sparse-checkouts">Sparse checkouts</a></td>
+    <td>1.5</td>
+    <td>any</td>
+    <td>any</td>
+    <td></td></tr>
+  <tr>
+    <td><a href="#interactive-conflict-resolution">Interactive conflict resolution</a></td>
+    <td>1.5</td>
+    <td>any</td>
+    <td>any</td>
+    <td></td></tr>
+  <tr>
+    <td><a href="#changelists">Changelist support</a></td>
+    <td>1.5</td>
+    <td>any</td>
+    <td>any</td>
+    <td></td></tr>
+  <tr>
+    <td><a href="#externals">Relative URLs, peg revisions in <tt>svn:externals</tt></a></td>
+    <td>1.5</td>
+    <td>any</td>
+    <td>any</td>
+    <td></td></tr>
+  <tr>
+    <td><a href="#cyrus-sasl"> Cyrus SASL support for ra_svn and <tt>svnserve</tt></a></td>
+    <td>any<sup>*</sup>, 1.5</td>
+    <td>any<sup>*</sup>, 1.5</td>
+    <td>any</td>
+    <td><sup>*</sup>Limited, see <a href="#sasl-compatibility">SASL&nbsp;and&nbsp;<code>svn://</code>&nbsp;compatibility</a></td></tr>
+  <tr>
+    <td><a href="#fsfs-sharding"> Improved support for large deployments on FSFS, via sharding</a></td>
+    <td>any<sup>*</sup>, 1.5</td>
+    <td>1.5</td>
+    <td>1.5</td>
+    <td><sup>*</sup>1.5 required for <code>file://</code> compatibility</td></tr>
+  <tr>
+    <td><a href="#fsfs-isolate-immutable">Improved FSFS optimizability, via immutable file isolation</a></td>
+    <td>any<sup>*</sup>, 1.5</td>
+    <td>1.5</td>
+    <td>1.5</td>
+    <td><sup>*</sup>1.5 required for <code>file://</code> compatibility</td></tr>
+  <tr>
+    <td><a href="#webdav-proxy">WebDAV transparent write-through proxy</a></td>
+    <td>any</td>
+    <td>1.5<sup>*</sup></td>
+    <td>any</td>
+    <td><sup>*</sup>Apache 2.2 server also required</td></tr>
+  <tr>
+    <td><a href="#copy-move-improvements">Improvements to <tt>copy</tt> and <tt>move</tt></a></td>
+    <td>1.5</td>
+    <td>any<sup>*</sup>, 1.5</td>
+    <td>any</td>
+    <td><sup>*</sup>Limited, see <a href="#copy-move-improvements">Copy/move<tt>-</tt>related&nbsp;improvements</a></td></tr>
+  <tr>
+    <td><a href="#cancellation-improvements">Speed improvements, cancellation response improvements</a></td>
+    <td>1.5</td>
+    <td>any</td>
+    <td>any</td>
+    <td></td></tr>
+  <tr>
+    <td><a href="#dav-modules">Easier to try experimental <tt>ra_serf</tt> DAV access module</a></td>
+    <td>1.5</td>
+    <td>any</td>
+    <td>any</td>
+    <td></td></tr>
+</table>
+
+</div>  <!-- new-feature-compatibility-table -->
+
 <div class="h3" id="wc-and-repos-format-change"
              title="wc-and-repos-format-change">
 <h3>Working Copy and Repository Format Changes</h3>
@@ -197,6 +283,41 @@
 
 </div>  <!-- sasl-compatibility -->
 
+<div class="h3" id="revprops-compatibility" title="revprops-compatibility">
+<h3>Custom revprops may now need to be examined by <tt>pre-commit</tt>
+  hooks</h3>
+
+<p>Each revision in Subversion has a set of <q>revision properties</q>
+associated with it; in addition to the standard log message, author,
+and date, arbitrary user-defined properties can be set.  These
+properties are not themselves versioned, so there is no way to revert
+changes to them.  Because of this, you cannot modify revprops on a
+committed revision without setting up a <tt>pre-revprop-change</tt>
+hook on the server.  Before Subversion 1.5, only the three standard
+revprops could be set at commit time; administrators using hooks to
+control the contents of the three standard revprops needed to check
+during <tt>pre-commit</tt> and <tt>pre-revprop-change</tt>, but for
+custom revprops, only <tt>pre-revprop-change</tt> appeared
+relevant.</p>
+
+<p>Subversion 1.5 adds
+a <a href="#commit-revprops"><tt>--with-revprop</tt> option to <tt>svn
+commit</tt></a> which allows users to specify revprops for revisions
+as they commit them.  Thus, in Subversion 1.5, it is possible for
+revproperties to be set on revisions without
+any <tt>pre-revprop-change</tt>.  The <tt>pre-commit</tt> hook can
+examine the transaction's revision properties before it is committed
+(just like many servers already use <tt>pre-commit</tt> to check for
+properly formatted log messages, e.g.).</p>
+
+<p>This means that if you previously relied
+on <tt>pre-revprop-change</tt> to control the ability to write to
+revprops (as opposed to just keeping track of their history), you may
+want to add similar controls to <tt>pre-commit</tt>.</p>
+
+</div>  <!-- revprops-compatibility -->
+
+
 </div>  <!-- compatibility -->
 
 <div class="h2" id="new-features" title="new-features">
@@ -482,8 +603,6 @@
 network protocols, and 1.5+ clients send that flag based on the depth;
 this alleviates some of the extra network traffic penalty.)</p>
 
-</div>  <!-- sc-compat-dac -->
-
 </div>  <!-- sc-compat -->
 
 <div class="h4" id="sc-further-reading" title="sc-further-reading">
@@ -1101,12 +1220,11 @@
 
 </div>  <!-- cp-takes-base -->
 
-</div>  <!-- cp-mv-intermediate-dirs -->
 <div class="h4" id="cp-mv-intermediate-dirs" title="cp-mv-intermediate-dirs">
 <h4>Creation of intermediate directories with copy/move
     (<em>client and server</em>)</h4>
 
-<p>See the section on the new <a href="#>intermediate-directories</a>"
+<p>See the section on the new <a href="#intermediate-directories"
 >--parents option</a> for more about this.</p>
 
 </div>  <!-- cp-mv-intermediate-dirs -->
@@ -1256,6 +1374,56 @@
 
 </div>  <!-- svn-1.3-deprecation -->
 
+<div class="h2" id="deps" title="deps">
+<h2>Subversion Dependencies Distribution: Binary Compatibility Issues</h2>
+
+<div class="h3" id="deps-background" title="deps-background">
+<h3>Background</h3>
+
+<p>APR 0.9.x and 1.x are binary-incompatible.  This means if you are
+already using Subversion with APR 0.9.x, and then upgrade your libapr
+to 1.X <em>without rebuilding Subversion</em>, things will break.
+Things will also break if your Subversion server libraries are linked
+to one version of APR but your Apache HTTPD server is linked to a
+different version.</p>
+
+<p>For a long time, Subversion's main source distribution included APR
+0.9.x, which was the latest available at the time, along with a few
+other things (e.g., Neon, zlib) that weren't yet widespread on
+installation systems.</p>
+
+</div> <!-- deps-background -->
+
+<div class="h3" id="deps-now" title="deps-now">
+<h3>Subversion 1.5.0 Dependencies Distribution</h3>
+
+<p>Today, these dependencies are no longer exotic, so our source
+distribution contains just Subversion itself.  Those building
+Subversion are expected to have the necessary libraries already
+installed, or to be able to fetch them easily.  But for convenience,
+we still offer a "deps" distribution: it doesn't contain Subversion,
+it just has source code for those third-party libraries.</p>
+
+<p>Until Subversion 1.5.0, the deps distribution contained APR 0.9.x,
+but as of 1.5.0, we're finally upgrading it to APR 1.x.  This is
+because by now there are very few systems that will have binary
+compatibility issues, and of those, few are likely to build using the
+"deps" dist.</p>
+
+<p>If you already have a Subversion installation using APR 0.9.x, it's
+still possible to move to APR 1.x safely (although you are not
+required to, unless you use the deps dist).  Just be sure to recompile
+Subversion, and Apache httpd if necessary, after upgrading APR.</p>
+
+<p>Note that it's perfectly safe to use APR 1.x from the beginning.
+In fact, we recommend it.  If you're building Subversion for the first
+time, there's no compatibility issue to worry about, so just grab the
+latest version of APR (or use our deps dist).</p>
+
+</div> <!-- deps-now -->
+
+</div>  <!-- deps -->
+
 </div>  <!-- app -->
 </body>
 </html>