You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by br...@apache.org on 2014/04/25 02:24:12 UTC

svn commit: r1589916 [1/2] - in /subversion/branches/1.8.x-r1579588: ./ build/ac-macros/ subversion/bindings/javahl/native/ subversion/bindings/swig/ subversion/bindings/swig/ruby/libsvn_swig_ruby/ subversion/bindings/swig/ruby/test/ subversion/include...

Author: breser
Date: Fri Apr 25 00:24:11 2014
New Revision: 1589916

URL: http://svn.apache.org/r1589916
Log:
On the 1.8.x-r1579588 branch: Do a catchup merge from 1.8.x to resolve conflicts caused by merge of 1.8.x-r1584342 branch.

Modified:
    subversion/branches/1.8.x-r1579588/   (props changed)
    subversion/branches/1.8.x-r1579588/NOTICE
    subversion/branches/1.8.x-r1579588/STATUS
    subversion/branches/1.8.x-r1579588/build/ac-macros/apache.m4
    subversion/branches/1.8.x-r1579588/build/ac-macros/compiler.m4
    subversion/branches/1.8.x-r1579588/configure.ac   (contents, props changed)
    subversion/branches/1.8.x-r1579588/subversion/bindings/javahl/native/JNIUtil.cpp
    subversion/branches/1.8.x-r1579588/subversion/bindings/javahl/native/JNIUtil.h
    subversion/branches/1.8.x-r1579588/subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.c
    subversion/branches/1.8.x-r1579588/subversion/bindings/swig/ruby/test/test_client.rb
    subversion/branches/1.8.x-r1579588/subversion/bindings/swig/svn_client.i
    subversion/branches/1.8.x-r1579588/subversion/include/private/svn_cache.h
    subversion/branches/1.8.x-r1579588/subversion/include/private/svn_dep_compat.h
    subversion/branches/1.8.x-r1579588/subversion/libsvn_client/commit_util.c
    subversion/branches/1.8.x-r1579588/subversion/libsvn_client/merge.c
    subversion/branches/1.8.x-r1579588/subversion/libsvn_client/prop_commands.c
    subversion/branches/1.8.x-r1579588/subversion/libsvn_delta/svndiff.c
    subversion/branches/1.8.x-r1579588/subversion/libsvn_fs_fs/fs.h
    subversion/branches/1.8.x-r1579588/subversion/libsvn_ra_serf/getlocks.c
    subversion/branches/1.8.x-r1579588/subversion/libsvn_ra_serf/locks.c   (contents, props changed)
    subversion/branches/1.8.x-r1579588/subversion/libsvn_ra_serf/update.c
    subversion/branches/1.8.x-r1579588/subversion/libsvn_ra_svn/protocol
    subversion/branches/1.8.x-r1579588/subversion/libsvn_repos/dump.c
    subversion/branches/1.8.x-r1579588/subversion/libsvn_repos/fs-wrap.c
    subversion/branches/1.8.x-r1579588/subversion/libsvn_subr/cache-memcache.c
    subversion/branches/1.8.x-r1579588/subversion/libsvn_subr/config_file.c
    subversion/branches/1.8.x-r1579588/subversion/libsvn_subr/io.c
    subversion/branches/1.8.x-r1579588/subversion/libsvn_subr/prompt.c
    subversion/branches/1.8.x-r1579588/subversion/libsvn_subr/version.c
    subversion/branches/1.8.x-r1579588/subversion/libsvn_wc/status.c
    subversion/branches/1.8.x-r1579588/subversion/svn/conflict-callbacks.c
    subversion/branches/1.8.x-r1579588/subversion/svndumpfilter/svndumpfilter.c
    subversion/branches/1.8.x-r1579588/subversion/svnrdump/util.c
    subversion/branches/1.8.x-r1579588/subversion/svnserve/serve.c
    subversion/branches/1.8.x-r1579588/subversion/tests/cmdline/commit_tests.py
    subversion/branches/1.8.x-r1579588/subversion/tests/cmdline/lock_tests.py
    subversion/branches/1.8.x-r1579588/subversion/tests/cmdline/merge_automatic_tests.py
    subversion/branches/1.8.x-r1579588/subversion/tests/cmdline/merge_tests.py
    subversion/branches/1.8.x-r1579588/subversion/tests/cmdline/prop_tests.py
    subversion/branches/1.8.x-r1579588/subversion/tests/cmdline/svndumpfilter_tests.py
    subversion/branches/1.8.x-r1579588/subversion/tests/cmdline/wc_tests.py
    subversion/branches/1.8.x-r1579588/subversion/tests/libsvn_repos/repos-test.c
    subversion/branches/1.8.x-r1579588/subversion/tests/libsvn_wc/conflict-data-test.c
    subversion/branches/1.8.x-r1579588/subversion/tests/libsvn_wc/utils.c

Propchange: subversion/branches/1.8.x-r1579588/
------------------------------------------------------------------------------
  Merged /subversion/branches/1.8.x-r1578853:r1578879-1581682
  Merged /subversion/branches/1.8.x-r1577151:r1589064-1589574
  Merged /subversion/branches/1.8.x-r1581305:r1581320-1582587
  Merged /subversion/branches/1.8.x-r1577812:r1577814-1588145
  Merged /subversion/branches/1.8.x:r1579589-1589912
  Merged /subversion/branches/1.8.x-r1574868:r1575329-1579873
  Merged /subversion/branches/1.8.x-javahl-exception-crash:r1586424-1588151
  Merged /subversion/trunk:r1481782,1545835,1545845,1555403,1570642,1571747,1571787,1571795,1573106,1573209,1574868,1577151,1577200,1577294,1577812-1577813,1578273,1578311,1578326,1578670,1578820,1578853,1578875,1579274,1579429,1579684,1580832,1580867,1580872,1581296,1581305,1581315,1581810,1583580,1583977,1584342,1585686,1586052,1586255,1586352,1586467,1587511,1587946,1587968
  Merged /subversion/branches/1.8.x-r1578311:r1578312-1589576
  Merged /subversion/branches/1.8.x-r1584342:r1584350-1589572
  Merged /subversion/branches/1.8.x-apr-0.9:r1585493-1589570

Modified: subversion/branches/1.8.x-r1579588/NOTICE
URL: http://svn.apache.org/viewvc/subversion/branches/1.8.x-r1579588/NOTICE?rev=1589916&r1=1589915&r2=1589916&view=diff
==============================================================================
--- subversion/branches/1.8.x-r1579588/NOTICE (original)
+++ subversion/branches/1.8.x-r1579588/NOTICE Fri Apr 25 00:24:11 2014
@@ -1,5 +1,5 @@
 Apache Subversion
-Copyright 2013 The Apache Software Foundation
+Copyright 2014 The Apache Software Foundation
 
 This product includes software developed by many people, and distributed
 under Contributor License Agreements to The Apache Software Foundation

Modified: subversion/branches/1.8.x-r1579588/STATUS
URL: http://svn.apache.org/viewvc/subversion/branches/1.8.x-r1579588/STATUS?rev=1589916&r1=1589915&r2=1589916&view=diff
==============================================================================
--- subversion/branches/1.8.x-r1579588/STATUS (original)
+++ subversion/branches/1.8.x-r1579588/STATUS Fri Apr 25 00:24:11 2014
@@ -51,8 +51,7 @@ Candidate changes:
    Branch:
      ^/subversion/branches/1.8.x-issue4437
    Votes:
-     +1: rhuijben
-     +1: (before branch, without r1567204, r1567228) philip
+     +1: rhuijben, philip
 
  * r1518942, r1536914, r1536931
    Fix commit of a specific mixed revision copy with non copy descendants that
@@ -63,7 +62,7 @@ Candidate changes:
      on some random descendant.
    Branch: ^/subversion/branches/1.8.x-r1536931
    Votes:
-     +1: rhuijben
+     +1: rhuijben, philip
 
  * r1536854
    Make 'svnadmin verify' detect inconsistencies that will prevent loading
@@ -118,8 +117,7 @@ Candidate changes:
    Branch:
      ^/subversion/branches/1.8.x-r1544597
    Votes:
-     +1: rhuijben
-     -0 (before branch): philip (Doesn't build, needs a branch due to r1539279)
+     +1: philip, rhuijben
 
  * r1555491
    Fix svn_fs_close_root for FSFS transaction roots.
@@ -169,18 +167,6 @@ Candidate changes:
                    overkill. The whole thing can be implemented with simple
                    atomic operations while mutexes may be a limited resource)
 
- * r1571747, r1571787, r1571795
-   Resolve the 'commit_util.c' (repos_root_url && repos_relpath) assertion.
-   Notes:
-     This assertion is raised when specifically committing a deleted
-     descendant, like via a checkbox list in a GUI client.
-   Justification:
-     Often reported assertion by users. Upto now very hard to reproduce
-     for these users. Probably because they didn's see that the node they
-     deleted wasn't added to the repository yet.
-   Votes:
-     +1: rhuijben, philip
-
  * r1575525, r1575915
    Resolve issue #4427: File externals can't be exported.
    Justification:
@@ -193,70 +179,90 @@ Candidate changes:
    Votes:
      +1: rhuijben
 
- * r1577151
-   Make 'svn merge' honor the 'preserved-conflict-file-exts' setting.
+ * r1579588
+   ra_serf: Fix 'svn unlock' interop with generic DAV clients that use timeout
    Justification:
-     While really a behavior change that doesn't belong in a patch release
-     I'm guessing nobody knew that we didn't implement this flag in this
-     scenario.
+     Local fix to resolve user reported issue.
+   Notes:
+     Branch needed as the lock code was split to multiple files on trunk.
+   Branch:
+     ^/subversion/branches/1.8.x-r1579588
    Votes:
-     +1: rhuijben
+     +1: philip, rhuijben
 
- * r1577294
-   Make interactive conflict resolver behave as designed.
+ * r1580626, r1580650, r1581430
+   Fix 'svn copy URL WC' after the working copy is relocated
    Justification:
-     This was intended to be the behavior form the start.  A typo in a
-     refactoring broke it.  This fix helps users avoid accidentally choosing
-     'mark resolved' and committing conflict markers.
+     Without this patch (which is a followup of 1560690 backported in 1.8.8),
+     descendants of copies in a relocated working copy are marked as incomplete
+     (and these nodes are all created at their own op-depth)
+   Branch:
+     ^/subversion/branches/1.8.x-r1580626
+   Votes:
+     +1: rhuijben, philip
+
+ * ^/subversion/branches/1.8.x-serf-no-lock-support
+   Resolve regression in 'svn ls -v' against mod_dav_svn repositories that
+   don't implement the locks report.
+   Justification:
+     svn ls -v (or the api equivalent) should just work. Regression against
+     <= 1.7 and perhaps in some cases early 1.8.x that didn't properly
+     check for errors.
+   Notes:
+     The equivalent patch on trunk was part of a complete error handling
+     refactoring.
    Votes:
-     +1: breser
+     +1: rhuijben, philip
 
- * r1577812, r1577813, r1579429
-   Resolve a segfault when 'svn merge --force' merges a directory delete
+ * r1584576, r1584592, r1584745
+   Resolve issue #3515 "mod_dav_svn cannot refresh any locks"
    Justification:
-     Even though this merge flag is not recommended, it shouldn't cause a
-     segfault.
+     Without this patch generic DAV clients can not refresh their own locks,
+     causing them to lose their locks.
    Notes:
-     r1577812 contains the actual fix and a regression test. r1577813 is
-     a minor improvement. A branch is necessary because a comment right above
-     the fix contained a typo that was fixed on trunk in a huge commit of many
-     typo fixes.
+     Patch needed, because a plain merge triggers a text conflict while
+     removing the XFail marker from the test. r1584745 makes the test code
+     compatible with 1.8.
    Branch:
-     ^/subversion/branches/1.8.x-r1577812
+     ^/subversion/branches/1.8.x-r1584592
+     (merge from trunk if ^/subversion/branches/1.8.x-r1584342 is merged first)
    Votes:
-     +1: philip, rhuijben
+     +1: rhuijben, philip
 
- * r1578273, r1578311, r1578326
-   Make svn_ra_get_locks() and svn_ra_get_lock() report not locked nodes
-   with a NULL svn_lock_t *, as documented.
-   Justification:
-     Many clients use the existance of an svn_lock_t on a node via info/status
-     as a boolean to note that there is a lock. But because we didn't properly
-     check the result we reported mostly empty svn_lock_t instances in more
-     cases. Even on directories!
+ * r1577739, r1577755, r1588772, r1588778
+   Resolve issue #4480: Mergeinfo overwritten on successive merges
+   Justification:
+     This issue allows accidentally destroying mergeinfo changes and other
+     property changes.
    Notes:
-     A branch is needed, because the serf lock handling code was refactored and
-     split to multiple files on trunk.
+     The trunk change uses a new fs layer api. The branch reimplements the
+     same change with fs ids.
    Branch:
-     ^/subversion/branches/1.8.x-r1578311
+     ^/subversion/branches/1.8.x-issue4480
    Votes:
      +1: rhuijben, philip
 
- * r1578670, r1578820, r1579274
-   Fix the order of node record headers written by svndumpfilter.
+ * r1589184, r1589188
+   Properly handle properties not present and excluded on cross wc copy
    Justification:
-     Makes output match the rules documented in notes/dump-load-format.txt.
+     Cross working copy copies should just work.
    Votes:
-     +1: philip, rhuijben
+     +1: rhuijben
 
- * r1578853, r1578875
-   Fix svnserve to only send inherited properties when necessary.
+ * r1589360
+   Make property output in 'svn diff' stable
    Justification:
-     Performance regression from 1.7, reported by a user.
-   Branch:
-     ^/subversion/branches/1.8.x-r1578853
+     Local change that makes it easier to compare patch files.
    Votes:
-     +1: philip, rhuijben
+     +1: rhuijben
+     -0: stefan2 (compiler misses "private/svn_sorts_private.h")
+     
+ * r1589460, r1589486
+   Fix copying parents of locally deleted nodes between working copies.
+   Justification:
+     Resolves a case of creating invalid working copy state.
+   Votes:
+     +1: rhuijben
 
 Veto-blocked changes:
 =====================
@@ -286,21 +292,3 @@ Veto-blocked changes:
 
 Approved changes:
 =================
-
- * r1574868
-   Don't let invalid mergeinfo stop 'svnadmin dump' from producing a dump.
-     Part of issue #4476 "Mergeinfo containing r0 makes svnsync and svnadmin
-     dump fail".
-   Justification:
-     A formatting error in what is essentially client-side metadata, albeit
-     with repository-side interpretation as well, should never prevent
-     dumping the repository. This issue only occurs when svnadmin is trying
-     to warn us of mergeinfo revisions that might be unexpected, so it is
-     not essential.
-   Notes:
-     There is a work-around, at least in theory: a dump starting from
-     revision 0 or 1 does not suffer from this problem.
-   Branch:
-     ^/subversion/branches/1.8.x-r1574868
-   Votes:
-     +1: julianfoad, philip, rhuijben

Modified: subversion/branches/1.8.x-r1579588/build/ac-macros/apache.m4
URL: http://svn.apache.org/viewvc/subversion/branches/1.8.x-r1579588/build/ac-macros/apache.m4?rev=1589916&r1=1589915&r2=1589916&view=diff
==============================================================================
--- subversion/branches/1.8.x-r1579588/build/ac-macros/apache.m4 (original)
+++ subversion/branches/1.8.x-r1579588/build/ac-macros/apache.m4 Fri Apr 25 00:24:11 2014
@@ -118,6 +118,27 @@ apache_minor_version=AP_SERVER_MINORVERS
   CPPFLAGS="$old_CPPFLAGS"
 fi
 
+# check for some busted versions of mod_dav
+# in particular 2.2.25, 2.4.5, and 2.4.6 had the following bugs which are
+# troublesome for Subversion:
+# PR 55304: https://issues.apache.org/bugzilla/show_bug.cgi?id=55304
+# PR 55306: https://issues.apache.org/bugzilla/show_bug.cgi?id=55306
+# PR 55397: https://issues.apache.org/bugzilla/show_bug.cgi?id=55397
+if test -n "$APXS" && test "$APXS" != "no"; then
+  AC_MSG_CHECKING([mod_dav version])
+  old_CPPFLAGS="$CPPFLAGS"
+  CPPFLAGS="$CPPFLAGS $SVN_APR_INCLUDES"
+  blacklisted_versions_regex=["\"2\" \"\.\" (\"2\" \"\.\" \"25\"|\"4\" \"\.\" \"[56]\")"]
+  AC_EGREP_CPP([apache_version= *$blacklisted_versions_regex],
+               [
+#include "$APXS_INCLUDE/ap_release.h"
+apache_version=AP_SERVER_BASEREVISION],
+               [AC_MSG_RESULT([broken])
+                AC_MSG_ERROR([Apache httpd version includes a broken mod_dav; use a newer version of httpd])],
+               [AC_MSG_RESULT([acceptable])])
+  CPPFLAGS="$old_CPPFLAGS"
+fi
+
 AC_ARG_WITH(apache-libexecdir,
             [AS_HELP_STRING([[--with-apache-libexecdir[=PATH]]],
                             [Install Apache modules to Apache's configured

Modified: subversion/branches/1.8.x-r1579588/build/ac-macros/compiler.m4
URL: http://svn.apache.org/viewvc/subversion/branches/1.8.x-r1579588/build/ac-macros/compiler.m4?rev=1589916&r1=1589915&r2=1589916&view=diff
==============================================================================
--- subversion/branches/1.8.x-r1579588/build/ac-macros/compiler.m4 (original)
+++ subversion/branches/1.8.x-r1579588/build/ac-macros/compiler.m4 Fri Apr 25 00:24:11 2014
@@ -33,24 +33,27 @@ AC_DEFUN([_SVN_XXFLAGS_ADD_IFELSE],
 [
   _svn_xxflags__save="[$][$3]"
   AC_LANG_PUSH([$1])
-  AC_MSG_CHECKING([if [$][$2] accepts $4])
-  [$3]="$4 [$][$3]"
-  AC_COMPILE_IFELSE([AC_LANG_SOURCE([[]])],[
+  AC_MSG_CHECKING([if [$][$2] accepts $5])
+  [$3]="$5 [$][$3]"
+  dnl Compiling is not enough: Solaris cc accepts invalid options at
+  dnl compile-time and just warns, assuming they are for the linker,
+  dnl but they cause errors at link-time.
+  AC_LINK_IFELSE([AC_LANG_SOURCE([$4])],[
     AC_MSG_RESULT([yes])
-    $5
+    $6
   ],[
     AC_MSG_RESULT([no])
     [$3]="$_svn_xxflags__save"
-    $6
+    $7
   ])
   AC_LANG_POP([$1])
 ])
 
 AC_DEFUN([SVN_CFLAGS_ADD_IFELSE],
-  [_SVN_XXFLAGS_ADD_IFELSE([C],[CC],[CFLAGS],[$1],[$2],[$3])])
+  [_SVN_XXFLAGS_ADD_IFELSE([C],[CC],[CFLAGS],[[int main(void){return 0;}]],[$1],[$2],[$3])])
 
 AC_DEFUN([SVN_CXXFLAGS_ADD_IFELSE],
-  [_SVN_XXFLAGS_ADD_IFELSE([C++],[CXX],[CXXFLAGS],[$1],[$2],[$3])])
+  [_SVN_XXFLAGS_ADD_IFELSE([C++],[CXX],[CXXFLAGS],[[int main(){}]],[$1],[$2],[$3])])
 
 
 AC_DEFUN([SVN_CC_MODE_SETUP],

Modified: subversion/branches/1.8.x-r1579588/configure.ac
URL: http://svn.apache.org/viewvc/subversion/branches/1.8.x-r1579588/configure.ac?rev=1589916&r1=1589915&r2=1589916&view=diff
==============================================================================
--- subversion/branches/1.8.x-r1579588/configure.ac (original)
+++ subversion/branches/1.8.x-r1579588/configure.ac Fri Apr 25 00:24:11 2014
@@ -98,7 +98,7 @@ dnl   now generating errors instead of s
 dnl   them.  Only .7 and later can guarantee repository
 dnl   integrity with FSFS.
 
-APR_VER_REGEXES=["0\.9\.[7-9] 0\.9\.1[0-9] 1\. 2\."]
+APR_VER_REGEXES=["0\.9\.[7-9] 0\.9\.[12][0-9] 1\. 2\."]
 
 SVN_LIB_APR($APR_VER_REGEXES)
 
@@ -755,7 +755,7 @@ AC_ARG_WITH(libmagic,AS_HELP_STRING([--w
     CPPFLAGS="$CPPFLAGS -I$libmagic_prefix/include"
     AC_CHECK_HEADERS(magic.h,[
       save_ldflags="$LDFLAGS"
-      LDFLAGS="-L$libmagic_prefix/lib"
+      LDFLAGS="-L$libmagic_prefix/lib $LDFLAGS"
       AC_CHECK_LIB(magic, magic_open, [libmagic_found="yes"])
       LDFLAGS="$save_ldflags"
     ])

Propchange: subversion/branches/1.8.x-r1579588/configure.ac
------------------------------------------------------------------------------
  Merged /subversion/branches/1.8.x-apr-0.9/configure.ac:r1585493-1589570
  Merged /subversion/trunk/configure.ac:r1577200
  Merged /subversion/branches/1.8.x/configure.ac:r1579589-1589912

Modified: subversion/branches/1.8.x-r1579588/subversion/bindings/javahl/native/JNIUtil.cpp
URL: http://svn.apache.org/viewvc/subversion/branches/1.8.x-r1579588/subversion/bindings/javahl/native/JNIUtil.cpp?rev=1589916&r1=1589915&r2=1589916&view=diff
==============================================================================
--- subversion/branches/1.8.x-r1579588/subversion/bindings/javahl/native/JNIUtil.cpp (original)
+++ subversion/branches/1.8.x-r1579588/subversion/bindings/javahl/native/JNIUtil.cpp Fri Apr 25 00:24:11 2014
@@ -418,7 +418,7 @@ JNIUtil::putErrorsInTrace(svn_error_t *e
   env->DeleteLocalRef(jfileName);
 }
 
-void JNIUtil::handleSVNError(svn_error_t *err)
+void JNIUtil::wrappedHandleSVNError(svn_error_t *err)
 {
   std::string msg;
   assembleErrorMessage(svn_error_purge_tracing(err), 0, APR_SUCCESS, msg);
@@ -546,7 +546,16 @@ void JNIUtil::handleSVNError(svn_error_t
 #endif
 
   env->Throw(static_cast<jthrowable>(env->PopLocalFrame(nativeException)));
+}
 
+void JNIUtil::handleSVNError(svn_error_t *err)
+{
+  try {
+    wrappedHandleSVNError(err);
+  } catch (...) {
+    svn_error_clear(err);
+    throw;
+  }
   svn_error_clear(err);
 }
 
@@ -646,28 +655,42 @@ bool JNIUtil::isJavaExceptionThrown()
 const char *
 JNIUtil::thrownExceptionToCString(SVN::Pool &in_pool)
 {
-  const char *msg;
+  const char *msg = NULL;
   JNIEnv *env = getEnv();
+  apr_pool_t *pool = in_pool.getPool();
   if (env->ExceptionCheck())
     {
       jthrowable t = env->ExceptionOccurred();
-      static jmethodID getMessage = 0;
-      if (getMessage == 0)
+      jclass cls = env->GetObjectClass(t);
+
+      jstring jclass_name;
+      {
+        jmethodID mid = env->GetMethodID(cls, "getClass", "()Ljava/lang/Class;");
+        jobject clsobj = env->CallObjectMethod(t, mid);
+        jclass basecls = env->GetObjectClass(clsobj);
+        mid = env->GetMethodID(basecls, "getName", "()Ljava/lang/String;");
+        jclass_name = (jstring) env->CallObjectMethod(clsobj, mid);
+      }
+
+      jstring jmessage;
+      {
+        jmethodID mid = env->GetMethodID(cls, "getMessage",
+                                         "()Ljava/lang/String;");
+        jmessage = (jstring) env->CallObjectMethod(t, mid);
+      }
+
+      JNIStringHolder class_name(jclass_name);
+      if (jmessage)
         {
-          jclass clazz = env->FindClass("java/lang/Throwable");
-          getMessage = env->GetMethodID(clazz, "getMessage",
-                                        "(V)Ljava/lang/String;");
-          env->DeleteLocalRef(clazz);
+          JNIStringHolder message(jmessage);
+          msg = apr_pstrcat(pool,
+                            static_cast<const char*>(class_name), ": ",
+                            static_cast<const char*>(message), NULL);
         }
-      jstring jmsg = (jstring) env->CallObjectMethod(t, getMessage);
-      JNIStringHolder tmp(jmsg);
-      msg = tmp.pstrdup(in_pool.getPool());
+      else
+        msg = class_name.pstrdup(pool);
       // ### Conditionally add t.printStackTrace() to msg?
     }
-  else
-    {
-      msg = NULL;
-    }
   return msg;
 }
 

Modified: subversion/branches/1.8.x-r1579588/subversion/bindings/javahl/native/JNIUtil.h
URL: http://svn.apache.org/viewvc/subversion/branches/1.8.x-r1579588/subversion/bindings/javahl/native/JNIUtil.h?rev=1589916&r1=1589915&r2=1589916&view=diff
==============================================================================
--- subversion/branches/1.8.x-r1579588/subversion/bindings/javahl/native/JNIUtil.h (original)
+++ subversion/branches/1.8.x-r1579588/subversion/bindings/javahl/native/JNIUtil.h Fri Apr 25 00:24:11 2014
@@ -141,6 +141,7 @@ class JNIUtil
   enum { noLog, errorLog, exceptionLog, entryLog } LogLevel;
 
  private:
+  static void wrappedHandleSVNError(svn_error_t *err);
   static void assembleErrorMessage(svn_error_t *err, int depth,
                                    apr_status_t parent_apr_err,
                                    std::string &buffer);

Modified: subversion/branches/1.8.x-r1579588/subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.c
URL: http://svn.apache.org/viewvc/subversion/branches/1.8.x-r1579588/subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.c?rev=1589916&r1=1589915&r2=1589916&view=diff
==============================================================================
--- subversion/branches/1.8.x-r1579588/subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.c (original)
+++ subversion/branches/1.8.x-r1579588/subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.c Fri Apr 25 00:24:11 2014
@@ -1192,6 +1192,7 @@ DEFINE_DUP(auth_ssl_server_cert_info)
 DEFINE_DUP(wc_entry)
 DEFINE_DUP(client_diff_summarize)
 DEFINE_DUP(dirent)
+DEFINE_DUP(log_entry)
 DEFINE_DUP_NO_CONVENIENCE(client_commit_item3)
 DEFINE_DUP_NO_CONVENIENCE(client_proplist_item)
 DEFINE_DUP_NO_CONVENIENCE(wc_external_item2)
@@ -2155,9 +2156,7 @@ svn_swig_rb_log_entry_receiver(void *bat
 
         cbb.receiver = proc;
         cbb.message = id_call;
-        cbb.args = rb_ary_new3(1,
-                               c2r_swig_type((void *)entry,
-                                             (void *)"svn_log_entry_t *"));
+        cbb.args = rb_ary_new3(1, c2r_log_entry__dup(entry));
         invoke_callback_handle_error((VALUE)(&cbb), rb_pool, &err);
     }
     return err;

Modified: subversion/branches/1.8.x-r1579588/subversion/bindings/swig/ruby/test/test_client.rb
URL: http://svn.apache.org/viewvc/subversion/branches/1.8.x-r1579588/subversion/bindings/swig/ruby/test/test_client.rb?rev=1589916&r1=1589915&r2=1589916&view=diff
==============================================================================
--- subversion/branches/1.8.x-r1579588/subversion/bindings/swig/ruby/test/test_client.rb (original)
+++ subversion/branches/1.8.x-r1579588/subversion/bindings/swig/ruby/test/test_client.rb Fri Apr 25 00:24:11 2014
@@ -2262,7 +2262,6 @@ class SvnClientTest < Test::Unit::TestCa
         end
       end
       config = Svn::Core::Config.config(@config_path)
-      assert_nil(ctx.config)
       assert_equal(options, config[Svn::Core::CONFIG_CATEGORY_SERVERS].to_hash)
       ctx.config = config
       assert_equal(options,

Modified: subversion/branches/1.8.x-r1579588/subversion/bindings/swig/svn_client.i
URL: http://svn.apache.org/viewvc/subversion/branches/1.8.x-r1579588/subversion/bindings/swig/svn_client.i?rev=1589916&r1=1589915&r2=1589916&view=diff
==============================================================================
--- subversion/branches/1.8.x-r1579588/subversion/bindings/swig/svn_client.i (original)
+++ subversion/branches/1.8.x-r1579588/subversion/bindings/swig/svn_client.i Fri Apr 25 00:24:11 2014
@@ -395,7 +395,13 @@ Callback: svn_client_diff_summarize_func
   svn_client_ctx_t(apr_pool_t *pool) {
     svn_error_t *err;
     svn_client_ctx_t *self;
-    err = svn_client_create_context(&self, pool);
+    apr_hash_t *cfg_hash;
+
+    err = svn_config_get_config(&cfg_hash, NULL, pool);
+    if (err)
+      svn_swig_rb_handle_svn_error(err);
+
+    err = svn_client_create_context2(&self, cfg_hash, pool);
     if (err)
       svn_swig_rb_handle_svn_error(err);
     return self;
@@ -512,7 +518,13 @@ svn_client_set_config(svn_client_ctx_t *
                       apr_hash_t *config,
                       apr_pool_t *pool)
 {
-  ctx->config = config;
+  svn_error_t *err;
+
+  apr_hash_clear(ctx->config);
+  err = svn_config_copy_config(&ctx->config, config,
+                               apr_hash_pool_get(ctx->config));
+  if (err)
+    svn_swig_rb_handle_svn_error(err);
   return Qnil;
 }
 

Modified: subversion/branches/1.8.x-r1579588/subversion/include/private/svn_cache.h
URL: http://svn.apache.org/viewvc/subversion/branches/1.8.x-r1579588/subversion/include/private/svn_cache.h?rev=1589916&r1=1589915&r2=1589916&view=diff
==============================================================================
--- subversion/branches/1.8.x-r1579588/subversion/include/private/svn_cache.h (original)
+++ subversion/branches/1.8.x-r1579588/subversion/include/private/svn_cache.h Fri Apr 25 00:24:11 2014
@@ -182,6 +182,10 @@ typedef struct svn_cache__info_t
  * if they are strings.  Cached values will be copied in and out of
  * the cache using @a serialize_func and @a deserialize_func, respectively.
  *
+ * If @a deserialize_func is NULL, then the data is returned as an
+ * svn_stringbuf_t; if @a serialize_func is NULL, then the data is
+ * assumed to be an svn_stringbuf_t.
+ *
  * The cache stores up to @a pages * @a items_per_page items at a
  * time.  The exact cache invalidation strategy is not defined here,
  * but in general, a lower value for @a items_per_page means more
@@ -224,7 +228,7 @@ svn_cache__create_inprocess(svn_cache__t
  * other caches.  @a *cache_p will be allocated in @a result_pool.
  *
  * If @a deserialize_func is NULL, then the data is returned as an
- * svn_string_t; if @a serialize_func is NULL, then the data is
+ * svn_stringbuf_t; if @a serialize_func is NULL, then the data is
  * assumed to be an svn_stringbuf_t.
  *
  * These caches are always thread safe.
@@ -309,7 +313,7 @@ svn_cache__membuffer_cache_create(svn_me
  * this cache from other caches.  @a *cache_p will be allocated in @a result_pool.
  *
  * If @a deserialize_func is NULL, then the data is returned as an
- * svn_string_t; if @a serialize_func is NULL, then the data is
+ * svn_stringbuf_t; if @a serialize_func is NULL, then the data is
  * assumed to be an svn_stringbuf_t.
  *
  * If @a thread_safe is true, and APR is compiled with threads, all

Modified: subversion/branches/1.8.x-r1579588/subversion/include/private/svn_dep_compat.h
URL: http://svn.apache.org/viewvc/subversion/branches/1.8.x-r1579588/subversion/include/private/svn_dep_compat.h?rev=1589916&r1=1589915&r2=1589916&view=diff
==============================================================================
--- subversion/branches/1.8.x-r1579588/subversion/include/private/svn_dep_compat.h (original)
+++ subversion/branches/1.8.x-r1579588/subversion/include/private/svn_dep_compat.h Fri Apr 25 00:24:11 2014
@@ -78,6 +78,7 @@ void svn_hash__clear(struct apr_hash_t *
 #if !APR_VERSION_AT_LEAST(1,0,0)
 #define APR_UINT64_C(val) UINT64_C(val)
 #define APR_FPROT_OS_DEFAULT APR_OS_DEFAULT
+#define apr_hash_make_custom(pool,hash_func) apr_hash_make(pool)
 #endif
 
 #if !APR_VERSION_AT_LEAST(1,3,0)
@@ -114,6 +115,12 @@ typedef apr_uint32_t apr_uintptr_t;
 #define SVN_LOCK_IS_BUSY(x) APR_STATUS_IS_EBUSY(x)
 #endif
 
+#if !APR_VERSION_AT_LEAST(1,4,0)
+#ifndef apr_time_from_msec
+#define apr_time_from_msec(msec) ((apr_time_t)(msec) * 1000)
+#endif
+#endif
+
 /**
  * Check at compile time if the Serf version is at least a certain
  * level.

Modified: subversion/branches/1.8.x-r1579588/subversion/libsvn_client/commit_util.c
URL: http://svn.apache.org/viewvc/subversion/branches/1.8.x-r1579588/subversion/libsvn_client/commit_util.c?rev=1589916&r1=1589915&r2=1589916&view=diff
==============================================================================
--- subversion/branches/1.8.x-r1579588/subversion/libsvn_client/commit_util.c (original)
+++ subversion/branches/1.8.x-r1579588/subversion/libsvn_client/commit_util.c Fri Apr 25 00:24:11 2014
@@ -892,7 +892,7 @@ harvest_status_callback(void *status_bat
   if (matches_changelists
       && (is_harvest_root || baton->changelists)
       && state_flags
-      && is_added
+      && (is_added || (is_deleted && is_op_root && status->copied))
       && baton->danglers)
     {
       /* If a node is added, its parent must exist in the repository at the

Modified: subversion/branches/1.8.x-r1579588/subversion/libsvn_client/merge.c
URL: http://svn.apache.org/viewvc/subversion/branches/1.8.x-r1579588/subversion/libsvn_client/merge.c?rev=1589916&r1=1589915&r2=1589916&view=diff
==============================================================================
--- subversion/branches/1.8.x-r1579588/subversion/libsvn_client/merge.c (original)
+++ subversion/branches/1.8.x-r1579588/subversion/libsvn_client/merge.c Fri Apr 25 00:24:11 2014
@@ -322,6 +322,10 @@ typedef struct merge_cmd_baton_t {
   const char *diff3_cmd;
   const apr_array_header_t *merge_options;
 
+  /* Array of file extension patterns to preserve as extensions in
+     generated conflict files. */
+  const apr_array_header_t *ext_patterns;
+
   /* RA sessions used throughout a merge operation.  Opened/re-parented
      as needed.
 
@@ -2023,17 +2027,36 @@ merge_file_changed(const char *relpath,
     {
       svn_boolean_t has_local_mods;
       enum svn_wc_merge_outcome_t content_outcome;
+      const char *target_label;
+      const char *left_label;
+      const char *right_label;
+      const char *path_ext = "";
+
+      if (merge_b->ext_patterns && merge_b->ext_patterns->nelts)
+        {
+          svn_path_splitext(NULL, &path_ext, local_abspath, scratch_pool);
+          if (! (*path_ext
+                 && svn_cstring_match_glob_list(path_ext,
+                                                merge_b->ext_patterns)))
+            {
+              path_ext = "";
+            }
+        }
 
       /* 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 */
-      const char *target_label = _(".working");
-      const char *left_label = apr_psprintf(scratch_pool,
-                                            _(".merge-left.r%ld"),
-                                            left_source->revision);
-      const char *right_label = apr_psprintf(scratch_pool,
-                                             _(".merge-right.r%ld"),
-                                             right_source->revision);
+
+      target_label = apr_psprintf(scratch_pool, _(".working%s%s"),
+                                  *path_ext ? "." : "", path_ext);
+      left_label = apr_psprintf(scratch_pool,
+                                _(".merge-left.r%ld%s%s"),
+                                left_source->revision,
+                                *path_ext ? "." : "", path_ext);
+      right_label = apr_psprintf(scratch_pool,
+                                 _(".merge-right.r%ld%s%s"),
+                                 right_source->revision,
+                                 *path_ext ? "." : "", path_ext);
 
       SVN_ERR(svn_wc_text_modified_p2(&has_local_mods, ctx->wc_ctx,
                                       local_abspath, FALSE, scratch_pool));
@@ -3062,7 +3085,6 @@ merge_dir_deleted(const char *relpath,
   struct merge_dir_baton_t *db = dir_baton;
   const char *local_abspath = svn_dirent_join(merge_b->target->abspath,
                                               relpath, scratch_pool);
-  struct dir_delete_baton_t *delb;
   svn_boolean_t same;
   apr_hash_t *working_props;
 
@@ -3093,66 +3115,69 @@ merge_dir_deleted(const char *relpath,
                             scratch_pool, scratch_pool));
 
   if (merge_b->force_delete)
-    same = TRUE;
+    {
+      /* In this legacy mode we just assume that a directory delete
+         matches any directory. db->delete_state is NULL */
+      same = TRUE;
+    }
   else
     {
+      struct dir_delete_baton_t *delb;
+
       /* Compare the properties */
       SVN_ERR(properties_same_p(&same, left_props, working_props,
                                 scratch_pool));
-    }
+      delb = db->delete_state;
+      assert(delb != NULL);
 
-  delb = db->delete_state;
-  assert(delb != NULL);
+      if (! same)
+        {
+          delb->found_edit = TRUE;
+        }
+      else
+        {
+          store_path(delb->compared_abspaths, local_abspath);
+        }
 
-  if (! same)
-    {
-      delb->found_edit = TRUE;
-    }
-  else
-    {
-      store_path(delb->compared_abspaths, local_abspath);
-    }
+      if (delb->del_root != db)
+        return SVN_NO_ERROR;
 
-  if (delb->del_root != db)
-    return SVN_NO_ERROR;
+      if (delb->found_edit)
+        same = FALSE;
+      else
+        {
+          apr_array_header_t *ignores;
+          svn_error_t *err;
+          same = TRUE;
 
-  if (delb->found_edit)
-    same = FALSE;
-  else if (merge_b->force_delete)
-    same = TRUE;
-  else
-    {
-      apr_array_header_t *ignores;
-      svn_error_t *err;
-      same = TRUE;
+          SVN_ERR(svn_wc_get_default_ignores(&ignores, merge_b->ctx->config,
+                                             scratch_pool));
 
-      SVN_ERR(svn_wc_get_default_ignores(&ignores, merge_b->ctx->config,
-                                         scratch_pool));
+          /* None of the descendants was modified, but maybe there are
+             descendants we haven't walked?
 
-      /* None of the descendants was modified, but maybe there are
-         descendants we haven't walked?
+             Note that we aren't interested in changes, as we already verified
+             changes in the paths touched by the merge. And the existence of
+             other paths is enough to mark the directory edited */
+          err = svn_wc_walk_status(merge_b->ctx->wc_ctx, local_abspath,
+                                   svn_depth_infinity, TRUE /* get-all */,
+                                   FALSE /* no-ignore */,
+                                   TRUE /* ignore-text-mods */, ignores,
+                                   verify_touched_by_del_check, delb,
+                                   merge_b->ctx->cancel_func,
+                                   merge_b->ctx->cancel_baton,
+                                   scratch_pool);
 
-         Note that we aren't interested in changes, as we already verified
-         changes in the paths touched by the merge. And the existance of
-         other paths is enough to mark the directory edited */
-      err = svn_wc_walk_status(merge_b->ctx->wc_ctx, local_abspath,
-                               svn_depth_infinity, TRUE /* get-all */,
-                               FALSE /* no-ignore */,
-                               TRUE /* ignore-text-mods */, ignores,
-                               verify_touched_by_del_check, delb,
-                               merge_b->ctx->cancel_func,
-                               merge_b->ctx->cancel_baton,
-                               scratch_pool);
+          if (err)
+            {
+              if (err->apr_err != SVN_ERR_CEASE_INVOCATION)
+                return svn_error_trace(err);
 
-      if (err)
-        {
-          if (err->apr_err != SVN_ERR_CEASE_INVOCATION)
-            return svn_error_trace(err);
+              svn_error_clear(err);
+            }
 
-          svn_error_clear(err);
+          same = ! delb->found_edit;
         }
-
-      same = ! delb->found_edit;
     }
 
   if (same && !merge_b->dry_run)
@@ -9668,6 +9693,7 @@ do_merge(apr_hash_t **modified_subtrees,
   merge_cmd_baton_t merge_cmd_baton = { 0 };
   svn_config_t *cfg;
   const char *diff3_cmd;
+  const char *preserved_exts_str;
   int i;
   svn_boolean_t checked_mergeinfo_capability = FALSE;
   svn_ra_session_t *ra_session1 = NULL, *ra_session2 = NULL;
@@ -9728,6 +9754,11 @@ do_merge(apr_hash_t **modified_subtrees,
   if (diff3_cmd != NULL)
     SVN_ERR(svn_path_cstring_to_utf8(&diff3_cmd, diff3_cmd, scratch_pool));
 
+    /* See which files the user wants to preserve the extension of when
+     conflict files are made. */
+  svn_config_get(cfg, &preserved_exts_str, SVN_CONFIG_SECTION_MISCELLANY,
+                 SVN_CONFIG_OPTION_PRESERVED_CF_EXTS, "");
+
   /* Build the merge context baton (or at least the parts of it that
      don't need to be reset for each merge source).  */
   merge_cmd_baton.force_delete = force_delete;
@@ -9743,6 +9774,11 @@ do_merge(apr_hash_t **modified_subtrees,
   merge_cmd_baton.pool = iterpool;
   merge_cmd_baton.merge_options = merge_options;
   merge_cmd_baton.diff3_cmd = diff3_cmd;
+  merge_cmd_baton.ext_patterns = *preserved_exts_str
+                          ? svn_cstring_split(preserved_exts_str, "\n\r\t\v ",
+                                              FALSE, scratch_pool)
+                          : NULL;
+
   merge_cmd_baton.use_sleep = use_sleep;
 
   /* Do we already know the specific subtrees with mergeinfo we want
@@ -10447,15 +10483,10 @@ merge_locked(conflict_report_t **conflic
     }
   else
     {
-      merge_source_t source;
-
-      source.loc1 = source1_loc;
-      source.loc2 = source2_loc;
-      source.ancestral = FALSE;
-
       /* Build a single-item merge_source_t array. */
       merge_sources = apr_array_make(scratch_pool, 1, sizeof(merge_source_t *));
-      APR_ARRAY_PUSH(merge_sources, merge_source_t *) = &source;
+      APR_ARRAY_PUSH(merge_sources, merge_source_t *)
+        = merge_source_create(source1_loc, source2_loc, FALSE, scratch_pool);
     }
 
   err = do_merge(NULL, NULL, conflict_report, &use_sleep,
@@ -10761,7 +10792,7 @@ log_find_operative_revs(void *baton,
    UNMERGED_CATALOG represents the history (as mergeinfo) from
    TARGET_LOC that is not represented in SOURCE_LOC's
    explicit/inherited mergeinfo as represented by MERGED_CATALOG.
-   MERGEINFO_CATALOG may be empty if the source has no explicit or inherited
+   MERGED_CATALOG may be empty if the source has no explicit or inherited
    mergeinfo.
 
    Check that all of the unmerged revisions in UNMERGED_CATALOG's
@@ -11464,7 +11495,7 @@ find_reintegrate_merge(merge_source_t **
          prefix. */
       svn_mergeinfo_catalog_t final_unmerged_catalog = apr_hash_make(scratch_pool);
 
-      SVN_ERR(find_unsynced_ranges(source_loc, yc_ancestor,
+      SVN_ERR(find_unsynced_ranges(source_loc, &target->loc,
                                    unmerged_to_source_mergeinfo_catalog,
                                    merged_to_source_mergeinfo_catalog,
                                    final_unmerged_catalog,

Modified: subversion/branches/1.8.x-r1579588/subversion/libsvn_client/prop_commands.c
URL: http://svn.apache.org/viewvc/subversion/branches/1.8.x-r1579588/subversion/libsvn_client/prop_commands.c?rev=1589916&r1=1589915&r2=1589916&view=diff
==============================================================================
--- subversion/branches/1.8.x-r1579588/subversion/libsvn_client/prop_commands.c (original)
+++ subversion/branches/1.8.x-r1579588/subversion/libsvn_client/prop_commands.c Fri Apr 25 00:24:11 2014
@@ -890,8 +890,14 @@ svn_client_propget5(apr_hash_t **props,
           const char *copy_root_abspath;
           svn_boolean_t is_copy;
 
-          SVN_ERR(svn_dirent_get_absolute(&local_abspath, target,
-                                          scratch_pool));
+          /* Avoid assertion on the next line when somebody accidentally asks for
+             a working copy revision on a URL */
+          if (svn_path_is_url(target))
+            return svn_error_create(SVN_ERR_CLIENT_VERSIONED_PATH_REQUIRED,
+                                    NULL, NULL);
+
+          SVN_ERR_ASSERT(svn_dirent_is_absolute(target));
+          local_abspath = target;
 
           if (SVN_CLIENT__REVKIND_NEEDS_WC(peg_revision->kind))
             {
@@ -1293,6 +1299,12 @@ get_remote_props(const char *path_or_url
       const char *copy_root_abspath;
       svn_boolean_t is_copy;
 
+      /* Avoid assertion on the next line when somebody accidentally asks for
+         a working copy revision on a URL */
+      if (svn_path_is_url(path_or_url))
+        return svn_error_create(SVN_ERR_CLIENT_VERSIONED_PATH_REQUIRED,
+                                NULL, NULL);
+
       SVN_ERR(svn_dirent_get_absolute(&local_abspath, path_or_url,
                                       scratch_pool));
 

Modified: subversion/branches/1.8.x-r1579588/subversion/libsvn_delta/svndiff.c
URL: http://svn.apache.org/viewvc/subversion/branches/1.8.x-r1579588/subversion/libsvn_delta/svndiff.c?rev=1589916&r1=1589915&r2=1589916&view=diff
==============================================================================
--- subversion/branches/1.8.x-r1579588/subversion/libsvn_delta/svndiff.c (original)
+++ subversion/branches/1.8.x-r1579588/subversion/libsvn_delta/svndiff.c Fri Apr 25 00:24:11 2014
@@ -723,8 +723,6 @@ decode_window(svn_txdelta_window_t *wind
       svn_stringbuf_t *instout = svn_stringbuf_create_empty(pool);
       svn_stringbuf_t *ndout = svn_stringbuf_create_empty(pool);
 
-      /* these may in fact simply return references to insend */
-
       SVN_ERR(zlib_decode(insend, newlen, ndout,
                           SVN_DELTA_WINDOW_SIZE));
       SVN_ERR(zlib_decode(data, insend - data, instout,
@@ -739,7 +737,13 @@ decode_window(svn_txdelta_window_t *wind
     }
   else
     {
-      new_data->data = (const char *) insend;
+      /* Copy the data because an svn_string_t must have the invariant
+         data[len]=='\0'. */
+      char *buf = apr_palloc(pool, newlen + 1);
+
+      memcpy(buf, insend, newlen);
+      buf[newlen] = '\0';
+      new_data->data = buf;
       new_data->len = newlen;
     }
 

Modified: subversion/branches/1.8.x-r1579588/subversion/libsvn_fs_fs/fs.h
URL: http://svn.apache.org/viewvc/subversion/branches/1.8.x-r1579588/subversion/libsvn_fs_fs/fs.h?rev=1589916&r1=1589915&r2=1589916&view=diff
==============================================================================
--- subversion/branches/1.8.x-r1579588/subversion/libsvn_fs_fs/fs.h (original)
+++ subversion/branches/1.8.x-r1579588/subversion/libsvn_fs_fs/fs.h Fri Apr 25 00:24:11 2014
@@ -266,7 +266,7 @@ typedef struct fs_fs_data_t
   svn_cache__t *dir_cache;
 
   /* Fulltext cache; currently only used with memcached.  Maps from
-     rep key (revision/offset) to svn_string_t. */
+     rep key (revision/offset) to svn_stringbuf_t. */
   svn_cache__t *fulltext_cache;
 
   /* Access object to the atomics namespace used by revprop caching.

Modified: subversion/branches/1.8.x-r1579588/subversion/libsvn_ra_serf/getlocks.c
URL: http://svn.apache.org/viewvc/subversion/branches/1.8.x-r1579588/subversion/libsvn_ra_serf/getlocks.c?rev=1589916&r1=1589915&r2=1589916&view=diff
==============================================================================
--- subversion/branches/1.8.x-r1579588/subversion/libsvn_ra_serf/getlocks.c (original)
+++ subversion/branches/1.8.x-r1579588/subversion/libsvn_ra_serf/getlocks.c Fri Apr 25 00:24:11 2014
@@ -116,6 +116,7 @@ getlocks_closed(svn_ra_serf__xml_estate_
   if (leaving_state == LOCK)
     {
       const char *path = svn_hash_gets(attrs, "path");
+      const char *token = svn_hash_gets(attrs, "token");
       svn_boolean_t save_lock = FALSE;
 
       /* Filter out unwanted paths.  Since Subversion only allows
@@ -128,6 +129,12 @@ getlocks_closed(svn_ra_serf__xml_estate_
          c) we've asked for depth=files or depth=immediates, and this
             lock is on an immediate child of our query path.
       */
+      if (! token)
+        {
+          /* A lock without a token is not a lock; just an answer that there
+             is no lock on the node. */
+          save_lock = FALSE;
+        }
       if (strcmp(lock_ctx->path, path) == 0
           || lock_ctx->requested_depth == svn_depth_infinity)
         {
@@ -154,7 +161,7 @@ getlocks_closed(svn_ra_serf__xml_estate_
              them may have not been sent, so the value will be NULL.  */
 
           lock.path = path;
-          lock.token = svn_hash_gets(attrs, "token");
+          lock.token = token;
           lock.owner = svn_hash_gets(attrs, "owner");
           lock.comment = svn_hash_gets(attrs, "comment");
 

Modified: subversion/branches/1.8.x-r1579588/subversion/libsvn_ra_serf/locks.c
URL: http://svn.apache.org/viewvc/subversion/branches/1.8.x-r1579588/subversion/libsvn_ra_serf/locks.c?rev=1589916&r1=1589915&r2=1589916&view=diff
==============================================================================
--- subversion/branches/1.8.x-r1579588/subversion/libsvn_ra_serf/locks.c (original)
+++ subversion/branches/1.8.x-r1579588/subversion/libsvn_ra_serf/locks.c Fri Apr 25 00:24:11 2014
@@ -371,29 +371,30 @@ svn_error_t *
 svn_ra_serf__get_lock(svn_ra_session_t *ra_session,
                       svn_lock_t **lock,
                       const char *path,
-                      apr_pool_t *pool)
+                      apr_pool_t *result_pool)
 {
   svn_ra_serf__session_t *session = ra_session->priv;
   svn_ra_serf__handler_t *handler;
   svn_ra_serf__xml_context_t *xmlctx;
+  apr_pool_t *scratch_pool = svn_pool_create(result_pool);
   lock_info_t *lock_ctx;
   const char *req_url;
   svn_error_t *err;
 
-  req_url = svn_path_url_add_component2(session->session_url.path, path, pool);
+  req_url = svn_path_url_add_component2(session->session_url.path, path,
+                                        scratch_pool);
 
-  lock_ctx = apr_pcalloc(pool, sizeof(*lock_ctx));
-
-  lock_ctx->pool = pool;
+  lock_ctx = apr_pcalloc(scratch_pool, sizeof(*lock_ctx));
+  lock_ctx->pool = result_pool;
   lock_ctx->path = req_url;
-  lock_ctx->lock = svn_lock_create(pool);
-  lock_ctx->lock->path = apr_pstrdup(pool, path); /* be sure  */
+  lock_ctx->lock = svn_lock_create(result_pool);
+  lock_ctx->lock->path = apr_pstrdup(result_pool, path);
 
   xmlctx = svn_ra_serf__xml_context_create(locks_ttable,
                                            NULL, locks_closed, NULL,
                                            lock_ctx,
-                                           pool);
-  handler = svn_ra_serf__create_expat_handler(xmlctx, pool);
+                                           scratch_pool);
+  handler = svn_ra_serf__create_expat_handler(xmlctx, scratch_pool);
 
   handler->method = "PROPFIND";
   handler->path = req_url;
@@ -414,7 +415,7 @@ svn_ra_serf__get_lock(svn_ra_session_t *
 
   lock_ctx->handler = handler;
 
-  err = svn_ra_serf__context_run_one(handler, pool);
+  err = svn_ra_serf__context_run_one(handler, scratch_pool);
   err = determine_error(handler, err);
 
   if (handler->sline.code == 404)
@@ -429,7 +430,12 @@ svn_ra_serf__get_lock(svn_ra_session_t *
                               _("Server does not support locking features"));
     }
 
-  *lock = lock_ctx->lock;
+  if (lock_ctx->lock && lock_ctx->lock->token)
+    *lock = lock_ctx->lock;
+  else
+    *lock = NULL;
+
+  svn_pool_destroy(scratch_pool);
 
   return SVN_NO_ERROR;
 }
@@ -583,7 +589,7 @@ svn_ra_serf__unlock(svn_ra_session_t *ra
         {
           SVN_ERR(svn_ra_serf__get_lock(ra_session, &existing_lock, path,
                                         iterpool));
-          token = existing_lock->token;
+          token = existing_lock ? existing_lock->token : NULL;
           if (!token)
             {
               err = svn_error_createf(SVN_ERR_RA_NOT_LOCKED, NULL,

Propchange: subversion/branches/1.8.x-r1579588/subversion/libsvn_ra_serf/locks.c
------------------------------------------------------------------------------
--- svn:mergeinfo (added)
+++ svn:mergeinfo Fri Apr 25 00:24:11 2014
@@ -0,0 +1,111 @@
+/subversion/branches/1.5.x-r30215/subversion/libsvn_ra_serf/locks.c:870312
+/subversion/branches/1.7.x-fs-verify/subversion/libsvn_ra_serf/locks.c:1146708,1161180
+/subversion/branches/1.8.x/subversion/libsvn_ra_serf/locks.c:1579589-1589912
+/subversion/branches/1.8.x-apr-0.9/subversion/libsvn_ra_serf/locks.c:1585493-1589570
+/subversion/branches/1.8.x-busted-proxy/subversion/libsvn_ra_serf/locks.c:1499222-1502434
+/subversion/branches/1.8.x-issue4400/subversion/libsvn_ra_serf/locks.c:1507591-1512557
+/subversion/branches/1.8.x-issue4448/subversion/libsvn_ra_serf/locks.c:1540420-1541802
+/subversion/branches/1.8.x-javahl-exception-crash/subversion/libsvn_ra_serf/locks.c:1586424-1588151
+/subversion/branches/1.8.x-libsvnjavahl-version/subversion/libsvn_ra_serf/locks.c:1483910-1485054
+/subversion/branches/1.8.x-openssl-dirs/subversion/libsvn_ra_serf/locks.c:1535137-1540436
+/subversion/branches/1.8.x-r1477876/subversion/libsvn_ra_serf/locks.c:1477981-1487716
+/subversion/branches/1.8.x-r1481625/subversion/libsvn_ra_serf/locks.c:1481637-1482135
+/subversion/branches/1.8.x-r1495063/subversion/libsvn_ra_serf/locks.c:1495804-1501074
+/subversion/branches/1.8.x-r1497310-partial/subversion/libsvn_ra_serf/locks.c:1497500-1501063
+/subversion/branches/1.8.x-r1502267/subversion/libsvn_ra_serf/locks.c:1502268-1515998
+/subversion/branches/1.8.x-r1507044/subversion/libsvn_ra_serf/locks.c:1507282-1511571
+/subversion/branches/1.8.x-r1513879/subversion/libsvn_ra_serf/locks.c:1514699-1516021
+/subversion/branches/1.8.x-r1537147/subversion/libsvn_ra_serf/locks.c:1537201-1537216
+/subversion/branches/1.8.x-r1537193/subversion/libsvn_ra_serf/locks.c:1537217-1541815
+/subversion/branches/1.8.x-r1541790/subversion/libsvn_ra_serf/locks.c:1541791-1542075
+/subversion/branches/1.8.x-r1554978/subversion/libsvn_ra_serf/locks.c:1555500-1565076
+/subversion/branches/1.8.x-r1564215/subversion/libsvn_ra_serf/locks.c:1564281-1564620
+/subversion/branches/1.8.x-r1567286/subversion/libsvn_ra_serf/locks.c:1567364-1567731
+/subversion/branches/1.8.x-r1567985/subversion/libsvn_ra_serf/locks.c:1568016-1568055
+/subversion/branches/1.8.x-r1574868/subversion/libsvn_ra_serf/locks.c:1575329-1579873
+/subversion/branches/1.8.x-r1577151/subversion/libsvn_ra_serf/locks.c:1589064-1589574
+/subversion/branches/1.8.x-r1577812/subversion/libsvn_ra_serf/locks.c:1577814-1588145
+/subversion/branches/1.8.x-r1578311/subversion/libsvn_ra_serf/locks.c:1578312-1589576
+/subversion/branches/1.8.x-r1578853/subversion/libsvn_ra_serf/locks.c:1578879-1581682
+/subversion/branches/1.8.x-r1581305/subversion/libsvn_ra_serf/locks.c:1581320-1582587
+/subversion/branches/1.8.x-r1584342/subversion/libsvn_ra_serf/locks.c:1584350-1589572
+/subversion/branches/1.8.x-r175-daemonize/subversion/libsvn_ra_serf/locks.c:1515866-1516020
+/subversion/branches/1.8.x-serf-1.3+-windows/subversion/libsvn_ra_serf/locks.c:1517122-1533873
+/subversion/branches/1.8.x-svn_fs_info-removal/subversion/libsvn_ra_serf/locks.c:1467420-1468159
+/subversion/branches/1.8.x-svnsync-serf-memory/subversion/libsvn_ra_serf/locks.c:1515248-1515701
+/subversion/branches/1.8.x-synvsync-serf-memory/subversion/libsvn_ra_serf/locks.c:1515247
+/subversion/branches/1.8.x-tristate-chunked-request/subversion/libsvn_ra_serf/locks.c:1502435-1503894
+/subversion/branches/10Gb/subversion/libsvn_ra_serf/locks.c:1388102,1388163-1388190,1388195,1388202,1388205,1388211,1388276,1388362,1388375,1388394,1388636,1388639-1388640,1388643-1388644,1388654,1388720,1388789,1388795,1388801,1388805,1388807,1388810,1388816,1389044,1389276,1389289,1389662,1389867,1390017,1390209,1390216,1390407,1390409,1390414,1390419,1390955
+/subversion/branches/atomic-revprop/subversion/libsvn_ra_serf/locks.c:965046-1000689
+/subversion/branches/auto-props-sdc/subversion/libsvn_ra_serf/locks.c:1384106-1401643
+/subversion/branches/bdb-reverse-deltas/subversion/libsvn_ra_serf/locks.c:872050-872529
+/subversion/branches/diff-callbacks3/subversion/libsvn_ra_serf/locks.c:870059-870761
+/subversion/branches/diff-optimizations/subversion/libsvn_ra_serf/locks.c:1031270-1037352
+/subversion/branches/diff-optimizations-bytes/subversion/libsvn_ra_serf/locks.c:1037353-1067789
+/subversion/branches/dont-save-plaintext-passwords-by-default/subversion/libsvn_ra_serf/locks.c:870728-871118
+/subversion/branches/double-delete/subversion/libsvn_ra_serf/locks.c:870511-872970
+/subversion/branches/ev2-export/subversion/libsvn_ra_serf/locks.c:1325914,1332738,1413107
+/subversion/branches/explore-wc/subversion/libsvn_ra_serf/locks.c:875486,875493,875497,875507,875511,875514,875559,875580-875581,875584,875587,875611,875627,875647,875667-875668,875711-875712,875733-875734,875736,875744-875748,875751,875758,875782,875795-875796,875830,875836,875838,875842,875852,875855,875864,875870,875873,875880,875885-875888,875890,875897-875898,875905,875907-875909,875935,875943-875944,875946,875979,875982-875983,875985-875986,875990,875997
+/subversion/branches/file-externals/subversion/libsvn_ra_serf/locks.c:871779-873302
+/subversion/branches/fs-rep-sharing/subversion/libsvn_ra_serf/locks.c:869036-873803
+/subversion/branches/fsfs-pack/subversion/libsvn_ra_serf/locks.c:873717-874575
+/subversion/branches/gnome-keyring/subversion/libsvn_ra_serf/locks.c:870558-871410
+/subversion/branches/gpg-agent-password-store/subversion/libsvn_ra_serf/locks.c:1005036-1150766
+/subversion/branches/http-protocol-v2/subversion/libsvn_ra_serf/locks.c:874395-876041
+/subversion/branches/in-memory-cache/subversion/libsvn_ra_serf/locks.c:869829-871452
+/subversion/branches/in-repo-authz/subversion/libsvn_ra_serf/locks.c:1414342-1424779
+/subversion/branches/inheritable-props/subversion/libsvn_ra_serf/locks.c:1297080-1395089
+/subversion/branches/integrate-cache-item-serialization/subversion/libsvn_ra_serf/locks.c:1068724-1068739
+/subversion/branches/integrate-cache-membuffer/subversion/libsvn_ra_serf/locks.c:998649-998852
+/subversion/branches/integrate-compression-level/subversion/libsvn_ra_serf/locks.c:1068651-1072287
+/subversion/branches/integrate-io-improvements/subversion/libsvn_ra_serf/locks.c:1068684-1072297
+/subversion/branches/integrate-is-cachable/subversion/libsvn_ra_serf/locks.c:1072568-1074082
+/subversion/branches/integrate-partial-getter/subversion/libsvn_ra_serf/locks.c:1072558-1076552
+/subversion/branches/integrate-readline-speedup/subversion/libsvn_ra_serf/locks.c:1072553-1072555
+/subversion/branches/integrate-stream-api-extensions/subversion/libsvn_ra_serf/locks.c:1068695-1072516
+/subversion/branches/integrate-string-improvements/subversion/libsvn_ra_serf/locks.c:1068251-1190617
+/subversion/branches/integrate-txdelta-caching/subversion/libsvn_ra_serf/locks.c:1072541-1078213
+/subversion/branches/issue-2779-dev/subversion/libsvn_ra_serf/locks.c:965496-984198
+/subversion/branches/issue-2843-dev/subversion/libsvn_ra_serf/locks.c:871432-874179
+/subversion/branches/issue-3000/subversion/libsvn_ra_serf/locks.c:871713,871716-871719,871721-871726,871728,871734
+/subversion/branches/issue-3067-deleted-subtrees/subversion/libsvn_ra_serf/locks.c:873375-874084
+/subversion/branches/issue-3148-dev/subversion/libsvn_ra_serf/locks.c:875193-875204
+/subversion/branches/issue-3220-dev/subversion/libsvn_ra_serf/locks.c:872210-872226
+/subversion/branches/issue-3242-dev/subversion/libsvn_ra_serf/locks.c:879653-896436
+/subversion/branches/issue-3334-dirs/subversion/libsvn_ra_serf/locks.c:875156-875867
+/subversion/branches/issue-3975/subversion/libsvn_ra_serf/locks.c:1152931-1160746
+/subversion/branches/issue-4116-dev/subversion/libsvn_ra_serf/locks.c:1424719-1425040
+/subversion/branches/issue-4194-dev/subversion/libsvn_ra_serf/locks.c:1410507-1414880
+/subversion/branches/javahl-ra/subversion/libsvn_ra_serf/locks.c:1342682,1344977
+/subversion/branches/kwallet/subversion/libsvn_ra_serf/locks.c:870785-871314
+/subversion/branches/log-g-performance/subversion/libsvn_ra_serf/locks.c:870941-871032
+/subversion/branches/merge-skips-obstructions/subversion/libsvn_ra_serf/locks.c:874525-874615
+/subversion/branches/multi-layer-moves/subversion/libsvn_ra_serf/locks.c:1239019-1300930
+/subversion/branches/nfc-nfd-aware-client/subversion/libsvn_ra_serf/locks.c:870276,870376
+/subversion/branches/node_pool/subversion/libsvn_ra_serf/locks.c:1304828-1305388
+/subversion/branches/performance/subversion/libsvn_ra_serf/locks.c:979193,980118,981087,981090,981189,981194,981287,981684,981827,982043,982355,983398,983406,983430,983474,983488,983490,983760,983764,983766,983770,984927,984973,984984,985014,985037,985046,985472,985477,985482,985487-985488,985493,985497,985500,985514,985601,985603,985606,985669,985673,985695,985697,986453,986465,986485,986491-986492,986517,986521,986605,986608,986817,986832,987865,987868-987869,987872,987886-987888,987893,988319,988898,990330,990533,990535-990537,990541,990568,990572,990574-990575,990600,990759,992899,992904,992911,993127,993141,994956,995478,995507,995603,998012,998858,999098,1001413,1001417,1004291,1022668,1022670,1022676,1022715,1022719,1025660,1025672,1027193,1027203,1027206,1027214,1027227,1028077,1028092,1028094,1028104,1028107,1028111,1028354,1029038,1029042-1029043,1029054-1029055,1029062-1029063,1029078,1029080,1029090,1029092-1029093,1029111,1029151,1029158,1029229-1029230,1029232,1029335-
 1029336,1029339-1029340,1029342,1029344,1030763,1030827,1031203,1031235,1032285,1032333,1033040,1033057,1033294,1035869,1035882,1039511,1043705,1053735,1056015,1066452,1067683,1067697-1078365
+/subversion/branches/py-tests-as-modules/subversion/libsvn_ra_serf/locks.c:956579-1033052
+/subversion/branches/ra_serf-digest-authn/subversion/libsvn_ra_serf/locks.c:875693-876404
+/subversion/branches/reintegrate-improvements/subversion/libsvn_ra_serf/locks.c:873853-874164
+/subversion/branches/revprop-cache/subversion/libsvn_ra_serf/locks.c:1298521-1326293
+/subversion/branches/revprop-packing/subversion/libsvn_ra_serf/locks.c:1143907,1143971,1143997,1144017,1144499,1144568,1146145
+/subversion/branches/subtree-mergeinfo/subversion/libsvn_ra_serf/locks.c:876734-878766
+/subversion/branches/svn-mergeinfo-enhancements/subversion/libsvn_ra_serf/locks.c:870119-870195,870197-870288
+/subversion/branches/svn-patch-improvements/subversion/libsvn_ra_serf/locks.c:918519-934609
+/subversion/branches/svn_mutex/subversion/libsvn_ra_serf/locks.c:1141683-1182099
+/subversion/branches/svnpatch-diff/subversion/libsvn_ra_serf/locks.c:865738-876477
+/subversion/branches/svnraisetc/subversion/libsvn_ra_serf/locks.c:874709-875149
+/subversion/branches/svnserve-logging/subversion/libsvn_ra_serf/locks.c:869828-870893
+/subversion/branches/tc-issue-3334/subversion/libsvn_ra_serf/locks.c:874697-874773
+/subversion/branches/tc-merge-notify/subversion/libsvn_ra_serf/locks.c:874017-874062
+/subversion/branches/tc-resolve/subversion/libsvn_ra_serf/locks.c:874191-874239
+/subversion/branches/tc_url_rev/subversion/libsvn_ra_serf/locks.c:874351-874483
+/subversion/branches/tree-conflicts/subversion/libsvn_ra_serf/locks.c:868291-873154
+/subversion/branches/tree-conflicts-notify/subversion/libsvn_ra_serf/locks.c:873926-874008
+/subversion/branches/tristate-chunked-request/subversion/libsvn_ra_serf/locks.c:1502401,1502673
+/subversion/branches/tweak-build-take-two/subversion/libsvn_ra_serf/locks.c:1424288-1425049,1425051-1425613
+/subversion/branches/uris-as-urls/subversion/libsvn_ra_serf/locks.c:1060426-1064427
+/subversion/branches/verify-at-commit/subversion/libsvn_ra_serf/locks.c:1462039-1462408
+/subversion/branches/wc-collate-path/subversion/libsvn_ra_serf/locks.c:1407642
+/subversion/trunk/subversion/libsvn_ra_serf/get_lock.c:1578311
+/subversion/trunk/subversion/libsvn_ra_serf/locks.c:1467440,1467450,1467481,1467587,1467597,1467668,1467675,1467803,1467807,1467951,1468109,1468116,1468151,1468347,1468395,1468439,1468487,1468565-1468566,1468980,1469248,1469363,1469478,1469489,1469512-1469513,1469550,1469556,1469645,1469674,1469833,1469862,1469866,1469871,1469994,1470031,1470037,1470221,1470238,1470246,1470248,1470537,1470650,1470738,1470781,1470898,1470904,1470908,1470913,1470936,1470993-1470994,1471028-1471029,1471107,1471153,1471302,1471443,1471490,1471744,1475704,1475724,1475772,1475963,1476092,1476155,1476181,1476193,1476254,1476359,1476366,1476607,1477294,1477359,1477729-1477730,1477876,1477891,1478001,1478220-1478221,1478465,1478617,1478897,1478951,1478987,1478998,1479320-1479321,1479323,1479326,1479329,1479540,1479563,1479605,1479896,1480054,1480077,1480080,1480082,1480119,1480149,1480344,1480412,1480426,1480442,1480616,1480641-1480642,1480664,1480669,1480681,1480723,1480738,1480765,1481010,1481418,1481594,1
 481596,1481625,1481627-1481628,1481631-1481632,1481772,1481782,1481800,1481813,1481847,1481944,1481981,1482282,1482327,1482338,1482350,1482354,1482436,1482479,1482524,1482528,1482536,1482554,1482558,1482592,1482724,1482759,1482779,1482829,1482969-1482970,1482973,1483015,1483077,1483101,1483116,1483125,1483391,1483397,1483555,1483557,1483575,1483580,1483781,1483927,1483939,1483947,1483964-1483965,1483968,1483972,1483975,1483977,1483984,1484006,1484016-1484017,1484023,1484755,1485018,1485127,1485350,1485413,1485427,1485447,1485449,1485497,1485501,1485650,1486072,1486457,1486572,1486809,1486915,1486931,1487083,1487094,1488183,1488267,1488294,1488425,1488639,1488693,1488878,1489114,1489116-1489117,1489203,1489339,1489935,1490045,1490326,1490679,1490684,1490721,1491432,1491499,1491707,1491739,1491755-1491756,1491762,1491770,1491816,1491868,1492005,1492020,1492145,1492148,1492152,1492164,1492264,1492295,1493102,1493424,1493475,1493703,1493720,1493951,1494089,1494171,1494223,1494287,149429
 8,1494318,1494342,1494657,1494913,1494967,1495063,1495104,1495204,1495209,1495214,1495256,1495329,1495428,1495432,1495446,1495597,1495805,1495850,1495978,1496007,1496110-1496111,1496127,1496132,1496151,1496470,1496938,1496957,1497002,1497318-1497319,1497551,1497614,1497804,1497975,1497980,1498000,1498012,1498136,1498449,1498455-1498456,1498483-1498484,1498486,1498550,1498564,1498851,1498885,1498997,1499034,1499044,1499064,1499095-1499096,1499100,1499403,1499423,1499438,1499447,1499460,1499470,1499483,1499492,1499496,1499498,1499595,1499727,1500074,1500175,1500226,1500680,1500695,1500762,1500799,1500801-1500802,1500904,1500928,1501199,1501207,1501656,1501702,1502097,1502267,1502577,1502777,1502811,1502901,1502909,1502952,1503009-1503010,1503058,1503061,1503211,1503318,1503528,1503884,1504192,1504505,1506040-1506041,1506047,1506058,1506966,1507044,1507382,1507567,1507589,1507889,1507891,1508438,1509186,1509196,1511057,1511272,1511353,1511603,1512067,1512119,1512195,1512300-1512301,151
 2432,1512471-1512472,1513119,1513122,1513156,1513463,1513472,1513874,1513879-1513880,1513943,1514295,1514315,1514318,1514356,1514628,1514763,1514785,1514804,1515119,1515141,1515201,1515225,1515237,1515343,1515366,1515516,1515534,1515721,1515992,1515997,1516023-1516024,1516049,1516051-1516053,1516071,1516271,1516429,1516556,1516565,1516567,1516806,1518184,1519615,1519617,1519733,1519816,1519823,1519955,1520065,1520529,1520532,1520539,1520745,1522892,1523666,1524869,1525902,1526439,1526655,1527103,1527105,1530763,1530768,1530872,1530922,1530967,1531002,1531004,1531938,1532023,1532098,1534102,1534149,1534158,1534713,1534737,1534860,1535115,1535161,1535532,1535610,1535676,1536537,1537018,1537147,1537190,1537193,1537221,1537263,1537360,1537415,1537555,1537700,1538516-1538517,1538519,1538574,1538581,1540044,1540417,1540752,1541432,1541635,1541638,1541705,1541790,1542042,1542069,1542071,1542119,1542129,1542138,1542146,1542151,1542765,1542767,1542774,1543145,1543187,1543413,1543961,1544295,
 1544316,1544878,1544895,1545302,1545835,1545845,1547252,1547774,1547866,1547873,1548097,1548105,1548170,1548486,1548673,1549858,1549874,1550803,1551524,1551579,1553101,1553105,1553113,1553376-1553377,1554978,1555403,1555499,1557320,1557522,1559009,1560690,1560701,1563110,1564292,1564966,1564969,1565085,1567064,1567109,1567134,1567286,1567392,1567492,1567494,1567740,1567752,1567985,1568070,1568872,1568953,1568955,1570642,1571214,1571747,1571787,1571795,1572102,1572200,1573088,1573106,1573209,1574868,1575270,1575284,1577151,1577200,1577294,1577812-1577813,1578273,1578311,1578326,1578670,1578820,1578853,1578875,1579274,1579429,1579588,1579684,1580832,1580867,1580872,1581296,1581305,1581315,1581810,1583580,1583977,1584342,1585686,1586052,1586255,1586352,1586467,1587511,1587946,1587968

Modified: subversion/branches/1.8.x-r1579588/subversion/libsvn_ra_serf/update.c
URL: http://svn.apache.org/viewvc/subversion/branches/1.8.x-r1579588/subversion/libsvn_ra_serf/update.c?rev=1589916&r1=1589915&r2=1589916&view=diff
==============================================================================
--- subversion/branches/1.8.x-r1579588/subversion/libsvn_ra_serf/update.c (original)
+++ subversion/branches/1.8.x-r1579588/subversion/libsvn_ra_serf/update.c Fri Apr 25 00:24:11 2014
@@ -329,9 +329,6 @@ struct report_context_t {
      files/dirs? */
   svn_boolean_t add_props_included;
 
-  /* Path -> lock token mapping. */
-  apr_hash_t *lock_path_tokens;
-
   /* Path -> const char *repos_relpath mapping */
   apr_hash_t *switched_paths;
 
@@ -2248,8 +2245,6 @@ end_report(svn_ra_serf__xml_parser_t *pa
                                         info->pool);
         }
 
-      info->lock_token = svn_hash_gets(ctx->lock_path_tokens, info->name);
-
       if (info->lock_token && !info->fetch_props)
         info->fetch_props = TRUE;
 
@@ -2578,13 +2573,6 @@ set_path(void *report_baton,
   SVN_ERR(svn_io_file_write_full(report->body_file, buf->data, buf->len,
                                  NULL, pool));
 
-  if (lock_token)
-    {
-      svn_hash_sets(report->lock_path_tokens,
-                    apr_pstrdup(report->pool, path),
-                    apr_pstrdup(report->pool, lock_token));
-    }
-
   return SVN_NO_ERROR;
 }
 
@@ -2660,12 +2648,6 @@ link_path(void *report_baton,
   if (!*path)
     report->root_is_switched = TRUE;
 
-  if (lock_token)
-    {
-      svn_hash_sets(report->lock_path_tokens,
-                    path, apr_pstrdup(report->pool, lock_token));
-    }
-
   return APR_SUCCESS;
 }
 
@@ -3193,7 +3175,6 @@ make_update_reporter(svn_ra_session_t *r
   report->ignore_ancestry = ignore_ancestry;
   report->send_copyfrom_args = send_copyfrom_args;
   report->text_deltas = text_deltas;
-  report->lock_path_tokens = apr_hash_make(report->pool);
   report->switched_paths = apr_hash_make(report->pool);
 
   report->source = src_path;

Modified: subversion/branches/1.8.x-r1579588/subversion/libsvn_ra_svn/protocol
URL: http://svn.apache.org/viewvc/subversion/branches/1.8.x-r1579588/subversion/libsvn_ra_svn/protocol?rev=1589916&r1=1589915&r2=1589916&view=diff
==============================================================================
--- subversion/branches/1.8.x-r1579588/subversion/libsvn_ra_svn/protocol (original)
+++ subversion/branches/1.8.x-r1579588/subversion/libsvn_ra_svn/protocol Fri Apr 25 00:24:11 2014
@@ -310,6 +310,7 @@ second place for auth-request point as n
      sends file contents as a series of strings, terminated by the empty
      string, followed by a second empty command response to indicate
      whether an error occurred during the sending of the file.
+    NOTE: the standard client never sends want-iprops, it uses get-iprops. 
 
   get-dir
     params:   ( path:string [ rev:number ] want-props:bool want-contents:bool
@@ -321,6 +322,7 @@ second place for auth-request point as n
                 [ last-author:string ] )
     dirent-field: kind | size | has-props | created-rev | time | last-author
                   | word
+    NOTE: the standard client never sends want-iprops, it uses get-iprops. 
 
   check-path
     params:   ( path:string [ rev:number ] )

Modified: subversion/branches/1.8.x-r1579588/subversion/libsvn_repos/dump.c
URL: http://svn.apache.org/viewvc/subversion/branches/1.8.x-r1579588/subversion/libsvn_repos/dump.c?rev=1589916&r1=1589915&r2=1589916&view=diff
==============================================================================
--- subversion/branches/1.8.x-r1579588/subversion/libsvn_repos/dump.c (original)
+++ subversion/branches/1.8.x-r1579588/subversion/libsvn_repos/dump.c Fri Apr 25 00:24:11 2014
@@ -217,6 +217,49 @@ make_dir_baton(const char *path,
 }
 
 
+/* If the mergeinfo in MERGEINFO_STR refers to any revisions older than
+ * OLDEST_DUMPED_REV, issue a warning and set *FOUND_OLD_MERGEINFO to TRUE,
+ * otherwise leave *FOUND_OLD_MERGEINFO unchanged.
+ */
+static svn_error_t *
+verify_mergeinfo_revisions(svn_boolean_t *found_old_mergeinfo,
+                           const char *mergeinfo_str,
+                           svn_revnum_t oldest_dumped_rev,
+                           svn_repos_notify_func_t notify_func,
+                           void *notify_baton,
+                           apr_pool_t *pool)
+{
+  svn_mergeinfo_t mergeinfo, old_mergeinfo;
+
+  SVN_ERR(svn_mergeinfo_parse(&mergeinfo, mergeinfo_str, pool));
+  SVN_ERR(svn_mergeinfo__filter_mergeinfo_by_ranges(
+            &old_mergeinfo, mergeinfo,
+            oldest_dumped_rev - 1, 0,
+            TRUE, pool, pool));
+
+  if (apr_hash_count(old_mergeinfo))
+    {
+      svn_repos_notify_t *notify =
+        svn_repos_notify_create(svn_repos_notify_warning, pool);
+
+      notify->warning = svn_repos_notify_warning_found_old_mergeinfo;
+      notify->warning_str = apr_psprintf(
+        pool,
+        _("Mergeinfo referencing revision(s) prior "
+          "to the oldest dumped revision (r%ld). "
+          "Loading this dump may result in invalid "
+          "mergeinfo."),
+        oldest_dumped_rev);
+
+      if (found_old_mergeinfo)
+        *found_old_mergeinfo = TRUE;
+      notify_func(notify_baton, notify, pool);
+    }
+
+  return SVN_NO_ERROR;
+}
+
+
 /* This helper is the main "meat" of the editor -- it does all the
    work of writing a node record.
 
@@ -475,32 +518,13 @@ dump_node(struct edit_baton *eb,
                                                       SVN_PROP_MERGEINFO);
           if (mergeinfo_str)
             {
-              svn_mergeinfo_t mergeinfo, old_mergeinfo;
-
-              SVN_ERR(svn_mergeinfo_parse(&mergeinfo, mergeinfo_str->data,
-                                          pool));
-              SVN_ERR(svn_mergeinfo__filter_mergeinfo_by_ranges(
-                &old_mergeinfo, mergeinfo,
-                eb->oldest_dumped_rev - 1, 0,
-                TRUE, pool, pool));
-              if (apr_hash_count(old_mergeinfo))
-                {
-                  svn_repos_notify_t *notify =
-                    svn_repos_notify_create(svn_repos_notify_warning, pool);
-
-                  notify->warning = svn_repos_notify_warning_found_old_mergeinfo;
-                  notify->warning_str = apr_psprintf(
-                    pool,
-                    _("Mergeinfo referencing revision(s) prior "
-                      "to the oldest dumped revision (r%ld). "
-                      "Loading this dump may result in invalid "
-                      "mergeinfo."),
-                    eb->oldest_dumped_rev);
-
-                  if (eb->found_old_mergeinfo)
-                    *eb->found_old_mergeinfo = TRUE;
-                  eb->notify_func(eb->notify_baton, notify, pool);
-                }
+              /* An error in verifying the mergeinfo must not prevent dumping
+                 the data. Ignore any such error. */
+              svn_error_clear(verify_mergeinfo_revisions(
+                                eb->found_old_mergeinfo,
+                                mergeinfo_str->data, eb->oldest_dumped_rev,
+                                eb->notify_func, eb->notify_baton,
+                                pool));
             }
         }
 

Modified: subversion/branches/1.8.x-r1579588/subversion/libsvn_repos/fs-wrap.c
URL: http://svn.apache.org/viewvc/subversion/branches/1.8.x-r1579588/subversion/libsvn_repos/fs-wrap.c?rev=1589916&r1=1589915&r2=1589916&view=diff
==============================================================================
--- subversion/branches/1.8.x-r1579588/subversion/libsvn_repos/fs-wrap.c (original)
+++ subversion/branches/1.8.x-r1579588/subversion/libsvn_repos/fs-wrap.c Fri Apr 25 00:24:11 2014
@@ -117,6 +117,8 @@ svn_repos_fs_begin_txn_for_commit2(svn_f
   const char *txn_name;
   svn_string_t *author = svn_hash_gets(revprop_table, SVN_PROP_REVISION_AUTHOR);
   apr_hash_t *hooks_env;
+  svn_error_t *err;
+  svn_fs_txn_t *txn;
 
   /* Parse the hooks-env file (if any). */
   SVN_ERR(svn_repos__parse_hooks_env(&hooks_env, repos->hooks_env_path,
@@ -124,21 +126,30 @@ svn_repos_fs_begin_txn_for_commit2(svn_f
 
   /* Begin the transaction, ask for the fs to do on-the-fly lock checks.
      We fetch its name, too, so the start-commit hook can use it.  */
-  SVN_ERR(svn_fs_begin_txn2(txn_p, repos->fs, rev,
+  SVN_ERR(svn_fs_begin_txn2(&txn, repos->fs, rev,
                             SVN_FS_TXN_CHECK_LOCKS, pool));
-  SVN_ERR(svn_fs_txn_name(&txn_name, *txn_p, pool));
+  err = svn_fs_txn_name(&txn_name, txn, pool);
+  if (err)
+    return svn_error_compose_create(err, svn_fs_abort_txn(txn, pool));
 
   /* We pass the revision properties to the filesystem by adding them
      as properties on the txn.  Later, when we commit the txn, these
      properties will be copied into the newly created revision. */
   revprops = svn_prop_hash_to_array(revprop_table, pool);
-  SVN_ERR(svn_repos_fs_change_txn_props(*txn_p, revprops, pool));
+  err = svn_repos_fs_change_txn_props(txn, revprops, pool);
+  if (err)
+    return svn_error_compose_create(err, svn_fs_abort_txn(txn, pool));
 
   /* Run start-commit hooks. */
-  SVN_ERR(svn_repos__hooks_start_commit(repos, hooks_env,
-                                        author ? author->data : NULL,
-                                        repos->client_capabilities, txn_name,
-                                        pool));
+  err = svn_repos__hooks_start_commit(repos, hooks_env,
+                                      author ? author->data : NULL,
+                                      repos->client_capabilities, txn_name,
+                                      pool);
+  if (err)
+    return svn_error_compose_create(err, svn_fs_abort_txn(txn, pool));
+
+  /* We have API promise that *TXN_P is unaffected on faulure. */
+  *txn_p = txn;
   return SVN_NO_ERROR;
 }
 

Modified: subversion/branches/1.8.x-r1579588/subversion/libsvn_subr/cache-memcache.c
URL: http://svn.apache.org/viewvc/subversion/branches/1.8.x-r1579588/subversion/libsvn_subr/cache-memcache.c?rev=1589916&r1=1589915&r2=1589916&view=diff
==============================================================================
--- subversion/branches/1.8.x-r1579588/subversion/libsvn_subr/cache-memcache.c (original)
+++ subversion/branches/1.8.x-r1579588/subversion/libsvn_subr/cache-memcache.c Fri Apr 25 00:24:11 2014
@@ -203,9 +203,10 @@ memcache_get(void **value_p,
         }
       else
         {
-          svn_string_t *value = apr_pcalloc(result_pool, sizeof(*value));
+          svn_stringbuf_t *value = svn_stringbuf_create_empty(result_pool);
           value->data = data;
-          value->len = data_len;
+          value->blocksize = data_len;
+          value->len = data_len - 1; /* account for trailing NUL */
           *value_p = value;
         }
     }
@@ -263,7 +264,7 @@ memcache_set(void *cache_void,
     {
       svn_stringbuf_t *value_str = value;
       data = value_str->data;
-      data_len = value_str->len;
+      data_len = value_str->len + 1; /* copy trailing NUL */
     }
 
   err = memcache_internal_set(cache_void, key, data, data_len, subpool);

Modified: subversion/branches/1.8.x-r1579588/subversion/libsvn_subr/config_file.c
URL: http://svn.apache.org/viewvc/subversion/branches/1.8.x-r1579588/subversion/libsvn_subr/config_file.c?rev=1589916&r1=1589915&r2=1589916&view=diff
==============================================================================
--- subversion/branches/1.8.x-r1579588/subversion/libsvn_subr/config_file.c (original)
+++ subversion/branches/1.8.x-r1579588/subversion/libsvn_subr/config_file.c Fri Apr 25 00:24:11 2014
@@ -69,7 +69,7 @@ typedef struct parse_context_t
 
   /* Parser buffer for getc() to avoid call overhead into several libraries
      for every character */
-  char parser_buffer[SVN_STREAM_CHUNK_SIZE]; /* Larger than most config files */
+  char parser_buffer[SVN__STREAM_CHUNK_SIZE]; /* Larger than most config files */
   size_t buffer_pos; /* Current position within parser_buffer */
   size_t buffer_size; /* parser_buffer contains this many bytes */
 } parse_context_t;

Modified: subversion/branches/1.8.x-r1579588/subversion/libsvn_subr/io.c
URL: http://svn.apache.org/viewvc/subversion/branches/1.8.x-r1579588/subversion/libsvn_subr/io.c?rev=1589916&r1=1589915&r2=1589916&view=diff
==============================================================================
--- subversion/branches/1.8.x-r1579588/subversion/libsvn_subr/io.c (original)
+++ subversion/branches/1.8.x-r1579588/subversion/libsvn_subr/io.c Fri Apr 25 00:24:11 2014
@@ -1243,32 +1243,44 @@ svn_io_sleep_for_timestamps(const char *
         {
           /* Very simplistic but safe approach:
               If the filesystem has < sec mtime we can be reasonably sure
-              that the filesystem has <= millisecond precision.
+              that the filesystem has some sub-second resolution.  On Windows
+              it is likely to be sub-millisecond; on Linux systems it depends
+              on the filesystem, ext4 is typically 1ms, 4ms or 10ms resolution.
 
              ## Perhaps find a better algorithm here. This will fail once
-                in every 1000 cases on a millisecond precision filesystem.
+                in every 1000 cases on a millisecond precision filesystem
+                if the mtime happens to be an exact second.
 
                 But better to fail once in every thousand cases than every
                 time, like we did before.
-                (All tested filesystems I know have at least microsecond precision.)
 
              Note for further research on algorithm:
-               FAT32 has < 1 sec precision on ctime, but 2 sec on mtime */
+               FAT32 has < 1 sec precision on ctime, but 2 sec on mtime.
 
-          /* Sleep for at least 1 millisecond.
-             (t < 1000 will be round to 0 in apr) */
-          apr_sleep(1000);
+               Linux/ext4 with CONFIG_HZ=250 has high resolution
+               apr_time_now and although the filesystem timestamps
+               have similar high precision they are only updated with
+               a coarser 4ms resolution. */
 
-          return;
+          /* 10 milliseconds after now. */
+#ifndef SVN_HI_RES_SLEEP_MS
+#define SVN_HI_RES_SLEEP_MS 10
+#endif
+          then = now + apr_time_from_msec(SVN_HI_RES_SLEEP_MS);
         }
 
-      now = apr_time_now(); /* Extract the time used for the path stat */
-
-      if (now >= then)
-        return; /* Passing negative values may suspend indefinitely (Windows) */
+      /* Remove time taken to do stat() from sleep. */
+      now = apr_time_now();
     }
 
-  apr_sleep(then - now);
+  if (now >= then)
+    return; /* Passing negative values may suspend indefinitely (Windows) */
+
+  /* (t < 1000 will be round to 0 in apr) */
+  if (then - now < 1000)
+    apr_sleep(1000);
+  else
+    apr_sleep(then - now);
 }
 
 

Modified: subversion/branches/1.8.x-r1579588/subversion/libsvn_subr/prompt.c
URL: http://svn.apache.org/viewvc/subversion/branches/1.8.x-r1579588/subversion/libsvn_subr/prompt.c?rev=1589916&r1=1589915&r2=1589916&view=diff
==============================================================================
--- subversion/branches/1.8.x-r1579588/subversion/libsvn_subr/prompt.c (original)
+++ subversion/branches/1.8.x-r1579588/subversion/libsvn_subr/prompt.c Fri Apr 25 00:24:11 2014
@@ -177,7 +177,7 @@ terminal_open(terminal_handle_t **termin
      and stderr for prompting. */
   apr_file_t *tmpfd;
   status = apr_file_open(&tmpfd, "/dev/tty",
-                         APR_FOPEN_READ | APR_FOPEN_WRITE,
+                         APR_READ | APR_WRITE,
                          APR_OS_DEFAULT, pool);
   *terminal = apr_palloc(pool, sizeof(terminal_handle_t));
   if (!status)

Modified: subversion/branches/1.8.x-r1579588/subversion/libsvn_subr/version.c
URL: http://svn.apache.org/viewvc/subversion/branches/1.8.x-r1579588/subversion/libsvn_subr/version.c?rev=1589916&r1=1589915&r2=1589916&view=diff
==============================================================================
--- subversion/branches/1.8.x-r1579588/subversion/libsvn_subr/version.c (original)
+++ subversion/branches/1.8.x-r1579588/subversion/libsvn_subr/version.c Fri Apr 25 00:24:11 2014
@@ -136,7 +136,7 @@ svn_version_extended(svn_boolean_t verbo
   info->build_time = __TIME__;
   info->build_host = SVN_BUILD_HOST;
   info->copyright = apr_pstrdup
-    (pool, _("Copyright (C) 2013 The Apache Software Foundation.\n"
+    (pool, _("Copyright (C) 2014 The Apache Software Foundation.\n"
              "This software consists of contributions made by many people;\n"
              "see the NOTICE file for more information.\n"
              "Subversion is open source software, see "

Modified: subversion/branches/1.8.x-r1579588/subversion/libsvn_wc/status.c
URL: http://svn.apache.org/viewvc/subversion/branches/1.8.x-r1579588/subversion/libsvn_wc/status.c?rev=1589916&r1=1589915&r2=1589916&view=diff
==============================================================================
--- subversion/branches/1.8.x-r1579588/subversion/libsvn_wc/status.c (original)
+++ subversion/branches/1.8.x-r1579588/subversion/libsvn_wc/status.c Fri Apr 25 00:24:11 2014
@@ -421,13 +421,42 @@ get_repos_root_url_relpath(const char **
                                        db, local_abspath,
                                        result_pool, scratch_pool));
     }
-  else if (info->have_base)
+  else if (info->status == svn_wc__db_status_deleted
+           && !info->have_more_work
+           && info->have_base)
     {
       SVN_ERR(svn_wc__db_scan_base_repos(repos_relpath, repos_root_url,
                                          repos_uuid,
                                          db, local_abspath,
                                          result_pool, scratch_pool));
     }
+  else if (info->status == svn_wc__db_status_deleted)
+    {
+      const char *work_del_abspath;
+      const char *add_abspath;
+
+      /* Handles working DELETE and the special case where there is just
+         svn_wc__db_status_not_present in WORKING */
+
+      SVN_ERR(svn_wc__db_scan_deletion(NULL, NULL, &work_del_abspath, NULL,
+                                       db, local_abspath,
+                                       scratch_pool, scratch_pool));
+
+      /* The parent of what has been deleted must be added */
+      add_abspath = svn_dirent_dirname(work_del_abspath, scratch_pool);
+
+      SVN_ERR(svn_wc__db_scan_addition(NULL, NULL, repos_relpath,
+                                       repos_root_url, repos_uuid, NULL,
+                                       NULL, NULL, NULL,
+                                       db, add_abspath,
+                                       result_pool, scratch_pool));
+
+      *repos_relpath = svn_relpath_join(*repos_relpath,
+                                        svn_dirent_skip_ancestor(
+                                              add_abspath,
+                                              local_abspath),
+                                        result_pool);
+    }
   else
     {
       *repos_relpath = NULL;

Modified: subversion/branches/1.8.x-r1579588/subversion/svn/conflict-callbacks.c
URL: http://svn.apache.org/viewvc/subversion/branches/1.8.x-r1579588/subversion/svn/conflict-callbacks.c?rev=1589916&r1=1589915&r2=1589916&view=diff
==============================================================================
--- subversion/branches/1.8.x-r1579588/subversion/svn/conflict-callbacks.c (original)
+++ subversion/branches/1.8.x-r1579588/subversion/svn/conflict-callbacks.c Fri Apr 25 00:24:11 2014
@@ -935,7 +935,7 @@ handle_text_conflict(svn_wc_conflict_res
           /* We only allow the user accept the merged version of
              the file if they've edited it, or at least looked at
              the diff. */
-          if (result->choice == svn_wc_conflict_choose_merged
+          if (opt->choice == svn_wc_conflict_choose_merged
               && ! knows_something)
             {
               SVN_ERR(svn_cmdline_fprintf(

Modified: subversion/branches/1.8.x-r1579588/subversion/svndumpfilter/svndumpfilter.c
URL: http://svn.apache.org/viewvc/subversion/branches/1.8.x-r1579588/subversion/svndumpfilter/svndumpfilter.c?rev=1589916&r1=1589915&r2=1589916&view=diff
==============================================================================
--- subversion/branches/1.8.x-r1579588/subversion/svndumpfilter/svndumpfilter.c (original)
+++ subversion/branches/1.8.x-r1579588/subversion/svndumpfilter/svndumpfilter.c Fri Apr 25 00:24:11 2014
@@ -570,6 +570,9 @@ new_node_record(void **node_baton,
     }
   else
     {
+      const char *kind;
+      const char *action;
+
       tcl = svn_hash_gets(headers, SVN_REPOS_DUMPFILE_TEXT_CONTENT_LENGTH);
 
       /* Test if this node was copied from dropped source. */
@@ -584,7 +587,6 @@ new_node_record(void **node_baton,
              dumpfile should contain the new contents of the file.  In this
              scenario, we'll just do an add without history using the new
              contents.  */
-          const char *kind;
           kind = svn_hash_gets(headers, SVN_REPOS_DUMPFILE_NODE_KIND);
 
           /* If there is a Text-content-length header, and the kind is
@@ -623,6 +625,30 @@ new_node_record(void **node_baton,
       if (! nb->rb->writing_begun)
         SVN_ERR(output_revision(nb->rb));
 
+      /* A node record is required to begin with 'Node-path', skip the
+         leading '/' to match the form used by 'svnadmin dump'. */
+      SVN_ERR(svn_stream_printf(nb->rb->pb->out_stream,
+                                pool, "%s: %s\n",
+                                SVN_REPOS_DUMPFILE_NODE_PATH, node_path + 1));
+
+      /* Node-kind is next and is optional. */
+      kind = svn_hash_gets(headers, SVN_REPOS_DUMPFILE_NODE_KIND);
+      if (kind)
+        SVN_ERR(svn_stream_printf(nb->rb->pb->out_stream,
+                                  pool, "%s: %s\n",
+                                  SVN_REPOS_DUMPFILE_NODE_KIND, kind));
+
+      /* Node-action is next and required. */
+      action = svn_hash_gets(headers, SVN_REPOS_DUMPFILE_NODE_ACTION);
+      if (action)
+        SVN_ERR(svn_stream_printf(nb->rb->pb->out_stream,
+                                  pool, "%s: %s\n",
+                                  SVN_REPOS_DUMPFILE_NODE_ACTION, action));
+      else
+        return svn_error_createf(SVN_ERR_INCOMPLETE_DATA, 0,
+                                 _("Missing Node-action for path '%s'"),
+                                 node_path);
+
       for (hi = apr_hash_first(pool, headers); hi; hi = apr_hash_next(hi))
         {
           const char *key = svn__apr_hash_index_key(hi);
@@ -638,7 +664,10 @@ new_node_record(void **node_baton,
 
           if ((!strcmp(key, SVN_REPOS_DUMPFILE_CONTENT_LENGTH))
               || (!strcmp(key, SVN_REPOS_DUMPFILE_PROP_CONTENT_LENGTH))
-              || (!strcmp(key, SVN_REPOS_DUMPFILE_TEXT_CONTENT_LENGTH)))
+              || (!strcmp(key, SVN_REPOS_DUMPFILE_TEXT_CONTENT_LENGTH))
+              || (!strcmp(key, SVN_REPOS_DUMPFILE_NODE_PATH))
+              || (!strcmp(key, SVN_REPOS_DUMPFILE_NODE_KIND))
+              || (!strcmp(key, SVN_REPOS_DUMPFILE_NODE_ACTION)))
             continue;
 
           /* Rewrite Node-Copyfrom-Rev if we are renumbering revisions.

Modified: subversion/branches/1.8.x-r1579588/subversion/svnrdump/util.c
URL: http://svn.apache.org/viewvc/subversion/branches/1.8.x-r1579588/subversion/svnrdump/util.c?rev=1589916&r1=1589915&r2=1589916&view=diff
==============================================================================
--- subversion/branches/1.8.x-r1579588/subversion/svnrdump/util.c (original)
+++ subversion/branches/1.8.x-r1579588/subversion/svnrdump/util.c Fri Apr 25 00:24:11 2014
@@ -35,7 +35,7 @@ svn_rdump__normalize_prop(const char *na
                           const svn_string_t **value,
                           apr_pool_t *result_pool)
 {
-  if (svn_prop_needs_translation(name))
+  if (svn_prop_needs_translation(name) && *value)
     {
       const char *cstring;