Modified: subversion/branches/verify-keep-going/subversion/libsvn_fs_fs/tree.c
URL: 
http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/libsvn_fs_fs/tree.c?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/libsvn_fs_fs/tree.c 
(original)
+++ subversion/branches/verify-keep-going/subversion/libsvn_fs_fs/tree.c Wed 
Jun  5 09:22:43 2013
@@ -186,7 +186,7 @@ typedef struct cache_lock_t
 {
   /* pool holding the lock */
   apr_pool_t *pool;
-  
+
   /* cache being locked */
   fs_fs_dag_cache_t *cache;
 
@@ -201,7 +201,7 @@ typedef struct cache_lock_t
    When the number of INSERTIONS (i.e. objects created form that pool)
    exceeds a certain threshold, the pool will be cleared and the cache
    with it.
-   
+
    To ensure that nodes returned from this structure remain valid, the
    cache will get locked for the lifetime of the _receiving_ pools (i.e.
    those in which we would allocate the node if there was no cache.).
@@ -272,7 +272,7 @@ svn_fs_fs__create_dag_cache(apr_pool_t *
                             result,
                             unregister_locks,
                             apr_pool_cleanup_null);
-  
+
   return result;
 }
 
@@ -355,7 +355,7 @@ cache_lookup( fs_fs_dag_cache_t *cache
      (HASH_VALUE has been initialized to REVISION). */
   for (i = 0; i + 4 <= path_len; i += 4)
     hash_value = hash_value * 0xd1f3da69 + *(const apr_uint32_t*)(path + i);
-  
+
   for (; i < path_len; ++i)
     hash_value = hash_value * 33 + path[i];
 
@@ -416,7 +416,7 @@ locate_cache(svn_cache__t **cache,
 
 /* Return NODE for PATH from ROOT's node cache, or NULL if the node
    isn't cached; read it from the FS. *NODE remains valid until either
-   POOL or the FS gets cleared or destroyed (whichever comes first). 
+   POOL or the FS gets cleared or destroyed (whichever comes first).
 
    Since locking can be expensive and POOL may be long-living, for
    nodes that will not need to survive the next call to this function,
@@ -438,7 +438,7 @@ dag_node_cache_get(dag_node_t **node_p,
   if (!root->is_txn_root)
     {
       /* immutable DAG node. use the global caches for it */
-      
+
       fs_fs_data_t *ffd = root->fs->fsap_data;
       cache_entry_t *bucket;
 
@@ -470,7 +470,7 @@ dag_node_cache_get(dag_node_t **node_p,
   else
     {
       /* DAG is mutable / may become invalid. Use the TXN-local cache */
-      
+
       locate_cache(&cache, &key, root, path, pool);
 
       SVN_ERR(svn_cache__get((void **) &node, &found, cache, key, pool));
@@ -904,38 +904,46 @@ open_path(parent_path_t **parent_path_p,
   dag_node_t *here = NULL; /* The directory we're currently looking at.  */
   parent_path_t *parent_path; /* The path from HERE up to the root. */
   const char *rest; /* The portion of PATH we haven't traversed yet.  */
-
-  /* ensure a canonical path representation */
-  const char *path_so_far = "/";
   apr_pool_t *iterpool = svn_pool_create(pool);
 
+  /* path to the currently processed entry without trailing '/'.
+     We will reuse this across iterations by simply putting a NUL terminator
+     at the respective position and replacing that with a '/' in the next
+     iteration.  This is correct as we assert() PATH to be canonical. */
+  svn_stringbuf_t *path_so_far = svn_stringbuf_create(path, pool);
+
   /* callers often traverse the tree in some path-based order.  That means
      a sibling of PATH has been presently accessed.  Try to start the lookup
      directly at the parent node, if the caller did not requested the full
      parent chain. */
-  const char *directory;
   assert(svn_fs__is_canonical_abspath(path));
+  path_so_far->len = 0; /* "" */
   if (flags & open_path_node_only)
     {
-      directory = svn_dirent_dirname(path, pool);
+      const char *directory = svn_dirent_dirname(path, pool);
       if (directory[1] != 0) /* root nodes are covered anyway */
-        SVN_ERR(dag_node_cache_get(&here, root, directory, TRUE, pool));
+        {
+          SVN_ERR(dag_node_cache_get(&here, root, directory, TRUE, pool));
+          /* did the shortcut work? */
+          if (here)
+            {
+              apr_size_t dirname_len = strlen(directory);
+              path_so_far->len = dirname_len;
+              rest = path + dirname_len + 1;
+            }
+        }
     }
 
   /* did the shortcut work? */
-  if (here)
-    {
-      path_so_far = directory;
-      rest = path + strlen(directory) + 1;
-    }
-  else
+  if (!here)
     {
       /* Make a parent_path item for the root node, using its own current
          copy id.  */
       SVN_ERR(root_node(&here, root, pool));
       rest = path + 1; /* skip the leading '/', it saves in iteration */
     }
- 
+
+  path_so_far->data[path_so_far->len] = '\0';
   parent_path = make_parent_path(here, 0, 0, pool);
   parent_path->copy_inherit = copy_id_inherit_self;
 
@@ -955,8 +963,10 @@ open_path(parent_path_t **parent_path_p,
       /* Parse out the next entry from the path.  */
       entry = svn_fs__next_entry_name(&next, rest, pool);
 
-      /* Calculate the path traversed thus far. */
-      path_so_far = svn_fspath__join(path_so_far, entry, pool);
+      /* Update the path traversed thus far. */
+      path_so_far->data[path_so_far->len] = '/';
+      path_so_far->len += strlen(entry) + 1;
+      path_so_far->data[path_so_far->len] = '\0';
 
       if (*entry == '\0')
         {
@@ -979,7 +989,7 @@ open_path(parent_path_t **parent_path_p,
              element if we already know the lookup to fail for the
              complete path. */
           if (next || !(flags & open_path_uncached))
-            SVN_ERR(dag_node_cache_get(&cached_node, root, path_so_far,
+            SVN_ERR(dag_node_cache_get(&cached_node, root, path_so_far->data,
                                        TRUE, pool));
           if (cached_node)
             child = cached_node;
@@ -1033,7 +1043,8 @@ open_path(parent_path_t **parent_path_p,
 
           /* Cache the node we found (if it wasn't already cached). */
           if (! cached_node)
-            SVN_ERR(dag_node_cache_set(root, path_so_far, child, iterpool));
+            SVN_ERR(dag_node_cache_set(root, path_so_far->data, child,
+                                       iterpool));
         }
 
       /* Are we finished traversing the path?  */
@@ -1042,7 +1053,7 @@ open_path(parent_path_t **parent_path_p,
 
       /* The path isn't finished yet; we'd better be in a directory.  */
       if (svn_fs_fs__dag_node_kind(child) != svn_node_dir)
-        SVN_ERR_W(SVN_FS__ERR_NOT_DIRECTORY(fs, path_so_far),
+        SVN_ERR_W(SVN_FS__ERR_NOT_DIRECTORY(fs, path_so_far->data),
                   apr_psprintf(iterpool, _("Failure opening '%s'"), path));
 
       rest = next;
@@ -2178,53 +2189,6 @@ fs_dir_entries(apr_hash_t **table_p,
   return svn_fs_fs__dag_dir_entries(table_p, node, pool);
 }
 
-/* Return a copy of PATH, allocated from POOL, for which newlines
-   have been escaped using the form \NNN (where NNN is the
-   octal representation of the byte's ordinal value).  */
-static const char *
-escape_newline(const char *path, apr_pool_t *pool)
-{
-  svn_stringbuf_t *retstr;
-  apr_size_t i, copied = 0;
-  int c;
-
-  /* At least one control character:
-      strlen - 1 (control) + \ + N + N + N + null . */
-  retstr = svn_stringbuf_create_ensure(strlen(path) + 4, pool);
-  for (i = 0; path[i]; i++)
-    {
-      c = (unsigned char)path[i];
-      if (c != '\n')
-        continue;
-
-      /* First things first, copy all the good stuff that we haven't
-         yet copied into our output buffer. */
-      if (i - copied)
-        svn_stringbuf_appendbytes(retstr, path + copied,
-                                  i - copied);
-
-      /* Make sure buffer is big enough for '\' 'N' 'N' 'N' (and NUL) */
-      svn_stringbuf_ensure(retstr, retstr->len + 4);
-      /*### The backslash separator doesn't work too great with Windows,
-         but it's what we'll use for consistency with invalid utf8
-         formatting (until someone has a better idea) */
-      apr_snprintf(retstr->data + retstr->len, 5, "\\%03o", (unsigned char)c);
-      retstr->len += 4;
-
-      /* Finally, update our copy counter. */
-      copied = i + 1;
-    }
-
-  /* Anything left to copy? */
-  if (i - copied)
-    svn_stringbuf_appendbytes(retstr, path + copied, i - copied);
-
-  /* retstr is null-terminated either by apr_snprintf or the svn_stringbuf
-     functions. */
-
-  return retstr->data;
-}
-
 /* Raise an error if PATH contains a newline because FSFS cannot handle
  * such paths. See issue #4340. */
 static svn_error_t *
@@ -2235,7 +2199,7 @@ check_newline(const char *path, apr_pool
   if (c)
     return svn_error_createf(SVN_ERR_FS_PATH_SYNTAX, NULL,
        _("Invalid control character '0x%02x' in path '%s'"),
-       (unsigned char)*c, escape_newline(path, pool));
+       (unsigned char)*c, svn_path_illegal_path_escape(path, pool));
 
   return SVN_NO_ERROR;
 }
@@ -3498,26 +3462,17 @@ fs_node_origin_rev(svn_revnum_t *revisio
 }
 
 
-struct history_prev_args
-{
-  svn_fs_history_t **prev_history_p;
-  svn_fs_history_t *history;
-  svn_boolean_t cross_copies;
-  apr_pool_t *pool;
-};
-
-
 static svn_error_t *
-history_prev(void *baton, apr_pool_t *pool)
+history_prev(svn_fs_history_t **prev_history,
+             svn_fs_history_t *history,
+             svn_boolean_t cross_copies,
+             apr_pool_t *result_pool,
+             apr_pool_t *scratch_pool)
 {
-  struct history_prev_args *args = baton;
-  svn_fs_history_t **prev_history = args->prev_history_p;
-  svn_fs_history_t *history = args->history;
   fs_history_data_t *fhd = history->fsap_data;
   const char *commit_path, *src_path, *path = fhd->path;
   svn_revnum_t commit_rev, src_rev, dst_rev;
   svn_revnum_t revision = fhd->revision;
-  apr_pool_t *retpool = args->pool;
   svn_fs_t *fs = fhd->fs;
   parent_path_t *parent_path;
   dag_node_t *node;
@@ -3536,21 +3491,21 @@ history_prev(void *baton, apr_pool_t *po
   if (fhd->path_hint && SVN_IS_VALID_REVNUM(fhd->rev_hint))
     {
       reported = FALSE;
-      if (! args->cross_copies)
+      if (! cross_copies)
         return SVN_NO_ERROR;
       path = fhd->path_hint;
       revision = fhd->rev_hint;
     }
 
   /* Construct a ROOT for the current revision. */
-  SVN_ERR(svn_fs_fs__revision_root(&root, fs, revision, pool));
+  SVN_ERR(svn_fs_fs__revision_root(&root, fs, revision, scratch_pool));
 
   /* Open PATH/REVISION, and get its node and a bunch of other
      goodies.  */
-  SVN_ERR(open_path(&parent_path, root, path, 0, NULL, pool));
+  SVN_ERR(open_path(&parent_path, root, path, 0, NULL, scratch_pool));
   node = parent_path->node;
   commit_path = svn_fs_fs__dag_get_created_path(node);
-  SVN_ERR(svn_fs_fs__dag_get_revision(&commit_rev, node, pool));
+  SVN_ERR(svn_fs_fs__dag_get_revision(&commit_rev, node, scratch_pool));
 
   /* The Subversion filesystem is written in such a way that a given
      line of history may have at most one interesting history point
@@ -3566,9 +3521,9 @@ history_prev(void *baton, apr_pool_t *po
           /* ... we either have not yet reported on this revision (and
              need now to do so) ... */
           *prev_history = assemble_history(fs,
-                                           apr_pstrdup(retpool, commit_path),
+                                           apr_pstrdup(result_pool, 
commit_path),
                                            commit_rev, TRUE, NULL,
-                                           SVN_INVALID_REVNUM, retpool);
+                                           SVN_INVALID_REVNUM, result_pool);
           return SVN_NO_ERROR;
         }
       else
@@ -3584,16 +3539,16 @@ history_prev(void *baton, apr_pool_t *po
 
           /* Replace NODE and friends with the information from its
              predecessor. */
-          SVN_ERR(svn_fs_fs__dag_get_node(&node, fs, pred_id, pool));
+          SVN_ERR(svn_fs_fs__dag_get_node(&node, fs, pred_id, scratch_pool));
           commit_path = svn_fs_fs__dag_get_created_path(node);
-          SVN_ERR(svn_fs_fs__dag_get_revision(&commit_rev, node, pool));
+          SVN_ERR(svn_fs_fs__dag_get_revision(&commit_rev, node, 
scratch_pool));
         }
     }
 
   /* Find the youngest copyroot in the path of this node, including
      itself. */
   SVN_ERR(find_youngest_copyroot(&copyroot_rev, &copyroot_path, fs,
-                                 parent_path, pool));
+                                 parent_path, scratch_pool));
 
   /* Initialize some state variables. */
   src_path = NULL;
@@ -3607,8 +3562,8 @@ history_prev(void *baton, apr_pool_t *po
       svn_fs_root_t *copyroot_root;
 
       SVN_ERR(svn_fs_fs__revision_root(&copyroot_root, fs, copyroot_rev,
-                                       pool));
-      SVN_ERR(get_dag(&node, copyroot_root, copyroot_path, FALSE, pool));
+                                       scratch_pool));
+      SVN_ERR(get_dag(&node, copyroot_root, copyroot_path, FALSE, 
scratch_pool));
       copy_dst = svn_fs_fs__dag_get_created_path(node);
 
       /* If our current path was the very destination of the copy,
@@ -3630,7 +3585,7 @@ history_prev(void *baton, apr_pool_t *po
           SVN_ERR(svn_fs_fs__dag_get_copyfrom_path(&copy_src, node));
 
           dst_rev = copyroot_rev;
-          src_path = svn_fspath__join(copy_src, remainder_path, pool);
+          src_path = svn_fspath__join(copy_src, remainder_path, scratch_pool);
         }
     }
 
@@ -3647,15 +3602,15 @@ history_prev(void *baton, apr_pool_t *po
       if ((dst_rev == revision) && reported)
         retry = TRUE;
 
-      *prev_history = assemble_history(fs, apr_pstrdup(retpool, path),
+      *prev_history = assemble_history(fs, apr_pstrdup(result_pool, path),
                                        dst_rev, ! retry,
-                                       src_path, src_rev, retpool);
+                                       src_path, src_rev, result_pool);
     }
   else
     {
-      *prev_history = assemble_history(fs, apr_pstrdup(retpool, commit_path),
+      *prev_history = assemble_history(fs, apr_pstrdup(result_pool, 
commit_path),
                                        commit_rev, TRUE, NULL,
-                                       SVN_INVALID_REVNUM, retpool);
+                                       SVN_INVALID_REVNUM, result_pool);
     }
 
   return SVN_NO_ERROR;
@@ -3691,16 +3646,12 @@ fs_history_prev(svn_fs_history_t **prev_
     }
   else
     {
-      struct history_prev_args args;
       prev_history = history;
 
       while (1)
         {
-          args.prev_history_p = &prev_history;
-          args.history = prev_history;
-          args.cross_copies = cross_copies;
-          args.pool = pool;
-          SVN_ERR(history_prev(&args, pool));
+          SVN_ERR(history_prev(&prev_history, prev_history, cross_copies,
+                               pool, pool));
 
           if (! prev_history)
             break;
@@ -3877,7 +3828,7 @@ mergeinfo_cache_key(const char *path,
   number = number * 4
          + (inherit == svn_mergeinfo_nearest_ancestor ? 2 : 0)
          + (adjust_inherited_mergeinfo ? 1 : 0);
-  
+
   return svn_fs_fs__combine_number_and_string(number, path, pool);
 }
 
@@ -4016,7 +3967,7 @@ get_mergeinfo_for_path(svn_mergeinfo_t *
                               ffd->mergeinfo_cache,
                               cache_key, result_pool));
     }
-    
+
   if (! found)
     {
       SVN_ERR(get_mergeinfo_for_path_internal(mergeinfo, rev_root, path,

Modified: subversion/branches/verify-keep-going/subversion/libsvn_ra/editor.c
URL: 
http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/libsvn_ra/editor.c?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/libsvn_ra/editor.c 
(original)
+++ subversion/branches/verify-keep-going/subversion/libsvn_ra/editor.c Wed Jun 
 5 09:22:43 2013
@@ -107,7 +107,7 @@ fetch_base(const char **filename,
 
   *filename = apr_pstrdup(result_pool, tmp_filename);
 
- 
+
 
   return SVN_NO_ERROR;
 }

Modified: 
subversion/branches/verify-keep-going/subversion/libsvn_ra_local/ra_plugin.c
URL: 
http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/libsvn_ra_local/ra_plugin.c?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- 
subversion/branches/verify-keep-going/subversion/libsvn_ra_local/ra_plugin.c 
(original)
+++ 
subversion/branches/verify-keep-going/subversion/libsvn_ra_local/ra_plugin.c 
Wed Jun  5 09:22:43 2013
@@ -535,7 +535,8 @@ ignore_warnings(void *baton,
                 svn_error_t *err)
 {
 #ifdef SVN_DEBUG
-  SVN_DBG(("Ignoring FS warning %d\n", err ? err->apr_err : 0));
+  SVN_DBG(("Ignoring FS warning %s\n",
+           svn_error_symbolic_name(err ? err->apr_err : 0)));
 #endif
   return;
 }

Modified: 
subversion/branches/verify-keep-going/subversion/libsvn_ra_local/split_url.c
URL: 
http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/libsvn_ra_local/split_url.c?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- 
subversion/branches/verify-keep-going/subversion/libsvn_ra_local/split_url.c 
(original)
+++ 
subversion/branches/verify-keep-going/subversion/libsvn_ra_local/split_url.c 
Wed Jun  5 09:22:43 2013
@@ -23,6 +23,7 @@
 
 #include "ra_local.h"
 #include <string.h>
+#include "svn_path.h"
 #include "svn_dirent_uri.h"
 #include "svn_private_config.h"
 
@@ -37,6 +38,7 @@ svn_ra_local__split_URL(svn_repos_t **re
   svn_error_t *err = SVN_NO_ERROR;
   const char *repos_dirent;
   const char *repos_root_dirent;
+  svn_stringbuf_t *urlbuf;
 
   SVN_ERR(svn_uri_get_dirent_from_file_url(&repos_dirent, URL, pool));
 
@@ -62,15 +64,31 @@ svn_ra_local__split_URL(svn_repos_t **re
   /* = apr_pstrcat(pool,
                    "/",
                    svn_dirent_skip_ancestor(repos_root_dirent, repos_dirent),
-                   (const char *)NULL */
+                   (const char *)NULL); */
   *fs_path = &repos_dirent[strlen(repos_root_dirent)];
 
   if (**fs_path == '\0')
     *fs_path = "/";
 
-  /* Create a url to the repository root. */
-  SVN_ERR(svn_uri_get_file_url_from_dirent(repos_root_url, repos_root_dirent,
-                                           pool));
+  /* Remove the path components after the root dirent from the original URL,
+     to get a URL to the repository root.
+
+     We don't use svn_uri_get_file_url_from_dirent() here as that would
+     transform several uris to form a differently formed url than
+     svn_uri_canonicalize would.
+
+     E.g. file://localhost/C:/dir -> file:///C:/dir
+          (a transform that was originally supported directly by this function,
+           before the implementation moved)
+
+          On on Windows:
+          file:///dir -> file:///E:/dir  (When E: is the current disk)
+     */
+  urlbuf = svn_stringbuf_create(URL, pool);
+  svn_path_remove_components(urlbuf,
+                             svn_path_component_count(repos_dirent)
+                             - svn_path_component_count(repos_root_dirent));
+  *repos_root_url = urlbuf->data;
 
   /* Configure hook script environment variables. */
   SVN_ERR(svn_repos_hooks_setenv(*repos, NULL, pool));

Modified: 
subversion/branches/verify-keep-going/subversion/libsvn_ra_serf/commit.c
URL: 
http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/libsvn_ra_serf/commit.c?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/libsvn_ra_serf/commit.c 
(original)
+++ subversion/branches/verify-keep-going/subversion/libsvn_ra_serf/commit.c 
Wed Jun  5 09:22:43 2013
@@ -804,12 +804,22 @@ maybe_set_lock_token_header(serf_bucket_
       if (token)
         {
           const char *token_header;
+          const char *token_uri;
+          apr_uri_t uri = commit_ctx->session->session_url;
 
-          token_header = apr_pstrcat(pool, "(<", token, ">)", (char *)NULL);
+          /* Supplying the optional URI affects apache response when
+             the lock is broken, see issue 4369.  When present any URI
+             must be absolute (RFC 2518 9.4). */
+          uri.path = (char *)svn_path_url_add_component2(uri.path, relpath,
+                                                         pool);
+          token_uri = apr_uri_unparse(pool, &uri, 0);
+
+          token_header = apr_pstrcat(pool, "<", token_uri, "> (<", token, ">)",
+                                     (char *)NULL);
           serf_bucket_headers_set(headers, "If", token_header);
         }
     }
-  
+
   return SVN_NO_ERROR;
 }
 
@@ -984,12 +994,12 @@ create_put_body(serf_bucket_t **body_bkt
    * check the buffer status; but serf will fall through and create a file
    * bucket for us on the buffered svndiff handle.
    */
-  apr_file_flush(ctx->svndiff);
+  SVN_ERR(svn_io_file_flush(ctx->svndiff, pool));
 #if APR_VERSION_AT_LEAST(1, 3, 0)
   apr_file_buffer_set(ctx->svndiff, NULL, 0);
 #endif
   offset = 0;
-  apr_file_seek(ctx->svndiff, APR_SET, &offset);
+  SVN_ERR(svn_io_file_seek(ctx->svndiff, APR_SET, &offset, pool));
 
   *body_bkt = serf_bucket_file_create(ctx->svndiff, alloc);
   return SVN_NO_ERROR;

Modified: 
subversion/branches/verify-keep-going/subversion/libsvn_ra_serf/ra_serf.h
URL: 
http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/libsvn_ra_serf/ra_serf.h?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/libsvn_ra_serf/ra_serf.h 
(original)
+++ subversion/branches/verify-keep-going/subversion/libsvn_ra_serf/ra_serf.h 
Wed Jun  5 09:22:43 2013
@@ -243,7 +243,7 @@ struct svn_ra_serf__session_t {
   svn_tristate_t bulk_updates;
 
   /* Indicates if the server wants bulk update requests (Prefer) or only
-     accepts skelta requests (Off). If this value is On both options are 
+     accepts skelta requests (Off). If this value is On both options are
      allowed. */
   const char *server_allows_bulk;
 

Modified: subversion/branches/verify-keep-going/subversion/libsvn_ra_serf/serf.c
URL: 
http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/libsvn_ra_serf/serf.c?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/libsvn_ra_serf/serf.c 
(original)
+++ subversion/branches/verify-keep-going/subversion/libsvn_ra_serf/serf.c Wed 
Jun  5 09:22:43 2013
@@ -119,8 +119,9 @@ load_http_auth_types(apr_pool_t *pool, s
             *authn_types |= SERF_AUTHN_NEGOTIATE;
           else
             return svn_error_createf(SVN_ERR_BAD_CONFIG_VALUE, NULL,
-                                     _("Invalid config: unknown http auth"
-                                       "type '%s'"), token);
+                                     _("Invalid config: unknown %s "
+                                       "'%s'"),
+                                     SVN_CONFIG_OPTION_HTTP_AUTH_TYPES, token);
       }
     }
   else
@@ -219,10 +220,10 @@ load_config(svn_ra_serf__session_t *sess
                                   svn_tristate_unknown));
 
   /* Load the maximum number of parallel session connections. */
-  svn_config_get_int64(config, &session->max_connections,
-                       SVN_CONFIG_SECTION_GLOBAL,
-                       SVN_CONFIG_OPTION_HTTP_MAX_CONNECTIONS,
-                       SVN_CONFIG_DEFAULT_OPTION_HTTP_MAX_CONNECTIONS);
+  SVN_ERR(svn_config_get_int64(config, &session->max_connections,
+                               SVN_CONFIG_SECTION_GLOBAL,
+                               SVN_CONFIG_OPTION_HTTP_MAX_CONNECTIONS,
+                               
SVN_CONFIG_DEFAULT_OPTION_HTTP_MAX_CONNECTIONS));
 
   if (config)
     server_group = svn_config_find_group(config,
@@ -276,9 +277,10 @@ load_config(svn_ra_serf__session_t *sess
 
       /* Load the maximum number of parallel session connections,
          overriding global values. */
-      svn_config_get_int64(config, &session->max_connections,
-                           server_group, 
SVN_CONFIG_OPTION_HTTP_MAX_CONNECTIONS,
-                           session->max_connections);
+      SVN_ERR(svn_config_get_int64(config, &session->max_connections,
+                                   server_group,
+                                   SVN_CONFIG_OPTION_HTTP_MAX_CONNECTIONS,
+                                   session->max_connections));
     }
 
   /* Don't allow the http-max-connections value to be larger than our
@@ -450,7 +452,7 @@ svn_ra_serf__open(svn_ra_session_t *sess
 
   /* create the user agent string */
   if (callbacks->get_client_string)
-    callbacks->get_client_string(callback_baton, &client_string, pool);
+    SVN_ERR(callbacks->get_client_string(callback_baton, &client_string, 
pool));
 
   if (client_string)
     serf_sess->useragent = apr_pstrcat(pool, USER_AGENT, " ",

Modified: 
subversion/branches/verify-keep-going/subversion/libsvn_ra_serf/update.c
URL: 
http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/libsvn_ra_serf/update.c?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/libsvn_ra_serf/update.c 
(original)
+++ subversion/branches/verify-keep-going/subversion/libsvn_ra_serf/update.c 
Wed Jun  5 09:22:43 2013
@@ -94,8 +94,8 @@ typedef enum report_state_e {
 
    We measure outstanding requests as the sum of NUM_ACTIVE_FETCHES and
    NUM_ACTIVE_PROPFINDS in the report_context_t structure.  */
-#define REQUEST_COUNT_TO_PAUSE 1000
-#define REQUEST_COUNT_TO_RESUME 100
+#define REQUEST_COUNT_TO_PAUSE 50
+#define REQUEST_COUNT_TO_RESUME 40
 
 
 /* Forward-declare our report context. */
@@ -517,7 +517,7 @@ get_best_connection(report_context_t *ct
      ### editor implementations (such as svnrdump's dump editor)
      ### simply can't handle the way ra_serf violates the editor v1
      ### drive ordering requirements.
-     ### 
+     ###
      ### See http://subversion.tigris.org/issues/show_bug.cgi?id=4116.
   */
   if (ctx->report_received && (ctx->sess->max_connections > 2))
@@ -1024,26 +1024,6 @@ open_updated_file(report_info_t *info,
   if (info->lock_token)
     check_lock(info);
 
-  /* Set all of the properties we received */
-  SVN_ERR(svn_ra_serf__walk_all_props(info->props,
-                                      info->base_name,
-                                      info->base_rev,
-                                      set_file_props, info,
-                                      scratch_pool));
-  SVN_ERR(svn_ra_serf__walk_all_props(info->dir->removed_props,
-                                      info->base_name,
-                                      info->base_rev,
-                                      remove_file_props, info,
-                                      scratch_pool));
-  if (info->fetch_props)
-    {
-      SVN_ERR(svn_ra_serf__walk_all_props(info->props,
-                                          info->url,
-                                          ctx->target_rev,
-                                          set_file_props, info,
-                                          scratch_pool));
-    }
-
   /* Get (maybe) a textdelta window handler for transmitting file
      content changes. */
   if (info->fetch_file || force_apply_textdelta)
@@ -1064,6 +1044,28 @@ static svn_error_t *
 close_updated_file(report_info_t *info,
                    apr_pool_t *scratch_pool)
 {
+  report_context_t *ctx = info->dir->report_context;
+
+  /* Set all of the properties we received */
+  SVN_ERR(svn_ra_serf__walk_all_props(info->props,
+                                      info->base_name,
+                                      info->base_rev,
+                                      set_file_props, info,
+                                      scratch_pool));
+  SVN_ERR(svn_ra_serf__walk_all_props(info->dir->removed_props,
+                                      info->base_name,
+                                      info->base_rev,
+                                      remove_file_props, info,
+                                      scratch_pool));
+  if (info->fetch_props)
+    {
+      SVN_ERR(svn_ra_serf__walk_all_props(info->props,
+                                          info->url,
+                                          ctx->target_rev,
+                                          set_file_props, info,
+                                          scratch_pool));
+    }
+
   /* Close the file via the editor. */
   SVN_ERR(info->dir->report_context->update_editor->close_file(
             info->file_baton, info->final_checksum, scratch_pool));
@@ -1359,7 +1361,7 @@ maybe_close_dir_chain(report_dir_t *dir)
   report_dir_t *cur_dir = dir;
 
   SVN_ERR(ensure_dir_opened(cur_dir));
-                  
+
   while (cur_dir
          && !cur_dir->ref_count
          && cur_dir->tag_closed
@@ -1412,7 +1414,7 @@ handle_propchange_only(report_info_t *in
 {
   SVN_ERR(open_updated_file(info, FALSE, scratch_pool));
   SVN_ERR(close_updated_file(info, scratch_pool));
-  
+
   /* We're done with our pool. */
   svn_pool_destroy(info->pool);
 
@@ -1503,7 +1505,7 @@ fetch_file(report_context_t *ctx, report
         {
           svn_error_t *err = NULL;
           svn_checksum_t *checksum = NULL;
-         
+
           /* Parse the optional SHA1 checksum (1.7+) */
           err = svn_checksum_parse_hex(&checksum, svn_checksum_sha1,
                                        info->final_sha1_checksum,
@@ -1535,7 +1537,7 @@ fetch_file(report_context_t *ctx, report
         {
           /* If we'll be doing a PROPFIND for this file... */
           if (info->propfind_handler)
-            { 
+            {
               /* ... then we'll just leave ourselves a little "todo"
                  about that fact (and we'll deal with the file content
                  stuff later, after we've handled that PROPFIND
@@ -2197,7 +2199,7 @@ end_report(svn_ra_serf__xml_parser_t *pa
       if (info->dir->fetch_props)
         {
           svn_ra_serf__list_t *list_item;
- 
+
           SVN_ERR(svn_ra_serf__deliver_props(&info->dir->propfind_handler,
                                              info->dir->props, ctx->sess,
                                              get_best_connection(ctx),
@@ -2719,7 +2721,7 @@ create_update_report_body(serf_bucket_t 
   apr_off_t offset;
 
   offset = 0;
-  apr_file_seek(report->body_file, APR_SET, &offset);
+  SVN_ERR(svn_io_file_seek(report->body_file, APR_SET, &offset, pool));
 
   *body_bkt = serf_bucket_file_create(report->body_file, alloc);
 
@@ -2775,7 +2777,7 @@ finish_report(void *report_baton,
    * check the buffer status; but serf will fall through and create a file
    * bucket for us on the buffered svndiff handle.
    */
-  apr_file_flush(report->body_file);
+  SVN_ERR(svn_io_file_flush(report->body_file, iterpool));
 #if APR_VERSION_AT_LEAST(1, 3, 0)
   apr_file_buffer_set(report->body_file, NULL, 0);
 #endif
@@ -2996,7 +2998,7 @@ finish_report(void *report_baton,
           report->num_active_fetches--;
 
           /* See if the parent directory of this fetched item (and
-             perhaps even parents of that) can be closed now. 
+             perhaps even parents of that) can be closed now.
 
              NOTE:  This could delete cur_dir->pool, from which is
              allocated the list item in report->done_fetches.
@@ -3447,9 +3449,9 @@ svn_ra_serf__do_switch(svn_ra_session_t 
 /* Helper svn_ra_serf__get_file(). Attempts to fetch file contents
  * using SESSION->wc_callbacks->get_wc_contents() if sha1 property is
  * present in PROPS.
- * 
+ *
  * Sets *FOUND_P to TRUE if file contents was successfuly fetched.
- * 
+ *
  * Performs all temporary allocations in POOL.
  */
 static svn_error_t *
@@ -3502,7 +3504,7 @@ try_get_wc_contents(svn_boolean_t *found
       /* Ignore errors for now. */
       return SVN_NO_ERROR;
     }
-  
+
   if (wc_stream)
     {
         SVN_ERR(svn_stream_copy3(wc_stream,
@@ -3565,7 +3567,7 @@ svn_ra_serf__get_file(svn_ra_session_t *
     {
       which_props = check_path_props;
     }
-     
+
   SVN_ERR(svn_ra_serf__fetch_node_props(&fetch_props, conn, fetch_url,
                                         SVN_INVALID_REVNUM,
                                         which_props,

Modified: subversion/branches/verify-keep-going/subversion/libsvn_ra_serf/util.c
URL: 
http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/libsvn_ra_serf/util.c?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/libsvn_ra_serf/util.c 
(original)
+++ subversion/branches/verify-keep-going/subversion/libsvn_ra_serf/util.c Wed 
Jun  5 09:22:43 2013
@@ -497,7 +497,7 @@ svn_ra_serf__conn_closed(serf_connection
 
   err = svn_error_trace(connection_closed(ra_conn, why, pool));
 
-  save_error(ra_conn->session, err);
+  (void) save_error(ra_conn->session, err);
 }
 
 
@@ -657,7 +657,7 @@ setup_serf_req(serf_request_t *request,
       SVN_ERR(svn_ra_serf__copy_into_spillbuf(&buf, body_bkt,
                                               request_pool,
                                               scratch_pool));
-      /* Destroy original bucket since it content is already copied 
+      /* Destroy original bucket since it content is already copied
          to spillbuf. */
       serf_bucket_destroy(body_bkt);
 
@@ -723,7 +723,7 @@ svn_ra_serf__context_run_wait(svn_boolea
 {
   apr_pool_t *iterpool;
   apr_interval_time_t waittime_left = sess->timeout;
-  
+
   assert(sess->pending_error == SVN_NO_ERROR);
 
   iterpool = svn_pool_create(scratch_pool);
@@ -761,7 +761,7 @@ svn_ra_serf__context_run_wait(svn_boolea
                 {
                   waittime_left -= SVN_RA_SERF__CONTEXT_RUN_DURATION;
                 }
-              else 
+              else
                 {
                   return svn_error_create(SVN_ERR_RA_DAV_CONN_TIMEOUT, NULL,
                                           _("Connection timed out"));
@@ -776,6 +776,8 @@ svn_ra_serf__context_run_wait(svn_boolea
       SVN_ERR(err);
       if (status)
         {
+          /* ### This omits SVN_WARNING, and possibly relies on the fact that
+             ### MAX(SERF_ERROR_*) < SVN_ERR_BAD_CATEGORY_START? */
           if (status >= SVN_ERR_BAD_CATEGORY_START && status < SVN_ERR_LAST)
             {
               /* apr can't translate subversion errors to text */
@@ -1419,7 +1421,7 @@ xml_parser_cleanup(void *baton)
 
   if (*xmlp)
     {
-      XML_ParserFree(*xmlp);
+      (void) XML_ParserFree(*xmlp);
       *xmlp = NULL;
     }
 
@@ -1451,7 +1453,7 @@ svn_ra_serf__process_pending(svn_ra_serf
   /* Parsing the pending conten in the spillbuf will result in many disc i/o
      operations. This can be so slow that we don't run the network event
      processing loop often enough, resulting in timed out connections.
-   
+
      So we limit the amounts of bytes parsed per iteration.
    */
   while (cur_read < PENDING_TO_PARSE)
@@ -1490,7 +1492,7 @@ svn_ra_serf__process_pending(svn_ra_serf
 
       /* Tell the parser that no more content will be parsed. Ignore the
          return status. We just don't care.  */
-      XML_Parse(parser->xmlp, NULL, 0, 1);
+      (void) XML_Parse(parser->xmlp, NULL, 0, 1);
 
       apr_pool_cleanup_run(parser->pool, &parser->xmlp, xml_parser_cleanup);
       parser->xmlp = NULL;
@@ -1711,7 +1713,7 @@ svn_ra_serf__handle_xml_parser(serf_requ
               SVN_ERR_ASSERT(ctx->xmlp != NULL);
 
               /* Ignore the return status. We just don't care.  */
-              XML_Parse(ctx->xmlp, NULL, 0, 1);
+              (void) XML_Parse(ctx->xmlp, NULL, 0, 1);
 
               apr_pool_cleanup_run(ctx->pool, &ctx->xmlp, xml_parser_cleanup);
               add_done_item(ctx);
@@ -1763,7 +1765,7 @@ svn_ra_serf__credentials_callback(char *
 
       if (err)
         {
-          save_error(session, err);
+          (void) save_error(session, err);
           return err->apr_err;
         }
 
@@ -1772,8 +1774,8 @@ svn_ra_serf__credentials_callback(char *
       if (!creds || session->auth_attempts > 4)
         {
           /* No more credentials. */
-          save_error(session,
-                     svn_error_create(
+          (void) save_error(session,
+                            svn_error_create(
                               SVN_ERR_AUTHN_FAILED, NULL,
                               _("No more credentials or we tried too many "
                                 "times.\nAuthentication failed")));
@@ -1794,8 +1796,8 @@ svn_ra_serf__credentials_callback(char *
       if (!session->proxy_username || session->proxy_auth_attempts > 4)
         {
           /* No more credentials. */
-          save_error(session, 
-                     svn_error_create(
+          (void) save_error(session,
+                            svn_error_create(
                               SVN_ERR_AUTHN_FAILED, NULL,
                               _("Proxy authentication failed")));
           return SVN_ERR_AUTHN_FAILED;
@@ -2217,8 +2219,8 @@ svn_ra_serf__request_create(svn_ra_serf_
 
   /* ### do we need to hold onto the returned request object, or just
      ### not worry about it (the serf ctx will manage it).  */
-  serf_connection_request_create(handler->conn->conn,
-                                 setup_request_cb, handler);
+  (void) serf_connection_request_create(handler->conn->conn,
+                                        setup_request_cb, handler);
 }
 
 
@@ -2446,7 +2448,7 @@ expat_start(void *userData, const char *
 
 #ifdef EXPAT_HAS_STOPPARSER
   if (ectx->inner_error)
-    XML_StopParser(ectx->parser, 0 /* resumable */);
+    (void) XML_StopParser(ectx->parser, 0 /* resumable */);
 #endif
 }
 
@@ -2465,7 +2467,7 @@ expat_end(void *userData, const char *ra
 
 #ifdef EXPAT_HAS_STOPPARSER
   if (ectx->inner_error)
-    XML_StopParser(ectx->parser, 0 /* resumable */);
+    (void) XML_StopParser(ectx->parser, 0 /* resumable */);
 #endif
 }
 
@@ -2484,7 +2486,7 @@ expat_cdata(void *userData, const char *
 
 #ifdef EXPAT_HAS_STOPPARSER
   if (ectx->inner_error)
-    XML_StopParser(ectx->parser, 0 /* resumable */);
+    (void) XML_StopParser(ectx->parser, 0 /* resumable */);
 #endif
 }
 
@@ -2570,7 +2572,7 @@ expat_response_handler(serf_request_t *r
         {
           /* Tell expat we've reached the end of the content. Ignore the
              return status. We just don't care.  */
-          XML_Parse(ectx->parser, NULL, 0, 1 /* isFinal */);
+          (void) XML_Parse(ectx->parser, NULL, 0, 1 /* isFinal */);
 
           svn_ra_serf__xml_context_destroy(ectx->xmlctx);
           apr_pool_cleanup_run(ectx->cleanup_pool, &ectx->parser,

Modified: subversion/branches/verify-keep-going/subversion/libsvn_ra_serf/xml.c
URL: 
http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/libsvn_ra_serf/xml.c?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/libsvn_ra_serf/xml.c 
(original)
+++ subversion/branches/verify-keep-going/subversion/libsvn_ra_serf/xml.c Wed 
Jun  5 09:22:43 2013
@@ -219,7 +219,7 @@ svn_ra_serf__expand_ns(svn_ra_serf__dav_
               return;
             }
         }
-    }    
+    }
 
   /* If the prefix is not found, then the name is NOT within a
      namespace.  */


Reply via email to