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/01/09 10:31:15 UTC

svn commit: r1556765 [9/12] - in /subversion/branches/fsfs-ucsnorm: ./ contrib/server-side/fsfsfixer/fixer/ subversion/bindings/javahl/native/ subversion/bindings/javahl/native/jniwrapper/ subversion/bindings/javahl/src/org/apache/subversion/javahl/ su...

Modified: subversion/branches/fsfs-ucsnorm/subversion/libsvn_subr/hash.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/libsvn_subr/hash.c?rev=1556765&r1=1556764&r2=1556765&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/libsvn_subr/hash.c (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/libsvn_subr/hash.c Thu Jan  9 09:31:10 2014
@@ -41,6 +41,7 @@
 #include "svn_pools.h"
 
 #include "private/svn_dep_compat.h"
+#include "private/svn_sorts_private.h"
 #include "private/svn_subr_private.h"
 
 
@@ -88,37 +89,67 @@
 /*** Dumping and loading hash files. */
 
 /* Implements svn_hash_read2 and svn_hash_read_incremental. */
-static svn_error_t *
-hash_read(apr_hash_t *hash, svn_stream_t *stream, const char *terminator,
-          svn_boolean_t incremental, apr_pool_t *pool)
+svn_error_t *
+svn_hash__read_entry(svn_hash__entry_t *entry,
+                     svn_stream_t *stream,
+                     const char *terminator,
+                     svn_boolean_t incremental,
+                     apr_pool_t *pool)
 {
   svn_stringbuf_t *buf;
   svn_boolean_t eof;
-  apr_size_t len, keylen, vallen;
-  char c, *keybuf, *valbuf;
-  apr_pool_t *iterpool = svn_pool_create(pool);
-
-  while (1)
-    {
-      svn_error_t *err;
-      apr_uint64_t ui64;
+  apr_size_t len;
+  char c;
 
-      svn_pool_clear(iterpool);
+  svn_error_t *err;
+  apr_uint64_t ui64;
 
-      /* Read a key length line.  Might be END, though. */
-      SVN_ERR(svn_stream_readline(stream, &buf, "\n", &eof, iterpool));
+  /* Read a key length line.  Might be END, though. */
+  SVN_ERR(svn_stream_readline(stream, &buf, "\n", &eof, pool));
 
-      /* Check for the end of the hash. */
-      if ((!terminator && eof && buf->len == 0)
-          || (terminator && (strcmp(buf->data, terminator) == 0)))
-        break;
+  /* Check for the end of the hash. */
+  if ((!terminator && eof && buf->len == 0)
+      || (terminator && (strcmp(buf->data, terminator) == 0)))
+  {
+    entry->key = NULL;
+    entry->keylen = 0;
+    entry->val = NULL;
+    entry->vallen = 0;
+
+    return SVN_NO_ERROR;
+  }
+
+  /* Check for unexpected end of stream */
+  if (eof)
+    return svn_error_create(SVN_ERR_MALFORMED_FILE, NULL,
+                            _("Serialized hash missing terminator"));
 
-      /* Check for unexpected end of stream */
-      if (eof)
+  if ((buf->len >= 3) && (buf->data[0] == 'K') && (buf->data[1] == ' '))
+    {
+      /* Get the length of the key */
+      err = svn_cstring_strtoui64(&ui64, buf->data + 2,
+                                  0, APR_SIZE_MAX, 10);
+      if (err)
+        return svn_error_create(SVN_ERR_MALFORMED_FILE, err,
+                                _("Serialized hash malformed"));
+      entry->keylen = (apr_size_t)ui64;
+
+      /* Now read that much into a buffer. */
+      entry->key = apr_palloc(pool, entry->keylen + 1);
+      SVN_ERR(svn_stream_read(stream, entry->key, &entry->keylen));
+      entry->key[entry->keylen] = '\0';
+
+      /* Suck up extra newline after key data */
+      len = 1;
+      SVN_ERR(svn_stream_read(stream, &c, &len));
+      if (c != '\n')
         return svn_error_create(SVN_ERR_MALFORMED_FILE, NULL,
-                                _("Serialized hash missing terminator"));
+                                _("Serialized hash malformed"));
+
+      /* Read a val length line */
+      SVN_ERR(svn_stream_readline(stream, &buf, "\n", &eof, pool));
 
-      if ((buf->len >= 3) && (buf->data[0] == 'K') && (buf->data[1] == ' '))
+      if ((buf->data[0] == 'V') && (buf->data[1] == ' '))
         {
           /* Get the length of the key */
           err = svn_cstring_strtoui64(&ui64, buf->data + 2,
@@ -126,81 +157,88 @@ hash_read(apr_hash_t *hash, svn_stream_t
           if (err)
             return svn_error_create(SVN_ERR_MALFORMED_FILE, err,
                                     _("Serialized hash malformed"));
-          keylen = (apr_size_t)ui64;
+          entry->vallen = (apr_size_t)ui64;
 
-          /* Now read that much into a buffer. */
-          keybuf = apr_palloc(pool, keylen + 1);
-          SVN_ERR(svn_stream_read(stream, keybuf, &keylen));
-          keybuf[keylen] = '\0';
+          entry->val = apr_palloc(pool, entry->vallen + 1);
+          SVN_ERR(svn_stream_read(stream, entry->val, &entry->vallen));
+          entry->val[entry->vallen] = '\0';
 
-          /* Suck up extra newline after key data */
+          /* Suck up extra newline after val data */
           len = 1;
           SVN_ERR(svn_stream_read(stream, &c, &len));
           if (c != '\n')
             return svn_error_create(SVN_ERR_MALFORMED_FILE, NULL,
                                     _("Serialized hash malformed"));
+        }
+      else
+        return svn_error_create(SVN_ERR_MALFORMED_FILE, NULL,
+                                _("Serialized hash malformed"));
+    }
+  else if (incremental && (buf->len >= 3)
+           && (buf->data[0] == 'D') && (buf->data[1] == ' '))
+    {
+      /* Get the length of the key */
+      err = svn_cstring_strtoui64(&ui64, buf->data + 2,
+                                  0, APR_SIZE_MAX, 10);
+      if (err)
+        return svn_error_create(SVN_ERR_MALFORMED_FILE, err,
+                                _("Serialized hash malformed"));
+      entry->keylen = (apr_size_t)ui64;
+
+      /* Now read that much into a buffer. */
+      entry->key = apr_palloc(pool, entry->keylen + 1);
+      SVN_ERR(svn_stream_read(stream, entry->key, &entry->keylen));
+      entry->key[entry->keylen] = '\0';
+
+      /* Suck up extra newline after key data */
+      len = 1;
+      SVN_ERR(svn_stream_read(stream, &c, &len));
+      if (c != '\n')
+        return svn_error_create(SVN_ERR_MALFORMED_FILE, NULL,
+                                _("Serialized hash malformed"));
 
-          /* Read a val length line */
-          SVN_ERR(svn_stream_readline(stream, &buf, "\n", &eof, iterpool));
+      /* Remove this hash entry. */
+      entry->vallen = 0;
+      entry->val = NULL;
+    }
+  else
+    {
+      return svn_error_create(SVN_ERR_MALFORMED_FILE, NULL,
+                              _("Serialized hash malformed"));
+    }
 
-          if ((buf->data[0] == 'V') && (buf->data[1] == ' '))
-            {
-              err = svn_cstring_strtoui64(&ui64, buf->data + 2,
-                                          0, APR_SIZE_MAX, 10);
-              if (err)
-                return svn_error_create(SVN_ERR_MALFORMED_FILE, err,
-                                        _("Serialized hash malformed"));
-              vallen = (apr_size_t)ui64;
-
-              valbuf = apr_palloc(iterpool, vallen + 1);
-              SVN_ERR(svn_stream_read(stream, valbuf, &vallen));
-              valbuf[vallen] = '\0';
+  return SVN_NO_ERROR;
+}
 
-              /* Suck up extra newline after val data */
-              len = 1;
-              SVN_ERR(svn_stream_read(stream, &c, &len));
-              if (c != '\n')
-                return svn_error_create(SVN_ERR_MALFORMED_FILE, NULL,
-                                        _("Serialized hash malformed"));
+static svn_error_t *
+hash_read(apr_hash_t *hash, svn_stream_t *stream, const char *terminator,
+          svn_boolean_t incremental, apr_pool_t *pool)
+{
+  apr_pool_t *iterpool = svn_pool_create(pool);
 
-              /* Add a new hash entry. */
-              apr_hash_set(hash, keybuf, keylen,
-                           svn_string_ncreate(valbuf, vallen, pool));
-            }
-          else
-            return svn_error_create(SVN_ERR_MALFORMED_FILE, NULL,
-                                    _("Serialized hash malformed"));
-        }
-      else if (incremental && (buf->len >= 3)
-               && (buf->data[0] == 'D') && (buf->data[1] == ' '))
-        {
-          /* Get the length of the key */
-          err = svn_cstring_strtoui64(&ui64, buf->data + 2,
-                                      0, APR_SIZE_MAX, 10);
-          if (err)
-            return svn_error_create(SVN_ERR_MALFORMED_FILE, err,
-                                    _("Serialized hash malformed"));
-          keylen = (apr_size_t)ui64;
+  while (1)
+    {
+      svn_hash__entry_t entry;
 
-          /* Now read that much into a buffer. */
-          keybuf = apr_palloc(iterpool, keylen + 1);
-          SVN_ERR(svn_stream_read(stream, keybuf, &keylen));
-          keybuf[keylen] = '\0';
+      svn_pool_clear(iterpool);
+      SVN_ERR(svn_hash__read_entry(&entry, stream, terminator,
+                                   incremental, iterpool));
 
-          /* Suck up extra newline after key data */
-          len = 1;
-          SVN_ERR(svn_stream_read(stream, &c, &len));
-          if (c != '\n')
-            return svn_error_create(SVN_ERR_MALFORMED_FILE, NULL,
-                                    _("Serialized hash malformed"));
+      /* end of hash? */
+      if (entry.key == NULL)
+        break;
 
-          /* Remove this hash entry. */
-          apr_hash_set(hash, keybuf, keylen, NULL);
+      if (entry.val)
+        {
+          /* Add a new hash entry. */
+          apr_hash_set(hash, apr_pstrmemdup(pool, entry.key, entry.keylen),
+                       entry.keylen,
+                       svn_string_ncreate(entry.val, entry.vallen, pool));
         }
       else
         {
-          return svn_error_create(SVN_ERR_MALFORMED_FILE, NULL,
-                                  _("Serialized hash malformed"));
+          /* Remove this hash entry. */
+          apr_hash_set(hash, entry.key, entry.keylen, NULL);
         }
     }
 

Modified: subversion/branches/fsfs-ucsnorm/subversion/libsvn_subr/mergeinfo.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/libsvn_subr/mergeinfo.c?rev=1556765&r1=1556764&r2=1556765&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/libsvn_subr/mergeinfo.c (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/libsvn_subr/mergeinfo.c Thu Jan  9 09:31:10 2014
@@ -35,6 +35,7 @@
 #include "svn_mergeinfo.h"
 #include "private/svn_fspath.h"
 #include "private/svn_mergeinfo_private.h"
+#include "private/svn_sorts_private.h"
 #include "private/svn_string_private.h"
 #include "private/svn_subr_private.h"
 #include "svn_hash.h"
@@ -878,7 +879,7 @@ adjust_remaining_ranges(svn_rangelist_t 
               new_modified_range->inheritable = FALSE;
               modified_range->end = next_range->start;
               (*range_index)+=2;
-              svn_sort__array_insert(&new_modified_range, rangelist,
+              svn_sort__array_insert(rangelist, &new_modified_range,
                                      *range_index);
               /* Recurse with the new range. */
               adjust_remaining_ranges(rangelist, range_index, result_pool);
@@ -1019,7 +1020,7 @@ svn_rangelist_merge2(svn_rangelist_t *ra
                         svn_merge_range_dup(range, result_pool);
                       range_copy->end = change->start;
                       range->start = change->start;
-                      svn_sort__array_insert(&range_copy, rangelist, i++);
+                      svn_sort__array_insert(rangelist, &range_copy, i++);
                     }
                   else
                     {
@@ -1041,7 +1042,7 @@ svn_rangelist_merge2(svn_rangelist_t *ra
                  into RANGELIST. */
               svn_merge_range_t *change_copy =
                 svn_merge_range_dup(change, result_pool);
-              svn_sort__array_insert(&change_copy, rangelist, i++);
+              svn_sort__array_insert(rangelist, &change_copy, i++);
               j++;
             }
           else if (change->end == range->start)
@@ -1060,7 +1061,7 @@ svn_rangelist_merge2(svn_rangelist_t *ra
                      a copy of CHANGE into RANGELIST. */
                   svn_merge_range_t *change_copy =
                     svn_merge_range_dup(change, result_pool);
-                  svn_sort__array_insert(&change_copy, rangelist, i);
+                  svn_sort__array_insert(rangelist, &change_copy, i);
                   j++;
                 }
             }
@@ -1092,7 +1093,7 @@ svn_rangelist_merge2(svn_rangelist_t *ra
                         svn_merge_range_dup(change, result_pool);
                       change_copy->end = range->start;
                       change->start = range->start;
-                      svn_sort__array_insert(&change_copy, rangelist, i++);
+                      svn_sort__array_insert(rangelist, &change_copy, i++);
                     }
                   else
                     {
@@ -1135,7 +1136,7 @@ svn_rangelist_merge2(svn_rangelist_t *ra
                           range->start = change->start;
                           range->end = change->end;
                           range->inheritable = TRUE;
-                          svn_sort__array_insert(&range_copy, rangelist, ++i);
+                          svn_sort__array_insert(rangelist, &range_copy, ++i);
                           j++;
                         }
                     }
@@ -1153,7 +1154,7 @@ svn_rangelist_merge2(svn_rangelist_t *ra
                       range_copy->end = change->end;
                       range_copy->inheritable = TRUE;
                       range->start = change->end;
-                      svn_sort__array_insert(&range_copy, rangelist, i++);
+                      svn_sort__array_insert(rangelist, &range_copy, i++);
                       j++;
                     }
                 }
@@ -1168,7 +1169,7 @@ svn_rangelist_merge2(svn_rangelist_t *ra
         APR_ARRAY_IDX(changes, j, svn_merge_range_t *);
       svn_merge_range_t *change_copy = svn_merge_range_dup(change,
                                                            result_pool);
-      svn_sort__array_insert(&change_copy, rangelist, rangelist->nelts);
+      svn_sort__array_insert(rangelist, &change_copy, rangelist->nelts);
     }
 
   return SVN_NO_ERROR;

Modified: subversion/branches/fsfs-ucsnorm/subversion/libsvn_subr/sorts.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/libsvn_subr/sorts.c?rev=1556765&r1=1556764&r2=1556765&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/libsvn_subr/sorts.c (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/libsvn_subr/sorts.c Thu Jan  9 09:31:10 2014
@@ -34,6 +34,7 @@
 #include "svn_path.h"
 #include "svn_sorts.h"
 #include "svn_error.h"
+#include "private/svn_sorts_private.h"
 
 
 
@@ -215,8 +216,8 @@ bsearch_lower_bound(const void *key,
 }
 
 int
-svn_sort__bsearch_lower_bound(const void *key,
-                              const apr_array_header_t *array,
+svn_sort__bsearch_lower_bound(const apr_array_header_t *array,
+                              const void *key,
                               int (*compare_func)(const void *, const void *))
 {
   return bsearch_lower_bound(key,
@@ -224,9 +225,43 @@ svn_sort__bsearch_lower_bound(const void
                              compare_func);
 }
 
+void *
+svn_sort__array_lookup(const apr_array_header_t *array,
+                       const void *key,
+                       int *hint,
+                       int (*compare_func)(const void *, const void *))
+{
+  void *result;
+  int idx;
+
+  /* If provided, try the index following *HINT (i.e. probably the last
+   * hit location) first.  This speeds up linear scans. */
+  if (hint)
+    {
+      idx = *hint;
+      *hint = ++idx;
+      if (idx >= 0 && idx < array->nelts)
+        {
+          result = array->elts + idx * array->elt_size;
+          if (!compare_func(result, key))
+            return result;
+        }
+    }
+
+  idx = bsearch_lower_bound(key, array->elts, array->nelts, array->elt_size,
+                            compare_func);
+  if (hint)
+    *hint = idx;
+  if (idx >= array->nelts)
+    return NULL;
+
+  result = array->elts + idx * array->elt_size;
+  return compare_func(result, key) ? NULL : result;
+}
+
 void
-svn_sort__array_insert(const void *new_element,
-                       apr_array_header_t *array,
+svn_sort__array_insert(apr_array_header_t *array,
+                       const void *new_element,
                        int insert_index)
 {
   int elements_to_move;

Modified: subversion/branches/fsfs-ucsnorm/subversion/libsvn_subr/string.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/libsvn_subr/string.c?rev=1556765&r1=1556764&r2=1556765&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/libsvn_subr/string.c (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/libsvn_subr/string.c Thu Jan  9 09:31:10 2014
@@ -78,14 +78,10 @@ membuf_ensure(void **data, apr_size_t *s
       apr_size_t new_size = *size;
 
       if (new_size == 0)
-        /* APR will increase odd allocation sizes to the next
-         * multiple for 8, for instance. Take advantage of that
-         * knowledge and allow for the extra size to be used. */
         new_size = minimum_size;
       else
         while (new_size < minimum_size)
           {
-            /* new_size is aligned; doubling it should keep it aligned */
             const apr_size_t prev_size = new_size;
             new_size *= 2;
 

Modified: subversion/branches/fsfs-ucsnorm/subversion/libsvn_subr/version.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/libsvn_subr/version.c?rev=1556765&r1=1556764&r2=1556765&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/libsvn_subr/version.c (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/libsvn_subr/version.c Thu Jan  9 09:31:10 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/fsfs-ucsnorm/subversion/libsvn_wc/adm_files.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/libsvn_wc/adm_files.c?rev=1556765&r1=1556764&r2=1556765&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/libsvn_wc/adm_files.c (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/libsvn_wc/adm_files.c Thu Jan  9 09:31:10 2014
@@ -464,11 +464,14 @@ svn_wc__internal_ensure_adm(svn_wc__db_t
                                              db, local_abspath,
                                              scratch_pool, scratch_pool));
           else
-            SVN_ERR(svn_wc__db_scan_base_repos(&db_repos_relpath,
-                                               &db_repos_root_url,
-                                               &db_repos_uuid,
-                                               db, local_abspath,
-                                               scratch_pool, scratch_pool));
+            SVN_ERR(svn_wc__db_base_get_info(NULL, NULL, NULL,
+                                             &db_repos_relpath,
+                                             &db_repos_root_url,
+                                             &db_repos_uuid, NULL, NULL, NULL,
+                                             NULL, NULL, NULL, NULL, NULL,
+                                             NULL, NULL,
+                                             db, local_abspath,
+                                             scratch_pool, scratch_pool));
         }
 
       /* The caller gives us a URL which should match the entry. However,

Modified: subversion/branches/fsfs-ucsnorm/subversion/libsvn_wc/adm_ops.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/libsvn_wc/adm_ops.c?rev=1556765&r1=1556764&r2=1556765&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/libsvn_wc/adm_ops.c (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/libsvn_wc/adm_ops.c Thu Jan  9 09:31:10 2014
@@ -54,8 +54,9 @@
 #include "conflicts.h"
 #include "workqueue.h"
 
-#include "private/svn_subr_private.h"
 #include "private/svn_dep_compat.h"
+#include "private/svn_sorts_private.h"
+#include "private/svn_subr_private.h"
 
 
 struct svn_wc_committed_queue_t
@@ -631,10 +632,12 @@ check_can_add_to_parent(const char **rep
                                          db, parent_abspath,
                                          result_pool, scratch_pool));
       else
-        SVN_ERR(svn_wc__db_scan_base_repos(NULL,
-                                           repos_root_url, repos_uuid,
-                                           db, parent_abspath,
-                                           result_pool, scratch_pool));
+        SVN_ERR(svn_wc__db_base_get_info(NULL, NULL, NULL, NULL,
+                                         repos_root_url, repos_uuid, NULL,
+                                         NULL, NULL, NULL, NULL, NULL, NULL,
+                                         NULL, NULL, NULL,
+                                         db, parent_abspath,
+                                         result_pool, scratch_pool));
     }
 
   return SVN_NO_ERROR;
@@ -887,11 +890,13 @@ svn_wc_add4(svn_wc_context_t *wc_ctx,
       const char *repos_relpath, *inner_repos_root_url, *inner_repos_uuid;
       const char *inner_url;
 
-      SVN_ERR(svn_wc__db_scan_base_repos(&repos_relpath,
-                                         &inner_repos_root_url,
-                                         &inner_repos_uuid,
-                                         db, local_abspath,
-                                         scratch_pool, scratch_pool));
+      SVN_ERR(svn_wc__db_base_get_info(NULL, NULL, NULL, &repos_relpath,
+                                       &inner_repos_root_url,
+                                       &inner_repos_uuid, NULL, NULL, NULL,
+                                       NULL, NULL, NULL, NULL, NULL, NULL,
+                                       NULL,
+                                       db, local_abspath,
+                                       scratch_pool, scratch_pool));
 
       if (strcmp(inner_repos_uuid, repos_uuid)
           || strcmp(repos_root_url, inner_repos_root_url))

Modified: subversion/branches/fsfs-ucsnorm/subversion/libsvn_wc/cleanup.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/libsvn_wc/cleanup.c?rev=1556765&r1=1556764&r2=1556765&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/libsvn_wc/cleanup.c (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/libsvn_wc/cleanup.c Thu Jan  9 09:31:10 2014
@@ -206,6 +206,8 @@ svn_wc_cleanup4(svn_wc_context_t *wc_ctx
                 svn_boolean_t vacuum_pristines,
                 svn_cancel_func_t cancel_func,
                 void *cancel_baton,
+                svn_wc_notify_func2_t notify_func,
+                void *notify_baton,
                 apr_pool_t *scratch_pool)
 {
   svn_wc__db_t *db;

Modified: subversion/branches/fsfs-ucsnorm/subversion/libsvn_wc/copy.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/libsvn_wc/copy.c?rev=1556765&r1=1556764&r2=1556765&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/libsvn_wc/copy.c (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/libsvn_wc/copy.c Thu Jan  9 09:31:10 2014
@@ -644,10 +644,13 @@ copy_or_move(svn_boolean_t *move_degrade
                                            scratch_pool, scratch_pool));
         else
           /* If not added, the node must have a base or we can't copy */
-          SVN_ERR(svn_wc__db_scan_base_repos(NULL, &src_repos_root_url,
-                                             &src_repos_uuid,
-                                             db, src_abspath,
-                                             scratch_pool, scratch_pool));
+          SVN_ERR(svn_wc__db_base_get_info(NULL, NULL, NULL, NULL,
+                                           &src_repos_root_url,
+                                           &src_repos_uuid, NULL, NULL, NULL,
+                                           NULL, NULL, NULL, NULL, NULL, NULL,
+                                           NULL,
+                                           db, src_abspath,
+                                           scratch_pool, scratch_pool));
       }
 
     if (!dst_repos_root_url)
@@ -661,10 +664,13 @@ copy_or_move(svn_boolean_t *move_degrade
                                            scratch_pool, scratch_pool));
         else
           /* If not added, the node must have a base or we can't copy */
-          SVN_ERR(svn_wc__db_scan_base_repos(NULL, &dst_repos_root_url,
-                                             &dst_repos_uuid,
-                                             db, dstdir_abspath,
-                                             scratch_pool, scratch_pool));
+          SVN_ERR(svn_wc__db_base_get_info(NULL, NULL, NULL, NULL,
+                                           &dst_repos_root_url,
+                                           &dst_repos_uuid, NULL, NULL, NULL,
+                                           NULL, NULL, NULL, NULL, NULL, NULL,
+                                           NULL,
+                                           db, dstdir_abspath,
+                                           scratch_pool, scratch_pool));
       }
 
     if (strcmp(src_repos_root_url, dst_repos_root_url) != 0

Modified: subversion/branches/fsfs-ucsnorm/subversion/libsvn_wc/deprecated.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/libsvn_wc/deprecated.c?rev=1556765&r1=1556764&r2=1556765&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/libsvn_wc/deprecated.c (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/libsvn_wc/deprecated.c Thu Jan  9 09:31:10 2014
@@ -4202,6 +4202,7 @@ svn_wc_cleanup3(svn_wc_context_t *wc_ctx
                             TRUE /* clear_dav_cache */,
                             TRUE /* clean_pristines */,
                             cancel_func, cancel_baton,
+                            NULL, NULL /* notify */,
                             scratch_pool));
 }
 

Modified: subversion/branches/fsfs-ucsnorm/subversion/libsvn_wc/diff_editor.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/libsvn_wc/diff_editor.c?rev=1556765&r1=1556764&r2=1556765&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/libsvn_wc/diff_editor.c (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/libsvn_wc/diff_editor.c Thu Jan  9 09:31:10 2014
@@ -65,10 +65,11 @@
 #include "svn_hash.h"
 #include "svn_sorts.h"
 
-#include "private/svn_subr_private.h"
-#include "private/svn_wc_private.h"
 #include "private/svn_diff_tree.h"
 #include "private/svn_editor.h"
+#include "private/svn_sorts_private.h"
+#include "private/svn_subr_private.h"
+#include "private/svn_wc_private.h"
 
 #include "wc.h"
 #include "props.h"

Modified: subversion/branches/fsfs-ucsnorm/subversion/libsvn_wc/entries.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/libsvn_wc/entries.c?rev=1556765&r1=1556764&r2=1556765&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/libsvn_wc/entries.c (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/libsvn_wc/entries.c Thu Jan  9 09:31:10 2014
@@ -493,13 +493,13 @@ read_one_entry(const svn_wc_entry_t **ne
       /* Grab inherited repository information, if necessary. */
       if (repos_relpath == NULL)
         {
-          SVN_ERR(svn_wc__db_scan_base_repos(&repos_relpath,
-                                             &entry->repos,
-                                             &entry->uuid,
-                                             db,
-                                             entry_abspath,
-                                             result_pool,
-                                             scratch_pool));
+          SVN_ERR(svn_wc__db_base_get_info(NULL, NULL, NULL, &repos_relpath,
+                                           &entry->repos,
+                                           &entry->uuid, NULL, NULL, NULL,
+                                           NULL, NULL, NULL, NULL, NULL, NULL,
+                                           NULL,
+                                           db, entry_abspath,
+                                           result_pool, scratch_pool));
         }
 
       entry->incomplete = (status == svn_wc__db_status_incomplete);

Modified: subversion/branches/fsfs-ucsnorm/subversion/libsvn_wc/status.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/libsvn_wc/status.c?rev=1556765&r1=1556764&r2=1556765&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/libsvn_wc/status.c (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/libsvn_wc/status.c Thu Jan  9 09:31:10 2014
@@ -50,6 +50,7 @@
 #include "translate.h"
 #include "tree_conflicts.h"
 
+#include "private/svn_sorts_private.h"
 #include "private/svn_wc_private.h"
 #include "private/svn_fspath.h"
 #include "private/svn_editor.h"
@@ -285,10 +286,12 @@ get_repos_root_url_relpath(const char **
     }
   else if (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));
+      SVN_ERR(svn_wc__db_base_get_info(NULL, NULL, NULL, repos_relpath,
+                                       repos_root_url, repos_uuid, NULL, NULL,
+                                       NULL, NULL, NULL, NULL, NULL, NULL,
+                                       NULL, NULL,
+                                       db, local_abspath,
+                                       result_pool, scratch_pool));
     }
   else
     {

Modified: subversion/branches/fsfs-ucsnorm/subversion/libsvn_wc/update_editor.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/libsvn_wc/update_editor.c?rev=1556765&r1=1556764&r2=1556765&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/libsvn_wc/update_editor.c (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/libsvn_wc/update_editor.c Thu Jan  9 09:31:10 2014
@@ -211,7 +211,7 @@ struct edit_baton
 
   /* If this is a 'switch' operation, the new relpath of target_abspath,
      else NULL. */
-  const char *switch_relpath;
+  const char *switch_repos_relpath;
 
   /* The URL to the root of the repository. */
   const char *repos_root;
@@ -298,7 +298,7 @@ struct dir_baton
   const char *local_abspath;
 
   /* The repository relative path this directory will correspond to. */
-  const char *new_relpath;
+  const char *new_repos_relpath;
 
   /* The revision of the directory before updating */
   svn_revnum_t old_revision;
@@ -489,47 +489,20 @@ cleanup_edit_baton(void *edit_baton)
   return APR_SUCCESS;
 }
 
-/* Make a new dir baton in a subpool of PB->pool. PB is the parent baton.
-   If PATH and PB are NULL, this is the root directory of the edit; in this
-   case, make the new dir baton in a subpool of EB->pool.
-   ADDING should be TRUE if we are adding this directory.  */
+/* Calculate the new repos_relpath for a directory or file */
 static svn_error_t *
-make_dir_baton(struct dir_baton **d_p,
-               const char *path,
-               struct edit_baton *eb,
-               struct dir_baton *pb,
-               svn_boolean_t adding,
-               apr_pool_t *scratch_pool)
+calculate_repos_relpath(const char **new_repos_relpath,
+                        const char *local_abspath,
+                        const char *old_repos_relpath,
+                        struct edit_baton *eb,
+                        struct dir_baton *pb,
+                        apr_pool_t *result_pool,
+                        apr_pool_t *scratch_pool)
 {
-  apr_pool_t *dir_pool;
-  struct dir_baton *d;
-
-  if (pb != NULL)
-    dir_pool = svn_pool_create(pb->pool);
-  else
-    dir_pool = svn_pool_create(eb->pool);
-
-  SVN_ERR_ASSERT(path || (! pb));
-
-  /* Okay, no easy out, so allocate and initialize a dir baton. */
-  d = apr_pcalloc(dir_pool, sizeof(*d));
-
-  /* Construct the PATH and baseNAME of this directory. */
-  if (path)
-    {
-      d->name = svn_dirent_basename(path, dir_pool);
-      SVN_ERR(path_join_under_root(&d->local_abspath,
-                                   pb->local_abspath, d->name, dir_pool));
-    }
-  else
-    {
-      /* This is the root baton. */
-      d->name = NULL;
-      d->local_abspath = eb->anchor_abspath;
-    }
+  const char *name = svn_dirent_basename(local_abspath, NULL);
 
-  /* Figure out the new_relpath for this directory. */
-  if (eb->switch_relpath)
+  /* Figure out the new_repos_relpath for this directory. */
+  if (eb->switch_repos_relpath)
     {
       /* Handle switches... */
 
@@ -538,18 +511,16 @@ make_dir_baton(struct dir_baton **d_p,
           if (*eb->target_basename == '\0')
             {
               /* No parent baton and target_basename=="" means that we are
-                 the target of the switch. Thus, our NEW_RELPATH will be
-                 the SWITCH_RELPATH.  */
-              d->new_relpath = eb->switch_relpath;
+                 the target of the switch. Thus, our new_repos_relpath will be
+                 the switch_repos_relpath.  */
+              *new_repos_relpath = eb->switch_repos_relpath;
             }
           else
             {
               /* This node is NOT the target of the switch (one of our
                  children is the target); therefore, it must already exist.
                  Get its old REPOS_RELPATH, as it won't be changing.  */
-              SVN_ERR(svn_wc__db_scan_base_repos(&d->new_relpath, NULL, NULL,
-                                                 eb->db, d->local_abspath,
-                                                 dir_pool, scratch_pool));
+              *new_repos_relpath = apr_pstrdup(result_pool, old_repos_relpath);
             }
         }
       else
@@ -557,36 +528,76 @@ make_dir_baton(struct dir_baton **d_p,
           /* This directory is *not* the root (has a parent). If there is
              no grandparent, then we may have anchored at the parent,
              and self is the target. If we match the target, then set
-             NEW_RELPATH to the SWITCH_RELPATH.
+             new_repos_relpath to the switch_repos_relpath.
+
+             Otherwise, we simply extend new_repos_relpath from the parent.  */
 
-             Otherwise, we simply extend NEW_RELPATH from the parent.  */
           if (pb->parent_baton == NULL
-              && strcmp(eb->target_basename, d->name) == 0)
-            d->new_relpath = eb->switch_relpath;
+              && strcmp(eb->target_basename, name) == 0)
+            *new_repos_relpath = eb->switch_repos_relpath;
           else
-            d->new_relpath = svn_relpath_join(pb->new_relpath, d->name,
-                                              dir_pool);
+            *new_repos_relpath = svn_relpath_join(pb->new_repos_relpath, name,
+                                                  result_pool);
         }
     }
   else  /* must be an update */
     {
       /* If we are adding the node, then simply extend the parent's
          relpath for our own.  */
-      if (adding)
+      if (old_repos_relpath == NULL)
         {
           SVN_ERR_ASSERT(pb != NULL);
-          d->new_relpath = svn_relpath_join(pb->new_relpath, d->name,
-                                            dir_pool);
+          *new_repos_relpath = svn_relpath_join(pb->new_repos_relpath, name,
+                                                result_pool);
         }
       else
         {
-          SVN_ERR(svn_wc__db_scan_base_repos(&d->new_relpath, NULL, NULL,
-                                             eb->db, d->local_abspath,
-                                             dir_pool, scratch_pool));
-          SVN_ERR_ASSERT(d->new_relpath);
+          *new_repos_relpath = apr_pstrdup(result_pool, old_repos_relpath);
         }
     }
 
+  return SVN_NO_ERROR;
+}
+
+/* Make a new dir baton in a subpool of PB->pool. PB is the parent baton.
+   If PATH and PB are NULL, this is the root directory of the edit; in this
+   case, make the new dir baton in a subpool of EB->pool.
+   ADDING should be TRUE if we are adding this directory.  */
+static svn_error_t *
+make_dir_baton(struct dir_baton **d_p,
+               const char *path,
+               struct edit_baton *eb,
+               struct dir_baton *pb,
+               svn_boolean_t adding,
+               apr_pool_t *scratch_pool)
+{
+  apr_pool_t *dir_pool;
+  struct dir_baton *d;
+
+  if (pb != NULL)
+    dir_pool = svn_pool_create(pb->pool);
+  else
+    dir_pool = svn_pool_create(eb->pool);
+
+  SVN_ERR_ASSERT(path || (! pb));
+
+  /* Okay, no easy out, so allocate and initialize a dir baton. */
+  d = apr_pcalloc(dir_pool, sizeof(*d));
+
+  /* Construct the PATH and baseNAME of this directory. */
+  if (path)
+    {
+      d->name = svn_dirent_basename(path, dir_pool);
+      SVN_ERR(path_join_under_root(&d->local_abspath,
+                                   pb->local_abspath, d->name, dir_pool));
+    }
+  else
+    {
+      /* This is the root baton. */
+      d->name = NULL;
+      d->local_abspath = eb->anchor_abspath;
+    }
+
   d->edit_baton   = eb;
   d->parent_baton = pb;
   d->pool         = dir_pool;
@@ -617,7 +628,6 @@ make_dir_baton(struct dir_baton **d_p,
   return SVN_NO_ERROR;
 }
 
-
 /* Forward declarations. */
 static svn_error_t *
 already_in_a_tree_conflict(svn_boolean_t *conflicted,
@@ -683,7 +693,7 @@ struct file_baton
   const char *local_abspath;
 
   /* The repository relative path this file will correspond to. */
-  const char *new_relpath;
+  const char *new_repos_relpath;
 
   /* The revision of the file before updating */
   svn_revnum_t old_revision;
@@ -767,7 +777,6 @@ make_file_baton(struct file_baton **f_p,
                 svn_boolean_t adding,
                 apr_pool_t *scratch_pool)
 {
-  struct edit_baton *eb = pb->edit_baton;
   apr_pool_t *file_pool = svn_pool_create(pb->pool);
   struct file_baton *f = apr_pcalloc(file_pool, sizeof(*f));
 
@@ -779,37 +788,6 @@ make_file_baton(struct file_baton **f_p,
   SVN_ERR(path_join_under_root(&f->local_abspath,
                                pb->local_abspath, f->name, file_pool));
 
-  /* Figure out the new URL for this file. */
-  if (eb->switch_relpath)
-    {
-      /* Handle switches... */
-
-      /* This file has a parent directory. If there is
-         no grandparent, then we may have anchored at the parent,
-         and self is the target. If we match the target, then set
-         NEW_RELPATH to the SWITCH_RELPATH.
-
-         Otherwise, we simply extend NEW_RELPATH from the parent.  */
-      if (pb->parent_baton == NULL
-          && strcmp(eb->target_basename, f->name) == 0)
-        f->new_relpath = eb->switch_relpath;
-      else
-        f->new_relpath = svn_relpath_join(pb->new_relpath, f->name,
-                                          file_pool);
-    }
-  else  /* must be an update */
-    {
-      if (adding)
-        f->new_relpath = svn_relpath_join(pb->new_relpath, f->name, file_pool);
-      else
-        {
-          SVN_ERR(svn_wc__db_scan_base_repos(&f->new_relpath, NULL, NULL,
-                                             eb->db, f->local_abspath,
-                                             file_pool, scratch_pool));
-          SVN_ERR_ASSERT(f->new_relpath);
-        }
-    }
-
   f->pool              = file_pool;
   f->edit_baton        = pb->edit_baton;
   f->propchanges       = apr_array_make(file_pool, 1, sizeof(svn_prop_t));
@@ -881,7 +859,7 @@ complete_conflict(svn_skel_t *conflict,
   else
     target_version = NULL;
 
-  if (eb->switch_relpath)
+  if (eb->switch_repos_relpath)
     SVN_ERR(svn_wc__conflict_skel_set_op_switch(conflict,
                                                 original_version,
                                                 target_version,
@@ -916,7 +894,7 @@ mark_directory_edited(struct dir_baton *
       SVN_ERR(complete_conflict(db->edit_conflict, db->edit_baton,
                                 db->local_abspath,
                                 db->old_repos_relpath, db->old_revision,
-                                db->new_relpath,
+                                db->new_repos_relpath,
                                 svn_node_dir, svn_node_dir,
                                 db->pool, scratch_pool));
       SVN_ERR(svn_wc__db_op_mark_conflict(db->edit_baton->db,
@@ -950,7 +928,7 @@ mark_file_edited(struct file_baton *fb, 
 
       SVN_ERR(complete_conflict(fb->edit_conflict, fb->edit_baton,
                                 fb->local_abspath, fb->old_repos_relpath,
-                                fb->old_revision, fb->new_relpath,
+                                fb->old_revision, fb->new_repos_relpath,
                                 svn_node_file, svn_node_file,
                                 fb->pool, scratch_pool));
 
@@ -1230,10 +1208,27 @@ open_root(void *edit_baton,
                                eb->db, db->local_abspath,
                                db->pool, pool));
 
-  if (conflict_ignored)
+  if (have_work)
     {
-      db->shadowed = TRUE;
+      SVN_ERR(svn_wc__db_base_get_info(&base_status, NULL,
+                                       &db->old_revision,
+                                       &db->old_repos_relpath, NULL, NULL,
+                                       &db->changed_rev, &db->changed_date,
+                                       &db->changed_author,
+                                       &db->ambient_depth,
+                                       NULL, NULL, NULL, NULL, NULL, NULL,
+                                       eb->db, db->local_abspath,
+                                       db->pool, pool));
     }
+  else
+    base_status = status;
+
+  SVN_ERR(calculate_repos_relpath(&db->new_repos_relpath, db->local_abspath,
+                                  db->old_repos_relpath, eb, NULL,
+                                  db->pool, pool));
+
+  if (conflict_ignored)
+    db->shadowed = TRUE;
   else if (have_work)
     {
       const char *move_src_root_abspath;
@@ -1241,16 +1236,6 @@ open_root(void *edit_baton,
       SVN_ERR(svn_wc__db_base_moved_to(NULL, NULL, &move_src_root_abspath,
                                        NULL, eb->db, db->local_abspath,
                                        pool, pool));
-      if (move_src_root_abspath || *eb->target_basename == '\0')
-        SVN_ERR(svn_wc__db_base_get_info(&base_status, NULL,
-                                         &db->old_revision,
-                                         &db->old_repos_relpath, NULL, NULL,
-                                         &db->changed_rev, &db->changed_date,
-                                         &db->changed_author,
-                                         &db->ambient_depth,
-                                         NULL, NULL, NULL, NULL, NULL, NULL,
-                                         eb->db, db->local_abspath,
-                                         db->pool, pool));
 
       if (move_src_root_abspath)
         {
@@ -1273,7 +1258,8 @@ open_root(void *edit_baton,
               SVN_ERR(complete_conflict(tree_conflict, eb,
                                         move_src_root_abspath,
                                         db->old_repos_relpath,
-                                        db->old_revision, db->new_relpath,
+                                        db->old_revision,
+                                        db->new_repos_relpath,
                                         svn_node_dir, svn_node_dir,
                                         pool, pool));
               SVN_ERR(svn_wc__db_op_mark_conflict(eb->db,
@@ -1290,8 +1276,6 @@ open_root(void *edit_baton,
       db->shadowed = TRUE; /* Needed for the close_directory() on the root, to
                               make sure it doesn't use the ACTUAL tree */
     }
-  else
-    base_status = status;
 
   if (*eb->target_basename == '\0')
     {
@@ -1310,7 +1294,7 @@ open_root(void *edit_baton,
 
       SVN_ERR(svn_wc__db_temp_op_start_directory_update(eb->db,
                                                         db->local_abspath,
-                                                        db->new_relpath,
+                                                        db->new_repos_relpath,
                                                         *eb->target_revision,
                                                         pool));
     }
@@ -2003,6 +1987,8 @@ add_directory(const char *path,
   SVN_ERR_ASSERT(! (copyfrom_path || SVN_IS_VALID_REVNUM(copyfrom_rev)));
 
   SVN_ERR(make_dir_baton(&db, path, eb, pb, TRUE, pool));
+  SVN_ERR(calculate_repos_relpath(&db->new_repos_relpath, db->local_abspath,
+                                  NULL, eb, pb, db->pool, pool));
   *child_baton = db;
 
   if (db->skip_this)
@@ -2070,7 +2056,7 @@ add_directory(const char *path,
          explicitly adds the node into the parent's node database. */
 
       SVN_ERR(svn_wc__db_base_add_not_present_node(eb->db, db->local_abspath,
-                                                   db->new_relpath,
+                                                   db->new_repos_relpath,
                                                    eb->repos_root,
                                                    eb->repos_uuid,
                                                    *eb->target_revision,
@@ -2179,7 +2165,7 @@ add_directory(const char *path,
          because then we would not have received an add_directory.
        */
       SVN_ERR(svn_wc__db_base_add_not_present_node(eb->db, db->local_abspath,
-                                                   db->new_relpath,
+                                                   db->new_repos_relpath,
                                                    eb->repos_root,
                                                    eb->repos_uuid,
                                                    *eb->target_revision,
@@ -2281,14 +2267,14 @@ add_directory(const char *path,
   if (tree_conflict)
     SVN_ERR(complete_conflict(tree_conflict, eb, db->local_abspath,
                               db->old_repos_relpath, db->old_revision,
-                              db->new_relpath,
+                              db->new_repos_relpath,
                               wc_kind,
                               svn_node_dir,
                               db->pool, pool));
 
   SVN_ERR(svn_wc__db_base_add_incomplete_directory(
                                      eb->db, db->local_abspath,
-                                     db->new_relpath,
+                                     db->new_repos_relpath,
                                      eb->repos_root,
                                      eb->repos_uuid,
                                      *eb->target_revision,
@@ -2417,6 +2403,10 @@ open_directory(const char *path,
 
   db->was_incomplete = (base_status == svn_wc__db_status_incomplete);
 
+  SVN_ERR(calculate_repos_relpath(&db->new_repos_relpath, db->local_abspath,
+                                  db->old_repos_relpath, eb, pb,
+                                  db->pool, pool));
+
   /* Is this path a conflict victim? */
   if (db->shadowed)
     conflicted = FALSE; /* Conflict applies to WORKING */
@@ -2476,7 +2466,7 @@ open_directory(const char *path,
 
   /* Mark directory as being at target_revision and URL, but incomplete. */
   SVN_ERR(svn_wc__db_temp_op_start_directory_update(eb->db, db->local_abspath,
-                                                    db->new_relpath,
+                                                    db->new_repos_relpath,
                                                     *eb->target_revision,
                                                     pool));
 
@@ -2703,7 +2693,8 @@ close_directory(void *dir_baton,
   /* Check if we should add some not-present markers before marking the
      directory complete (Issue #3569) */
   {
-    apr_hash_t *new_children = svn_hash_gets(eb->dir_dirents, db->new_relpath);
+    apr_hash_t *new_children = svn_hash_gets(eb->dir_dirents,
+                                             db->new_repos_relpath);
 
     if (new_children != NULL)
       {
@@ -2759,7 +2750,7 @@ close_directory(void *dir_baton,
 
             svn_error_clear(err);
 
-            child_relpath = svn_relpath_join(db->new_relpath, child_name,
+            child_relpath = svn_relpath_join(db->new_repos_relpath, child_name,
                                              iterpool);
 
             SVN_ERR(svn_wc__db_base_add_not_present_node(eb->db,
@@ -2797,7 +2788,7 @@ close_directory(void *dir_baton,
           svn_pool_clear(iterpool);
 
           child_abspath = svn_dirent_join(db->local_abspath, child, iterpool);
-          child_relpath = svn_dirent_join(db->new_relpath, child, iterpool);
+          child_relpath = svn_dirent_join(db->new_repos_relpath, child, iterpool);
 
           SVN_ERR(svn_wc__db_base_add_not_present_node(eb->db,
                                                        child_abspath,
@@ -2873,7 +2864,7 @@ close_directory(void *dir_baton,
                                     db->local_abspath,
                                     db->old_repos_relpath,
                                     db->old_revision,
-                                    db->new_relpath,
+                                    db->new_repos_relpath,
                                     svn_node_dir, svn_node_dir,
                                     db->pool, scratch_pool));
 
@@ -2905,7 +2896,7 @@ close_directory(void *dir_baton,
       SVN_ERR(svn_wc__db_base_add_directory(
                 eb->db, db->local_abspath,
                 eb->wcroot_abspath,
-                db->new_relpath,
+                db->new_repos_relpath,
                 eb->repos_root, eb->repos_uuid,
                 *eb->target_revision,
                 props,
@@ -3094,7 +3085,7 @@ absent_node(const char *path,
 
   {
     const char *repos_relpath;
-    repos_relpath = svn_relpath_join(pb->new_relpath, name, scratch_pool);
+    repos_relpath = svn_relpath_join(pb->new_repos_relpath, name, scratch_pool);
 
     /* Insert an excluded node below the parent node to note that this child
        is absent. (This puts it in the parent db if the child is obstructed) */
@@ -3159,6 +3150,8 @@ add_file(const char *path,
   SVN_ERR_ASSERT(! (copyfrom_path || SVN_IS_VALID_REVNUM(copyfrom_rev)));
 
   SVN_ERR(make_file_baton(&fb, pb, path, TRUE, pool));
+  SVN_ERR(calculate_repos_relpath(&fb->new_repos_relpath, fb->local_abspath,
+                                  NULL, eb, pb, fb->pool, pool));
   *file_baton = fb;
 
   if (fb->skip_this)
@@ -3437,7 +3430,7 @@ add_file(const char *path,
                                 fb->local_abspath,
                                 fb->old_repos_relpath,
                                 fb->old_revision,
-                                fb->new_relpath,
+                                fb->new_repos_relpath,
                                 wc_kind,
                                 svn_node_file,
                                 fb->pool, scratch_pool));
@@ -3519,7 +3512,6 @@ open_file(const char *path,
 
   /* Sanity check. */
 
-  /* If replacing, make sure the .svn entry already exists. */
   SVN_ERR(svn_wc__db_read_info(&status, &wc_kind, &fb->old_revision,
                                &fb->old_repos_relpath, NULL, NULL,
                                &fb->changed_rev, &fb->changed_date,
@@ -3541,6 +3533,10 @@ open_file(const char *path,
                                      eb->db, fb->local_abspath,
                                      fb->pool, scratch_pool));
 
+  SVN_ERR(calculate_repos_relpath(&fb->new_repos_relpath, fb->local_abspath,
+                                  fb->old_repos_relpath, eb, pb,
+                                  fb->pool, scratch_pool));
+
   /* Is this path a conflict victim? */
   if (fb->shadowed)
     conflicted = FALSE; /* Conflict applies to WORKING */
@@ -3856,7 +3852,7 @@ change_file_prop(void *file_baton,
 
           SVN_ERR(complete_conflict(fb->edit_conflict, fb->edit_baton,
                                     fb->local_abspath, fb->old_repos_relpath,
-                                    fb->old_revision, fb->new_relpath,
+                                    fb->old_revision, fb->new_repos_relpath,
                                     svn_node_file, svn_node_file,
                                     fb->pool, scratch_pool));
 
@@ -4326,8 +4322,8 @@ close_file(void *file_baton,
           {
             /* If we lose the lock, but not because we are switching to
                another url, remove the state lock from the wc */
-            if (! eb->switch_relpath
-                || strcmp(fb->new_relpath, fb->old_repos_relpath) == 0)
+            if (! eb->switch_repos_relpath
+                || strcmp(fb->new_repos_relpath, fb->old_repos_relpath) == 0)
               {
                 SVN_ERR_ASSERT(prop->value == NULL);
                 SVN_ERR(svn_wc__db_lock_remove(eb->db, fb->local_abspath,
@@ -4569,7 +4565,7 @@ close_file(void *file_baton,
                                 fb->local_abspath,
                                 fb->old_repos_relpath,
                                 fb->old_revision,
-                                fb->new_relpath,
+                                fb->new_repos_relpath,
                                 svn_node_file, svn_node_file,
                                 fb->pool, scratch_pool));
 
@@ -4598,7 +4594,7 @@ close_file(void *file_baton,
 
   SVN_ERR(svn_wc__db_base_add_file(eb->db, fb->local_abspath,
                                    eb->wcroot_abspath,
-                                   fb->new_relpath,
+                                   fb->new_repos_relpath,
                                    eb->repos_root, eb->repos_uuid,
                                    *eb->target_revision,
                                    new_base_props,
@@ -4733,7 +4729,7 @@ close_edit(void *edit_baton,
       SVN_ERR(svn_wc__db_op_bump_revisions_post_update(eb->db,
                                                        eb->target_abspath,
                                                        eb->requested_depth,
-                                                       eb->switch_relpath,
+                                                       eb->switch_repos_relpath,
                                                        eb->repos_root,
                                                        eb->repos_uuid,
                                                        *(eb->target_revision),
@@ -4860,9 +4856,11 @@ make_editor(svn_revnum_t *target_revisio
 
   /* Get the anchor's repository root and uuid. The anchor must already exist
      in BASE. */
-  SVN_ERR(svn_wc__db_scan_base_repos(NULL, &repos_root, &repos_uuid,
-                                     db, anchor_abspath,
-                                     result_pool, scratch_pool));
+  SVN_ERR(svn_wc__db_base_get_info(NULL, NULL, NULL, NULL, &repos_root,
+                                   &repos_uuid, NULL, NULL, NULL, NULL,
+                                   NULL, NULL, NULL, NULL, NULL, NULL,
+                                   db, anchor_abspath,
+                                   result_pool, scratch_pool));
 
   /* With WC-NG we need a valid repository root */
   SVN_ERR_ASSERT(repos_root != NULL && repos_uuid != NULL);
@@ -4890,10 +4888,10 @@ make_editor(svn_revnum_t *target_revisio
                                 edit_pool, scratch_pool));
 
   if (switch_url)
-    eb->switch_relpath =
+    eb->switch_repos_relpath =
       svn_uri_skip_ancestor(repos_root, switch_url, scratch_pool);
   else
-    eb->switch_relpath = NULL;
+    eb->switch_repos_relpath = NULL;
 
   if (svn_path_is_empty(target_basename))
     eb->target_abspath = eb->anchor_abspath;
@@ -4974,8 +4972,8 @@ make_editor(svn_revnum_t *target_revisio
               apr_hash_t *dirents;
 
               /* If we switch, we should look at the new relpath */
-              if (eb->switch_relpath)
-                dir_repos_relpath = eb->switch_relpath;
+              if (eb->switch_repos_relpath)
+                dir_repos_relpath = eb->switch_repos_relpath;
 
               SVN_ERR(fetch_dirents_func(fetch_dirents_baton, &dirents,
                                          repos_root, dir_repos_relpath,
@@ -5028,9 +5026,9 @@ make_editor(svn_revnum_t *target_revisio
                       apr_hash_t *dirents;
 
                       /* If we switch, we should look at the new relpath */
-                      if (eb->switch_relpath)
+                      if (eb->switch_repos_relpath)
                         dir_repos_relpath = svn_relpath_join(
-                                                eb->switch_relpath,
+                                                eb->switch_repos_relpath,
                                                 child_name, iterpool);
 
                       SVN_ERR(fetch_dirents_func(fetch_dirents_baton, &dirents,

Modified: subversion/branches/fsfs-ucsnorm/subversion/libsvn_wc/wc_db.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/libsvn_wc/wc_db.c?rev=1556765&r1=1556764&r2=1556765&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/libsvn_wc/wc_db.c (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/libsvn_wc/wc_db.c Thu Jan  9 09:31:10 2014
@@ -49,6 +49,7 @@
 #include "workqueue.h"
 #include "token-map.h"
 
+#include "private/svn_sorts_private.h"
 #include "private/svn_sqlite.h"
 #include "private/svn_skel.h"
 #include "private/svn_wc_private.h"
@@ -10282,7 +10283,7 @@ db_read_inherited_props(apr_array_header
 
                   iprop_elt->prop_hash = node_props;
                   /* Build the output array in depth-first order. */
-                  svn_sort__array_insert(&iprop_elt, iprops, 0);
+                  svn_sort__array_insert(iprops, &iprop_elt, 0);
                 }
             }
         }
@@ -10318,7 +10319,7 @@ db_read_inherited_props(apr_array_header
 
           /* If we didn't filter everything then keep this iprop. */
           if (apr_hash_count(cached_iprop->prop_hash))
-            svn_sort__array_insert(&cached_iprop, iprops, 0);
+            svn_sort__array_insert(iprops, &cached_iprop, 0);
         }
     }
 
@@ -11845,39 +11846,6 @@ svn_wc__db_lock_remove(svn_wc__db_t *db,
   return SVN_NO_ERROR;
 }
 
-
-svn_error_t *
-svn_wc__db_scan_base_repos(const char **repos_relpath,
-                           const char **repos_root_url,
-                           const char **repos_uuid,
-                           svn_wc__db_t *db,
-                           const char *local_abspath,
-                           apr_pool_t *result_pool,
-                           apr_pool_t *scratch_pool)
-{
-  svn_wc__db_wcroot_t *wcroot;
-  const char *local_relpath;
-  apr_int64_t repos_id;
-
-  SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
-
-  SVN_ERR(svn_wc__db_wcroot_parse_local_abspath(&wcroot, &local_relpath, db,
-                              local_abspath, scratch_pool, scratch_pool));
-  VERIFY_USABLE_WCROOT(wcroot);
-
-  SVN_ERR(svn_wc__db_base_get_info_internal(NULL, NULL, NULL,
-                                            repos_relpath, &repos_id,
-                                            NULL, NULL, NULL, NULL, NULL,
-                                            NULL, NULL, NULL, NULL, NULL,
-                                            wcroot, local_relpath,
-                                            result_pool, scratch_pool));
-  SVN_ERR(svn_wc__db_fetch_repos_info(repos_root_url, repos_uuid, wcroot->sdb,
-                                      repos_id, result_pool));
-
-  return SVN_NO_ERROR;
-}
-
-
 /* A helper for scan_addition().
  * Compute moved-from information for the node at LOCAL_RELPATH which
  * has been determined as having been moved-here.

Modified: subversion/branches/fsfs-ucsnorm/subversion/libsvn_wc/wc_db.h
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/libsvn_wc/wc_db.h?rev=1556765&r1=1556764&r2=1556765&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/libsvn_wc/wc_db.h (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/libsvn_wc/wc_db.h Thu Jan  9 09:31:10 2014
@@ -2622,30 +2622,6 @@ svn_wc__db_lock_remove(svn_wc__db_t *db,
    @{
 */
 
-/* Read a BASE node's repository information.
-
-   For the BASE node implied by LOCAL_ABSPATH, its location in the repository
-   returned in *REPOS_ROOT_URL and *REPOS_UUID will be returned in
-   *REPOS_RELPATH. Any of the OUT parameters may be NULL, indicating no
-   interest in that piece of information.
-
-   All returned data will be allocated in RESULT_POOL. All temporary
-   allocations will be made in SCRATCH_POOL.
-
-   ### Either delete this function and use _base_get_info instead, or
-   ### add a 'revision' output to make a complete repository node location
-   ### and rename to not say 'scan', because it doesn't.
-*/
-svn_error_t *
-svn_wc__db_scan_base_repos(const char **repos_relpath,
-                           const char **repos_root_url,
-                           const char **repos_uuid,
-                           svn_wc__db_t *db,
-                           const char *local_abspath,
-                           apr_pool_t *result_pool,
-                           apr_pool_t *scratch_pool);
-
-
 /* Scan upwards for information about a known addition to the WORKING tree.
 
    IFF a node's status as returned by svn_wc__db_read_info() is

Modified: subversion/branches/fsfs-ucsnorm/subversion/libsvn_wc/wc_db_update_move.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/libsvn_wc/wc_db_update_move.c?rev=1556765&r1=1556764&r2=1556765&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/libsvn_wc/wc_db_update_move.c (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/libsvn_wc/wc_db_update_move.c Thu Jan  9 09:31:10 2014
@@ -89,6 +89,7 @@
 #include "svn_sorts.h"
 
 #include "private/svn_skel.h"
+#include "private/svn_sorts_private.h"
 #include "private/svn_sqlite.h"
 #include "private/svn_wc_private.h"
 

Modified: subversion/branches/fsfs-ucsnorm/subversion/mod_dav_svn/dav_svn.h
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/mod_dav_svn/dav_svn.h?rev=1556765&r1=1556764&r2=1556765&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/mod_dav_svn/dav_svn.h (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/mod_dav_svn/dav_svn.h Thu Jan  9 09:31:10 2014
@@ -792,12 +792,10 @@ dav_svn__authz_read_func(dav_svn__authz_
    default value for the error code.
 */
 dav_error *
-dav_svn__new_error_tag(apr_pool_t *pool,
+dav_svn__new_error_svn(apr_pool_t *pool,
                        int status,
                        int error_id,
-                       const char *desc,
-                       const char *namespace,
-                       const char *tagname);
+                       const char *desc);
 
 
 /* A wrapper around mod_dav's dav_new_error, mod_dav_svn uses this

Modified: subversion/branches/fsfs-ucsnorm/subversion/mod_dav_svn/lock.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/mod_dav_svn/lock.c?rev=1556765&r1=1556764&r2=1556765&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/mod_dav_svn/lock.c (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/mod_dav_svn/lock.c Thu Jan  9 09:31:10 2014
@@ -841,14 +841,14 @@ remove_lock(dav_lockdb *lockdb,
   /* Sanity check:  if the resource has no associated path in the fs,
      then there's nothing to do.  */
   if (! resource->info->repos_path)
-    return 0;
+    return NULL;
 
   /* Another easy out: if an svn client sent a 'keep_locks' header
      (typically in a DELETE request, as part of 'svn commit
      --no-unlock'), then ignore dav_method_delete()'s attempt to
      unconditionally remove the lock.  */
   if (info->keep_locks)
-    return 0;
+    return NULL;
 
   /* If the resource's fs path is unreadable, we don't allow a lock to
      be removed from it. */
@@ -908,10 +908,41 @@ remove_lock(dav_lockdb *lockdb,
                                    resource->info->r->pool));
     }
 
-  return 0;
+  return NULL;
+}
+
+static dav_error *
+remove_lock_svn_output(dav_lockdb *lockdb,
+                       const dav_resource *resource,
+                       const dav_locktoken *locktoken)
+{
+  dav_error *derr = remove_lock(lockdb, resource, locktoken);
+  int status;
+
+  if (!derr
+      || !resource->info->repos
+      || !resource->info->repos->is_svn_client
+      || (strcmp(lockdb->info->r->method, "UNLOCK") != 0))
+    return derr;
+
+  /* Ok, we have a nice error chain but mod_dav doesn't offer us a way to
+     present it to the client as it will only use the status code for
+     generating a standard error...
+
+     Luckily the unlock processing for the "UNLOCK" method is very simple:
+     call this function and return the result.
+
+     That allows us to just force a response and tell httpd that we are done */
+  status = dav_svn__error_response_tag(lockdb->info->r, derr);
+
+  /* status = DONE */
+
+  /* And push an error that will make mod_dav just report that it is done */
+  return dav_push_error(resource->pool, status, derr->error_id, NULL, derr);
 }
 
 
+
 /*
 ** Refresh all locks, found on the specified resource, which has a
 ** locktoken in the provided list.
@@ -1017,7 +1048,7 @@ const dav_hooks_locks dav_svn__hooks_loc
   find_lock,
   has_locks,
   append_locks,
-  remove_lock,
+  remove_lock_svn_output,
   refresh_locks,
   NULL,
   NULL                          /* hook structure context */

Modified: subversion/branches/fsfs-ucsnorm/subversion/mod_dav_svn/reports/deleted-rev.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/mod_dav_svn/reports/deleted-rev.c?rev=1556765&r1=1556764&r2=1556765&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/mod_dav_svn/reports/deleted-rev.c (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/mod_dav_svn/reports/deleted-rev.c Thu Jan  9 09:31:10 2014
@@ -58,12 +58,10 @@ dav_svn__get_deleted_rev_report(const da
   /* Sanity check. */
   ns = dav_svn__find_ns(doc->namespaces, SVN_XML_NAMESPACE);
   if (ns == -1)
-    return dav_svn__new_error_tag(resource->pool, HTTP_BAD_REQUEST, 0,
+    return dav_svn__new_error_svn(resource->pool, HTTP_BAD_REQUEST, 0,
                                   "The request does not contain the 'svn:' "
                                   "namespace, so it is not going to have "
-                                  "certain required elements.",
-                                  SVN_DAV_ERROR_NAMESPACE,
-                                  SVN_DAV_ERROR_TAG);
+                                  "certain required elements");
 
   for (child = doc->root->first_child; child != NULL; child = child->next)
     {
@@ -101,10 +99,8 @@ dav_svn__get_deleted_rev_report(const da
          && SVN_IS_VALID_REVNUM(peg_rev)
          && SVN_IS_VALID_REVNUM(end_rev)))
     {
-      return dav_svn__new_error_tag(resource->pool, HTTP_BAD_REQUEST, 0,
-                                    "Not all parameters passed.",
-                                    SVN_DAV_ERROR_NAMESPACE,
-                                    SVN_DAV_ERROR_TAG);
+      return dav_svn__new_error_svn(resource->pool, HTTP_BAD_REQUEST, 0,
+                                    "Not all parameters passed");
     }
 
   /* Do what we actually came here for: Find the rev abs_path was deleted. */

Modified: subversion/branches/fsfs-ucsnorm/subversion/mod_dav_svn/reports/file-revs.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/mod_dav_svn/reports/file-revs.c?rev=1556765&r1=1556764&r2=1556765&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/mod_dav_svn/reports/file-revs.c (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/mod_dav_svn/reports/file-revs.c Thu Jan  9 09:31:10 2014
@@ -259,12 +259,10 @@ dav_svn__file_revs_report(const dav_reso
      in this namespace, so is this necessary at all? */
   if (ns == -1)
     {
-      return dav_svn__new_error_tag(resource->pool, HTTP_BAD_REQUEST, 0,
+      return dav_svn__new_error_svn(resource->pool, HTTP_BAD_REQUEST, 0,
                                     "The request does not contain the 'svn:' "
                                     "namespace, so it is not going to have "
-                                    "certain required elements.",
-                                    SVN_DAV_ERROR_NAMESPACE,
-                                    SVN_DAV_ERROR_TAG);
+                                    "certain required elements");
     }
 
   /* Get request information. */
@@ -299,10 +297,8 @@ dav_svn__file_revs_report(const dav_reso
 
   /* Check that all parameters are present and valid. */
   if (! abs_path)
-    return dav_svn__new_error_tag(resource->pool, HTTP_BAD_REQUEST, 0,
-                                  "Not all parameters passed.",
-                                  SVN_DAV_ERROR_NAMESPACE,
-                                  SVN_DAV_ERROR_TAG);
+    return dav_svn__new_error_svn(resource->pool, HTTP_BAD_REQUEST, 0,
+                                  "Not all parameters passed");
 
   frb.bb = apr_brigade_create(resource->pool,
                               output->c->bucket_alloc);
@@ -328,7 +324,7 @@ dav_svn__file_revs_report(const dav_reso
          right then, so r->status remains 0, hence HTTP status 200
          would be misleadingly returned. */
       return (dav_svn__convert_err(serr, HTTP_INTERNAL_SERVER_ERROR,
-                                   serr->message, resource->pool));
+                                   NULL, resource->pool));
     }
 
   if ((serr = maybe_send_header(&frb)))

Modified: subversion/branches/fsfs-ucsnorm/subversion/mod_dav_svn/reports/get-location-segments.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/mod_dav_svn/reports/get-location-segments.c?rev=1556765&r1=1556764&r2=1556765&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/mod_dav_svn/reports/get-location-segments.c (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/mod_dav_svn/reports/get-location-segments.c Thu Jan  9 09:31:10 2014
@@ -126,12 +126,10 @@ dav_svn__get_location_segments_report(co
   ns = dav_svn__find_ns(doc->namespaces, SVN_XML_NAMESPACE);
   if (ns == -1)
     {
-      return dav_svn__new_error_tag(resource->pool, HTTP_BAD_REQUEST, 0,
+      return dav_svn__new_error_svn(resource->pool, HTTP_BAD_REQUEST, 0,
                                     "The request does not contain the 'svn:' "
                                     "namespace, so it is not going to have "
-                                    "certain required elements.",
-                                    SVN_DAV_ERROR_NAMESPACE,
-                                    SVN_DAV_ERROR_TAG);
+                                    "certain required elements");
     }
 
   /* Gather the parameters. */
@@ -174,26 +172,20 @@ dav_svn__get_location_segments_report(co
 
   /* Check that all parameters are present and valid. */
   if (! abs_path)
-    return dav_svn__new_error_tag(resource->pool, HTTP_BAD_REQUEST, 0,
-                                  "Not all parameters passed.",
-                                  SVN_DAV_ERROR_NAMESPACE,
-                                  SVN_DAV_ERROR_TAG);
+    return dav_svn__new_error_svn(resource->pool, HTTP_BAD_REQUEST, 0,
+                                  "Not all parameters passed");
   if (SVN_IS_VALID_REVNUM(start_rev)
       && SVN_IS_VALID_REVNUM(end_rev)
       && (end_rev > start_rev))
-    return dav_svn__new_error_tag(resource->pool, HTTP_BAD_REQUEST, 0,
+    return dav_svn__new_error_svn(resource->pool, HTTP_BAD_REQUEST, 0,
                                   "End revision must not be younger than "
-                                  "start revision",
-                                  SVN_DAV_ERROR_NAMESPACE,
-                                  SVN_DAV_ERROR_TAG);
+                                  "start revision");
   if (SVN_IS_VALID_REVNUM(peg_revision)
       && SVN_IS_VALID_REVNUM(start_rev)
       && (start_rev > peg_revision))
-    return dav_svn__new_error_tag(resource->pool, HTTP_BAD_REQUEST, 0,
+    return dav_svn__new_error_svn(resource->pool, HTTP_BAD_REQUEST, 0,
                                   "Start revision must not be younger than "
-                                  "peg revision",
-                                  SVN_DAV_ERROR_NAMESPACE,
-                                  SVN_DAV_ERROR_TAG);
+                                  "peg revision");
 
   /* Build an authz read baton. */
   arb.r = resource->info->r;
@@ -214,7 +206,7 @@ dav_svn__get_location_segments_report(co
                                                dav_svn__authz_read_func(&arb),
                                                &arb, resource->pool)))
     {
-      derr = dav_svn__convert_err(serr, HTTP_BAD_REQUEST, serr->message,
+      derr = dav_svn__convert_err(serr, HTTP_BAD_REQUEST, NULL,
                                   resource->pool);
       goto cleanup;
     }

Modified: subversion/branches/fsfs-ucsnorm/subversion/mod_dav_svn/reports/get-locations.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/mod_dav_svn/reports/get-locations.c?rev=1556765&r1=1556764&r2=1556765&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/mod_dav_svn/reports/get-locations.c (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/mod_dav_svn/reports/get-locations.c Thu Jan  9 09:31:10 2014
@@ -109,12 +109,10 @@ dav_svn__get_locations_report(const dav_
   ns = dav_svn__find_ns(doc->namespaces, SVN_XML_NAMESPACE);
   if (ns == -1)
     {
-      return dav_svn__new_error_tag(resource->pool, HTTP_BAD_REQUEST, 0,
+      return dav_svn__new_error_svn(resource->pool, HTTP_BAD_REQUEST, 0,
                                     "The request does not contain the 'svn:' "
                                     "namespace, so it is not going to have "
-                                    "certain required elements.",
-                                    SVN_DAV_ERROR_NAMESPACE,
-                                    SVN_DAV_ERROR_TAG);
+                                    "certain required elements");
     }
 
   /* Gather the parameters. */
@@ -151,10 +149,8 @@ dav_svn__get_locations_report(const dav_
 
   /* Check that all parameters are present and valid. */
   if (! (abs_path && SVN_IS_VALID_REVNUM(peg_revision)))
-    return dav_svn__new_error_tag(resource->pool, HTTP_BAD_REQUEST, 0,
-                                  "Not all parameters passed.",
-                                  SVN_DAV_ERROR_NAMESPACE,
-                                  SVN_DAV_ERROR_TAG);
+    return dav_svn__new_error_svn(resource->pool, HTTP_BAD_REQUEST, 0,
+                                  "Not all parameters passed");
 
   /* Build an authz read baton */
   arb.r = resource->info->r;
@@ -168,8 +164,8 @@ dav_svn__get_locations_report(const dav_
 
   if (serr)
     {
-      return dav_svn__convert_err(serr, HTTP_INTERNAL_SERVER_ERROR,
-                                  serr->message, resource->pool);
+      return dav_svn__convert_err(serr, HTTP_INTERNAL_SERVER_ERROR, NULL,
+                                  resource->pool);
     }
 
   bb = apr_brigade_create(resource->pool, output->c->bucket_alloc);

Modified: subversion/branches/fsfs-ucsnorm/subversion/mod_dav_svn/reports/inherited-props.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/mod_dav_svn/reports/inherited-props.c?rev=1556765&r1=1556764&r2=1556765&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/mod_dav_svn/reports/inherited-props.c (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/mod_dav_svn/reports/inherited-props.c Thu Jan  9 09:31:10 2014
@@ -66,12 +66,10 @@ dav_svn__get_inherited_props_report(cons
   ns = dav_svn__find_ns(doc->namespaces, SVN_XML_NAMESPACE);
   if (ns == -1)
     {
-      return dav_svn__new_error_tag(resource->pool, HTTP_BAD_REQUEST, 0,
+      return dav_svn__new_error_svn(resource->pool, HTTP_BAD_REQUEST, 0,
                                     "The request does not contain the 'svn:' "
                                     "namespace, so it is not going to have "
-                                    "certain required elements.",
-                                    SVN_DAV_ERROR_NAMESPACE,
-                                    SVN_DAV_ERROR_TAG);
+                                    "certain required elements");
     }
 
   iterpool = svn_pool_create(resource->pool);
@@ -118,7 +116,7 @@ dav_svn__get_inherited_props_report(cons
                                           &arb, resource->pool, iterpool);
   if (serr)
     {
-      derr = dav_svn__convert_err(serr, HTTP_BAD_REQUEST, serr->message,
+      derr = dav_svn__convert_err(serr, HTTP_BAD_REQUEST, NULL,
                                   resource->pool);
       goto cleanup;
     }
@@ -130,7 +128,7 @@ dav_svn__get_inherited_props_report(cons
                                "xmlns:D=\"DAV:\">" DEBUG_CR);
   if (serr)
     {
-      derr = dav_svn__convert_err(serr, HTTP_BAD_REQUEST, serr->message,
+      derr = dav_svn__convert_err(serr, HTTP_BAD_REQUEST, NULL,
                                   resource->pool);
       goto cleanup;
     }

Modified: subversion/branches/fsfs-ucsnorm/subversion/mod_dav_svn/reports/log.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/mod_dav_svn/reports/log.c?rev=1556765&r1=1556764&r2=1556765&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/mod_dav_svn/reports/log.c (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/mod_dav_svn/reports/log.c Thu Jan  9 09:31:10 2014
@@ -327,12 +327,10 @@ dav_svn__log_report(const dav_resource *
   ns = dav_svn__find_ns(doc->namespaces, SVN_XML_NAMESPACE);
   if (ns == -1)
     {
-      return dav_svn__new_error_tag(resource->pool, HTTP_BAD_REQUEST, 0,
+      return dav_svn__new_error_svn(resource->pool, HTTP_BAD_REQUEST, 0,
                                     "The request does not contain the 'svn:' "
                                     "namespace, so it is not going to have "
-                                    "certain required elements.",
-                                    SVN_DAV_ERROR_NAMESPACE,
-                                    SVN_DAV_ERROR_TAG);
+                                    "certain required elements");
     }
 
   /* If this is still FALSE after the loop, we haven't seen either of
@@ -476,7 +474,7 @@ dav_svn__log_report(const dav_resource *
                              resource->pool);
   if (serr)
     {
-      derr = dav_svn__convert_err(serr, HTTP_BAD_REQUEST, serr->message,
+      derr = dav_svn__convert_err(serr, HTTP_BAD_REQUEST, NULL,
                                   resource->pool);
       goto cleanup;
     }

Modified: subversion/branches/fsfs-ucsnorm/subversion/mod_dav_svn/reports/mergeinfo.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/mod_dav_svn/reports/mergeinfo.c?rev=1556765&r1=1556764&r2=1556765&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/mod_dav_svn/reports/mergeinfo.c (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/mod_dav_svn/reports/mergeinfo.c Thu Jan  9 09:31:10 2014
@@ -70,12 +70,10 @@ dav_svn__get_mergeinfo_report(const dav_
   ns = dav_svn__find_ns(doc->namespaces, SVN_XML_NAMESPACE);
   if (ns == -1)
     {
-      return dav_svn__new_error_tag(resource->pool, HTTP_BAD_REQUEST, 0,
+      return dav_svn__new_error_svn(resource->pool, HTTP_BAD_REQUEST, 0,
                                     "The request does not contain the 'svn:' "
                                     "namespace, so it is not going to have "
-                                    "certain required elements.",
-                                    SVN_DAV_ERROR_NAMESPACE,
-                                    SVN_DAV_ERROR_TAG);
+                                    "certain required elements");
     }
 
   for (child = doc->root->first_child; child != NULL; child = child->next)
@@ -131,7 +129,7 @@ dav_svn__get_mergeinfo_report(const dav_
                                     &arb, resource->pool);
   if (serr)
     {
-      derr = dav_svn__convert_err(serr, HTTP_BAD_REQUEST, serr->message,
+      derr = dav_svn__convert_err(serr, HTTP_BAD_REQUEST, NULL,
                                   resource->pool);
       goto cleanup;
     }
@@ -141,7 +139,7 @@ dav_svn__get_mergeinfo_report(const dav_
                                                    resource->pool);
   if (serr)
     {
-      derr = dav_svn__convert_err(serr, HTTP_BAD_REQUEST, serr->message,
+      derr = dav_svn__convert_err(serr, HTTP_BAD_REQUEST, NULL,
                                   resource->pool);
       goto cleanup;
     }
@@ -159,7 +157,7 @@ dav_svn__get_mergeinfo_report(const dav_
                                "xmlns:D=\"DAV:\">" DEBUG_CR);
   if (serr)
     {
-      derr = dav_svn__convert_err(serr, HTTP_BAD_REQUEST, serr->message,
+      derr = dav_svn__convert_err(serr, HTTP_BAD_REQUEST, NULL,
                                   resource->pool);
       goto cleanup;
     }

Modified: subversion/branches/fsfs-ucsnorm/subversion/mod_dav_svn/reports/replay.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/mod_dav_svn/reports/replay.c?rev=1556765&r1=1556764&r2=1556765&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/mod_dav_svn/reports/replay.c (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/mod_dav_svn/reports/replay.c Thu Jan  9 09:31:10 2014
@@ -401,13 +401,12 @@ make_editor(const svn_delta_editor_t **e
 static dav_error *
 malformed_element_error(const char *tagname, apr_pool_t *pool)
 {
-  return dav_svn__new_error_tag(pool, HTTP_BAD_REQUEST, 0,
+  return dav_svn__new_error_svn(pool, HTTP_BAD_REQUEST, 0,
                                 apr_pstrcat(pool,
                                             "The request's '", tagname,
                                             "' element is malformed; there "
                                             "is a problem with the client.",
-                                            SVN_VA_NULL),
-                                SVN_DAV_ERROR_NAMESPACE, SVN_DAV_ERROR_TAG);
+                                            SVN_VA_NULL));
 }
 
 
@@ -456,13 +455,11 @@ dav_svn__replay_report(const dav_resourc
 
   ns = dav_svn__find_ns(doc->namespaces, SVN_XML_NAMESPACE);
   if (ns == -1)
-    return dav_svn__new_error_tag(resource->pool, HTTP_BAD_REQUEST, 0,
+    return dav_svn__new_error_svn(resource->pool, HTTP_BAD_REQUEST, 0,
                                   "The request does not contain the 'svn:' "
                                   "namespace, so it is not going to have an "
                                   "svn:revision element. That element is "
-                                  "required.",
-                                  SVN_DAV_ERROR_NAMESPACE,
-                                  SVN_DAV_ERROR_TAG);
+                                  "required");
 
   for (child = doc->root->first_child; child != NULL; child = child->next)
     {
@@ -521,16 +518,14 @@ dav_svn__replay_report(const dav_resourc
     }
 
   if (! SVN_IS_VALID_REVNUM(rev))
-    return dav_svn__new_error_tag
+    return dav_svn__new_error_svn
              (resource->pool, HTTP_BAD_REQUEST, 0,
-              "Request was missing the revision argument.",
-              SVN_DAV_ERROR_NAMESPACE, SVN_DAV_ERROR_TAG);
+              "Request was missing the revision argument");
 
   if (! SVN_IS_VALID_REVNUM(low_water_mark))
-    return dav_svn__new_error_tag
+    return dav_svn__new_error_svn
              (resource->pool, HTTP_BAD_REQUEST, 0,
-              "Request was missing the low-water-mark argument.",
-              SVN_DAV_ERROR_NAMESPACE, SVN_DAV_ERROR_TAG);
+              "Request was missing the low-water-mark argument");
 
   if (! base_dir)
     base_dir = "";

Modified: subversion/branches/fsfs-ucsnorm/subversion/mod_dav_svn/reports/update.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/mod_dav_svn/reports/update.c?rev=1556765&r1=1556764&r2=1556765&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/mod_dav_svn/reports/update.c (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/mod_dav_svn/reports/update.c Thu Jan  9 09:31:10 2014
@@ -914,8 +914,7 @@ malformed_element_error(const char *tagn
                                    "' element is malformed; there "
                                    "is a problem with the client.",
                                    SVN_VA_NULL);
-  return dav_svn__new_error_tag(pool, HTTP_BAD_REQUEST, 0, errstr,
-                                SVN_DAV_ERROR_NAMESPACE, SVN_DAV_ERROR_TAG);
+  return dav_svn__new_error_svn(pool, HTTP_BAD_REQUEST, 0, errstr);
 }
 
 
@@ -999,22 +998,18 @@ dav_svn__update_report(const dav_resourc
 
   if ((resource->info->restype != DAV_SVN_RESTYPE_VCC)
       && (resource->info->restype != DAV_SVN_RESTYPE_ME))
-    return dav_svn__new_error_tag(resource->pool, HTTP_CONFLICT, 0,
+    return dav_svn__new_error_svn(resource->pool, HTTP_CONFLICT, 0,
                                   "This report can only be run against "
-                                  "a VCC or root-stub URI.",
-                                  SVN_DAV_ERROR_NAMESPACE,
-                                  SVN_DAV_ERROR_TAG);
+                                  "a VCC or root-stub URI");
 
   ns = dav_svn__find_ns(doc->namespaces, SVN_XML_NAMESPACE);
   if (ns == -1)
     {
-      return dav_svn__new_error_tag(resource->pool, HTTP_BAD_REQUEST, 0,
+      return dav_svn__new_error_svn(resource->pool, HTTP_BAD_REQUEST, 0,
                                     "The request does not contain the 'svn:' "
                                     "namespace, so it is not going to have an "
                                     "svn:target-revision element. That element "
-                                    "is required.",
-                                    SVN_DAV_ERROR_NAMESPACE,
-                                    SVN_DAV_ERROR_TAG);
+                                    "is required");
     }
 
   /* SVNAllowBulkUpdates On/Prefer: server configuration permits bulk updates
@@ -1200,12 +1195,10 @@ dav_svn__update_report(const dav_resourc
      sending a style of report that we no longer allow. */
   if (! src_path)
     {
-      return dav_svn__new_error_tag
+      return dav_svn__new_error_svn
         (resource->pool, HTTP_BAD_REQUEST, 0,
          "The request did not contain the '<src-path>' element.\n"
-         "This may indicate that your client is too old.",
-         SVN_DAV_ERROR_NAMESPACE,
-         SVN_DAV_ERROR_TAG);
+         "This may indicate that your client is too old");
     }
 
   uc.svndiff_version = resource->info->svndiff_version;